eboard-1.1.1.orig/0000755000175000017500000000000010757567572013300 5ustar patrikpatrikeboard-1.1.1.orig/mainwindow.cc0000644000175000017500000015551210757567572015774 0ustar patrikpatrik/* $Id: mainwindow.cc,v 1.138 2008/02/22 14:35:43 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include "mainwindow.h" #include "chess.h" #include "bugpane.h" #include "global.h" #include "p2p.h" #include "config.h" #ifdef HAVE_LINUX_JOYSTICK_H #include #endif #include "icon-eboard.xpm" #include "back1.xpm" #include "backn.xpm" #include "forward1.xpm" #include "forwardn.xpm" #include "movelist.xpm" #include "flip.xpm" #include "trash.xpm" #include "toscratch.xpm" #include "sealoff.xpm" #include "sealon.xpm" GdkWindow * MainWindow::RefWindow=0; static GtkItemFactoryEntry mainwindow_mainmenu[] = { { N_("/_Peer"), NULL, NULL, 0, "" }, { N_("/Peer/Connect to _FICS"),NULL,GTK_SIGNAL_FUNC(peer_connect_fics),0,NULL }, { N_("/Peer/ICS _Bookmarks"), NULL, NULL, FA_ICSBOOKMARKS, "" }, { N_("/Peer/_Connect to Other Server..."),NULL,GTK_SIGNAL_FUNC(peer_connect_ask),0,NULL }, { N_("/Peer/Direct connect with _Remote eboard..."),NULL,GTK_SIGNAL_FUNC(peer_connect_p2p),0,NULL }, { N_("/Peer/sep4"), NULL, NULL, 0, "" }, { N_("/Peer/Play against _Engine"),NULL, NULL, 0,"" }, { N_("/Peer/Play against Engine/GNU Chess _4..."),NULL,GTK_SIGNAL_FUNC(peer_connect_gnuchess4),0, NULL }, { N_("/Peer/Play against Engine/_Sjeng..."),NULL,GTK_SIGNAL_FUNC(peer_connect_sjeng), 0, NULL }, { N_("/Peer/Play against Engine/Cr_afty..."),NULL,GTK_SIGNAL_FUNC(peer_connect_crafty), 0, NULL }, { N_("/Peer/Play against Engine/sep1"),NULL,NULL,0,"" }, { N_("/Peer/Play against Engine/_Generic Engine..."),NULL,GTK_SIGNAL_FUNC(peer_connect_xboard), 0,NULL }, { N_("/Peer/Engine B_ookmarks"), NULL, NULL, FA_ENGBOOKMARKS,"" }, { N_("/Peer/sep3"), NULL, NULL, 0, "" }, { N_("/Peer/_Empty Scratch Board"), NULL, GTK_SIGNAL_FUNC(peer_scratch_empty), 0, NULL }, { N_("/Peer/_Scratch Board with Initial Position"),NULL, GTK_SIGNAL_FUNC(peer_scratch_initial), 0, NULL }, { N_("/Peer/sep3"), NULL, NULL, 0, "" }, { N_("/Peer/_Disconnect"), NULL, GTK_SIGNAL_FUNC(peer_disconnect), 0, NULL }, { N_("/Peer/sep2"), NULL, NULL, 0, "" }, { N_("/Peer/_Quit"), NULL, GTK_SIGNAL_FUNC(mainwindow_destroy), 0, NULL }, { N_("/_Game"), NULL, NULL, 0, "" }, { N_("/Game/_Resign"), NULL, GTK_SIGNAL_FUNC(game_resign), 0, NULL }, { N_("/Game/_Offer Draw"), NULL, GTK_SIGNAL_FUNC(game_draw), 0, NULL }, { N_("/Game/_Abort"), NULL, GTK_SIGNAL_FUNC(game_abort), 0, NULL }, { N_("/Game/Ad_journ"), NULL, GTK_SIGNAL_FUNC(game_adjourn), 0, NULL }, { N_("/Game/Retract _Move"), NULL, GTK_SIGNAL_FUNC(game_retract), 0, NULL }, { N_("/_Settings"), NULL, NULL, 0, "" }, { N_("/Settings/_Highlight Last Move"),NULL, NULL, FA_HIGHLIGHT, "" }, { N_("/Settings/_Animate Moves"),NULL, NULL, FA_ANIMATE,"" }, { N_("/Settings/Pre_move"), NULL, NULL, FA_PREMOVE,"" }, { N_("/Settings/Sho_w Coordinates"), NULL, NULL, FA_COORDS,"" }, { N_("/Settings/sep3"), NULL, NULL, 0, "" }, { N_("/Settings/_Beep on Opponent Moves"),NULL,NULL, FA_MOVEBEEP,"" }, { N_("/Settings/_Enable Other Sounds"),NULL,NULL, FA_SOUND,"" }, { N_("/Settings/sep3"), NULL, NULL, 0, "" }, { N_("/Settings/_ICS Behavior"), NULL, NULL, 0, "" }, { N_("/Settings/ICS Behavior/Popup Board Panes _Upon Creation"),NULL,NULL,FA_POPUP,"" }, { N_("/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends"),NULL,NULL,FA_SMART,"" }, { N_("/Settings/sep3"), NULL, NULL, 0, "" }, { N_("/Settings/Enable Legality _Checking"),NULL,NULL,FA_LEGALITY,""}, { N_("/Settings/sep3"), NULL, NULL, 0, "" }, { N_("/Settings/_Vectorized Pieces (Faster Rendering)"),NULL,NULL,FA_VECTOR,"" }, { N_("/Settings/Bitmapped Piece _Sets"), NULL, NULL, 0, "" }, { N_("/Settings/Bitmapped Piece Sets/Load _Theme"), NULL,NULL, FA_LOADTHEME, "" }, { N_("/Settings/Bitmapped Piece Sets/Load _Pieces Only"),NULL,NULL,FA_LOADPIECES,""}, { N_("/Settings/Bitmapped Piece Sets/Load _Squares Only"), NULL, NULL, FA_LOADSQUARES, "" }, { N_("/Settings/sep3"), NULL, NULL, 0, "" }, { N_("/Settings/_Preferences..."), NULL, GTK_SIGNAL_FUNC(sett_prefs), 0, NULL }, { N_("/_Windows"), NULL, NULL,0, "" }, { N_("/Windows/_Games on Server..."),NULL, GTK_SIGNAL_FUNC(windows_games), 0, NULL }, { N_("/Windows/_Ads on Server..."),NULL, GTK_SIGNAL_FUNC(windows_sough), 0, NULL }, { N_("/Windows/sep1"), NULL, NULL, 0, "" }, { N_("/Windows/Games on _Client..."),NULL, GTK_SIGNAL_FUNC(windows_stock), 0, NULL }, { N_("/Windows/sep2"), NULL, NULL, 0, "" }, { N_("/Windows/_Run Script..."), NULL, GTK_SIGNAL_FUNC(windows_script), 0, NULL }, { N_("/Windows/sep3"), NULL, NULL, 0, "" }, { N_("/Windows/_Detached Console"), NULL, GTK_SIGNAL_FUNC(windows_detached), 0, NULL }, { N_("/Windows/sep3"), NULL, NULL, 0, "" }, { N_("/Windows/_Find Text (upwards)..."), NULL, GTK_SIGNAL_FUNC(windows_find), 0, NULL }, { N_("/Windows/Find _Previous"), NULL, GTK_SIGNAL_FUNC(windows_findp), 0, NULL }, { N_("/Windows/Save _Text Buffer..."), NULL, GTK_SIGNAL_FUNC(windows_savebuffer),0,NULL}, { N_("/Windows/sep3"), NULL, NULL, 0, "" }, { N_("/Windows/Save Desktop _Geometry"), NULL, GTK_SIGNAL_FUNC(windows_savedesk), 0, NULL }, { N_("/_Help"), NULL, NULL,0, "" }, { N_("/Help/_Getting Started"),NULL, GTK_SIGNAL_FUNC(help_starting), 0, NULL }, { N_("/Help/_Keys"),NULL, GTK_SIGNAL_FUNC(help_keys), 0, NULL }, { N_("/Help/_Debug Info"),NULL, GTK_SIGNAL_FUNC(help_debug), 0, NULL }, { N_("/Help/sep4"), NULL, NULL, 0, "" }, { N_("/Help/_About eboard..."),NULL, GTK_SIGNAL_FUNC(help_about), 0, NULL }, }; MainWindow *mainw; gchar * gtkgettext(const char *text, gpointer data) { return((gchar *)eboard_gettext(text)); } MainWindow::MainWindow() { GtkAccelGroup *mag; GtkWidget *tw[10]; GtkWidget *bhb,*whb,*dm; GtkWidget *P,*SN, *tl1, *tl2; Board *tmp; int i; int nitems=sizeof(mainwindow_mainmenu)/sizeof(mainwindow_mainmenu[0]); gamelist=0; stocklist=0; adlist=0; consolecopy=0; scriptlist=0; ims=0; jpd = 0; io_tag = -1; asetprefix.set("%%prefix *"); arunscript.set("%%do *"); for(i=0;i<8;i++) nav_enable[i]=true; widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_events(widget,GDK_KEY_PRESS_MASK); setTitle("eboard"); gtk_widget_realize(widget); gtk_window_resize(GTK_WINDOW(widget),800,600); RefWindow=widget->window; tooltips=GTK_TOOLTIPS(gtk_tooltips_new()); /* menu bar */ mag=gtk_accel_group_new(); gif=gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", mag); #ifdef ENABLE_NLS gtk_item_factory_set_translate_func(gif,(GtkTranslateFunc) gtkgettext, 0, 0); #endif gtk_item_factory_create_items (gif, nitems, mainwindow_mainmenu, NULL); gtk_window_add_accel_group(GTK_WINDOW(widget), mag); v=gtk_vbox_new(FALSE,0); gshow(v); gtk_container_add(GTK_CONTAINER(widget),v); menubar = gtk_item_factory_get_widget (gif, "
"); /* find out themes */ searchThemes(); global.readRC(); /* build ics bookmark submenu under Peer */ updateBookmarks(); /* promotion menu */ promote=new PromotionPicker(widget->window); /* restore main window geometry */ if (!global.Desk.wMain.isNull()) { gtk_window_move(GTK_WINDOW(widget),global.Desk.wMain.X,global.Desk.wMain.Y); gtk_window_resize(GTK_WINDOW(widget),global.Desk.wMain.W,global.Desk.wMain.H); } whb=gtk_hbox_new(FALSE,0); gtk_box_pack_start (GTK_BOX (v), whb, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (whb), menubar, TRUE, TRUE, 0); gshow (menubar); gtk_box_pack_end (GTK_BOX (whb), promote->widget, FALSE, FALSE, 0); promote->show(); gshow(whb); /* paned widget */ P=gtk_vpaned_new(); global.mainpaned=P; gtk_box_pack_start(GTK_BOX(v), P, TRUE, TRUE, 0); /* main notebook */ notebook=new Notebook(); { GtkPositionType rqda[4]={GTK_POS_RIGHT,GTK_POS_LEFT,GTK_POS_TOP,GTK_POS_BOTTOM}; notebook->setTabPosition(rqda[global.TabPos%4]); } notebook->show(); SN=gtk_notebook_new(); gtk_paned_pack1 (GTK_PANED (P), notebook->widget, TRUE, TRUE); gtk_paned_pack2 (GTK_PANED (P), SN, TRUE, TRUE); /* restore pane divider position */ if (global.Desk.PanePosition) gtk_paned_set_position(GTK_PANED(P),global.Desk.PanePosition); else gtk_paned_set_position(GTK_PANED(P),7000); global.lowernotebook = SN; /* the console set */ icsout=new TextSet(); /* console snippet */ tl1=gtk_label_new(_("Console")); xconsole=new Text(); gtk_notebook_append_page(GTK_NOTEBOOK(SN), xconsole->widget, tl1); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(SN), GTK_POS_RIGHT); xconsole->show(); Gtk::show(tl1,SN,P,NULL); icsout->addTarget(xconsole); /* bugpane */ global.bugpane = new BugPane(); global.bugpane->show(); tl2=gtk_label_new(_("Bughouse")); gtk_notebook_append_page(GTK_NOTEBOOK(SN), global.bugpane->widget, tl2); gshow(tl2); gtk_notebook_set_page(GTK_NOTEBOOK(SN),0); /* main board */ tmp=new Board(); notebook->addPage(tmp->widget,_("Main Board"),-1); tmp->setNotebook(notebook,-1); /* quick bar */ quickbar=new QuickBar(widget); gtk_box_pack_start(GTK_BOX(v), quickbar->widget, FALSE,TRUE, 0); quickbar->show(); QuickbarVisible=true; if (!global.ShowQuickbar) hideQuickbar(); inconsole=new Text(); icsout->addTarget(inconsole); inconsole->show(); notebook->addPage(inconsole->widget,_("Console"),-2); inconsole->setNotebook(notebook,-2); greet(); /* bottom entry box */ tw[0]=gtk_frame_new(0); gtk_frame_set_shadow_type(GTK_FRAME(tw[0]),GTK_SHADOW_ETCHED_OUT); tw[1]=gtk_hbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(tw[0]),tw[1]); gtk_container_set_border_width(GTK_CONTAINER(tw[1]),4); inputbox=gtk_entry_new(); gtk_widget_set_events(inputbox,(GdkEventMask)(gtk_widget_get_events(inputbox)|GDK_FOCUS_CHANGE_MASK)); gtk_signal_connect(GTK_OBJECT(inputbox),"focus_out_event", GTK_SIGNAL_FUNC(mainwindow_input_focus_out),NULL); ims=new InputModeSelector(); gtk_box_pack_start(GTK_BOX(tw[1]),ims->widget,FALSE,TRUE,0); gtk_box_pack_start(GTK_BOX(tw[1]),inputbox,TRUE,TRUE,4); gshow(inputbox); ims->show(); Gtk::show(tw[0],tw[1],NULL); gtk_box_pack_start(GTK_BOX(v),tw[0],FALSE,FALSE,0); InputHistory=new History(256); /* status bar */ status=new Status(); status->show(); bhb=gtk_hbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,TRUE,0); gshow(bhb); // timeseal icon createSealPix(bhb); gtk_box_pack_start(GTK_BOX(bhb),status->widget,TRUE,TRUE,0); /* game browsing buttons */ createNavbar(bhb); gtk_signal_connect (GTK_OBJECT (widget), "delete_event", GTK_SIGNAL_FUNC (mainwindow_delete), NULL); gtk_signal_connect (GTK_OBJECT (widget), "destroy", GTK_SIGNAL_FUNC (mainwindow_destroy), NULL); gtk_signal_connect (GTK_OBJECT (inputbox), "key_press_event", GTK_SIGNAL_FUNC (input_key_press), (gpointer)this); gtk_signal_connect (GTK_OBJECT (widget), "key_press_event", GTK_SIGNAL_FUNC (main_key_press), (gpointer)this); /* FIXME gtk_signal_connect (GTK_OBJECT (inconsole->getTextArea()), "changed", GTK_SIGNAL_FUNC (mainwindow_icsout_changed), (gpointer)this); */ dm=gtk_item_factory_get_widget_by_action(gif,FA_HIGHLIGHT); gmiset(GTK_CHECK_MENU_ITEM(dm),global.HilightLastMove); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_hilite),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_ANIMATE); gmiset(GTK_CHECK_MENU_ITEM(dm),global.AnimateMoves); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_animate),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_PREMOVE); gmiset(GTK_CHECK_MENU_ITEM(dm),global.Premove); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_premove),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_MOVEBEEP); gmiset(GTK_CHECK_MENU_ITEM(dm),global.BeepWhenOppMoves); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_beepopp),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_SOUND); gmiset(GTK_CHECK_MENU_ITEM(dm),global.EnableSounds); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_osound),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_VECTOR); gmiset(GTK_CHECK_MENU_ITEM(dm),global.UseVectorPieces); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_vector),0); vector_checkbox=dm; dm=gtk_item_factory_get_widget_by_action(gif,FA_LEGALITY); gmiset(GTK_CHECK_MENU_ITEM(dm),global.CheckLegality); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_legal),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_COORDS); gmiset(GTK_CHECK_MENU_ITEM(dm),global.ShowCoordinates); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_coord),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_POPUP); gmiset(GTK_CHECK_MENU_ITEM(dm),global.PopupSecondaryGames); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_popup),0); dm=gtk_item_factory_get_widget_by_action(gif,FA_SMART); gmiset(GTK_CHECK_MENU_ITEM(dm),global.SmartDiscard); gtk_signal_connect(GTK_OBJECT(dm),"toggled",GTK_SIGNAL_FUNC(sett_smarttrash),0); setIcon(icon_eboard_xpm,"eboard"); HideMode=0; global.input=this; global.output=icsout; global.status=status; global.chandler=(ConnectionHandler *)this; global.promotion=(PieceProvider *)promote; global.ebook=notebook; global.inputhistory=InputHistory; global.bmlistener=(BookmarkListener *)this; global.qbcontainer=(UpdateInterface *)this; global.iowatcher=(IONotificationInterface *)this; global.quickbar=quickbar; global.killbox=tw[1]; global.toplevelwidget=widget; mainw=this; notebook->setListener(this); paneChanged(0,-1); gtk_timeout_add(150,forced_focus,(gpointer)inputbox); } void MainWindow::update() { bool dState; dState = global.ShowQuickbar ? true : false; if (dState != QuickbarVisible) { if (QuickbarVisible) hideQuickbar(); else showQuickbar(); } } void MainWindow::showQuickbar() { if (!QuickbarVisible) { quickbar->update(); quickbar->show(); QuickbarVisible = true; } } void MainWindow::hideQuickbar() { if (QuickbarVisible) { quickbar->hide(); QuickbarVisible = false; } } void MainWindow::setSealPix(int flag) { gtk_pixmap_set(GTK_PIXMAP(picseal),sealmap[flag?1:0], sealmask[flag?1:0]); gtk_widget_queue_resize(picseal); } void MainWindow::createSealPix(GtkWidget *box) { GtkWidget *fr; GtkStyle *style; fr=gtk_frame_new(0); gtk_frame_set_shadow_type(GTK_FRAME(fr),GTK_SHADOW_ETCHED_OUT); style=gtk_widget_get_style(widget); sealmap[0] = gdk_pixmap_create_from_xpm_d (widget->window, &sealmask[0], &style->bg[GTK_STATE_NORMAL], (gchar **) sealoff_xpm); sealmap[1] = gdk_pixmap_create_from_xpm_d (widget->window, &sealmask[1], &style->bg[GTK_STATE_NORMAL], (gchar **) sealon_xpm); picseal=gtk_pixmap_new(sealmap[0],sealmask[0]); gtk_container_add(GTK_CONTAINER(fr),picseal); gtk_box_pack_start(GTK_BOX(box),fr,FALSE,FALSE,0); Gtk::show(picseal,fr,NULL); } void MainWindow::createNavbar(GtkWidget *box) { GdkPixmap *d[8]; GdkBitmap *mask[8]; GtkWidget *p[8],*b[8],*fr,*mb,*lb; GtkStyle *style; int i; style=gtk_widget_get_style(widget); d[0] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[0], &style->bg[GTK_STATE_NORMAL], (gchar **) backn_xpm); d[1] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[1], &style->bg[GTK_STATE_NORMAL], (gchar **) back1_xpm); d[2] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[2], &style->bg[GTK_STATE_NORMAL], (gchar **) forward1_xpm); d[3] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[3], &style->bg[GTK_STATE_NORMAL], (gchar **) forwardn_xpm); d[4] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[4], &style->bg[GTK_STATE_NORMAL], (gchar **) movelist_xpm); d[5] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[5], &style->bg[GTK_STATE_NORMAL], (gchar **) flip_xpm); d[6] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[6], &style->bg[GTK_STATE_NORMAL], (gchar **) trash_xpm); d[7] = gdk_pixmap_create_from_xpm_d (widget->window, &mask[7], &style->bg[GTK_STATE_NORMAL], (gchar **) toscratch_xpm); mb=gtk_hbox_new(FALSE,0); fr=gtk_frame_new(0); gtk_frame_set_shadow_type(GTK_FRAME(fr),GTK_SHADOW_ETCHED_OUT); gtk_container_add(GTK_CONTAINER(fr),mb); lb=gtk_label_new(_("Game/Board: ")); gtk_box_pack_start(GTK_BOX(mb),lb,FALSE,FALSE,2); for(i=0;i<8;i++) { b[i]=gtk_button_new(); p[i]=gtk_pixmap_new(d[i],mask[i]); gtk_container_add(GTK_CONTAINER(b[i]),p[i]); gshow(p[i]); gtk_box_pack_start(GTK_BOX(mb),b[i],FALSE,TRUE,0); gshow(b[i]); navbar[i]=b[i]; } gtk_box_pack_end(GTK_BOX(box),fr,FALSE,FALSE,0); Gtk::show(mb,lb,fr,NULL); gtk_tooltips_set_tip(tooltips,b[0],_("goes back to start of game"),0); gtk_tooltips_set_tip(tooltips,b[1],_("goes back 1 halfmove"),0); gtk_tooltips_set_tip(tooltips,b[2],_("goes forward 1 halfmove"),0); gtk_tooltips_set_tip(tooltips,b[3],_("goes forward to end of game"),0); gtk_tooltips_set_tip(tooltips,b[4],_("pops up the move list"),0); gtk_tooltips_set_tip(tooltips,b[5],_("flips board"),0); gtk_tooltips_set_tip(tooltips,b[6],_("discards board"),0); gtk_tooltips_set_tip(tooltips,b[7],_("opens new scratch board with position"),0); gtk_signal_connect(GTK_OBJECT(b[0]),"clicked", GTK_SIGNAL_FUNC(navbar_back_all),this); gtk_signal_connect(GTK_OBJECT(b[1]),"clicked", GTK_SIGNAL_FUNC(navbar_back_1),this); gtk_signal_connect(GTK_OBJECT(b[2]),"clicked", GTK_SIGNAL_FUNC(navbar_forward_1),this); gtk_signal_connect(GTK_OBJECT(b[3]),"clicked", GTK_SIGNAL_FUNC(navbar_forward_all),this); gtk_signal_connect(GTK_OBJECT(b[4]),"clicked", GTK_SIGNAL_FUNC(navbar_movelist),this); gtk_signal_connect(GTK_OBJECT(b[5]),"clicked", GTK_SIGNAL_FUNC(navbar_flip),this); gtk_signal_connect(GTK_OBJECT(b[6]),"clicked", GTK_SIGNAL_FUNC(navbar_trash),this); gtk_signal_connect(GTK_OBJECT(b[7]),"clicked", GTK_SIGNAL_FUNC(navbar_toscratch),this); } void MainWindow::setTitle(char *msg) { gtk_window_set_title(GTK_WINDOW(widget),msg); } void MainWindow::restoreDesk() { // main window is restored in the constructor if (! global.Desk.wGames.isNull() ) { openGameList(); gamelist->restorePosition(& global.Desk.wGames); } if (! global.Desk.wLocal.isNull() ) { openStockList(); stocklist->restorePosition(& global.Desk.wLocal); } if (! global.Desk.wAds.isNull() ) { openAdList(); adlist->restorePosition(& global.Desk.wAds); } global.Desk.spawnConsoles(icsout); } void MainWindow::parseThemeFile(char *name) { static char * comma = ","; char s[256], aux[16]; ThemeEntry *te; list::iterator it; tstring t; string *p; int ndc=0; if (name==0) return; ifstream f(name); if (!f) return; global.debug("MainWindow","parseThemeFile",name); while( memset(s,0,256), f.getline(s,255,'\n') ) { if (s[0]=='#') continue; // sound file if (s[0]=='+') { t.set(&s[1]); p=t.token(comma); if ( p && !global.hasSoundFile(*p) ) global.SoundFiles.push_back( * (new string(*p)) ); continue; } t.set(s); p=t.token(comma); if (!p) continue; te=new ThemeEntry(); te->Filename=*p; p=t.token(comma); if (p) te->Text=*p; // avoid dupes for(it=Themes.begin();it!=Themes.end();it++) { if ( (*it)->isDupe(te) ) { delete te; te=0; break; } if ( (*it)->isNameDupe(te) ) { ++ndc; snprintf(aux,16," (%d)",ndc); te->Text+=aux; } } if (te) Themes.push_back(te); } f.close(); } void MainWindow::updateBookmarks() { GtkWidget *pmenu, *item; GList *r,*s; list::iterator hi; list::iterator ei; char z[256]; int i; string x; // ics bookmarks pmenu=gtk_item_factory_get_widget_by_action(gif,FA_ICSBOOKMARKS); r=gtk_container_children(GTK_CONTAINER(pmenu)); for(s=r;s!=0;s=g_list_next(s)) gtk_container_remove( GTK_CONTAINER(pmenu), GTK_WIDGET(s->data) ); g_list_free(r); i=1; for(hi=global.HostHistory.begin();hi!=global.HostHistory.end();hi++,i++) { snprintf(z,256,_("%d. Connect to %s:%d (%s)"),i,(*hi)->host,(*hi)->port,(*hi)->protocol); item=gtk_menu_item_new_with_label( z ); gtk_signal_connect(GTK_OBJECT(item),"activate", GtkSignalFunc(mainwindow_connect_bookmark), (gpointer)(*hi)); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); } if (global.HostHistory.empty()) { item=gtk_menu_item_new_with_label(_("(no bookmarks)")); gtk_widget_set_sensitive(item,FALSE); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); } // engine bookmarks pmenu=gtk_item_factory_get_widget_by_action(gif,FA_ENGBOOKMARKS); r=gtk_container_children(GTK_CONTAINER(pmenu)); for(s=r;s!=0;s=g_list_next(s)) gtk_container_remove( GTK_CONTAINER(pmenu), GTK_WIDGET(s->data) ); g_list_free(r); if (!global.EnginePresets.empty()) { item=gtk_menu_item_new_with_label(_("Edit Bookmarks...")); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); gtk_signal_connect(GTK_OBJECT(item),"activate", GtkSignalFunc(mainwindow_edit_engbm), (gpointer) this); item=gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); } i=1; for(ei=global.EnginePresets.begin();ei!=global.EnginePresets.end();ei++, i++) { snprintf(z,256,"%d. ",i); x=z; x+=(*ei)->caption; item=gtk_menu_item_new_with_label( x.c_str() ); gtk_signal_connect(GTK_OBJECT(item),"activate", GtkSignalFunc(mainwindow_connect_bookmark2), (gpointer)(*ei)); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); } if (global.EnginePresets.empty()) { item=gtk_menu_item_new_with_label(_("(no bookmarks)")); gtk_widget_set_sensitive(item,FALSE); gtk_menu_shell_append(GTK_MENU_SHELL(pmenu),item); gshow(item); } } void MainWindow::searchThemes() { EboardFileFinder eff; list::iterator it; GtkWidget *tmenu[3]; GtkWidget *menuitem; int i,j; char tmp[512]; DIR *dh; struct dirent *ds; ExtPatternMatcher ExtraConf; string s; tmenu[0]=gtk_item_factory_get_widget_by_action(gif,FA_LOADTHEME); tmenu[1]=gtk_item_factory_get_widget_by_action(gif,FA_LOADPIECES); tmenu[2]=gtk_item_factory_get_widget_by_action(gif,FA_LOADSQUARES); j=eff.getPathCount(); for(i=0;id_name)) { snprintf(tmp,512,DATADIR "/eboard/%s",ds->d_name); parseThemeFile(tmp); } } closedir(dh); } if (!Themes.empty()) { for(i=0,it=Themes.begin();it!=Themes.end();it++,i++) { // load all menuitem=gtk_menu_item_new_with_label( (*it)->Text.c_str() ); gtk_signal_connect(GTK_OBJECT(menuitem),"activate", GtkSignalFunc(mainwindow_themeitem), (gpointer)(*it)); gtk_menu_shell_append(GTK_MENU_SHELL(tmenu[0]),menuitem); gshow(menuitem); // load pieces menuitem=gtk_menu_item_new_with_label( (*it)->Text.c_str() ); gtk_signal_connect(GTK_OBJECT(menuitem),"activate", GtkSignalFunc(mainwindow_themeitem2), (gpointer)(*it)); gtk_menu_shell_append(GTK_MENU_SHELL(tmenu[1]),menuitem); gshow(menuitem); // load squares menuitem=gtk_menu_item_new_with_label( (*it)->Text.c_str() ); gtk_signal_connect(GTK_OBJECT(menuitem),"activate", GtkSignalFunc(mainwindow_themeitem3), (gpointer)(*it)); gtk_menu_shell_append(GTK_MENU_SHELL(tmenu[2]),menuitem); gshow(menuitem); } global.setPieceSet(Themes.front()->Filename,true,true); } else { s="classic.png"; global.setPieceSet(s,true,true); } } void MainWindow::greet() { char z[128]; snprintf (z,128,_("eboard version %s (%s)"),global.Version,global.SystemType); icsout->append(z,0xc0ff00,IM_IGNORE); snprintf (z,128,_("(c) 2000-%d Felipe Bergo (FICS handle: Pulga)"), 2007); icsout->append(z,0xc0ff00,IM_IGNORE); icsout->append(_("Distributed under the terms of the GNU General Public License, version 2 or later"),0xffc000,IM_IGNORE); icsout->append("http://www.gnu.org/copyleft/gpl.html",0xffc000,IM_IGNORE); icsout->append(_("Source code available at http://eboard.sourceforge.net"),0xc0ff00,IM_IGNORE); icsout->append("---",0xc0ff00,IM_IGNORE); } void MainWindow::updatePrefix() { int id; id=notebook->getCurrentPageId(); if (id==-2) { imscache.set(-2,global.ConsoleReply); ims->setPrefix( * (imscache.get(-2)) ); } } void MainWindow::setPasswordMode(int pm) { HideMode=pm; global.PauseLog=pm; gtk_entry_set_visibility(GTK_ENTRY(inputbox),(pm?FALSE:TRUE)); global.setPasswordMode(pm); } void MainWindow::openGameList() { if (gamelist) return; gamelist=new GameListDialog(this); gamelist->show(); } void MainWindow::openAdList() { if (adlist) return; adlist=new AdListDialog(this); adlist->show(); } void MainWindow::gameListClosed() { if (gamelist) delete gamelist; gamelist=0; } void MainWindow::openStockList() { if (stocklist) return; stocklist=new StockListDialog(this); stocklist->show(); } void MainWindow::stockListClosed() { if (stocklist) delete stocklist; stocklist=0; } void MainWindow::adListClosed() { if (adlist) delete adlist; adlist=0; } void MainWindow::openDetachedConsole() { if (consolecopy) return; consolecopy=new DetachedConsole(icsout,this); consolecopy->show(); } void MainWindow::peekKeys(GtkWidget *who) { gtk_signal_connect(GTK_OBJECT(who),"key_press_event", GTK_SIGNAL_FUNC(main_key_press),(gpointer)this); } void MainWindow::consoleClosed() { if (consolecopy) delete consolecopy; consolecopy=0; } void MainWindow::userInput(const char *text) { char *nv; int i,j; if (text==0) return; j=strlen(text); nv=(char *) Global::safeMalloc(j+1); strcpy(nv,text); // join multi-line pastes in one single line for(i=0;iappend(_("> (password sent)"),global.SelfInputColor); else icsout->append("> ",nv,global.SelfInputColor); if (global.protocol) global.protocol->sendUserInput(nv); if (!HideMode) InputHistory->appendString(nv); } void MainWindow::injectInput() { char z[4096],y[256]; int id; g_strlcpy(z,gtk_entry_get_text(GTK_ENTRY(inputbox)),4096); if (ims->getSearchMode()) { inconsole->SearchString = z; inconsole->execSearch(); ims->setSearchMode(false); goto ii_nothing_else; } if (asetprefix.match(z)) { id=notebook->getCurrentPageId(); imscache.set(id, asetprefix.getStarToken(0) ); ims->setPrefix( * (imscache.get(id)) ); goto ii_nothing_else; } if (arunscript.match(z)) { g_strlcpy(y,arunscript.getStarToken(0),256); new ScriptInstance(y); goto ii_nothing_else; return; } if (ims->getChatMode()) { g_strlcpy(z,ims->getPrefix().c_str(),4096); if (z[0]) g_strlcat(z," ",4096); } else z[0]=0; g_strlcat(z,gtk_entry_get_text(GTK_ENTRY(inputbox)),4096); userInput(z); ii_nothing_else: gtk_entry_set_text(GTK_ENTRY(inputbox),"\0"); } void MainWindow::historyUp() { gtk_entry_set_text(GTK_ENTRY(inputbox),InputHistory->moveUp()); gtk_editable_set_position(GTK_EDITABLE(inputbox),-1); } void MainWindow::historyDown() { gtk_entry_set_text(GTK_ENTRY(inputbox),InputHistory->moveDown()); gtk_editable_set_position(GTK_EDITABLE(inputbox),-1); } void MainWindow::saveBuffer() { inconsole->saveBuffer(); } void MainWindow::saveDesk() { global.Desk.clear(); global.Desk.wMain.retrieve(widget); if (gamelist) global.Desk.wGames.retrieve(gamelist->widget); if (adlist) global.Desk.wAds.retrieve(adlist->widget); if (stocklist) global.Desk.wLocal.retrieve(stocklist->widget); if (scriptlist) global.Desk.wLocal.retrieve(scriptlist->widget); global.Desk.PanePosition = gtk_paned_get_position(GTK_PANED(global.mainpaned)); global.gatherConsoleState(); global.writeRC(); } void MainWindow::openServer(char *host,int port,Protocol *protocol, char *helper) { global.debug("MainWindow","openServer",host); inconsole->pop(); tryConnect(host,port,protocol,helper); } void MainWindow::openServer(NetConnection *conn, Protocol *protocol) { if (!conn->isConnected()) return; inconsole->pop(); if ((global.protocol)||(global.network)) disconnect(); global.protocol=protocol; global.network=conn; global.network->notifyReadReady(this); setSealPix(conn->hasTimeGuard()); // incrementHook(); } void MainWindow::openXBoardEngine() { XBoardProtocol *xpp; global.debug("MainWindow","openXBoardEngine"); xpp=new XBoardProtocol(); openEngine(xpp); } void MainWindow::openGnuChess4() { GnuChess4Protocol *gpp; global.debug("MainWindow","openGnuChess4"); gpp=new GnuChess4Protocol(); openEngine(gpp); } void MainWindow::openCrafty() { CraftyProtocol *cpp; global.debug("MainWindow","openCrafty"); cpp=new CraftyProtocol(); openEngine(cpp); } void MainWindow::openSjeng() { SjengProtocol *spp; global.debug("MainWindow","openSjeng"); spp=new SjengProtocol(); openEngine(spp); } void MainWindow::openEngineBookmark(EngineBookmark *bm) { EngineProtocol *xpp; switch(bm->proto) { case 0: xpp=new XBoardProtocol(); break; case 1: xpp=new CraftyProtocol(); break; case 2: xpp=new SjengProtocol(); break; case 3: xpp=new GnuChess4Protocol(); break; default: cerr << _("** [eboard] bad engine protocol # in bookmark: ") << bm->proto << endl; return; } disconnect(); if (xpp->run(bm)) { // success global.protocol=xpp; global.network->notifyReadReady(this); // incrementHook(); } } void MainWindow::openEngine(EngineProtocol *xpp, EngineBookmark *ebm) { int i; global.debug("MainWindow","openEngine"); disconnect(); if (ebm) i=xpp->run(ebm); else i=xpp->run(); if (i) { // success global.protocol=xpp; global.network->notifyReadReady(this); // incrementHook(); } } void MainWindow::tryConnect(char *host,int port,Protocol *protocol, char *helper) { DirectConnection *bytcp; PipeConnection *bypipe; FallBackConnection *glue; NetConnection *net; global.debug("MainWindow","tryConnect",host); if ((global.protocol)||(global.network)) disconnect(); if (helper) { glue=new FallBackConnection(); bypipe=new PipeConnection(host,port,helper,global.SystemType); bypipe->TimeGuard=1; bytcp=new DirectConnection(host,port); glue->append(bypipe); glue->append(bytcp); net=glue; } else { net=new DirectConnection(host,port); } global.protocol=protocol; global.network=net; if (net->open()) { // failure global.protocol=NULL; global.network=NULL; status->setText(net->getError(),10); delete net; delete protocol; } else { // success setSealPix(net->hasTimeGuard()); net->notifyReadReady(this); // incrementHook(); } } void MainWindow::disconnect() { global.debug("MainWindow","disconnect"); cleanUpConnection(); } void MainWindow::cleanUpConnection() { list::iterator bli; global.debug("MainWindow","cleanUpConnection"); setSealPix(0); if (global.protocol!=NULL) { global.protocol->finalize(); delete global.protocol; global.protocol=NULL; } if (global.network!=NULL) { global.network->close(); delete global.network; global.network=NULL; icsout->append(_("--- Disconnected"),0xc0ff00); } // stop all clocks for(bli=global.BoardList.begin();bli!=global.BoardList.end();bli++) (*bli)->stopClock(); status->setText(_("No peer."),15); } void MainWindow::cloneOnScratch(ChessGame *cg0) { Board *b; ChessGame *cg; char z[64]; int id; id = global.nextFreeGameId(30000); cg=new ChessGame(cg0); cg->GameNumber = id; cg->LocalEdit = true; cg->source = GS_Other; global.appendGame(cg,false); b=new EditBoard(cg); cg->setBoard(b); cg->StopClock = 1; snprintf(z,64,_("Scratch %d"),++global.LastScratch); notebook->addPage(b->widget,z,id); b->setNotebook(notebook,id); notebook->goToPageId(id); b->update(); } void MainWindow::newScratchBoard(bool clearboard) { Board *b; ChessGame *cg; Position *p; int id,i,j; char z[64]; id = global.nextFreeGameId(30000); cg=new ChessGame(id, 0, 0, 0, REGULAR, "Nobody","Nessuno"); cg->LocalEdit=true; global.appendGame(cg,false); b=new EditBoard(cg); cg->setBoard(b); cg->StopClock = 1; snprintf(z,64,_("Scratch %d"),++global.LastScratch); notebook->addPage(b->widget,z,id); b->setNotebook(notebook,id); p=new Position(); if (clearboard) for(i=0;i<8;i++) for(j=0;j<8;j++) p->setPiece(i,j,EMPTY); cg->updatePosition2(*p,1,0,0,0,_(""),false); notebook->goToPageId(id); } void MainWindow::gameWalk(int op) { Board *b=0; ChessGame *cg=0; int id; global.debug("MainWindow","gameWalk"); id=notebook->getCurrentPageId(); if (id<=-2) // text panes return; if (id==-1) b=global.BoardList.front(); else { cg=global.getGame(id); if (cg) b=cg->getBoard(); } if (!b) return; // examining if (cg) if (cg->protodata[0]==258) { switch(op) { case 0: global.protocol->exaBackward(999); return; case 1: global.protocol->exaBackward(1); return; case 2: global.protocol->exaForward(1); return; case 3: global.protocol->exaForward(999); return; } } switch(op) { case 0: b->walkBackAll(); break; case 1: b->walkBack1(); break; case 2: b->walkForward1(); break; case 3: b->walkForwardAll(); break; case 4: b->openMovelist(); break; case 5: if ((id<=0)||(!cg)) break; if ( (cg->protodata[1]) || ( ! global.protocol ) || (cg->LocalEdit) ) { cg->protodata[1]=0; global.ebook->removePage(cg->GameNumber); global.removeBoard(b); delete(b); cg->setBoard(NULL); if (cg->LocalEdit) global.deleteGame(cg); } else { if ((id>0)&&(global.protocol!=NULL)) global.protocol->discardGame(cg->GameNumber); } break; case 6: b->setFlipInversion(!b->getFlipInversion()); break; case 7: // clone on scratch cloneOnScratch(b->getGame()); break; } } static int smart_remove_pending=0; // take care of pending 'smart removals' gboolean do_smart_remove(gpointer data) { vector evil_ids; int i,j,pgid; smart_remove_pending=0; pgid=global.ebook->getCurrentPageId(); global.ebook->getNaughty(evil_ids); j=evil_ids.size(); if ( (!j) || (! global.protocol) ) return FALSE; for(i=0;i=0) global.protocol->discardGame(evil_ids[i]); } return FALSE; } void MainWindow::joystickEvent(JoystickEventType jet, int number, int value) { int id, anum; ChessGame *cg = NULL; Board *b = NULL; if (global.joycapture != NULL) { global.joycapture->joystickEvent(jet,number,value); return; } id=notebook->getCurrentPageId(); if (id==-1) b=global.BoardList.front(); else { cg=global.getGame(id); if (cg!=NULL) b=cg->getBoard(); } anum = number & 0xfffe; if (jet == JOY_AXIS) { if (anum == global.JSCursorAxis && b!=NULL && (global.JSMode==1 || value<-16000 || value>16000 || value==0) ) b->joystickCursor(number%2, value); if (number == global.JSBrowseAxis && b!=NULL && (value<-16000 || value>16000 || value==0) ) { if (value < 0) value = -1; if (value > 0) value = 1; if (value < 0 && jpd!=value) b->walkBack1(); if (value > 0 && jpd!=value) b->walkForward1(); jpd = value; } } if (jet == JOY_BUTTON && value==1) { if (number == global.JSMoveButton && b!=NULL) b->joystickSelect(); if (number == global.JSPrevTabButton) global.ebook->goToPrevious(); if (number == global.JSNextTabButton) global.ebook->goToNext(); } } // changes enabling of buttons upon pane change // also schedules 'smart removes' for finished boards void MainWindow::paneChanged(int pgseq,int pgid) { bool nv[8]; int i; // # button(s) constraint for enabling // ------------------------------------------------------ // 0..3 game move requires game // 4 move list requires game // 5 flip requires board // 6 trash requires board other than main board // 7 new scratch requires game // main board: -1 console: -2 seek graph: -3 // channel tabs: -200 .. -455 (for FICS, formula is -(200+channelnum) ) // other boards: >= 0 // most probably computer thinking pane will be -4 // change talking prefix as appropriate: if ( (pgid != -2) && imscache.get(pgid)) { ims->setPrefix(* (imscache.get(pgid))); } else if (pgid <= -200) { int ch; char z[32]; ch=-200-pgid; snprintf(z,32,"t %d",ch); ims->setPrefix(z); imscache.set(pgid, ims->getPrefix()); } else if (pgid >= 0) { ims->setPrefix(","); imscache.set(pgid, ims->getPrefix()); } else if (pgid == -2) { ims->setPrefix(global.ConsoleReply); imscache.set(pgid, ims->getPrefix()); } else if (pgid == -1) { ims->setPrefix("say"); imscache.set(pgid, ims->getPrefix()); } for(i=0;i<8;i++) nv[i]=true; // 0..4 if (pgid < -1) nv[0]=false; if ( (pgid == -1) && (! global.BoardList.front()->hasGame()) ) nv[0]=false; nv[1]=nv[2]=nv[3]=nv[4]=nv[7]=nv[0]; // 5 if (pgid < -1) nv[5]=false; // 6 if (pgid < 0) nv[6]=false; for(i=0;i<8;i++) { if (nv[i]!=nav_enable[i]) { gtk_widget_set_sensitive(navbar[i],nv[i]?TRUE:FALSE); nav_enable[i]=nv[i]; } } if ((global.ebook->hasNaughty())&&(!smart_remove_pending)) { smart_remove_pending=1; gtk_timeout_add(500,do_smart_remove,NULL); } } // some key was pressed in some other window, but it's (possibly) a // global keybind int MainWindow::keyPressed(int keyval, int state) { GdkEventKey e; e.keyval = keyval; e.state = state; return(main_key_press(0, &e, this)); } /* callbacks */ gint mainwindow_delete (GtkWidget * widget, GdkEvent * event, gpointer data) { global.Quitting=1; return FALSE; } void mainwindow_destroy (GtkWidget * widget, gpointer data) { global.Quitting=1; global.WrappedMainQuit(); } int main_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data) { MainWindow *ptr; int cpage; ptr=(MainWindow *)data; if (evt->state&GDK_CONTROL_MASK) { switch(evt->keyval) { case GDK_Left: ptr->gameWalk(1); break; case GDK_Right: ptr->gameWalk(2); break; case GDK_F: case GDK_f: windows_find(0,0); break; case GDK_G: case GDK_g: windows_findp(0,0); break; default: return 0; } return 1; } switch(evt->keyval) { case GDK_Escape: if (ptr->ims) ptr->ims->flip(); break; case GDK_F3: // previous pane global.ebook->goToPrevious(); break; case GDK_F4: // next pane global.ebook->goToNext(); break; case GDK_F5: // pop main board global.ebook->goToPageId(-1); break; case GDK_F6: // pop console global.ebook->goToPageId(-2); break; case GDK_F7: // pop seek graph global.ebook->goToPageId(-3); break; case GDK_F8: // toggle shortcut bar global.ShowQuickbar = ! (global.ShowQuickbar); global.qbcontainer->update(); global.writeRC(); break; case GDK_Page_Up: if (wid != 0) { cpage = global.ebook->getCurrentPageId(); if (cpage==-2) ptr->inconsole->pageUp(); if (cpage >= -500 && cpage <= -200) global.channelPageUp(-200-cpage); ptr->xconsole->pageUp(); } break; case GDK_Page_Down: if (wid != 0) { cpage = global.ebook->getCurrentPageId(); if (cpage==-2) ptr->inconsole->pageDown(); if (cpage >= -500 && cpage <= -200) global.channelPageDown(-200-cpage); ptr->xconsole->pageDown(); } break; default: return 0; } return 1; } int input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data) { MainWindow *ptr; ptr=(MainWindow *)data; switch(evt->keyval) { case GDK_Up: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); ptr->historyUp(); return 1; case GDK_Down: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); ptr->historyDown(); return 1; case GDK_KP_Enter: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); case GDK_Return: ptr->injectInput(); return 1; } return 0; } void mainwindow_themeitem (GtkMenuItem *menuitem, gpointer data) { ThemeEntry *te; te=(ThemeEntry *)data; gmiset(GTK_CHECK_MENU_ITEM(mainw->vector_checkbox),0); global.UseVectorPieces=0; global.setPieceSet(te->Filename,true,true); global.writeRC(); } void mainwindow_themeitem2 (GtkMenuItem *menuitem, gpointer data) { ThemeEntry *te; te=(ThemeEntry *)data; gmiset(GTK_CHECK_MENU_ITEM(mainw->vector_checkbox),0); global.UseVectorPieces=0; global.setPieceSet(te->Filename,true,false); global.writeRC(); } void mainwindow_themeitem3 (GtkMenuItem *menuitem, gpointer data) { ThemeEntry *te; te=(ThemeEntry *)data; gmiset(GTK_CHECK_MENU_ITEM(mainw->vector_checkbox),0); global.UseVectorPieces=0; global.setPieceSet(te->Filename,false,true); global.writeRC(); } void peer_disconnect(gpointer data) { mainw->disconnect(); } void peer_scratch_empty(gpointer data) { mainw->newScratchBoard(true); } void peer_scratch_initial(gpointer data) { mainw->newScratchBoard(false); } void peer_connect_fics(gpointer data) { mainw->openServer("freechess.org",5000,new FicsProtocol(),"timeseal"); if (global.FicsAutoLogin) if (global.network) if (global.network->isConnected()) new ScriptInstance("autofics.pl"); } void peer_connect_xboard(gpointer data) { mainw->openXBoardEngine(); } void peer_connect_gnuchess4(gpointer data) { mainw->openGnuChess4(); } void peer_connect_crafty(gpointer data) { mainw->openCrafty(); } void peer_connect_sjeng(gpointer data) { mainw->openSjeng(); } void peer_connect_ask(gpointer data) { (new ConnectDialog())->show(); } void peer_connect_p2p(gpointer data) { (new P2PDialog())->show(); } void windows_games(GtkWidget *w, gpointer data) { mainw->openGameList(); } void windows_sough(GtkWidget *w, gpointer data) { mainw->openAdList(); } void windows_stock(GtkWidget *w, gpointer data) { mainw->openStockList(); } void windows_detached(GtkWidget *w, gpointer data) { mainw->openDetachedConsole(); } void windows_script(GtkWidget *w, gpointer data) { (new ScriptList())->show(); } void windows_savedesk(GtkWidget *w, gpointer data) { mainw->saveDesk(); } void windows_savebuffer(GtkWidget *w, gpointer data) { mainw->saveBuffer(); } void windows_find(GtkWidget *w, gpointer data) { mainw->ims->setSearchMode(true); } void windows_findp(GtkWidget *w, gpointer data) { mainw->inconsole->findTextNext(); } void help_about(gpointer data) { (new Help::AboutDialog())->show(); } void help_keys(gpointer data) { (new Help::KeysDialog())->show(); } void help_debug(gpointer data) { (new Help::DebugDialog())->show(); } void help_starting(gpointer data) { (new Help::GettingStarted())->show(); } void MainWindow::readAvailable(int handle) { NetConnection *net; char line[2048]; int gotinput, loopc; global.debug("MainWindow","readAvailable"); net = global.network; if ((net==NULL)||(!net->isConnected())||(global.protocol==NULL)) { cleanUpConnection(); return; } if (handle == net->getReadHandle()) { /* got input from main connection */ loopc = 0; do { gotinput=0; if (net->readLine(line,2048)==0) { gotinput=1; global.protocol->receiveString(line); global.agentBroadcast(line); } else { if (global.protocol->hasAuthenticationPrompts()) if ((net->bufferMatch("login:"))|| (net->bufferMatch("password:"))) if (net->readPartial(line,2048)==0) { global.protocol->receiveString(line); global.agentBroadcast(line); gotinput=1; } } ++loopc; if (loopc%10 == 9) gtk_main_iteration(); if ( (global.network==0) || (global.protocol==0) ) break; } while(gotinput); } else { /* got input from an agent (script) */ if (io_tag < 0) io_tag = gtk_timeout_add(200, mainwindow_read_agents, (gpointer) this); } } gboolean mainwindow_read_agents(gpointer data) { MainWindow *me = (MainWindow *) data; int loopc; char line[2048]; if (global.protocol==NULL) return FALSE; loopc = 0; while(global.receiveAgentLine(line,2048)) { global.protocol->sendUserInput(line); ++loopc; if (loopc > 4) return TRUE; } me->io_tag = -1; return FALSE; } void MainWindow::writeAvailable(int handle) { // not used, write is buffered, the OS takes care for us, thanks. } void mainwindow_icsout_changed(GtkEditable *gtke, gpointer data) { MainWindow *me; me=(MainWindow *)data; me->inconsole->contentUpdated(); } void navbar_back_all(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(0); } void navbar_back_1(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(1); } void navbar_forward_1(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(2); } void navbar_forward_all(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(3); } void navbar_movelist(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(4); } void navbar_trash(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(5); } void navbar_toscratch(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(7); } void navbar_flip(GtkWidget *w,gpointer data) { MainWindow *me; me=(MainWindow *)data; me->gameWalk(6); } void sett_prefs(gpointer data) { (new PreferencesDialog())->show(); } void sett_hilite(GtkWidget *w,gpointer data) { global.HilightLastMove=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); global.repaintAllBoards(); } void sett_animate(GtkWidget *w,gpointer data) { global.AnimateMoves=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_premove(GtkWidget *w,gpointer data) { global.Premove=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); if (global.protocol && global.network) if (global.network->isConnected()) global.protocol->updateVar(PV_premove); } void sett_beepopp(GtkWidget *w,gpointer data) { global.BeepWhenOppMoves=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_osound(GtkWidget *w,gpointer data) { global.EnableSounds=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_vector(GtkWidget *w,gpointer data) { global.UseVectorPieces=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); global.repaintAllBoards(); } void sett_legal(GtkWidget *w,gpointer data) { global.CheckLegality=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_popup(GtkWidget *w,gpointer data) { global.PopupSecondaryGames=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_smarttrash(GtkWidget *w,gpointer data) { global.SmartDiscard=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); } void sett_coord(GtkWidget *w,gpointer data) { global.ShowCoordinates=GTK_CHECK_MENU_ITEM(w)->active; global.writeRC(); global.repaintAllBoards(); } void game_resign(GtkWidget *w,gpointer data) { if (global.protocol) global.protocol->resign(); } void game_draw(GtkWidget *w,gpointer data) { if (global.protocol) global.protocol->draw(); } void game_adjourn(GtkWidget *w,gpointer data) { if (global.protocol) global.protocol->adjourn(); } void game_abort(GtkWidget *w,gpointer data) { if (global.protocol) global.protocol->abort(); } void game_retract(GtkWidget *w,gpointer data) { if (global.protocol) global.protocol->retractMove(); } // the next 2 functions keep focus in the input box // gcp was particularly annoyed by the focus not being // kept there... gboolean forced_focus(gpointer data) { gint a,b; gtk_editable_get_selection_bounds(GTK_EDITABLE(data),&a,&b); //FIXME gtk_widget_grab_focus(GTK_WIDGET(data)); gtk_editable_select_region(GTK_EDITABLE(data),a,b); return FALSE; } gboolean mainwindow_input_focus_out(GtkWidget *widget,GdkEventFocus *event,gpointer user_data) { gtk_timeout_add(100,forced_focus,(gpointer)widget); return FALSE; } void mainwindow_connect_bookmark(GtkWidget *w, gpointer data) { HostBookmark *bm; char p[32]; bm=(HostBookmark *)data; // gcc 2.95 and up are just annoying with this const / non-const thing strcpy(p,"timeseal"); global.chandler->openServer(bm->host,bm->port,new FicsProtocol(), strcmp(bm->protocol,"FICS") ? 0 : p); } void mainwindow_connect_bookmark2(GtkWidget *w, gpointer data) { EngineBookmark *bm; bm=(EngineBookmark *)data; mainw->openEngineBookmark(bm); } void mainwindow_edit_engbm(GtkWidget *w, gpointer data) { MainWindow *me; me=(MainWindow *) data; (new EditEngineBookmarksDialog( (BookmarkListener *) me ))->show(); } // ThemeEntry bool ThemeEntry::isDupe(ThemeEntry *te) { if (!te) return false; if (!Filename.compare(te->Filename)) return true; return false; } bool ThemeEntry::isNameDupe(ThemeEntry *te) { if (!te) return false; if (!Text.compare(te->Text)) return true; return false; } // --- input mode selector InputModeSelector::InputModeSelector() { GtkWidget *h; int i; ChatMode=false; SearchMode=false; prefix.erase(); widget = gtk_button_new(); h=gtk_hbox_new(FALSE,0); l[0]=gtk_label_new(_("[cmd]")); l[1]=gtk_label_new(""); gtk_container_add(GTK_CONTAINER(widget),h); for(i=0;i<2;i++) { gtk_box_pack_start(GTK_BOX(h),l[i],FALSE,TRUE,3*i); gshow(l[i]); } gshow(h); gtk_signal_connect(GTK_OBJECT(widget), "clicked", GTK_SIGNAL_FUNC(ims_switch), (gpointer) this); } bool InputModeSelector::getChatMode() { return ChatMode; } bool InputModeSelector::getSearchMode() { return SearchMode; } void InputModeSelector::setSearchMode(bool m) { SearchMode = m; if (!SearchMode) { setChatMode(ChatMode); return; } gtk_label_set_text(GTK_LABEL(l[0]), _("[find]")); gtk_label_set_text(GTK_LABEL(l[1]), ""); setColor(l[0],0,0x80,0); setColor(l[1],0,0,0); } void InputModeSelector::setChatMode(bool m) { string x; ChatMode=m; x=m?_("[chat]"): _("[cmd]"); gtk_label_set_text(GTK_LABEL(l[0]), x.c_str()); if (m) { x=prefix; setColor(l[0],0xff,0,0); setColor(l[1],0,0,0xff); } else { x.erase(); setColor(l[0],0,0,0); } gtk_label_set_text(GTK_LABEL(l[1]), x.c_str()); gtk_widget_queue_resize(widget); } string & InputModeSelector::getPrefix() { return prefix; } void InputModeSelector::setPrefix(char *s) { prefix=s; if (ChatMode) setChatMode(true); } void InputModeSelector::setPrefix(string &s) { prefix=s; if (ChatMode) setChatMode(true); } void InputModeSelector::setColor(GtkWidget *w, int R,int G, int B) { GdkColor nc; GtkStyle *style; int i; nc.red = R << 8; nc.green = G << 8; nc.blue = B << 8; style=gtk_style_copy( gtk_widget_get_style(w) ); for(i=0;i<5;i++) style->fg[i]=nc; gtk_widget_set_style( w, style ); gtk_widget_queue_draw( w ); } void InputModeSelector::flip() { setChatMode(!ChatMode); } void ims_switch(GtkWidget *w, gpointer data) { InputModeSelector *me; me=(InputModeSelector *) data; me->flip(); } string * PrefixCache::get(int id) { int i; // search back to front, since we are likely to get the latest // to be added for(i=ids.size()-1;i>=0;i--) if (ids[i] == id) return( text[i] ); return 0; } void PrefixCache::set(int id,string &val) { int i; for(i=ids.size()-1;i>=0;i--) if (ids[i] == id) { if (text[i]) delete(text[i]); text[i]=new string(val); return; } ids.push_back(id); text.push_back( new string(val) ); } void PrefixCache::set(int id,char *val) { set( id, * (new string(val)) ); } void PrefixCache::setIfNotSet(int id, string &val) { int i; for(i=ids.size()-1;i>=0;i--) if (ids[i] == id) return; ids.push_back(id); text.push_back( new string(val) ); } #ifdef HAVE_LINUX_JOYSTICK_H void mainwindow_joystick(gpointer data,gint source,GdkInputCondition cond) { struct js_event jse; MainWindow *me = (MainWindow *) data; if (read(global.JoystickFD,&jse,sizeof(struct js_event)) == sizeof(struct js_event)) { switch(jse.type) { case JS_EVENT_BUTTON: me->joystickEvent(JOY_BUTTON, (int) (jse.number), (int) (jse.value)); break; case JS_EVENT_AXIS: me->joystickEvent(JOY_AXIS, (int) (jse.number), (int) (jse.value)); break; } } } #endif eboard-1.1.1.orig/board.cc0000644000175000017500000017637510757567572014721 0ustar patrikpatrik/* $Id: board.cc,v 1.121 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "eboard.h" #include "board.h" #include "chess.h" #include "global.h" #include "text.h" #include "protocol.h" #include "dgtboard.h" #include "mainwindow.h" Board * Board::PopupOwner = 0; static GdkEventMotion LastMotionEvent; // --- Board -------------------------- #if MAEMO void tap_and_hold_cb(GtkWidget *widget, gpointer user_data) { ((Board*)user_data)->popupProtocolMenu(100,100,0); } #endif Board::Board() : WidgetProxy() { int i; global.debug("Board","Board"); global.addPieceClient(this); cur=0; clock.setHost(this); premoveq=0; mygame=0; clock_ch=1; hilite_ch=1; allowMove=true; gotAnimationLoop=0; update_queue=false; LockAnimate=0; FreeMove=false; dr_active=false; FlipInvert=false; EditMode=false; UpdateClockAfterConfigure = false; jx=jy=-1; jpxv = 0; jpyv = 0; jsx=jsy=-1; jsvx=jsvy=0; jstid=-1; AnimationTimeout = -1; for(i=0;i<6;i++) info[i].erase(); currently_rendered.setPiece(0,0,EMPTY); repaint_due=false; frozen_lvl=0; if (global.ShowCoordinates) { borx=20; bory=20; } else { borx=bory=0; } morey=0; global.BoardList.push_back(this); canselect=true; sel_color=0xffff00; sp=0; flipped=false; widget=yidget=gtk_drawing_area_new(); gtk_widget_set_events(yidget,GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK| GDK_BUTTON_RELEASE_MASK|GDK_BUTTON1_MOTION_MASK| GDK_POINTER_MOTION_HINT_MASK); sqside=59; sqw = 2*borx + 8*sqside + 1; sqh = 2*bory + morey + 8*sqside + 1; buffer=gdk_pixmap_new(MainWindow::RefWindow,sqw,sqh,-1); clkbar=gdk_pixmap_new(MainWindow::RefWindow,250,sqh,-1); clkgc=gdk_gc_new(clkbar); wgc=0; scrap=(rgbptr)g_malloc(sqw*sqh*3); memset(scrap,0,sqw*sqh*3); gtk_signal_connect (GTK_OBJECT (yidget), "expose_event", (GtkSignalFunc) board_expose_event, (gpointer) this); gtk_signal_connect (GTK_OBJECT (yidget), "configure_event", (GtkSignalFunc) board_configure_event, (gpointer) this); gtk_signal_connect (GTK_OBJECT (yidget), "button_press_event", (GtkSignalFunc) board_button_press_event, (gpointer) this); gtk_signal_connect (GTK_OBJECT (yidget), "button_release_event", (GtkSignalFunc) board_button_release_event, (gpointer) this); gtk_signal_connect (GTK_OBJECT (yidget), "motion_notify_event", (GtkSignalFunc) board_motion_event, (gpointer) this); #if MAEMO // Note: the following code does not work // I get no events :-/ gtk_widget_tap_and_hold_setup (yidget, NULL, NULL, GtkWidgetTapAndHoldFlags(0)); #if 0 gtk_signal_connect (GTK_OBJECT (yidget), "tap-and-hold", //(GtkSignalFunc) board_button_press_event, (GtkSignalFunc) tap_and_hold_cb , (gpointer) this); #else g_signal_connect (G_OBJECT (yidget), "tap-and-hold", G_CALLBACK (tap_and_hold_cb), (gpointer) this); #endif #endif gshow(widget); } bool Board::hasGame() { return(mygame!=0); } Board::~Board() { unsigned int i; global.debug("Board","~Board"); if (mygame!=NULL) if (mygame->getBoard() == this) mygame->setBoard(NULL); global.removeBoard(this); global.removePieceClient(this); for(i=0;i= 0) gtk_timeout_remove(AnimationTimeout); } void Board::reloadFonts() { clock_ch=1; queueRepaint(); } /* Resets the board state regarding any previous game played here. This method is called by the protocol classes when a new game is being attached to the board (e.g. when a engine is run, when a new game starts on FICS, etc. */ void Board::reset() { unsigned int i; global.debug("Board","reset"); while(gotAnimationLoop) global.WrappedMainIteration(); if (mygame) { if ( (mygame->getBoard() == this) && (mygame->isOver()) ) mygame->setBoard(0); } update_queue=false; while(!UpdateStack.empty()) UpdateStack.pop(); sp=0; mygame=0; premoveq=0; flipped=false; clock_ch=1; hilite_ch=1; allowMove=true; dr_active=false; LockAnimate=0; FlipInvert=false; for(i=0;i<6;i++) info[i].erase(); clock.setMirror(0); clock.setClock2(0,0,0,1); currently_rendered.invalidate(); position.setStartPos(); for(i=0;ipretendPaneChanged(); } void Board::show() { // already called on creation } void Board::setSensitive(bool state) { canselect=state; if ((!canselect)&&(sp)) { sp=0; hilite_ch=1; queueRepaint(); } } void Board::clearSel() { if (sp) { sp=0; hilite_ch=1; queueRepaint(); } } void Board::setSelColor(int color) { sel_color=color; if (sp) { hilite_ch=1; queueRepaint(); } } void Board::setFlipped(bool flip) { bool ov; ov=flipped; flipped=flip; if (flipped!=ov) { currently_rendered.invalidate(); clock_ch=1; queueRepaint(); } } void Board::supressNextAnimation() { ++LockAnimate; } void Board::updateClock() { if (yidget->window) { clock_ch=1; renderClock(); gdk_draw_pixmap(yidget->window, yidget->style->fg_gc[GTK_WIDGET_STATE (yidget)], clkbar, 0, 0, Width(), 0,250, Height()); if (dr_active) board_motion_event(widget,&LastMotionEvent,(gpointer) this); } } void RootBoard::clockString(int val,char *z,int maxlen) { static char *minus = "-"; int cv,mr,neg,H,M,S; cv=val; if (cv<0) { cv=-cv; neg=1; } else neg=0; mr = cv%1000; cv /= 1000; H=cv/3600; M=(cv-3600*H)/60; S=(cv-3600*H)%60; if (H) { snprintf(z,maxlen,"%s%d:%.2d:%.2d", neg?minus:&minus[1],H,M,S); } else { if (mr && M==0) snprintf(z,maxlen,"%s%.2d:%.2d.%.3d", neg?minus:&minus[1],M,S,mr); else snprintf(z,maxlen,"%s%.2d:%.2d", neg?minus:&minus[1],M,S); } } void Board::repaint() { global.debug("Board","repaint"); WidgetProxy::repaint(); } void Board::renderClock() { GdkGC *gc=clkgc; int i,j,k,sq,bh,ch,th; char z[64]; bool ef, lowtime=false; if (!clock_ch) return; if (mygame) if (mygame->AmPlaying) lowtime=clock.lowTimeWarning(mygame->MyColor); sq=sqside; C.prepare(widget,clkbar,gc,0,0,250,sqh); C.setColor(0); C.drawRect(0,0,C.W,C.H,true); C.H = Height(); C.setFont(0,global.PlayerFont); C.setFont(1,global.ClockFont); C.setFont(2,global.InfoFont); ch = C.fontHeight(1); th = C.fontHeight(0); bh = ch + th; if (sq*3 < bh) { C.setFont(0,global.InfoFont); C.setFont(1,global.InfoFont); C.setFont(2,global.InfoFont); ch = C.fontHeight(1); th = C.fontHeight(0); bh = ch + th; } // draw the clock time and White/Black labels ef=effectiveFlip(); if (ef) i= C.H - bh; else i = 0; j=16; C.setColor(0xffffff); if (clock.getActive()>0) { if (lowtime) C.setColor(0xff8080); C.drawRect(15, i, 200-30, bh+4, true); C.setColor(0); } C.drawString(j,i,0,_("Black")); clockString(clock.getValue2(1),z,64); C.drawString(j,i+th,1,z); if (ef) i=0; else i= C.H - bh; C.setColor(0xffffff); if (clock.getActive()<0) { if (lowtime) C.setColor(0xff8080); C.drawRect(15, i, 200-30, bh+4, true); C.setColor(0); } C.drawString(j,i,0,_("White")); clockString(clock.getValue2(0),z,64); C.drawString(j,i+th,1,z); C.consumeTop(bh+10); C.consumeBottom(bh+10); // if we have enough space, render player names too if ( (mygame) && (C.H > 2*th) ) { C.setColor(0xffffff); C.drawString(j,C.Y,0, mygame->getPlayerString(ef?0:1) ); C.drawString(j,C.Y + C.H - th,0, mygame->getPlayerString(ef?1:0) ); C.consumeTop(th+8); C.consumeBottom(th+8); } cleanTargets(); // now render the information lines if (mygame) { C.setColor(0xffffff); for(k=0;k<5;k++) { if (C.H < 16) break; C.drawString(j, C.Y, 2, info[k] ); C.consumeTop(16); } // house string is info[5] if (!info[5].empty()) { if ((!global.DrawHouseStock)||(C.H < 96)||(EditMode)) { if (C.H >= 16) { C.drawString(j,C.Y,2,info[5]); C.consumeTop(16); } } else { // draw pieces in stock piece pk[5]={PAWN,ROOK,KNIGHT,BISHOP,QUEEN}; int st[5][2]; int si,sj,we,be; // build stock info from string for(si=0;si<5;si++) { st[si][0]=st[si][1]=0; } sj=0; k=info[5].length(); for(i=0;iside + 8; if (ef) { we=0; be=eph; } else { we=eph; be=0; } fh2 = C.fontHeight(2); if (!global.UseVectorPieces) phs = cur->side/2; my=2*eph; C.setColor(0x505050); for(si=2;si0xc0) lv=0xc0; lv=0xc0-lv; lv=(lv<<16)|(lv<<8)|lv; C.setColor(lv); C.drawLine(5,C.Y+si,235,C.Y+si); } C.setColor(0x555555); for(si=0;si<5;si++) C.drawLine(40*(si+1),C.Y+2,40*(si+1),C.Y+my+1); for(si=0;si<5;si++) { if (st[si][0]) { if (global.UseVectorPieces) global.vpieces.drawPiece(clkbar,gc,40,40*si,C.Y+we,pk[si]|WHITE); else cur->drawPiece(pk[si]|WHITE,clkbar,gc,40*si+20-phs, C.Y+we); snprintf(z,64,"%d",st[si][0]); pcsw = C.stringWidth(2,z); shadyText(40*si+20-pcsw/2, C.Y+eph+we-fh2, 2, z); if (mygame->MyColor==WHITE) addTarget(new DropSource(pk[si]|WHITE,Width()+40*si,C.Y+we,40,eph)); /* C.setColor(0xffff00); C.drawRect(40*si,C.Y+we,40,eph,false); */ } if (st[si][1]) { if (global.UseVectorPieces) global.vpieces.drawPiece(clkbar,gc,40,40*si,C.Y+be,pk[si]|BLACK); else cur->drawPiece(pk[si]|BLACK,clkbar,gc,40*si+20-phs, C.Y+be); snprintf(z,64,"%d",st[si][1]); pcsw = C.stringWidth(2,z); shadyText(40*si+20-pcsw/2, C.Y+eph+be-fh2, 2, z); if (mygame->MyColor==BLACK) addTarget(new DropSource(pk[si]|BLACK,Width()+40*si,C.Y+be,40,eph)); /* C.setColor(0xffff00); C.drawRect(40*si,C.Y+be,40,eph,false); */ } } // for C.consumeTop(2*eph+8); } // text | graphic stock } // if !info[5].empty // draw mouse if protocol menu available if (global.protocol) if (global.protocol->getPlayerActions()) { C.setColor(0xffffff); C.drawRect(170,C.Y+8,16,18,true); C.drawLine(177,C.Y+8,177,C.Y+4); C.setColor(0xffcc00); C.drawRect(180,C.Y+8,6,8,true); C.setColor(0); C.drawLine(170,C.Y+16,186,C.Y+16); C.drawLine(175,C.Y+8,175,C.Y+16); C.drawLine(180,C.Y+8,180,C.Y+16); C.consumeTop(20); } } if (C.H > 32 && !EditMode) { if (position.getAnnotation()) { C.consumeTop(16); j=16; C.setColor(0x252535); C.drawRect(j-5,C.Y,170,C.H,true); C.setColor(0x4545ff); C.drawRect(j-5,C.Y,170,C.H,false); C.setColor(0xffffff); C.drawBoxedString(j,C.Y,160,C.H,2, position.getAnnotation(), " "); } } clock_ch=0; } ChessClock * Board::getClock() { return(&clock); } int Board::getClockValue2(bool white) { return(clock.getValue2(white?0:1)); } void Board::setClock2(int wmsecs,int bmsecs,int actv,int cdown) { global.debug("Board","setClock"); clock_ch=1; clock.setClock2(wmsecs,bmsecs,actv,cdown); queueRepaint(); } void Board::shadyText(int x,int y, int f, char *z) { int i,j; C.setColor(0); for(i=-2;i<=3;i++) for(j=-2;j<=2;j++) C.drawString(x+i,y+j,f,z); C.setColor(0x808080); C.drawString(x,y,f,z); C.setColor(0xffffff); C.drawString(x+1,y,f,z); } void Board::freeze() { frozen_lvl++; } void Board::thaw() { frozen_lvl--; if (frozen_lvl < 0) frozen_lvl=0; if ((!frozen_lvl)&&(repaint_due)) { repaint(); repaint_due=false; } } void Board::invalidate() { currently_rendered.invalidate(); queueRepaint(); } void Board::queueRepaint() { global.debug("Board","queueRepaint"); if (frozen_lvl) repaint_due=true; else repaint(); } void Board::setInfo(int idx,char *s) { global.debug("Board","setInfo",s); info[idx%6]=s; clock_ch=1; queueRepaint(); } void Board::setInfo(int idx,string &s) { global.debug("Board","setInfo/2"); info[idx%6] = s; clock_ch=1; queueRepaint(); } void Board::update(bool sndflag) { unsigned int i,rate; AnimatedPiece *ap; Position rpv; bool ef; bool sok=false; global.debug("Board","update"); if (!mygame) return; if ((global.AnimateMoves)&&(gotAnimationLoop)) { update_queue=true; UpdateStack.push(sndflag); return; } position = mygame->getCurrentPosition(); rpv = mygame->getPreviousPosition(); ef=effectiveFlip(); if ((global.HilightLastMove)||(global.AnimateMoves)) { rpv.diff(position,LastMove); if (LockAnimate) --LockAnimate; else if (currently_rendered != position) if ((global.AnimateMoves)&&(gdk_window_is_viewable(yidget->window))) { sok=true; // sound ok fake=position; fake.intersection(rpv); rate = global.SmootherAnimation ? 5 : 3; for(i=0;iPiece, borx+sqside*(7-LastMove[i]->SX), morey+bory+sqside*(LastMove[i]->SY), borx+sqside*(7-LastMove[i]->DX), morey+bory+sqside*(LastMove[i]->DY), rate*LastMove[i]->distance(),sndflag); else ap=new FlatAnimatedPiece(LastMove[i]->Piece, borx+sqside*(LastMove[i]->SX), morey+bory+sqside*(7-LastMove[i]->SY), borx+sqside*(LastMove[i]->DX), morey+bory+sqside*(7-LastMove[i]->DY), rate*LastMove[i]->distance(),sndflag); ap->create(yidget->window,cur,sqside); animes.push_back(ap); } if ((!LastMove.size())&&(sndflag)) global.flushSound(); if ((!animes.empty())&&(!gotAnimationLoop)) { int tag; gotAnimationLoop=1; currently_rendered.invalidate(); board_configure_event(yidget,0,(gpointer)this); if (rate==3) tag=gtk_timeout_add(global.UseVectorPieces?40:70, board_animate,this); else tag=gtk_timeout_add(global.UseVectorPieces?30:40, board_animate,this); AnimationTimeout = tag; } } } if (!global.AnimateMoves) queueRepaint(); /* force redraw of background of dragging */ if (dr_active) dr_step=0; update_queue=false; if ((!sok)&&(global.BeepWhenOppMoves)&&(sndflag)) global.flushSound(); } void Board::sendMove() { global.debug("Board","sendMove"); if ((sp<2)||(!mygame)) return; if ((allowMove)||(FreeMove)) { if (global.effectiveLegalityChecking() && !FreeMove) if (!position.isMoveLegalCartesian(ax[0],ay[0],ax[1],ay[1], mygame->MyColor,mygame->Variant)) { char z[128]; snprintf(z,128,_("Illegal Move %c%d%c%d (Legality Checking On)"), 'a'+ax[0],ay[0]+1,'a'+ax[1],ay[1]+1); global.status->setText(z,15); goto sendmove_cleanup; } position.moveCartesian(ax[0],ay[0],ax[1],ay[1],REGULAR,true); mygame->sendMove(ax[0],ay[0],ax[1],ay[1]); allowMove=false; } else if (global.Premove) { premoveq=1; pmx[0]=ax[0]; pmy[0]=ay[0]; pmx[1]=ax[1]; pmy[1]=ay[1]; pmp=EMPTY; } sendmove_cleanup: sp=0; hilite_ch=1; repaint(); } void Board::setCanMove(bool value) { bool oldv; global.debug("Board","setCanMove"); oldv=allowMove; allowMove=value; // commit premove if any if ((mygame)&&(global.Premove)&&(!oldv)&&(value)&&(premoveq)) { repaint(); if (pmp==EMPTY) { if (position.isMoveLegalCartesian(pmx[0],pmy[0],pmx[1],pmy[1], mygame->MyColor,mygame->Variant)) { position.moveCartesian(pmx[0],pmy[0],pmx[1],pmy[1],REGULAR,true); mygame->sendMove(pmx[0],pmy[0],pmx[1],pmy[1]); } } else { if (position.isDropLegal(pmp,pmx[1],pmy[1], mygame->MyColor,mygame->Variant)) { if (pmp&COLOR_MASK == 0) pmp|=mygame->MyColor; position.moveDrop(pmp, pmx[1], pmy[1]); mygame->sendDrop(pmp, pmx[1], pmy[1]); } } premoveq=0; sp=0; hilite_ch=1; repaint(); } } void Board::stopClock() { clock_ch=1; clock.setClock2(clock.getValue2(0),clock.getValue2(1),0,1); queueRepaint(); } void Board::openMovelist() { global.debug("Board","openMovelist"); if (!mygame) return; mygame->openMoveList(); } void Board::walkBack1() { if (!mygame) return; freeze(); mygame->goBack1(); position= mygame->getCurrentPosition(); setInfo(2,position.getLastMove()); setInfo(4,position.getMaterialString(mygame->Variant)); setInfo(5,position.getHouseString()); queueRepaint(); thaw(); } void Board::walkBackAll() { if (!mygame) return; freeze(); mygame->goBackAll(); position= mygame->getCurrentPosition(); setInfo(2,position.getLastMove()); setInfo(4,position.getMaterialString(mygame->Variant)); setInfo(5,position.getHouseString()); queueRepaint(); thaw(); } void Board::walkForward1() { if (!mygame) return; freeze(); mygame->goForward1(); position= mygame->getCurrentPosition(); setInfo(2,position.getLastMove()); setInfo(4,position.getMaterialString(mygame->Variant)); setInfo(5,position.getHouseString()); queueRepaint(); thaw(); } void Board::walkForwardAll() { if (!mygame) return; freeze(); mygame->goForwardAll(); position=mygame->getCurrentPosition(); setInfo(2,position.getLastMove()); setInfo(4,position.getMaterialString(mygame->Variant)); setInfo(5,position.getHouseString()); queueRepaint(); thaw(); } void Board::drawJoystickCursor(GdkGC *gc) { double arrow[7][2] = { { 0, 0}, {0,90}, {18,68}, {40,108}, { 52,100 }, {30, 63}, {63, 63} }; GdkPoint myarrow[7]; int i; if (jsx >= 0) { for(i=0;i<7;i++) { myarrow[i].x = (gint) (4 + jsx + arrow[i][0] * sqside / 128.0); myarrow[i].y = (gint) (4 + jsy + arrow[i][1] * sqside / 128.0); } gdk_rgb_gc_set_foreground(gc,0x000000); gdk_draw_polygon(yidget->window,gc,TRUE,myarrow,7); for(i=0;i<7;i++) { myarrow[i].x -= 4; myarrow[i].y -= 4; } gdk_rgb_gc_set_foreground(gc,0x00ff00); gdk_draw_polygon(yidget->window,gc,TRUE,myarrow,7); gdk_rgb_gc_set_foreground(gc,0x000000); gdk_draw_polygon(yidget->window,gc,FALSE,myarrow,7); } } void Board::outlineRectangle(GdkGC *gc, int x,int y,int color,int pen) { int i,j,k,X,Y,S; gdk_rgb_gc_set_foreground(gc,color); j=x; k=y; if (effectiveFlip()) j=7-j; else k=7-k; if ((global.UseVectorPieces)||(!cur->extruded)) for(i=0;iwindow,gc,FALSE,borx+j*sqside+i, morey+bory+k*sqside+i, sqside-2*i,sqside-2*i); else { X=borx+j*sqside; Y=morey+bory+k*sqside; S=sqside; gdk_draw_rectangle(yidget->window,gc,TRUE,X,Y,pen,sqside); gdk_draw_rectangle(yidget->window,gc,TRUE,X+S-pen,Y,pen,sqside); gdk_draw_rectangle(yidget->window,gc,TRUE,X,Y,3*pen,pen); gdk_draw_rectangle(yidget->window,gc,TRUE,X+S-3*pen,Y,3*pen,pen); gdk_draw_rectangle(yidget->window,gc,TRUE,X,Y+S-pen,3*pen,pen); gdk_draw_rectangle(yidget->window,gc,TRUE,X+S-3*pen,Y+S-pen,3*pen,pen); } } void Board::drawBall(GdkGC *gc, int x,int y,int color,int radius) { int j,k; j=x; k=y; if (effectiveFlip()) j=7-j; else k=7-k; gdk_rgb_gc_set_foreground(gc,color); gdk_draw_arc(yidget->window,gc,FALSE, borx+j*sqside+sqside/2-radius, morey+bory+k*sqside+sqside/2-radius, radius*2, radius*2, 0, 360*64); } void Board::drop(piece p) { global.debug("Board","drop"); if (!mygame) return; if (p&COLOR_MASK == 0) p|=mygame->MyColor; if ((!allowMove)&&(!FreeMove)) { if (global.Premove) { premoveq=1; pmx[0]=-1; pmx[1]=dropsq[0]; pmy[1]=dropsq[1]; pmp=p; } else return; } else { if ((global.CheckLegality)&&(!FreeMove)) if (!position.isDropLegal(p&PIECE_MASK, dropsq[0], dropsq[1], mygame->MyColor,mygame->Variant)) { char z[128]; snprintf(z,128,_("Illegal Drop on %c%d (Legality Checking On)"), 'a'+dropsq[0],dropsq[1]+1); global.status->setText(z,15); goto drop_cleanup; } position.moveDrop(p, dropsq[0], dropsq[1]); mygame->sendDrop(p, dropsq[0], dropsq[1]); } drop_cleanup: sp=0; hilite_ch=1; repaint(); } // for crazyhouse/bughouse void Board::popupDropMenu(int col,int row,int sx,int sy,guint32 etime) { GtkWidget *popmenu; GtkWidget *mi[7]; Position pos; int i; char z[64]; // sanity checks if (!allowMove) return; if (!mygame) return; if (mygame->isOver()) return; if ( (mygame->Variant != CRAZYHOUSE)&&(mygame->Variant != BUGHOUSE) ) return; dropsq[0]=col; dropsq[1]=row; popmenu=gtk_menu_new(); pos=mygame->getLastPosition(); mi[0]=gtk_menu_item_new_with_label(_("Drop Piece:")); gtk_widget_set_sensitive(mi[0],FALSE); mi[1]=gtk_separator_menu_item_new(); snprintf(z,64,_("Pawn %d"),i=pos.getStockCount(PAWN|mygame->MyColor)); mi[2]=gtk_menu_item_new_with_label(z); if (!i) gtk_widget_set_sensitive(mi[2],FALSE); snprintf(z,64,_("Rook %d"),i=pos.getStockCount(ROOK|mygame->MyColor)); mi[3]=gtk_menu_item_new_with_label(z); if (!i) gtk_widget_set_sensitive(mi[3],FALSE); snprintf(z,64,_("Knight %d"),i=pos.getStockCount(KNIGHT|mygame->MyColor)); mi[4]=gtk_menu_item_new_with_label(z); if (!i) gtk_widget_set_sensitive(mi[4],FALSE); snprintf(z,64,_("Bishop %d"),i=pos.getStockCount(BISHOP|mygame->MyColor)); mi[5]=gtk_menu_item_new_with_label(z); if (!i) gtk_widget_set_sensitive(mi[5],FALSE); snprintf(z,64,_("Queen %d"),i=pos.getStockCount(QUEEN|mygame->MyColor)); mi[6]=gtk_menu_item_new_with_label(z); if (!i) gtk_widget_set_sensitive(mi[6],FALSE); for(i=0;i<7;i++) { gshow(mi[i]); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi[i]); } gtk_signal_connect(GTK_OBJECT(mi[2]),"activate", GTK_SIGNAL_FUNC(drop_callbackP), (gpointer)this); gtk_signal_connect(GTK_OBJECT(mi[3]),"activate", GTK_SIGNAL_FUNC(drop_callbackR), (gpointer)this); gtk_signal_connect(GTK_OBJECT(mi[4]),"activate", GTK_SIGNAL_FUNC(drop_callbackN), (gpointer)this); gtk_signal_connect(GTK_OBJECT(mi[5]),"activate", GTK_SIGNAL_FUNC(drop_callbackB), (gpointer)this); gtk_signal_connect(GTK_OBJECT(mi[6]),"activate", GTK_SIGNAL_FUNC(drop_callbackQ), (gpointer)this); gtk_menu_popup(GTK_MENU(popmenu),0,0,0,0,3,etime); } void Board::popupProtocolMenu(int x,int y, guint32 etime) { GtkWidget *mi, *popmenu; vector *v; char z[64]; unsigned int i; if (!global.protocol) return; if (!mygame) return; if (global.protocol->getPlayerActions() == NULL) return; popmenu=gtk_menu_new(); PopupOwner = this; // players v=global.protocol->getPlayerActions(); for(i=0;isize();i++) { snprintf(z,64,"%s: %s",mygame->PlayerName[0], ((*v)[i])->c_str() ); mi=gtk_menu_item_new_with_label(z); gshow(mi); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi); gtk_signal_connect(GTK_OBJECT(mi),"activate", GTK_SIGNAL_FUNC(menu_whitep), (gpointer) ( (*v)[i] ) ); } mi=gtk_separator_menu_item_new(); gshow(mi); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi); for(i=0;isize();i++) { snprintf(z,64,"%s: %s",mygame->PlayerName[1], ((*v)[i])->c_str() ); mi=gtk_menu_item_new_with_label(z); gshow(mi); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi); gtk_signal_connect(GTK_OBJECT(mi),"activate", GTK_SIGNAL_FUNC(menu_blackp), (gpointer) ( (*v)[i] ) ); } if (global.protocol->getGameActions() != 0) { mi=gtk_separator_menu_item_new(); gshow(mi); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi); v=global.protocol->getGameActions(); for(i=0;isize();i++) { snprintf(z,64,_("Game #%d: %s"),mygame->GameNumber, ((*v)[i])->c_str() ); mi=gtk_menu_item_new_with_label(z); gshow(mi); gtk_menu_shell_append(GTK_MENU_SHELL(popmenu),mi); gtk_signal_connect(GTK_OBJECT(mi),"activate", GTK_SIGNAL_FUNC(menu_gamep), (gpointer) ( (*v)[i] ) ); } } #if MAEMO gtk_menu_popup(GTK_MENU(popmenu),0,0,0,0,1,etime); #else gtk_menu_popup(GTK_MENU(popmenu),0,0,0,0,3,etime); #endif } gboolean board_joycursor(gpointer data) { Board *me; static double accel[5] = { 0.2, 0.4, 0.8, 1.2, 1.5 }; static int acc = 0; static Timestamp prev; Timestamp cur; double elapsed; me = (Board *) data; cur = Timestamp::now(); if (me->jsx < 0) { me->jsx = me->sqw / 2; me->jsy = me->sqh / 2; acc = 0; } else { elapsed = cur-prev; if (elapsed < 0.50 && me->jsnt==0) { me->jsx += (int) (accel[acc] * global.JSSpeed * 5.0 * (me->jsvx / 32768.0) * (elapsed/0.060)); me->jsy += (int) (accel[acc] * global.JSSpeed * 5.0 * (me->jsvy / 32768.0) * (elapsed/0.060)); if (me->jsx < 0) me->jsx = 0; if (me->jsx > me->sqw) me->jsx = me->sqw; if (me->jsy < 0) me->jsy = 0; if (me->jsy > me->sqh) me->jsy = me->sqh; ++acc; if (acc>4) acc=4; me->queueRepaint(); } } if (me->jsnt!=0) acc=0; me->jsnt = 0; prev = cur; if (global.JSMode!=1) { me->jstid = -1; return FALSE; } else return TRUE; } void Board::joystickCursor(int axis, int value) { // continuous cursor if (global.JSMode == 1) { if (axis==0) jsvx = value; if (axis==1) jsvy = value; if (jstid<0 && (jsvx!=0 || jsvy!=0)) { jsnt = 1; jstid = gtk_timeout_add(60,board_joycursor,(gpointer) this); } else if (jstid>=0 && (jsvx==0 && jsvy==0)) { gtk_timeout_remove(jstid); jstid = -1; } } if (effectiveFlip()) value = -value; if (value < 0) value = -1; if (value > 0) value = 1; if (jx < 0) { jx = 3; jy = 3; queueRepaint(); } else { switch(axis) { case 0: // X if (jpxv != value) { if (value < 0) jx--; if (jx<0) jx=0; if (value > 0) jx++; if (jx>7) jx=7; jpxv = value; } break; case 1: // Y if (jpyv != value) { if (value < 0) jy++; if (jy>7) jy=7; if (value > 0) jy--; if (jy<0) jy=0; jpyv = value; } break; } queueRepaint(); } } void Board::joystickSelect() { int x,y; if (global.JSMode == 0) { x = jx; y = jy; if (sp > 1) sp=0; if ( (sp == 1) && (x==ax[0]) && (y==ay[0]) ) sp=0; else { if ((sp == 1) && ( (position.getPiece(ax[0],ay[0])&COLOR_MASK) == (position.getPiece(x,y)&COLOR_MASK)) && (position.getPiece(x,y)!=EMPTY) && (allowMove) ) sp=0; ax[sp]=x; ay[sp]=y; ++sp; } if ((sp==2)&&(mygame)) { sendMove(); } else { premoveq=0; hilite_ch=1; repaint(); } } else { GdkEventButton be; be.x = jsx; be.y = jsy; be.button = 1; be.state = GDK_MOD5_MASK; board_button_press_event(widget,&be,this); board_button_release_event(widget,&be,this); } } void Board::dump() { cerr.setf(ios::hex,ios::basefield); cerr.setf(ios::showbase); cerr << "[board " << ((uint64_t) this) << "] "; cerr << "game=[" << ((uint64_t) mygame) << "] "; cerr.setf(ios::dec,ios::basefield); cerr << "paneid=" << getPageId() << endl; } /* callbacks */ void drop_callbackP(GtkMenuItem *item,gpointer data) { Board *b; b=(Board *)data; b->drop(PAWN); } void drop_callbackR(GtkMenuItem *item,gpointer data) { Board *b; b=(Board *)data; b->drop(ROOK); } void drop_callbackN(GtkMenuItem *item,gpointer data) { Board *b; b=(Board *)data; b->drop(KNIGHT); } void drop_callbackB(GtkMenuItem *item,gpointer data) { Board *b; b=(Board *)data; b->drop(BISHOP); } void drop_callbackQ(GtkMenuItem *item,gpointer data) { Board *b; b=(Board *)data; b->drop(QUEEN); } void menu_whitep(GtkMenuItem *item, gpointer data) { Board *me; me=Board::PopupOwner; Board::PopupOwner = 0; if (!me) return; if (!me->mygame) return; if (!global.protocol) return; global.protocol->callPlayerAction(me->mygame->PlayerName[0],(string *) data); } void menu_blackp(GtkMenuItem *item, gpointer data) { Board *me; me=Board::PopupOwner; Board::PopupOwner = 0; if (!me) return; if (!me->mygame) return; if (!global.protocol) return; global.protocol->callPlayerAction(me->mygame->PlayerName[1],(string *) data); } void menu_gamep(GtkMenuItem *item, gpointer data) { Board *me; me=Board::PopupOwner; Board::PopupOwner = 0; if (!me) return; if (!me->mygame) return; if (!global.protocol) return; global.protocol->callGameAction(me->mygame->GameNumber,(string *) data); } void Board::drawCoordinates(GdkPixmap *dest,GdkGC *gc,int side) { bool ef; int i; char z[2]; PangoLayout *pl; PangoFontDescription *pfd; z[1]=0; ef=effectiveFlip(); if ((borx)||(bory)) { gdk_rgb_gc_set_foreground(gc,0); gdk_draw_rectangle(dest,gc,TRUE,0,0,Width(),bory); gdk_draw_rectangle(dest,gc,TRUE,0,Height()-bory,Width(),bory); gdk_draw_rectangle(dest,gc,TRUE,0,0,borx,Height()); gdk_draw_rectangle(dest,gc,TRUE,Width()-borx,0,borx,Height()); } gdk_rgb_gc_set_foreground(gc,0x404040); gdk_draw_rectangle(dest,gc,TRUE,borx,2,side*8,bory-4); gdk_draw_rectangle(dest,gc,TRUE,borx,2+side*8+bory+morey,side*8,bory-4); gdk_draw_rectangle(dest,gc,TRUE,2,bory+1,borx-4,morey+side*8-1); gdk_draw_rectangle(dest,gc,TRUE,2+side*8+borx,bory+1,borx-4,morey+side*8-1); gdk_rgb_gc_set_foreground(gc,0xffffff); pl = gtk_widget_create_pango_layout(widget, NULL); pfd = pango_font_description_from_string(global.InfoFont); pango_layout_set_font_description(pl, pfd); for(i=0;i<8;i++) { z[0]=ef?'h'-i:'a'+i; pango_layout_set_text(pl,z,-1); gdk_draw_layout(dest,gc,borx+side*i+side/2, 2,pl); gdk_draw_layout(dest,gc,borx+side*i+side/2, morey+8*side+bory,pl); z[0]=ef?'1'+i:'8'-i; pango_layout_set_text(pl,z,-1); gdk_draw_layout(dest,gc, 6, bory+morey+side*i+side/2, pl); gdk_draw_layout(dest,gc, side*8+borx+6, bory+morey+side*i+side/2, pl); } pango_font_description_free(pfd); g_object_unref(G_OBJECT(pl)); } void Board::composeVecBoard(GdkGC *gc) { Position *joker; int i,j; global.vpieces.drawSquares(buffer,gc,sqside, borx, bory); if (gotAnimationLoop) joker=&fake; else joker=&position; if (effectiveFlip()) for(i=0;i<8;i++) for(j=0;j<8;j++) global.vpieces.drawPiece(buffer,gc,sqside,borx+i*sqside,bory+j*sqside, joker->getPiece(7-i,j)); else for(i=0;i<8;i++) for(j=0;j<8;j++) global.vpieces.drawPiece(buffer,gc,sqside,borx+i*sqside,bory+j*sqside, joker->getPiece(i,7-j)); if (global.ShowCoordinates) drawCoordinates(buffer,gc,sqside); i=Width(); gdk_rgb_gc_set_foreground(gc,0); gdk_draw_rectangle(buffer,gc,TRUE,0,i,i,sqh-Height()); currently_rendered=*(joker); } void Board::pasteVecBoard() { gdk_draw_pixmap(yidget->window, yidget->style->fg_gc[GTK_WIDGET_STATE (yidget)], buffer, 0, 0, 0, 0,Width(),Height()); } /* ****************************************************************** board_expose_event called on: repaints (both generated by the program and by the windowing system). description: paints straight on window. paints external borders black if window size requires it. Board: If using vectorized pieces, calls [composeVecBoard] to update the [buffer] variable. Paints [buffer] (board) on window. Clock: If [clock_ch] is set, call renderClock. Draws [clkbar] on window. Highlights: Paints highlights, selection, premove indicators straight to window. Dragging: If dragging, call [board_motion_event] to update the dragging buffers. ********************************************************** */ gboolean board_expose_event(GtkWidget *widget,GdkEventExpose *ee, gpointer data) { Board *me; GdkGC *gc; unsigned int i; int w,h,sq,pw,fw,fh; global.debug("Board","board_expose_event"); me=(Board *)data; w=ee->area.width; h=ee->area.height; fw=ee->area.x+ee->area.width; fh=ee->area.y+ee->area.height; sq=me->sqside; if (!me->wgc) me->wgc=gdk_gc_new(widget->window); gc=me->wgc; if (fw> ( me->Width() + 250) ) gdk_draw_rectangle(widget->window,widget->style->black_gc,TRUE, me->Width()+250,0,fw-me->Width()-250,fh); if (fh > me->sqh) { gdk_draw_rectangle(widget->window,widget->style->black_gc,TRUE, 0,me->sqh,fw,fh-me->sqh); fh=me->sqh; } if (fw > me->sqw) fw=me->sqw; pw=fw; if (fw> me->Width() ) pw=me->Width(); // draw board+pieces if (global.UseVectorPieces) me->composeVecBoard(gc); gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], me->buffer, 0, 0, 0, 0,pw,fh); // draw clock if (me->clock_ch) me->renderClock(); gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], me->clkbar, 0, 0, me->Width(), 0,250,fh); // draw highlighted squares if (!me->gotAnimationLoop) if ((me->sp)||(!me->LastMove.empty())||(me->premoveq)||(me->jx>=0)) { if (!me->EditMode) if ((global.HilightLastMove)&&(!me->LastMove.empty())) for(i=0;iLastMove.size();i++) { me->outlineRectangle(gc,me->LastMove[i]->SX,me->LastMove[i]->SY, 0x0000ff,3); me->outlineRectangle(gc,me->LastMove[i]->DX,me->LastMove[i]->DY, 0x0000ff,3); } if (me->sp) for(i=0;i < (unsigned int) (me->sp);i++) me->outlineRectangle(gc,me->ax[i],me->ay[i],me->sel_color,4); if (me->premoveq) { me->outlineRectangle(gc,me->pmx[1],me->pmy[1],0xff0000,3); me->drawBall(gc,me->pmx[1],me->pmy[1],0xff0000,5); if (me->pmx[0]>=0) { me->outlineRectangle(gc,me->pmx[0],me->pmy[0],0xff0000,3); me->drawBall(gc,me->pmx[0],me->pmy[0],0xff0000,5); } } if (global.JSMode==0 && me->jx >= 0) me->outlineRectangle(gc,me->jx,me->jy,0x00ff00,8); if (global.JSMode==1) me->drawJoystickCursor(gc); } /* if dragging... */ if (me->dr_active) { me->dr_step=0; board_motion_event(widget,&LastMotionEvent,data); } return 1; } /* ****************************************************************** board_configure_event called on: resizes, piece changes, program-generated repaints. Updates the [buffer] pixmap. Description: Square size/Pieces: Recalculates square size. Resizes piece set [Board::cur] if needed. Return immediately if dealing with vectorized pieces. Compose [buffer]: Render position to [scrap]. If animating a move, renders [Board::fake], else renders [Board::position]. Copy [scrap] to [buffer]. (X programming gizmo, scrap is an image, buffer is a pixmap, and bitmap pieces can't be rendered on pixmaps directly) Coordinates: Draw coordinates to [buffer] if global.ShowCoordinates set. updates [currently_rendered] to reflect the current situation. ************************************************************* */ gboolean board_configure_event(GtkWidget *widget,GdkEventConfigure *ce, gpointer data) { Board *me; int optimal_square,sq; int ww,wh,i,j; int oldsqw, oldsqh; Position *joker; me=(Board *)data; global.debug("Board","board_configure_event"); gdk_window_get_size(widget->window,&ww,&wh); ww-=200; if ( (ww-2*me->borx) > (wh-2*me->bory) ) { if ( (global.UseVectorPieces) || (! global.pieceset->extruded) ) { optimal_square=(wh - 2 * me->bory)/8; me->morey=0; } else { optimal_square=(int) ((wh - 2 * me->bory)/8.50); me->morey = optimal_square / 2; } } else { optimal_square=(ww - 2 * me->borx)/8; if ( (global.UseVectorPieces) || (! global.pieceset->extruded) ) me->morey = 0; else me->morey = optimal_square / 2; } if (optimal_square < 10) return FALSE; if (me->cur == 0) me->cur=new PieceSet(global.pieceset); if (me->cur->side != optimal_square) { if (me->cur->side != global.pieceset->side) { delete me->cur; me->cur=new PieceSet(global.pieceset); } me->cur->scale(optimal_square); me->currently_rendered.invalidate(); } sq=optimal_square; if (sq!=me->sqside) { me->currently_rendered.invalidate(); me->clock_ch=1; } oldsqw=me->sqw; oldsqh=me->sqh; me->sqside=sq; me->sqw = 2*me->borx + 8 * me->sqside + 1; me->sqh = 2*me->bory + me->morey + 8 * me->sqside + 1; if ((me->currently_rendered == me->position)&&(!me->update_queue)) { return TRUE; } if (oldsqw!= me->sqw || oldsqh != me->sqh) { gdk_pixmap_unref(me->clkbar); gdk_pixmap_unref(me->buffer); if (me->clkgc) { gdk_gc_destroy(me->clkgc); me->clkgc=0; } if (me->scrap) { g_free(me->scrap); me->scrap=0; } me->buffer=gdk_pixmap_new(MainWindow::RefWindow, me->sqw,me->sqh,-1); me->clkbar=gdk_pixmap_new(MainWindow::RefWindow, 250,me->sqh,-1); me->clkgc=gdk_gc_new(me->clkbar); me->scrap=(rgbptr)g_malloc(me->sqw * me->sqh * 3); } memset(me->scrap,0,me->sqw * me->sqh * 3); if (me->UpdateClockAfterConfigure) { me->updateClock(); me->UpdateClockAfterConfigure = false; } if (global.UseVectorPieces) return TRUE; if (me->gotAnimationLoop) joker=&(me->fake); else joker=&(me->position); me->cur->beginQueueing(); if (me->effectiveFlip()) for(i=0;i<8;i++) for(j=0;j<8;j++) me->cur->drawPieceAndSquare(joker->getPiece(7-i,j), me->scrap,me->borx+i*sq, me->morey+me->bory+j*sq,me->sqw, (i+j)%2); else for(i=0;i<8;i++) for(j=0;j<8;j++) me->cur->drawPieceAndSquare(joker->getPiece(i,7-j), me->scrap,me->borx+i*sq, me->morey+me->bory+j*sq,me->sqw, (i+j)%2); me->cur->endQueueing(); // and doing without curly braces just adds to the general perplexity // copy scrap to pixmap buffer gdk_draw_rgb_image(me->buffer,widget->style->black_gc,0,0, me->sqw, me->sqh, GDK_RGB_DITHER_NORMAL,me->scrap,me->sqw*3); if (global.ShowCoordinates) { if (!me->wgc) me->wgc=gdk_gc_new(widget->window); me->drawCoordinates(me->buffer,me->wgc,sq); } me->currently_rendered=*(joker); return TRUE; } /* static bool not_disjoint_intervals(int a, int b, int c, int d) { return( (c<=b) && (d>=a) ); } static bool rects_overlap(int x1,int y1,int w1,int h1, int x2,int y2,int w2,int h2) { return( not_disjoint_intervals(x1,x1+w1, x2, x2+w2) && not_disjoint_intervals(y1,y1+h1, y2, y2+h2) ); } */ static GdkPixmap *GCPbuffer=0; static int gcpw=0,gcph=0; /* *************************************************************** board_motion_event called on: mouse moved during drag, also called by [board_expose_event] depends on all Board::dr_* fields. uses [GCPbuffer] (static to this module) as drawing buffer. Startup Sanity Checking: Return immediately if the after-click timeout hasn't expired [dr_fto], not dragging a piece [dr_active], no event [em], or dragging not with left mouse button. GCPbuffer allocation: If current [GCPbuffer] is smaller than needed, dump the current one and allocate another. Step 0: Prepare background If first call on this drag ([dr_step] = 0), copy [buffer] to [GCPbuffer] Step 1: Erase previous dragging frame Only if not first call on this drag ([dr_step] != 0). copy square from [buffer] to [GCPbuffer], copy clock from [clkbar] to [GCPbuffer] if needed. Extruded sets: be sure to erase enough to cover [PieceSet::height] Step 2: Erase source square Only if dragging from the board (instead of zhouse stock, [dr_fromstock]). Vectorized pieces: draw square and coordinates directly to [GCPbuffer]. Bitmapped pieces: allocate new image (M[0]), draw empty square on it, copy [M[0]] to [GCPbuffer]. Extruded Bitmapped pieces: redraw piece on square right above the source square. Step 3: Draw dragged piece Vectorized pieces: just draw it on [GCPbuffer] Bitmap pieces: paint alpha'ed piece (more comments to come, experimental code) Step 3 1/2: Draw coordinates (bitmap-mode only) Redraw the coordinates (if global.ShowCoordinates set) on [GCPbuffer] Step 4: Commit Draw [GCPbuffer] on window, update Board::dr_* about what has been done, deallocate all local storage as needed. *************************************************************** */ gboolean board_motion_event(GtkWidget *widget, GdkEventMotion *em, gpointer data) { Board *me; GdkGC *gcpgc; int rw,rh; int ww,wh,sw,sh; int sq,he,xc,xr; int bw,bh; if (em!=NULL) { if (!GDK_IS_WINDOW(em->window)) return TRUE; memcpy(&LastMotionEvent,em,sizeof(GdkEventMotion)); } me=(Board *)data; if ((!me->dr_fto)||(!me->dr_active)||(em==NULL)||(!(em->state & GDK_BUTTON1_MASK))) return TRUE; sq=he=me->sqside; if ((me->cur->extruded)&&(!global.UseVectorPieces)) he=me->cur->height; // STEP 0: prepare double buffer for drawing gdk_window_get_size(widget->window,&ww,&wh); if (!me->wgc) me->wgc=gdk_gc_new(widget->window); gcpgc=me->wgc; gdk_rgb_gc_set_foreground(gcpgc,0); sw=ww; sh=wh; if (sw> me->sqw) sw=me->sqw; if (sh> me->sqh) sh=me->sqh; if ( (gcpw < ww)|| (gcph < wh) ) { gcpw=ww; gcph=wh; if (GCPbuffer) gdk_pixmap_unref(GCPbuffer); GCPbuffer=gdk_pixmap_new(widget->window, gcpw, gcph, -1); gdk_draw_rectangle(GCPbuffer,gcpgc,TRUE,0,0,gcpw,gcph); gdk_draw_pixmap(GCPbuffer,gcpgc,me->buffer,0,0,0,0,sw,sh); } else if (! me->dr_step) { gdk_draw_rectangle(GCPbuffer,gcpgc,TRUE,0,0,gcpw,gcph); gdk_draw_pixmap(GCPbuffer,gcpgc,me->buffer,0,0,0,0,sw,sh); } bw=me->Width(); bh=me->Height(); // STEP 1: erase dirty animation square if (me->dr_step) { rw= bw - me->dr_dirty[0]; rh= bh - me->dr_dirty[1]; if (rw > sq) rw = sq; if (rh > he) rh = he; if ((rw>0)&&(rh>0)) gdk_draw_pixmap(GCPbuffer,gcpgc, me->buffer, me->dr_dirty[0],me->dr_dirty[1], me->dr_dirty[0],me->dr_dirty[1], rw,rh); // gdk_rgb_gc_set_foreground(gcpgc,0xffff00); gdk_draw_rectangle(GCPbuffer,gcpgc,TRUE,bw+250,0,ww-(bw+250),wh); gdk_draw_rectangle(GCPbuffer,gcpgc,TRUE,0,bh,bw+250,wh-bh); // gdk_rgb_gc_set_foreground(gcpgc,0); } gdk_draw_pixmap(GCPbuffer, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], me->clkbar, 0, 0, bw, 0,250, bh ); // STEP 2: erase source square (if not dragging from zhouse stock) if (! me->dr_fromstock) { if (global.UseVectorPieces) { gdk_rgb_gc_set_foreground(gcpgc,((me->dr_c+me->dr_r)&0x01)?global.DarkSqColor:global.LightSqColor); gdk_draw_rectangle(GCPbuffer,gcpgc,TRUE, me->borx + me->dr_c*sq, me->morey + me->bory + me->dr_r*sq, sq,sq); gdk_rgb_gc_set_foreground(gcpgc,0); gdk_draw_rectangle(GCPbuffer,gcpgc,FALSE, me->borx + me->dr_c*sq, me->morey + me->bory + me->dr_r*sq, sq,sq); } else { // I only need *3, but glibc has some weird glitches when it // comes to allocating not padded to 32-bit words me->M[0].ensure(sq*he*4); me->cur->drawSquare( (me->dr_c+me->dr_r)&0x01, me->M[0].data , 0, 0, sq ); gdk_draw_rgb_image(GCPbuffer,widget->style->black_gc, me->borx + me->dr_c * sq, me->morey + me->bory + me->dr_r * sq, sq, sq, GDK_RGB_DITHER_NORMAL, me->M[0].data ,3 * sq); // erase upper portion of extruded piece if (me->cur->extruded) { if (me->dr_r > 0) { // there's a square above it me->M[1].ensure(sq*sq*4); xc = me->effectiveFlip() ? 7 - me->dr_c : me->dr_c; xr = me->effectiveFlip() ? me->dr_r - 1 : 8 - me->dr_r ; me->cur->drawPieceAndSquare( me->position.getPiece(xc, xr) , me->M[0].data, 0, 0, sq, ((xc+xr)%2 == 0) ); memcpy(me->M[1].data , me->M[0].data, sq*sq*3); gdk_draw_rgb_image(GCPbuffer,widget->style->black_gc, me->borx + me->dr_c * sq, me->morey + me->bory + (me->dr_r - 1) * sq, sq, sq, GDK_RGB_DITHER_NORMAL,me->M[0].data,3 * sq); } else { // there is nothing above it, just paint it black gdk_draw_rectangle(GCPbuffer,widget->style->black_gc,TRUE, me->borx + me->dr_c * sq, me->bory, sq, me->morey); } } } } // STEP 3: draw dragged piece int dx,dy; int x,y; GdkModifierType state; if (em->is_hint){ x=(int)(em->x); y=(int)(em->y); if (em->window != NULL) { if (GDK_IS_WINDOW(em->window)) gdk_window_get_pointer(em->window, &x, &y, &state); else cout << "[ case 1: em->window is NOT a GDK_WINDOW ]\n"; } else { if (me->widget->window==NULL) { cout << "[ case 3: both window pointers are NULL ]\n"; } else if (GDK_IS_WINDOW(me->widget->window)) gdk_window_get_pointer(me->widget->window, &x, &y, &state); else cout << "[ case 2: me->widget->window is NOT a GDK_WINDOW ]\n"; cout << "[ And this is where it used to print a warning ]\n"; // FIXME } } else { x=(int)(em->x); y=(int)(em->y); } // prevent segfaults (bug sf#459164) if (x < 0) x=0; if (y < 0) y=0; if (x > ww) x=ww; if (y > wh) y=wh; dx = x - me->dr_ox; dy = y - me->dr_oy; // yet more segfault prevention if (dx < 0) { x-=dx; dx=0; } if (dy < 0) { y-=dy; dy=0; } if (global.UseVectorPieces) { global.vpieces.drawPiece((GdkPixmap *)(GCPbuffer), gcpgc,sq,dx,dy,me->dr_p); xr=dy; // } else if (dx+sq > me->Width() ) { } else { // segment-by-segment masked render, piece overlaps clock area if (me->cur->extruded) { xr=dy-he+sq; xc=he-sq; if (xr < 0) { xc+=xr; xr=0; } if (xc > me->morey) { --xc; ++xr; } } else { xc=0; xr=dy; } me->cur->drawPiece(me->dr_p,GCPbuffer,gcpgc,dx,dy); } // STEP 3 1/2: draw coordinates if not in vector mode if ((!global.UseVectorPieces)&&(global.ShowCoordinates)) me->drawCoordinates(GCPbuffer,gcpgc,sq); // STEP 4: commit double buffer to window gdk_draw_pixmap(widget->window,gcpgc,GCPbuffer,0,0,0,0,ww,wh); me->dr_dirty[0]=dx; me->dr_dirty[1]=xr; me->dr_step++; return TRUE; } gboolean board_button_release_event(GtkWidget *widget, GdkEventButton *be, gpointer data) { Board *me; int x,y; bool must_repaint=false; bool drop_from_drag=false; if (be==0) return 0; me=(Board *)data; if ((be->button==1)&&(me->dr_active)) { if (me->dr_step) must_repaint=true; me->dr_active=false; if (me->dr_fromstock) drop_from_drag=true; } if ( (be->x < me->borx) || (be->y < me->morey + me->bory ) ) goto b_rele_nothing; x=((int)(be->x)-me->borx)/me->sqside; y=((int)(be->y)-me->bory-me->morey)/me->sqside; if ((x>7)||(y>7)) goto b_rele_nothing; if (me->effectiveFlip()) x=7-x; else y=7-y; // if (be->button==1) { // piece dragged from stock if (drop_from_drag) { me->dropsq[0]=x; me->dropsq[1]=y; if (me->mygame) { me->drop(me->dr_p); return 1; } } if ( (me->sp==1) && ( (x!=me->ax[0]) || (y!=me->ay[0]) ) ) { me->ax[me->sp]=x; me->ay[me->sp]=y; me->sp=2; if (me->mygame) me->sendMove(); else { me->sp=0; me->hilite_ch=1; me->repaint(); } return 1; } } b_rele_nothing: if (must_repaint) { me->clock_ch=1; me->hilite_ch=1; me->repaint(); } return 1; } gboolean board_button_press_event(GtkWidget *widget,GdkEventButton *be, gpointer data) { Board *me; int x,y; me=(Board *)data; if (be==NULL) return 0; if ((!me->canselect)&&(be->button!=3)) return 1; if ( (be->x < me->borx) || (be->y < me->bory + me->morey ) ) return 1; x=((int)(be->x)- me->borx)/me->sqside; y=((int)(be->y)- me->bory - me->morey )/me->sqside; if ((x<8)&&(y<8)) { me->dr_ox= ((int)(be->x) - me->borx ) % me->sqside; me->dr_oy= ((int)(be->y) - me->bory - me->morey ) % me->sqside; me->dr_c=x; me->dr_r=y; } if ((x>7)||(y>7)) { DropSource *ds; if (be->button == 1) { ds=me->hitTarget((int)(be->x),(int)(be->y)); if (ds!=NULL) { if (ds->dragged) { me->dr_active=true; me->dr_fto=true; me->dr_fromstock=true; me->dr_step=0; me->dr_p=ds->P; me->dr_ox = me->sqside / 2; me->dr_oy = me->sqside / 2; me->dr_c=0; // non-sense me->dr_r=0; } else { EditBoard *eme; eme=(EditBoard *)data; // empty / start pos buttons if ((me->EditMode)&&(me->mygame)) { switch(ds->P) { case EMPTY: me->mygame->editEmpty(); break; case WHITE|BLACK: me->mygame->editStartPos(); break; case WHITE: eme->popRunEngine(ds->X,ds->Y2); break; case BLACK: eme->flipSide(); break; case WASPAWN: eme->getFEN(); break; } } } } } if (be->button == 3) { me->popupProtocolMenu( (int) be->x, (int) be->y, be->time ); } return 1; } if (me->effectiveFlip()) x=7-x; else y=7-y; if (be->button == 1) { if (be->state != GDK_MOD5_MASK) { me->jx = -1; me->jy = -1; me->jpxv = 0; me->jpyv = 0; me->jsx = -1; me->jsy = -1; } me->dr_active=true; me->dr_fto=true; me->dr_fromstock=false; me->dr_step=0; me->dr_p=me->position.getPiece(x,y); if (me->dr_p == EMPTY) me->dr_active=false; if (me->sp > 1) me->sp=0; if ( (me->sp == 1) && (x==me->ax[0]) && (y==me->ay[0]) ) me->sp=0; else { if ((me->sp == 1) && ( (me->position.getPiece(me->ax[0],me->ay[0])&COLOR_MASK) == (me->position.getPiece(x,y)&COLOR_MASK)) && (me->position.getPiece(x,y)!=EMPTY) && (me->allowMove) ) me->sp=0; me->ax[me->sp]=x; me->ay[me->sp]=y; ++(me->sp); } if ((me->sp==2)&&(me->mygame)) { me->sendMove(); } else { me->premoveq=0; me->hilite_ch=1; me->repaint(); } } if ((be->button == 3)&&(me->canselect)) { me->popupDropMenu(x,y,0,0,be->time); } return 1; } gboolean vec_board_animate(gpointer data) { list::iterator li; int not_over=0, nonover=0; Board *me; GdkGC *gc; GdkEventExpose ee; int w,h; int sh0=0,sh1=0; me=(Board *)data; for(li=me->animes.begin();li!=me->animes.end();li++) { if (! (*li)->over() ) nonover++; // to paint overs when nonovers are in the queue if ( (*li)->getSoundHold() ) sh0++; } gc=gdk_gc_new(me->yidget->window); gdk_window_get_size(me->yidget->window,&w,&h); ee.area.width=w; ee.area.height=h; ee.area.x=0; ee.area.y=0; me->composeVecBoard(gc); for(li=me->animes.begin();li!=me->animes.end();li++) if (nonover) { (*li)->step(); global.vpieces.drawPiece(me->buffer,gc,me->sqside, (*li)->getX(),(*li)->getY(),(*li)->getPiece()); } me->pasteVecBoard(); gdk_gc_destroy(gc); // count remaining for(li=me->animes.begin();li!=me->animes.end();li++) { if (! (*li)->over()) not_over++; if ( (*li)->getSoundHold() ) sh1++; } // if none remain, finish them all if (!not_over) { for(li=me->animes.begin();li!=me->animes.end();li++) (*li)->lemming(); me->animes.clear(); } // if there was at least one animation waiting to release the sound // and now there is none, flush the sound stack if ((sh0)&&(!sh1)) global.flushSound(); if (not_over) return TRUE; else { me->gotAnimationLoop=0; me->AnimationTimeout=-1; if (me->update_queue) { me->update(me->UpdateStack.top()); me->UpdateStack.pop(); } me->queueRepaint(); return FALSE; } } gboolean board_animate(gpointer data) { list::iterator li; Board *me; Rect *r; int dy,nonover=0; int sh0=0,sh1=0; global.debug("Board","board_animate"); if (global.UseVectorPieces) return(vec_board_animate(data)); int not_over=0; me=(Board *)data; if (me->cur == NULL) return FALSE; dy=me->cur->side - me->cur->height; for(li=me->animes.begin();li!=me->animes.end();li++) { if (! (*li)->over() ) nonover++; // to paint overs when nonovers are in the queue if ( (*li)->getSoundHold() ) sh0++; } // clear previous frames while(! me->adirty.empty() ) { r=me->adirty.front(); gdk_draw_pixmap(me->yidget->window, me->yidget->style->black_gc, me->buffer, r->x, r->y, r->x, r->y, r->w, r->h); delete r; me->adirty.pop_front(); } // draw current frames for(li=me->animes.begin();li!=me->animes.end();li++) if (nonover) { (*li)->step(); r=new Rect((*li)->getX(), (*li)->getY(), me->cur->side, me->cur->height); me->cur->drawPiece((*li)->getPiece(), me->yidget->window, me->yidget->style->black_gc, r->x, r->y); r->translate(0,dy); me->adirty.push_back(r); } // count remaining for(li=me->animes.begin();li!=me->animes.end();li++) { if (! (*li)->over()) not_over++; if ( (*li)->getSoundHold() ) sh1++; } // if none remain, finish them all if (!not_over) { for(li=me->animes.begin();li!=me->animes.end();li++) (*li)->lemming(); me->animes.clear(); } // if there was at least one animation waiting to release the sound // and now there is none, flush the sound stack if ((sh0)&&(!sh1)) global.flushSound(); if (not_over) return TRUE; else { me->gotAnimationLoop=0; me->AnimationTimeout=-1; if (me->update_queue) { me->update(me->UpdateStack.top()); me->UpdateStack.pop(); } me->queueRepaint(); return FALSE; } } // ------------- targets DropSource::DropSource(piece p, int x1,int y1,int w,int h,bool d) { X=x1; Y=y1; X2=X+w; Y2=Y+h; P=p; dragged = d; } bool DropSource::hit(int x,int y) { return((x>=X)&&(x<=X2)&&(y>Y)&&(yhit(x,y)) return(targets[i]); return NULL; } EditBoard::EditBoard(ChessGame *cg) : Board() { EditMode = true; FreeMove = true; setGame(cg); } static EditBoard *eb_last=0; void eb_runengine_nobm(GtkMenuItem *item,gpointer data) { int *i; EngineProtocol *ep; Position p; if (!eb_last) return; if (!eb_last->mygame) return; i=(int *)data; switch(*i) { case 0: ep=new GnuChess4Protocol(); break; case 1: ep=new CraftyProtocol(); break; case 2: ep=new SjengProtocol(); break; case 3: ep=new XBoardProtocol(); break; default: return; } p=eb_last->mygame->getCurrentPosition(); ep->setInitialPosition(&p); global.chandler->openEngine(ep,0); } void eb_runengine_bm(GtkMenuItem *item,gpointer data) { EngineBookmark *ebm; EngineProtocol *ep; Position p; if (!eb_last) return; if (!eb_last->mygame) return; ebm=(EngineBookmark *)data; if (!ebm) return; switch(ebm->proto) { case 0: ep=new XBoardProtocol(); break; case 1: ep=new CraftyProtocol(); break; case 2: ep=new SjengProtocol(); break; case 3: ep=new GnuChess4Protocol(); break; default: return; } p=eb_last->mygame->getCurrentPosition(); ep->setInitialPosition(&p); global.chandler->openEngine(ep,ebm); } void EditBoard::popRunEngine(int x,int y) { GtkWidget *popmenu, *note=0, *e; vector mi; list::iterator ei; unsigned int i; static int sindex[4]={0,1,2,3}; eb_last=this; popmenu=gtk_menu_new(); mi.push_back(gtk_menu_item_new_with_label("GNU Chess 4...")); mi.push_back(gtk_menu_item_new_with_label("Crafty...")); mi.push_back(gtk_menu_item_new_with_label("Sjeng...")); mi.push_back(gtk_menu_item_new_with_label(_("Generic XBoard Engine..."))); mi.push_back(gtk_separator_menu_item_new()); for(i=0;i<4;i++) gtk_signal_connect(GTK_OBJECT(mi[i]),"activate", GTK_SIGNAL_FUNC(eb_runengine_nobm), (gpointer) (&sindex[i]) ); if (!global.EnginePresets.empty()) { note=gtk_menu_item_new_with_label(_("If you pick a bookmark, the engine\n"\ "will play the next move, ignoring\n"\ "the side setting in the bookmark.")); gtk_widget_set_sensitive(note,FALSE); } for(ei=global.EnginePresets.begin();ei!=global.EnginePresets.end();ei++) { e=gtk_menu_item_new_with_label((*ei)->caption.c_str()); mi.push_back(e); gtk_signal_connect(GTK_OBJECT(e),"activate", GTK_SIGNAL_FUNC(eb_runengine_bm), (gpointer)(*ei)); } if (note) mi.push_back(gtk_separator_menu_item_new()); for(i=0;i 80+48) { i = 32; for(k=0;k<6;k++) { C.drawButton(10+i*k, C.Y, i, i, NULL, 0, 0xffffff, 0x505070); C.drawButton(10+i*k, C.Y+i+8, i, i, NULL, 0, 0xffffff, 0x505070); global.vpieces.drawPiece(clkbar,gc, i, 10+i*k, C.Y,WHITE|(k+1)); global.vpieces.drawPiece(clkbar,gc, i, 10+i*k, C.Y+i+8,BLACK|(k+1)); addTarget(new DropSource(WHITE|(k+1),Width()+10+i*k,C.Y,i,i)); addTarget(new DropSource(BLACK|(k+1),Width()+10+i*k,C.Y+i+8,i,i)); } C.consumeTop(i*2+16); } else if (C.H > 24) { i = 16; for(k=0;k<6;k++) { C.drawButton(10+i*k, C.Y, i, i, NULL, 0, 0xffffff, 0x505070); C.drawButton(10+i*(6+k), C.Y, i, i, NULL, 0, 0xffffff, 0x505070); global.vpieces.drawPiece(clkbar,gc, i, 10+i*k, C.Y,WHITE|(k+1)); global.vpieces.drawPiece(clkbar,gc, i, 10+i*(6+k), C.Y,BLACK|(k+1)); addTarget(new DropSource(WHITE|(k+1),Width()+10+i*k,C.Y,i,i)); addTarget(new DropSource(BLACK|(k+1),Width()+10+i*(6+k),C.Y,i,i)); } C.consumeTop(24); } if (C.H > 28) { j=C.drawButton(10,C.Y,-1,20,_("Empty"),2,0xffffff, 0x505070); addTarget(new DropSource(EMPTY,Width()+10,C.Y,j,20,false)); k=10+j+10; j=C.drawButton(k,C.Y,-1,20,_("Initial Position"),2,0xffffff,0x505070); addTarget(new DropSource(WHITE|BLACK,Width()+k,C.Y,j,20,false)); k+=10+j; j=C.drawButton(k,C.Y,-1,20,_("From FEN"),2,0xffffff,0x505070); addTarget(new DropSource(WASPAWN,Width()+k,C.Y,j,20,false)); C.consumeTop(28); } if (C.H > 20) { j=C.drawButton(10,C.Y,-1,20,_("Run Engine..."), 2,0xffffff,0xa07050); addTarget(new DropSource(WHITE,Width()+10,C.Y,j,20,false)); k=j+20; j+=20+C.stringWidth(2,_("Side to move: ")); C.drawButton( k,C.Y,j-k+10+24,20,NULL,2,0xffffff,0x505070); addTarget(new DropSource(BLACK,Width()+k,C.Y,j-k+10+24,20,false)); C.drawString( k+10, C.Y+2, 2, _("Side to move: ")); C.setColor( mygame->getSideHint() ? 0xffffff : 0); C.drawEllipse( 10+j+3, C.Y+3, 14, 14, true); C.setColor(0xffffff); C.drawEllipse( 10+j+3, C.Y+3, 14, 14, false); C.consumeTop(20); } } void EditBoard::flipSide() { if (mygame) { mygame->setSideHint( ! mygame->getSideHint() ); clock_ch=1; queueRepaint(); } } void EditBoard::getFEN() { (new GetFENDialog(this))->show(); } void EditBoard::applyFEN(string &s) { Position p; p.setFEN(s.c_str()); mygame->editEmpty(); mygame->updatePosition2(p,1,p.sidehint ? 0 : 1, 0,0,"",false); } GetFENDialog::GetFENDialog(EditBoard *_owner) : ModalDialog(N_("Enter FEN Position")) { GtkWidget *v,*hs,*hb,*ok,*cancel; owner=_owner; gtk_window_set_default_size(GTK_WINDOW(widget), 450, 100); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); e=gtk_entry_new(); gtk_box_pack_start(GTK_BOX(v),e,FALSE,TRUE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,TRUE,4); hb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(hb), 5); gtk_box_pack_start(GTK_BOX(v), hb, FALSE, TRUE, 2); ok=gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); cancel=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(cancel,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(hb),cancel,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,cancel,hb,hs,e,v,NULL); setDismiss(GTK_OBJECT(cancel),"clicked"); gtk_signal_connect(GTK_OBJECT(ok),"clicked", GTK_SIGNAL_FUNC(getfen_ok),(gpointer)this); focused_widget=e; } void getfen_ok(GtkWidget *w, gpointer data) { string s; GetFENDialog *me; me=(GetFENDialog *)data; s=gtk_entry_get_text(GTK_ENTRY(me->e)); me->owner->applyFEN(s); me->release(); } // former animate.cc int AnimatedPiece::over() { return(ower<=0); } int AnimatedPiece::getX() { return X; } int AnimatedPiece::getY() { return Y; } piece AnimatedPiece::getPiece() { return Piece; } bool AnimatedPiece::getSoundHold() { return((SoundHold)&&(ower>0)); } // ================================================ // flat implementation // ================================================ FlatAnimatedPiece::FlatAnimatedPiece(piece p,int x0,int y0, int xf,int yf,int s,bool sndhold) : AnimatedPiece() { Piece=p; X0=x0; Y0=y0; XF=xf; YF=yf; steps=s; X=X0; Y=Y0; DX=(XF-X0)/steps; DY=(YF-Y0)/steps; ower=steps; SoundHold=sndhold; } void FlatAnimatedPiece::create(GdkWindow *parent,PieceSet *set,int sqside) { square=sqside; } void FlatAnimatedPiece::lemming() { delete this; } void FlatAnimatedPiece::destroy() { } void FlatAnimatedPiece::step() { if (ower > 1) { X+=DX; Y+=DY; } if (ower==1) { X=XF; Y=YF; } --ower; } eboard-1.1.1.orig/bugpane.h0000644000175000017500000000463510757567572015102 0ustar patrikpatrik/* $Id: bugpane.h,v 1.11 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2006 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef BUGPANE_H #define BUGPANE_H 1 #include "eboard.h" #include "widgetproxy.h" #include "board.h" #include "pieces.h" #include "stl.h" class BareBoard : public WidgetProxy, public RootBoard, public ClockHost, public PieceChangeListener { public: BareBoard(); virtual ~BareBoard(); void setPosition(Position &pos); void setWhite(char *name); void setBlack(char *name); void setClock2(int wmsecs,int bmsecs,int actv,int cdown); virtual void updateClock(); void addPTell(char *text); void update(); void freeze(); void thaw(); ChessClock clock; virtual void pieceSetChanged(); private: string Names[2]; Position position; GdkPixmap *pixbuf; int pixw, pixh; PieceSet *pset; bool upending; int frozen; LayoutBox C; list PTells; void reloadPieceSet(); friend gboolean bareboard_expose(GtkWidget *widget,GdkEventExpose *ee, gpointer data); }; class BugPane : public WidgetProxy { public: BugPane(); void addBugText(char *text); void setPlayerNames(char *white, char *black); void setPosition(Position &pos); void setClock2(int wmsecs,int bmsecs,int actv,int cdown); void freeze(); void thaw(); void reset(); void stopClock(); static string BugTell; private: BareBoard *board; friend void bug_ptell(GtkWidget *b,gpointer data); }; /* friend prototypes */ gboolean bareboard_expose(GtkWidget *widget,GdkEventExpose *ee,gpointer data); void bug_ptell(GtkWidget *b,gpointer data); #endif eboard-1.1.1.orig/forwardn.xpm0000644000175000017500000000102410757567572015645 0ustar patrikpatrik/* XPM */ static char * forwardn_xpm[] = { "24 16 2 1", " c None", ". c #000000", " ", " ", " . . ... ", " .. .. ... ", " ... ... ... ", " .... .... ... ", " ..... ..... ... ", " ............ ... ", " ............ ... ", " ..... ..... ... ", " .... .... ... ", " ... ... ... ", " .. .. ... ", " . . ... ", " ", " "}; eboard-1.1.1.orig/AUTHORS0000644000175000017500000000256310757567572014356 0ustar patrikpatrikeboard authors: Felipe Bergo - bergo@seul.org --- Refurbished Code Parts The piece sets are based on Tim Mann's xboard pieceset rendering (the 108x108 set) The algorithm used to scale piece bitmaps on the fly was taken from Gimp 1.0.4 (http://www.gimp.org) --- Translation Team Starting with eboard 0.7.0, eboard has national language support (NLS), Currently these languages have translations: - Brazilian Portuguese (pt_BR), translation by Felipe Bergo - German (de), translation by Bernhard Bialas - Spanish (es), translation by Ricardo Mones Lastra - Italian (it_IT), translation by Massimo Danieli - Czech (cs), translation by Ales Dolecek To add another language, email me (Felipe), it's fairly simple (for people familiar to eboard), takes some hours and requires no programming skills. If you find errors in the translations, please tell us! note for 0.9.0: translations have not been updated since 0.8.0, so the new dialogs do not have translations yet, I hope to release 0.9.1 soon with updated translations. --- Thanks The users listed below helped out by sending bug reports, important feature requests or otherwise good advice: Daniel Burrows, Mike Hill, Marlon Sandford, Gian-Carlo Pascutto, Joe Haas, Federico Schwindt (OpenBSD audio) Chris Howie Daniel Burrows is packaging eboard for the Debian GNU/Linux distribution and is the author of some of the man pages. eboard-1.1.1.orig/addcons.xpm0000644000175000017500000000112110757567572015434 0ustar patrikpatrik/* XPM */ static char * addcons_xpm[] = { "20 20 4 1", " c None", ". c #FFFFFF", "+ c #000000", "@ c #DDDDDD", " .+. ", " ++++++++++++...+...", " +..........+.+++++.", " +..........+...+...", " +.....@@@@@+ .+. ", " +....+++++++++...+ ", " +....+...........+ ", " +....+@@@@@@@@@@.+ ", " +.+++++++++++++@.+ ", " +.+...........+@.+ ", " +++...........+@.+ ", " +...........+@.+ ", " +...........+@.+ ", " +...........+@.+ ", " +...........++++ ", " +...........+ ", " +...........+ ", " +...........+ ", " +++++++++++++ ", " "}; eboard-1.1.1.orig/treeoth.xpm0000644000175000017500000000053610757567572015504 0ustar patrikpatrik/* XPM */ static char * treeoth_xpm[] = { "14 14 3 1", " c None", ". c #3137D8", "+ c #FFFFFF", " ", " .... ", " ........ ", " ....+++... ", " ...++.++.. ", " .......++... ", " ......++.... ", " .....++..... ", " .....++..... ", " .......... ", " ....++.... ", " ........ ", " .... ", " "}; eboard-1.1.1.orig/proto_p2p.cc0000644000175000017500000004336310757567572015544 0ustar patrikpatrik/* $Id: proto_p2p.cc,v 1.12 2008/02/08 14:25:51 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "eboard.h" #include "protocol.h" #include "position.h" #include "chess.h" #include "global.h" #include "tstring.h" P2PProtocol::P2PProtocol() { tmpbuf = (char *) malloc(2048); Chat.set("C-*"); ProtoGreet.set("P-(*)-(*)-(*)*"); /* (EBOARDP2P)-(software)-(protover) */ NameGreet.set("N-(*)*"); GameProp.set("G-(*)-(*)-(*)-(*)*"); /* amwhite / time / inc / variant */ Accept.set("A-G"); Move.set("M-(*)"); Outcome.set("R-(*)-(*)*"); DrawOffer.set("D-O"); Binder.add(&Chat, &ProtoGreet, &NameGreet, &GameProp, &Accept, &Move, &Outcome, &DrawOffer, NULL); IdSent = IdReceived = false; strcpy(RemotePlayer,"Remote"); strcpy(RemoteSoftware, "Software"); RemoteProtover = 1; pad = 0; GotProp = false; GotDrawProp = SentDrawProp = false; MyGame = 0; } P2PProtocol::~P2PProtocol() { if (tmpbuf) free(tmpbuf); tmpbuf = 0; } bool P2PProtocol::requiresLegalityChecking() { return true; } void P2PProtocol::finalize() { if (pad) { pad->release(); pad = 0; } } void P2PProtocol::hail() { sendId(); } void P2PProtocol::sendId() { char z[128]; if (!IdSent) if (global.network) if (global.network->isConnected()) { snprintf(z,128,"P-(EBOARDP2P)-(eboard %s)-(1)",global.Version); global.network->writeLine(z); snprintf(z,128,"N-(%s)",global.P2PName); global.network->writeLine(z); IdSent = true; } } void P2PProtocol::sendProposal(GameProposal &g) { char z[128]; if (global.network) if (global.network->isConnected()) { snprintf(z,128,"G-(%d)-(%d)-(%d)-(%s)", g.AmWhite ? 0 : 1, g.timecontrol.value[0], g.timecontrol.value[1], ChessGame::variantName(g.Variant)); global.network->writeLine(z); MyProp = g; global.status->setText(_("Game proposal sent."),10); } } void P2PProtocol::acceptProposal() { char z[64]; if (GotDrawProp) { draw(); return; } if (GotProp) { if (MyGame) { global.status->setText(_("Finish the current game first."),10); return; } strcpy(z,"A-G"); if (global.network) if (global.network->isConnected()) global.network->writeLine(z); GotProp = false; createGame(HisProp); } } void P2PProtocol::receiveString(char *netstring) { int j; char *p, z[256], y[128]; j = strlen(netstring); if (j<2) return; if (netstring[1] != '-') return; Binder.prepare(netstring); if (Chat.match()) { global.output->append(Chat.getStarToken(0), global.Colors.PrivateTell, IM_PERSONAL); return; } if (MyGame && Move.match()) { Position cur; int wc, bc; cur = MyGame->getLastPosition(); cur.SANstring(Move.getStarToken(0), y); cur.moveAnyNotation(Move.getStarToken(0), Current.AmWhite ? BLACK : WHITE, Current.Variant); if (Current.AmWhite) snprintf(z,256,"%d. ... %s",MoveNumber,y); else snprintf(z,256,"%d. %s",MoveNumber,y); if (MoveNumber == 1) wc = bc = 1000 * Current.timecontrol.value[0]; else { MyGame->incrementActiveClock(Current.timecontrol.value[1]); wc = bc = CLOCK_UNCHANGED; } MyGame->updatePosition2(cur, MoveNumber, cur.sidehint?0:1, wc, bc, z, true); if (Current.AmWhite) ++MoveNumber; global.BoardList.front()->setCanMove(true); global.opponentMoved(); if (GotDrawProp) pad->resetDrawProp(); GotDrawProp = SentDrawProp = false; return; } if (ProtoGreet.match()) { p = ProtoGreet.getStarToken(0); if (strcmp(p, "EBOARDP2P")!=0) { global.status->setText(_("Protocol mismatch, disconnecting."),10); global.network->close(); return; } p = ProtoGreet.getStarToken(1); memset(RemoteSoftware,0,128); g_strlcpy(RemoteSoftware,p,128); RemoteProtover = atoi(ProtoGreet.getStarToken(2)); if (RemoteProtover < 1) { global.status->setText(_("Protocol mismatch, disconnecting."),10); global.network->close(); return; } snprintf(z,256,"Remote software: %s (eboard/p2p v.%d)", RemoteSoftware,RemoteProtover); global.output->append(z,global.Colors.TextBright,IM_NORMAL); IdReceived = true; sendId(); if (!pad) { pad = new P2PPad(this); pad->show(); } return; } if (NameGreet.match()) { memset(RemotePlayer,0,64); g_strlcpy(RemotePlayer,NameGreet.getStarToken(0),64); snprintf(z,256,"Remote player name: %s", RemotePlayer); global.output->append(z,global.Colors.TextBright,IM_NORMAL); sendId(); return; } if (GameProp.match()) { GameProposal g; int a,b; g.AmWhite = (atoi(GameProp.getStarToken(0)) != 0); a = atoi(GameProp.getStarToken(1)); b = atoi(GameProp.getStarToken(2)); g.timecontrol.setIcs(a,b); g.Variant = ChessGame::variantFromName(GameProp.getStarToken(3)); HisProp = g; GotProp = true; if (pad) pad->setProposal(g); snprintf(z,256,_("Received a game proposal from %s."),RemotePlayer); global.output->append(z,global.Colors.TextBright,IM_NORMAL); return; } if (Accept.match()) { snprintf(z,256,_("%s accepted your game proposal."),RemotePlayer); global.output->append(z,global.Colors.TextBright,IM_NORMAL); createGame(MyProp); return; } if (DrawOffer.match()) { if (SentDrawProp) { draw(); return; } else { char z[128]; pad->setDrawProp(); snprintf(z,128,_("%s offers a draw."),RemotePlayer); global.output->append(z,global.Colors.TextBright,IM_PERSONAL); GotDrawProp = true; GotProp = false; return; } } if (Outcome.match()) { p=Outcome.getStarToken(0); y[0] = *p; p=Outcome.getStarToken(1); y[1] = *p; switch(y[1]) { case 'S': // stalemate gameOver(DRAW, _("Stalemate")); return; case 'N': // no material gameOver(DRAW, _("No material to mate")); return; case 'M': // checkmate gameOver(y[0]=='W'?WHITE_WIN:BLACK_WIN,_("Checkmate")); return; case 'R': // resign gameOver(y[0]=='W'?WHITE_WIN:BLACK_WIN,_("Player resigns")); return; case 'A': //abort gameOver(UNDEF,_("Game Aborted")); return; case 'D': // draw by agreement gameOver(DRAW, _("Drawn by agreement")); return; default: gameOver(UNDEF, _("Unknown result")); return; } } if (strlen(netstring) < 200) snprintf(z,256,"Got garbage: [%s]",netstring); else snprintf(z,256,"Got too much garbage."); global.output->append(z,global.Colors.Engine,IM_NORMAL); } void P2PProtocol::sendUserInput(char *line) { int j; memset(tmpbuf,0,2048); snprintf(tmpbuf,2048,"C-%s> ",global.P2PName); j = strlen(line); strncat(tmpbuf, line, 1900); if (global.network) if (global.network->isConnected()) global.network->writeLine(tmpbuf); } void P2PProtocol::createGame(GameProposal &g) { ChessGame *cg; Position *p; Current = g; cg = new ChessGame(); cg->source = GS_Other; cg->clock_regressive = 1; cg->GameNumber=global.nextFreeGameId(P2P_GAME+1); g_strlcpy(cg->PlayerName[g.AmWhite?0:1],global.P2PName,64); g_strlcpy(cg->PlayerName[g.AmWhite?1:0],RemotePlayer,64); cg->MyColor = g.AmWhite ? WHITE : BLACK; cg->Rated = 0; cg->Variant = g.Variant; cg->timecontrol = g.timecontrol; cg->AmPlaying = true; global.prependGame(cg); global.BoardList.front()->reset(); cg->setBoard(global.BoardList.front()); global.BoardList.front()->setGame(cg); global.BoardList.front()->pop(); global.BoardList.front()->setCanMove(g.AmWhite); global.BoardList.front()->repaint(); global.BoardList.front()->setFlipped(!g.AmWhite); cg->acknowledgeInfo(); cg->fireWhiteClock(g.timecontrol.value[0], g.timecontrol.value[1]); p = new Position(); cg->updatePosition2(*p,1,p->sidehint ? 0:1, 1000*g.timecontrol.value[0], 1000*g.timecontrol.value[0], "0. startpos"); delete p; global.status->setText(_("Game started!"),10); global.gameStarted(); MyGame = cg; MoveNumber = 1; } void P2PProtocol::sendMove(int x1,int y1,int x2,int y2,int prom) { char move[7], xm[12], san[16], xsan[20]; piece pp; Position cur; int wc,bc; global.debug("P2PProtocol","sendMove"); if (!MyGame) return; pp = prom ? global.promotion->getPiece() : EMPTY; cur = MyGame->getLastPosition(); if (!cur.isMoveLegalCartesian(x1,y1,x2,y2, Current.AmWhite?WHITE:BLACK, Current.Variant)) { global.status->setText(_("Illegal move, not sent."), 10); return; } cur.stdNotationForMove(x1,y1,x2,y2,pp,san,MyGame->Variant); cur.moveCartesian(x1,y1,x2,y2,MyGame->Variant,true); if (Current.AmWhite) snprintf(xsan,20,"%d. %s",MoveNumber,san); else snprintf(xsan,20,"%d. ... %s",MoveNumber,san); if (MoveNumber == 1) wc = bc = 1000 * Current.timecontrol.value[0]; else { wc = bc = CLOCK_UNCHANGED; MyGame->incrementActiveClock(Current.timecontrol.value[1]); } if (!Current.AmWhite) ++MoveNumber; MyGame->updatePosition2(cur,MoveNumber, cur.sidehint ? 0:1, wc,bc, xsan); /* -- */ move[4]=0; move[5]=0; move[6]=0; move[0]='a'+x1; move[1]='1'+y1; move[2]='a'+x2; move[3]='1'+y2; if (prom) { pp=global.promotion->getPiece(); move[4]='='; switch(pp) { case QUEEN: move[5]='Q'; break; case ROOK: move[5]='R'; break; case BISHOP: move[5]='B'; break; case KNIGHT: move[5]='N'; break; case KING: move[5]='K'; break; } } snprintf(xm,12,"M-(%s)",move); global.network->writeLine(xm); global.BoardList.front()->setCanMove(false); /* check if move ends the game */ if (cur.isStalemate(Current.AmWhite?BLACK:WHITE,Current.Variant)) { snprintf(xm,12,"R-(D)-(S)"); global.network->writeLine(xm); gameOver(DRAW, _("Stalemate")); return; } if (cur.isNMDraw(Current.Variant)) { snprintf(xm,12,"R-(D)-(N)"); global.network->writeLine(xm); gameOver(DRAW, _("No material to mate")); return; } if (cur.isMate(Current.AmWhite?BLACK:WHITE,Current.Variant)) { snprintf(xm,12,"R-(%c)-(M)", Current.AmWhite?'W':'B'); global.network->writeLine(xm); gameOver(Current.AmWhite?WHITE_WIN:BLACK_WIN, _("Checkmate")); return; } if (GotDrawProp) pad->resetDrawProp(); GotDrawProp = SentDrawProp = false; } void P2PProtocol::gameOver(GameResult gr, char *desc) { char z[256]; if (!MyGame) return; MyGame->endGame(desc, gr); snprintf(z,256,_("Game over: %s"), desc); global.output->append(z, global.Colors.TextBright, IM_NORMAL); if (global.AppendPlayed) { if (MyGame->savePGN(global.AppendFile,true)) { snprintf(z,256,_("Game appended to %s"),global.AppendFile); global.status->setText(z,10); } } if ((gr==WHITE_WIN && Current.AmWhite)|| (gr==BLACK_WIN && !Current.AmWhite)) global.gameWon(); if ((gr==WHITE_WIN && !Current.AmWhite)|| (gr==BLACK_WIN && Current.AmWhite)) global.gameLost(); MyGame = 0; GotDrawProp = SentDrawProp = false; } void P2PProtocol::resign() { char z[64]; if (MyGame) { snprintf(z,64,"R-(%c)-(R)",Current.AmWhite?'B':'W'); global.network->writeLine(z); gameOver(Current.AmWhite?BLACK_WIN:WHITE_WIN,_("Player resigns")); } } void P2PProtocol::draw() { char z[128]; if (GotDrawProp) { gameOver(DRAW,_("Drawn by agreement")); global.network->writeLine("R-(D)-(D)"); } else { global.network->writeLine("D-O"); SentDrawProp = true; g_strlcpy(z,_("Draw offer sent."),128); global.status->setText(z,5); } } void P2PProtocol::adjourn() { global.status->setText("Adjournment is not supported.",10); } void P2PProtocol::abort() { char z[64]; if (MyGame) { snprintf(z,64,"R-(D)-(A)"); global.network->writeLine(z); gameOver(UNDEF,_("Game Aborted")); } } char * P2PProtocol::getRemotePlayer() { return(RemotePlayer); } /* =================================== */ P2PPad::P2PPad(P2PProtocol *_proto) : NonModalDialog("Direct Connection") { GtkWidget *v, *t, *f, *h, *match, *f2, *v2, *h2; int i; proto = _proto; setCloseable(false); PropIsDraw = false; v = gtk_vbox_new(FALSE, 2); gtk_container_add(GTK_CONTAINER(widget), v); t = gtk_table_new(4,4,FALSE); gtk_table_set_row_spacings(GTK_TABLE(t), 4); gtk_table_set_col_spacings(GTK_TABLE(t), 4); gtk_container_set_border_width(GTK_CONTAINER(t), 4); f = gtk_frame_new(_("Propose Game")); gtk_frame_set_shadow_type(GTK_FRAME(f), GTK_SHADOW_ETCHED_IN); gtk_container_set_border_width(GTK_CONTAINER(f), 4); gtk_box_pack_start(GTK_BOX(v), f, TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(f), t); bl[0] = new BoxedLabel(_("Your color:")); bl[1] = new BoxedLabel(_("Initial time ([mm:]ss):")); bl[2] = new BoxedLabel(_("Increment (secs):")); color = new DropBox(_("White"), _("Black"),NULL); wtime = gtk_entry_new_with_max_length(8); winc = gtk_entry_new_with_max_length(4); gtk_entry_set_text(GTK_ENTRY(wtime),"45:00"); gtk_entry_set_text(GTK_ENTRY(winc),"0"); gtk_table_attach_defaults(GTK_TABLE(t), bl[0]->widget, 0,1, 0,1); gtk_table_attach_defaults(GTK_TABLE(t), color->widget, 1,2, 0,1); gtk_table_attach_defaults(GTK_TABLE(t), bl[1]->widget, 0,1, 1,2); gtk_table_attach_defaults(GTK_TABLE(t), wtime, 1,2, 1,2); gtk_table_attach_defaults(GTK_TABLE(t), bl[2]->widget, 0,1, 2,3); gtk_table_attach_defaults(GTK_TABLE(t), winc, 1,2, 2,3); h=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(h), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(h), 5); gtk_table_attach_defaults(GTK_TABLE(t), h, 0,2, 3,4); match = gtk_button_new_with_label(_("Propose")); gtk_box_pack_start(GTK_BOX(h), match, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(match),"clicked", GTK_SIGNAL_FUNC(p2ppad_propose), (gpointer) this); color->show(); for(i=0;i<3;i++) bl[i]->show(); f2 = gtk_frame_new(_("Last Proposal Received")); gtk_frame_set_shadow_type(GTK_FRAME(f2), GTK_SHADOW_ETCHED_IN); gtk_container_set_border_width(GTK_CONTAINER(f2), 4); gtk_box_pack_start(GTK_BOX(v), f2, TRUE, TRUE, 2); v2 = gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(f2), v2); wprop = gtk_label_new(_("No proposals received.")); gtk_label_set_justify(GTK_LABEL(wprop), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(v2), wprop, TRUE, TRUE, 2); h2=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(h2), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(h2), 5); gtk_box_pack_start(GTK_BOX(v2), h2, FALSE, TRUE, 2); wacc = gtk_button_new_with_label(_("Accept")); gtk_box_pack_start(GTK_BOX(h2), wacc, TRUE, TRUE, 0); gtk_widget_set_sensitive(wacc, FALSE); gtk_signal_connect(GTK_OBJECT(wacc),"clicked", GTK_SIGNAL_FUNC(p2ppad_accept), (gpointer) this); Gtk::show(wtime,winc,f,t,h,match, wacc, h2, wprop, v2, f2, v, NULL); } P2PPad::~P2PPad(){ int i; for(i=0;i<3;i++) delete(bl[i]); delete color; } void P2PPad::setProposal(GameProposal &g) { char z[512]; snprintf(z,512,_("%s (white) vs. %s (black)\n%s\n%d:%.2d %d"), g.AmWhite ? global.P2PName : proto->getRemotePlayer(), (!g.AmWhite) ? global.P2PName : proto->getRemotePlayer(), ChessGame::variantName(g.Variant), g.timecontrol.value[0] / 60, g.timecontrol.value[0] % 60, g.timecontrol.value[1]); gtk_widget_set_sensitive(wacc, TRUE); gtk_label_set_text(GTK_LABEL(wprop), z); gtk_widget_queue_resize(wprop); gtk_widget_queue_resize(widget); PropIsDraw = false; } void P2PPad::setDrawProp() { char z[128]; snprintf(z,128,_("%s offers a draw."),proto->getRemotePlayer()); gtk_widget_set_sensitive(wacc, TRUE); gtk_label_set_text(GTK_LABEL(wprop), z); gtk_widget_queue_resize(wprop); gtk_widget_queue_resize(widget); PropIsDraw = true; global.drawOffered(); } void P2PPad::resetDrawProp() { clearProposal(); } void P2PPad::clearProposal() { char z[64]; g_strlcpy(z,_("No proposals left."),64); gtk_widget_set_sensitive(wacc, FALSE); gtk_label_set_text(GTK_LABEL(wprop), z); gtk_widget_queue_resize(wprop); gtk_widget_queue_resize(widget); PropIsDraw = false; } void p2ppad_accept(GtkWidget *w, gpointer data) { P2PPad *me = (P2PPad *) data; if (global.protocol) me->proto->acceptProposal(); me->clearProposal(); } void p2ppad_propose(GtkWidget *w, gpointer data) { P2PPad *me = (P2PPad *) data; GameProposal g; char z[64]; int T,a,b; tstring t; string *p; t.set(gtk_entry_get_text(GTK_ENTRY(me->wtime))); a = 0; while((p=t.token(":"))!=0) a = (60*a) + atoi(p->c_str()); b = atoi(gtk_entry_get_text(GTK_ENTRY(me->winc))); g.timecontrol.setIcs(a,b); g.Variant = REGULAR; g.AmWhite = (me->color->getSelection() == 0); if (global.protocol) me->proto->sendProposal(g); } GameProposal::GameProposal() { AmWhite = false; timecontrol.mode = TC_NONE; Variant = REGULAR; } GameProposal GameProposal::operator=(GameProposal &g) { AmWhite = g.AmWhite; timecontrol = g.timecontrol; Variant = g.Variant; } eboard-1.1.1.orig/dgtboard.h0000644000175000017500000000213410757567572015237 0ustar patrikpatrik/* $Id: dgtboard.h,v 1.2 2007/02/01 21:29:39 pierrebou Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DGTBOARD_H #define DGTBOARD_H 1 #include "board.h" #include "mainwindow.h" #include "config.h" void dgtInit(const char *port, MainWindow *z); void dgtSetBoard(Board *b); #endif eboard-1.1.1.orig/eboard.spec.in0000644000175000017500000000217210757567572016017 0ustar patrikpatrik%define ver THEVERSION %define rel 1 %define prefix /usr Summary: A chess board interface for ICS and engines Name: eboard Version: %ver Release: %rel Copyright: GPL Group: X11/Games Source: ftp://ftp.seul.org/pub/chess/eboard/eboard-%{version}.tar.gz URL: http://eboard.sourceforge.net Buildroot: /var/tmp/%{name}-root %description eboard is a GTK+ chess board interface for ICS (Internet Chess Servers) and chess engines (GNU Chess, Crafty, etc.). It also displays games in PGN (Portable Game Notation) format. %prep %setup -q %build %configure ./configure --prefix=%prefix make %install rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install chmod 644 $RPM_BUILD_ROOT/%prefix/man/*/* %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc ChangeLog COPYING INSTALL README TODO Documentation/Crafty.txt Documentation/FICS-Timeseal.txt Documentation/GNUChess4.txt Documentation/GNUChess5.txt Documentation/Scripts.txt Documentation/Sjeng.txt Documentation/Themes.txt %prefix/bin/* %prefix/man/*/* %prefix/share/eboard/* %changelog * Fri May 25 2001 Felipe Bergo - built from the gPS spec eboard-1.1.1.orig/k18.xpm0000644000175000017500000000206410757567572014433 0ustar patrikpatrik/* XPM */ static char * k18_xpm[] = { "18 18 42 1", " c None", ". c #080808", "+ c #000000", "@ c #777777", "# c #A6A6A6", "$ c #323232", "% c #1B1B1B", "& c #F8F8F8", "* c #DCDCDC", "= c #2E2E2E", "- c #8E8E8E", "; c #AAAAAA", "> c #8A8A8A", ", c #313131", "' c #393939", ") c #FFFFFF", "! c #404040", "~ c #959595", "{ c #1C1C1C", "] c #EAEAEA", "^ c #474747", "/ c #E3E3E3", "( c #B8B8B8", "_ c #6A6A6A", ": c #CDCDCD", "< c #787878", "[ c #1A1A1A", "} c #929292", "| c #A3A3A3", "1 c #6C6C6C", "2 c #BFBFBF", "3 c #878787", "4 c #808080", "5 c #717171", "6 c #C6C6C6", "7 c #D4D4D4", "8 c #F1F1F1", "9 c #5F5F5F", "0 c #101010", "a c #090909", "b c #242424", "c c #484848", " ", " .+ ", " ++++ ", " ++ ", " @++# ", " +$+ %&*+ +$# ", " #=-;>,'))+!~;+{ ", " {])))&^/(_)))):+ ", " +)))))]<_&)))))+ ", " +))))))<~)))))&% ", " [})))))|:)))))1+ ", " +>23445<44-61$ ", " +|&)]778)84[ ", " +<44~;;-44+ ", " $~;444444(+ ", " 90-8))))]_a ", " .+b!![+c ", " "}; eboard-1.1.1.orig/multilang/0000755000175000017500000000000010757567572015274 5ustar patrikpatrikeboard-1.1.1.orig/multilang/eboard.fr.dict0000644000175000017500000010661310757567572020012 0ustar patrikpatrikL72 83 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** PNG NON CHARGÉ: utilisation du jeu de pièce interne. Ça va pas être beau.\n L11 14 Browse... Parcourir... L15 20 Play Selected Jouer cette partie L9 12 Refresh Actualiser L14 20 Remove Field Supprimer le champ L5 11 Set Appliquer L1543 1524 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Premiers pas\n#M#Tâches courantes\n\nJouer contre l'ordinateur\n#S#eboard ne "joue" pas a proprement parlé aux échecs mais est une interface pour des "moteurs" tels que GNU Chess, Crafty ou Sjeng (qui sont disponibles gratuitement). Une fois un moteur installé, ouvrez le menu #B#Jeu#K#, puis le sous-menu #B#Jouer contre un moteur#K# et sélectionnez les options appropriées pour ce moteur.\n\n#M#Jouer sur Internet\n#S#eboard supporte le protocole FICS utilisé sur freechess.org. D'autres serveurs, comme US Chess Live, utilisent FICS et devraient fonctionner avec eboard. Pour se connecter au FICS, dans le menu #B#Jeu#K#, cliquez sur #B#Se connecter au FICS#K#. Pour se connecter à d'autres serveurs, dans le menu #B#Jeu#K#, cliquez sur #B#Se connecter à d'autres serveurs#K#. Vous pouvez jouer en tant qu'invité sur FICS mais il est plus plaisant d'être inscrit. L'inscription est gratuite sur le site #B#http://www.freechess.org#K#.\nLe protocole ICC n'est pas supporté\n\n#M#Parcourir des parties PGN\n#S#PGN (Portable Game Notation) est le format le plus répandu pour sauvegarder des parties d'échecs. Les coups et des commentaires peuvent être enregistrés. Pour ouvrir un fichier PGN, dans le menu #B#Fenêtres#K#, choisissez #B#Parties sur le client#K#. Dans la boîte de dialogue, cliquez sur #B#Charger un fichier PGN#K#. Pour afficher une partie, sélectionnez-la et cliquez sur #B#Afficher cette partie#K#. Un nouvel onglet est alors ajouté contenant la partie qui vient d'être chargée.#L# L30 34 %d %s to %s, %d Hz for %d msec %d %s vers %s, %d Hz pendant %d ms L13 15 %d games read %d parties lues L14 14 %d moves in %s %d coups en %s L25 28 %d. Connect to %s:%d (%s) %d. Connection à %s:%d (%s) L41 45 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (Blancs) contre %s (Noirs)\n%s\n%d:%.2d %d L31 35 %s accepted your game proposal. %s a accepté votre demande de jeu. L18 13 %s engine started. %s démarré. L17 18 %s offers a draw. %s propose le nul. L11 11 %s per move %s par coup L7 7 %s/move %s/coup L33 33 (Wrapped) Match Found at Line %d. (Wrapped) Trouvé à la ligne %d L64 64 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (pseudo FICS: Pulga) L39 40 (message obfuscated -- password mode ?) (message refusé -- mode mot de passe ?) L14 16 (no bookmarks) (pas de signets) L6 7 (none) (aucun) L13 7 (time period) (temps) L18 23 * game not found: * partie non trouvée: L47 48 ** [eboard] bad engine protocol # in bookmark: ** [eboard] mauvais protocole # dans le signet: L57 53 ** eboard ** warning: HOME environment variable not set\n ** eboard ** attention: variable HOME non assignée\n L26 49 --- %s game to PGN file %s --- partie %s enregistrée dans le fichier PGN %s L16 16 --- Disconnected --- Déconnecté L14 16 /Game/Ad_journ /Partie/Ajourner L19 32 /Game/Retract _Move /Partie/Annuler le dernier _Coup L12 26 /Game/_Abort /Partie/Arrêter la partie L17 24 /Game/_Offer Draw /Partie/Proposer le _Nul L13 19 /Game/_Resign /Partie/A_bandonner L22 28 /Help/_About eboard... /Hilfe/À propos d'eboard... L17 31 /Help/_Debug Info /Aide/Informations de débogage L22 18 /Help/_Getting Started /Aide/Premiers pas L11 25 /Help/_Keys /Aides/Raccourcis clavier L10 10 /Help/sep4 /Aide/sep4 L22 26 /Peer/Connect to _FICS /Jeu/Se _Connecter au FICS L43 41 /Peer/Direct connect with _Remote eboard... /Jeu/Se connecter à un eboard distant... L23 23 /Peer/Engine B_ookmarks /Jeu/Signets de moteurs L20 16 /Peer/ICS _Bookmarks /Jeu/Signets ICS L36 38 /Peer/Play against Engine/Cr_afty... /Jeu/Jouer contre un moteur/_Crafty... L41 42 /Peer/Play against Engine/GNU Chess _4... /Jeu/Jouer contre un moteur/GNUChess _4... L44 49 /Peer/Play against Engine/_Generic Engine... /Jeu/Jouer contre un moteur/Moteur générique... L35 37 /Peer/Play against Engine/_Sjeng... /Jeu/Jouer contre un moteur/_Sjeng... L30 32 /Peer/Play against Engine/sep1 /Jeu/Jouer contre un moteur/sep1 L26 27 /Peer/Play against _Engine /Jeu/Jouer contre un moteur L33 40 /Peer/_Connect to Other Server... /Jeu/Se connecter à d'autres serveur... L17 18 /Peer/_Disconnect /Jeu/_Déconnexion L26 20 /Peer/_Empty Scratch Board /Jeu/Échiquier vide L11 19 /Peer/_Quit /Jeu/Quitter eboard L42 40 /Peer/_Scratch Board with Initial Position /Jeu/Échiquier avec positions initiales L10 9 /Peer/sep2 /Jeu/sep2 L10 9 /Peer/sep3 /Jeu/sep3 L10 9 /Peer/sep4 /Jeu/sep4 L48 63 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Paramètres/Jeu de pièce bitmap/Charger les pièces seulement L49 61 /Settings/Bitmapped Piece Sets/Load _Squares Only /Paramètres/Jeu de pièce bitmap/Charger les cases seulement L42 51 /Settings/Bitmapped Piece Sets/Load _Theme /Paramètres/Jeu de pièce bitmap/Charger un thème L31 33 /Settings/Bitmapped Piece _Sets /Paramètres/Jeu de pièce bitmap L35 46 /Settings/Enable Legality _Checking /Paramètres/Vérifier la légalité des coups L55 61 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Paramètres/Paramètres ICS/Popup Board Panes _Upon Creation L69 70 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Paramètres/Paramètres ICS/Supprimer l'échiquier d'une partie finie L18 33 /Settings/Pre_move /Paramètres/Coup joué en avance L27 37 /Settings/Sho_w Coordinates /Paramètres/Montrer les coordonnées L24 29 /Settings/_Animate Moves /Paramètres/Animer les coups L33 47 /Settings/_Beep on Opponent Moves /Paramètres/Bipper après coup de l'adversaire L30 34 /Settings/_Enable Other Sounds /Paramètres/Jouer les autres sons L30 38 /Settings/_Highlight Last Move /Paramètres/Surligner le dernier coup L23 28 /Settings/_ICS Behavior /Paramètres/Paramètres ICS L25 29 /Settings/_Preferences... /Paramètres/Préférences... L47 52 /Settings/_Vectorized Pieces (Faster Rendering) /Paramètres/Pièces vectorielles (Affichage rapide) L14 17 /Settings/sep3 /Paramètres/sep3 L23 33 /Windows/Find _Previous /Fenêtres/Rechercher précédent L28 35 /Windows/Games on _Client... /Fenêtres/Parties sur le client... L31 56 /Windows/Save Desktop _Geometry /Fenêtres/Sauvegarder position et taille de la fenêtre L29 41 /Windows/Save _Text Buffer... /Fenêtres/Sauvegarder le buffer texte... L26 37 /Windows/_Ads on Server... /Fenêtres/Annonces sur le serveur... L26 31 /Windows/_Detached Console /Fenêtres/Détacher la console L32 38 /Windows/_Find Text (upwards)... /Fenêtres/Rechercher texte suivant... L28 36 /Windows/_Games on Server... /Fenêtres/Parties sur le serveur... L23 30 /Windows/_Run Script... /Fenêtres/Lancer un script... L13 15 /Windows/sep1 /Fenêtres/sep1 L13 15 /Windows/sep2 /Fenêtres/sep2 L13 15 /Windows/sep3 /Fenêtres/sep3 L6 8 /_Game /_Partie L6 6 /_Help /_Aide L6 5 /_Peer /_Jeu L10 13 /_Settings /Pa_ramètres L9 11 /_Windows /_Fenêtres L106 126 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n\n L41 51 can't load font.\n ne peut charger la police.\n L124 138 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** ne peut charger une ou plusieurs polices - installez les polices 75 et 100 dpi pour X11, redémarrez X, et réessayez.\n L58 60 ** failed to load one or more board fonts\n ** ne peut charger une ou plusieurs polices\n L34 53 abort request sent requête d'arrêt de partie envoyée L36 58 adjourn request sent requête d'ajournement de partie envoyée L33 53 draw request sent proposition de partie nulle envoyée L110 130 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n\n L45 40 ** bad pattern string: ** mauvais motif: L40 45 ** file not found: ** fichier non trouvé: L39 46 failed to load chargement impossible L112 132 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n\n L34 41 failed to load chargement impossible L42 44 Adjourning not supported Ajournement non supporté L46 56 Incompatible Engine Protocol Moteur incompatible avec ce protocole L33 36 Session Aborted Session Arrêtée L35 55 draw request sent Proposition de partie nulle envoyée L9 10 <édition> L17 24 > (password sent) > (mot de passe envoyé) L23 21 > [issued from menu] %s > [depuis le menu] %s L25 23 > [issued from shortcut] > [depuis un raccourci] L31 37 > [script run from shortcut] %s > [script lancé par un raccourci] %s L12 18 About eboard À propos d'eboard L6 8 Accept Accepter L36 34 Accepted incoming connection from %s Connexion entrante de %s acceptée L14 24 Ad Description Description de l'annonce L7 18 Ad List Liste des annonces L23 36 Ad List (refreshing...) Liste des annonces (lise à jour...) L33 30 Add to Peer/Engine Bookmarks menu Ajouter aux signets de moteurs L22 24 Address already in use Adresse déjà utilisée L3 8 Ads Annonces L21 20 Already connected ?!? Déjà connecté ?!? L675 824 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. * Partout:\nF3: Aller au panneau précédent.\nF4: Aller au panneau suivant.\nF5: Aller au panneau principal (Échiquier).\nF6: Aller à la console.\nF7: Aller au panneau de recherche de parties (si disponible).\nF8: Affiche/Enlève la barre des raccourcis.\nPage up/Page down: défile le texte de la console (si celle-ci est affichée)\nCtrl+Gauche: 1 demi-coup en arrière\nCtrl+Droite: 1 demi-coup en avant\nCtrl+F: Rechercher texte suivant (dans la console)\nCtrl+G: Rechercher précédent\n\n* Ligne de commande:\nHaut/Bas: Naviguer dans l'historique des commandes entrées\nEntrée: Envoyer la commande\nEchap: Mode commande / mode bavardage\n\n* Syntaxe:\nSur la ligne de commande de la fenêtre principale:\n.. entrer %prefix assigne le préfixe pour le bavardarge à prefix.\n.. entrer %do lance le script nommé do L10 9 Appearance Apparence L8 8 Appended Ajoutée L5 9 Apply Appliquer L13 25 Apply Changes Appliquer les changements L24 45 Auto-save observed games Sauvegarde automatique des parties observées L22 42 Auto-save played games Sauvegarde automatique des parties jouées L8 22 Autosave Sauvegarde automatique L14 14 Axis & Buttons Axes & Boutons L10 4 Background Fond L14 18 Bad descriptor Mauvais descriptor L45 56 Beep (need Pitch, Duration, Count and Device) Bip (fréquence, durée, répétition et périphérique) L10 11 Bishop %d Fou %d L5 5 Black Noirs L14 14 Black: %s - %s Noirs: %s - %s L119 169 Board Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n 1Axe du curseur de l'échiquier: %d\nBouton de sélection d'échiquier: %d\nAxe de navigation d'échiquier: %d\nBouton onglet précédent: %d\nBouton ongle suivant: %d\n L17 27 Board version :%s Version de l'échiquier :%s L19 29 Board version :%s\n Version de l'échiquier :%s\n L17 14 Bookmark Caption: Nom du signet: L6 3 Bottom Bas L11 15 Bright Text Texte surligné L6 9 Browse Parcourir L19 31 Buffer Save failed. Sauvegarde du buffer échouée. L8 8 Bughouse Bughouse L22 22 Bughouse: Partner Game Bughouse: Partner Game L15 17 Bus address :%s Adresse de bus:%s L16 19 Bus adress :%s\n Adresse de bus %s\n L14 15 Button Caption Texte du bouton L11 5 Button Icon Icone L6 7 Cancel Annuler L29 36 Cancel Joystick Configuration Annuler la configuration du joystick L26 40 Cancelled connection wait. Attente de l'annulation de la connection L15 21 Change Settings Changer les réglages L9 13 Change... Changement... L13 16 Channel Tells Annonce du canal L9 3 Checkmate Mat L14 19 Chess Programs Programmes d'échec L11 17 Choose Font Choisir la police L9 10 Choose... Choisir... L10 19 Clock Font Police de l'horloge L5 6 Close Fermer L5 7 Color Couleur L15 18 Color Selection Sélection couleur L6 8 Colors Couleurs L7 8 Command Commande L13 18 Command Line: Ligne de commande: L8 10 Computer Ordinateur L30 41 Computer White vs. Human Black Ordinateur (blancs) contre Humain (noirs) L24 25 Configure Axis & Buttons Configurer axes & boutons L23 25 Configured Sound Files: Fichiers son configurés: L7 9 Connect Connexion L21 16 Connect to ICS Server Connexion à ICS L20 20 Connected to %s (%s) Connecté à %s (%s) L19 18 Connecting to %s... Connexion à %s... L18 18 Connection refused Connexion refusée L28 30 Connection to %s:%d failed: Connexion à %s:%d échouée: L7 7 Console Console L12 14 Console Beep Bip de console L12 20 Console Font Police de la console L21 33 Console buffer saved. Buffer de la console sauvegardé. L6 7 Count: Nombre: L10 10 Crazyhouse Crazyhouse L27 38 DGT board found on port %s. Échiquier DGT trouvé sur le port %s. L29 40 DGT board found on port %s.\n Échiquier DGT trouvé sur le port %s.\n L28 49 DGT board found on port %s\n L'échiquier DGT a été trouvé sur le port %s\n L29 36 DGT support error: wrong page Erreur du support DGT: mauvaise page L60 64 DGT warning: position mismatch between eboard and DGT board. Message DGT: erreur de position entre eboard et l'échiquier DGT L31 30 DGT: unrecognized code: %c (%d) DGT: code non reconnu: %c (%d) L15 14 Dark Squares... Cases foncées L18 29 Delete All Entries Supprimer toutes les entrées L17 23 Delete This Entry Supprimer cette entrée L12 18 Depth Limit: Profondeur limite: L11 11 Description Description L7 15 Device: Périphérique: L50 68 Directory to run from (e.g., where book files are) Répertoire de démarrage (où se trouvent les fichiers des parties) L10 12 Directory: Répertoire: L11 14 Discard All Tout supprimer L12 19 Discard Game Supprimer la partie L7 7 Dismiss Annuler L12 18 Display Game Afficher la partie L9 8 Displayed Affiché L81 54 Distributed under the terms of the GNU General Public License, version 2 or later Distribué selon la GNU GPL, version 2 ou postérieure L12 12 Draw Offered Nul proposé L16 27 Draw offer sent. Proposition de nul envoyée L18 22 Drawn by agreement Nul accepté (NdT: ??) L11 20 Drop Piece: Prise de la pièce: L16 11 Duration (msec): Durée (ms) L18 41 Dynamic Seek Table Tableau de recherche de parties dynamique L17 23 Edit Bookmarks... Édition des signets... L21 31 Edit Engine Bookmarks Édition des signets de moteurs L14 28 Edit Game Info Édition des infos de partie L17 33 Edit Time Control Édition des paramètres de temps L5 4 Empty Vide L16 18 Engine Bookmarks Signets de moteurs L14 18 Engine Command Commande du moteur L12 14 Engine Type: Type du moteur L28 35 Engine Type: %s (uneditable) Type du moteur: %s (non modifiable) L43 62 Engine asked more time to startup, waiting. Le moteur a besoin de temps pour se lancer, veuillez attendre. L19 31 Engine command line Commande de lancement du moteur L14 14 Engine loaded. Moteur chargé L14 16 Engine running Moteur en marche L30 30 Engine started (2 sec timeout) Moteur démarré (2 s timeout) L18 19 Enter FEN Position Entrer Position FEN L10 18 Event Type Type d'événement L13 18 Exam.Game #%d Analyse partie #%d L21 31 Failed to run engine. Lancemement du moteur échoué. L28 35 Failed to run helper program Program d'aide impossible à lancer L30 39 File to play / Program to run: Fichier à jouer / programme à lancer: L8 8 Filter: Filtre: L14 15 Filter: (none) Filtre: (aucun) L36 39 Finish the current connection first. Terminer la connexion actuelle d'abord. L30 36 Finish the current game first. Terminer la partie actuelle d'abord. L5 8 Flags Drapeaux L5 7 Fonts Polices L22 14 From Elsewhere (%d %s) Autres (%d %s) L20 15 From Engines (%d %s) Moteurs (%d %s) L8 3 From FEN FEN L16 11 From ICS (%d %s) ICS (%d %s) L22 20 From PGN Files (%d %s) Fichiers PGN (%d %s) L6 8 Game # Partie # L8 10 Game #%d Partie #%d L19 21 Game #%d - %d %d %s Partie #%d - %d %d %s L13 15 Game #%d - %s Partie #%d - %s L18 20 Game #%d - %s - %s Partie #%d - %s - %s L20 25 Game #%d - %s vs. %s Partie #%d - %s contre %s L21 36 Game #%d - untimed %s Partie #%d - sans limite de temps %s L12 14 Game #%d: %s Partie #%d: %s L12 16 Game Aborted Partie arrêtée L16 24 Game Description Description de la partie L21 33 Game Information Font Police des informations de partie L9 17 Game List Liste des parties L25 35 Game List (refreshing...) Liste des parties (mise à jour...) L9 13 Game Lost Partie perdue L12 17 Game Started Partie commencée L8 14 Game Won Partie gagnée L19 21 Game appended to %s Partie ajoutée à %s L17 16 Game in progress. Partie en cours. L13 16 Game over: %s Partie finie: %s L19 31 Game proposal sent. Proposition de partie envoyée. L13 19 Game started! Partie démarrée ! L12 19 Game/Board: Partie/Échiquier: L5 7 Games Parties L24 28 Generic XBoard Engine... Moteur XBoard générique... L8 8 Giveaway Giveaway L46 49 Graphic representation of crazy/bughouse stock Représentation graphique de stock crazy/bughouse L16 24 Help: Debug Info Aide: Infos de débogage L22 19 Help: Getting Started Aide: Premiers pas L10 24 Help: Keys Aide: Raccourcis clavier L5 8 Hide! Cacher ! L18 29 Host not found: %s Hôte distant non trouvé: %s L8 14 Hostname Nom de l'hôte L23 29 Hostname or IP address: Nom de l'hôte ou adresse IP: L5 6 Human Humain L30 41 Human White vs. Computer Black Humain (blancs) contre Ordinateur (noirs) L17 22 Human plays white Humain joue les blancs L13 13 ICS Challenge Challenge ICS L25 30 IPC pipe creation failed. Creation de pipe IPC échouée L2 3 Id n° L104 111 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Après le choix d'un signet, le moteur\njouera le prochain coup, quelles que\nsoient les paramètres du signet. L43 73 Illegal Drop on %c%d (Legality Checking On) Prise illégale sur %c%d (Vérification de légalité des coups activée) L44 45 Illegal Move %c%d%c%d (Legality Checking On) Coup illégal %c%d%c%d (Legality Checking On) L23 27 Illegal move, not sent. Coup illégal, non envoyé. L17 15 Increment (secs): Incrément (s): L10 11 Increment: Incrément: L55 105 Inhibit seek lines on console when Seek Table is active Ne pas afficher les lignes de recherche sur la console quand le tableau de recherche de parties est actif L16 17 Initial Position Position initiale L23 25 Initial time ([mm:]ss): Temps initial ([mm:]ss): L19 24 Initializing engine Initialisation du moteur L46 51 Invalid answer to DGT_SEND_BRD on port %s: %s Réponse invalide à DGT_SEND_BRD sur le port %s:%s L8 8 Joystick Joystick L141 203 Joystick Settings:\n\nBoard Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n Réglages du Joystick:\n\nAxe du curseur de l'échiquier: %d\nBoutton de séléction de l'échiquier: %d\nAxe de navigation d'échiquiers: %d\nBoutton onglet précédent: %d\nBoutton onglet suivant: %d\n L3 4 Key Clé L4 5 Key: Clé: L17 17 Kibitzes/Whispers Kibitzes/Whispers L4 4 Kill Tuer L10 11 Knight %d Cavalier %d L22 28 Last Proposal Received Dernière proposition reçue L4 6 Left Gauche L16 16 Light Squares... Cases claires... L8 22 Load PGN Charger un fichier PGN L11 25 Load PGN... Charger un fichier PGN... L5 5 Local Local L15 25 Local Game List Liste des parties locales L21 29 Looking up host %s... Cherche l'hôte distant %s... L6 8 Losers Perdants L10 10 Main Board Échiquier L13 13 Mamer and TDs Mamer and TDs L14 14 Manual/Formula Manual/Formula L23 23 Match Found at Line %d. Trouvé à la ligne %d L15 6 Match Pattern: Motif: L17 18 Material: %d - %d Matériel: %d - %d L8 8 Max Ply: Max Ply: L30 42 Move made (Obs'vd/Exm'd Games) Coup joué (parties observées/examinées) L76 92 Move the axis to be used for moving back and forth\nthrough moves of a game. Déplacer l'axe à utiliser pour se déplacer en arrière et revenir\nau cours d'une partie. L46 60 Move the axis to be used for selecting pieces. Déplacer l'axe à utiliser pour séléctionner des pièces. L5 5 Moves Coups L22 20 Network is unreachable Réseau inaccessible L18 23 News/Notifications Nouvelles/notifications L2 3 No Non L9 14 No error. Pas d'erreurs. L19 19 No material to mate No material to mate L23 33 No output from program. Pas de sorties pour le programme. L8 18 No peer. Pas de partenaire. L19 29 No previous search. Pas de recherche précédente L18 30 No proposals left. Pas de propositions laissées. L22 26 No proposals received. Aucune proposition reçue. L38 46 No response to DGT_SEND_BRD on port %s Pas de réponse à DGT_SEND_BRD sur le port %s L43 59 No response to DGT_SEND_BRD on port %s: %s. Pas de réponse au message DGT_SEND_BRD sur le port %s: %s. L4 5 None Aucun L12 14 Normal Chess Partie normale L11 12 Normal Text Texte normal L16 24 Not a socket ?!? N'est pas une socket ?!? L2 2 OK OK L17 22 Obs'vd Game Ended Partie observée finie L7 21 Observe Observer cette partie L2 2 Ok Ok L160 193 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Une fois connecté à un hôte distant via cette boîte de dialogue, \nil sera ajouté au menu des signets ICS. Editez le fichier\n~/.eboard/eboard.conf pour modifier ou supprimer ces entrées. L293 307 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Seules les lignes correspondant au motif seront ajoutées\nà cet onglet. Les motifs peuvent subir le OU avec le \ncaractère | (barre). Une * (étoile) correspond à tout.\nExemples:\n'(20)|(22)' ne montre que les lignes des canaux 20 et 22\n'blik * bored' montre les lignes contenant 'blik '(...)' bored'. L14 20 Opponent Moved L'adversaire a joué L7 7 Options Options L11 13 PGN Headers En-têtes PGN L13 19 PGN filename: Nom du fichier PGN: L14 17 Partner Tells: L'adversaire dit: L10 11 Pawn %d Pion %d L11 15 Pitch (Hz): Fréquence (Hz) L4 18 Play Jouer cette partie L56 74 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Jouer %s en tant que %s contre %s (%s, prfd max. %d, tjrs réfléchir: %s) L58 73 Play WAV (need Device and Filename, sox must be installed) Jouer un WAV (nom du fichier et périphérique, sox soit être installé) L19 19 Play against Crafty Jouer contre Crafty L19 22 Play against Engine Jouer contre un moteur L24 24 Play against GNU Chess 4 Jouer contre GNU Chess 4 L18 18 Play against Sjeng Jouer contre Sjeng L6 6 Player Joueur L14 17 Player resigns Abandon du joueur L22 23 Player/Color Name Font Police du nom du Joueur L14 17 Pos: %s vs. %s Pos: %s contre %s L11 13 Preferences Préférences L54 66 Press the button to be used for going to the next tab. Appuyer sur le boutton à utiliser pour aller à l'onglet suivant. L58 70 Press the button to be used for going to the previous tab. Appuyer sur le boutton à utiliser pour aller à l'onglet précédent. L51 65 Press the button to be used for selecting a square. Appuyer sur le boutton à utiliser pour séléctionner un carré. L12 14 Private Tell Message privé L13 16 Private Tells Messages privés L23 37 Program exited too soon Le programme s'est arrêté trop tôt L8 11 Progress Progression L17 22 Promotion Piece Pièce de promotion: L7 11 Propose Proposition L12 18 Propose Game Proposition de jeu L8 9 Protocol Protocole L33 31 Protocol mismatch, disconnecting. Mauvais protocole, déconnexion L10 11 Queen %d Dame %d L5 7 Rated Classé L6 10 Rating Classement L12 24 Rating Range Intervalle de classement L24 31 Read error from program. Erreur de lecture du programme. L33 35 Received a game proposal from %s. Proposition de partie reçue de %s. L12 15 Recent Hosts Hôtes récents L12 19 Refresh List Actualiser la liste L19 20 Replied to seek #%d Réponse au seek #%d L9 13 Resigned. A abandonné. L6 9 Result Résultat L20 21 Retracted last move. Dernier coup annulé. L45 56 Retrieve ICS Channel Lists from eboard.sf.net Récupère la liste des cannaux ICS depuis eboard.sf.net L18 25 Revert to Defaults Paramètres par défaut L18 25 Revert to defaults Paramètres par défaut L5 6 Right Droite L10 11 Rook %d Tour %d L3 16 Run Lancer ce script L13 19 Run Engine... Lancer le moteur... L27 38 Run Program (need Filename) Lancer un programme (nom du programme) L47 53 Run autofics.pl script after connecting to FICS Lancer le script autofics.pl après connexion au FICS L17 29 Save Buffer As... Enregistrer le buffer sous... L12 24 Save Game... Enregistrer la partie... L11 18 Save as PGN Enregistrer en PGN L10 13 Scratch %d Échiquier %d L6 6 Script Script L11 17 Script List Liste des scripts L34 34 Scrollback limit (0 = unlimited) : Taille du buffer (0 = illimité) : L11 19 Search Text Rechercher le texte L12 21 Search for: Texte à rechercher: L22 17 Search text not found. Texte non trouvé L8 21 Seek Ads Annonces de recherche L10 20 Seek Table Recherche de parties L15 41 Seek Table Font Police du tableau de recherche de parties L10 21 Serial :%s Numéro de série :%s L12 23 Serial :%s\n Numéro de série :%s\n L10 19 Set Filter Appliquer un filtre L13 22 Set Filter... Appliquer un filtre... L49 69 Set depth limit to 0 to use the engine's default. Mettez la profondeur à 0 pour la profondeur par défaut du moteur. L13 19 Setup Buttons Changer les boutons L21 33 Shortcut Button Setup Changer les boutons de raccourcis L6 6 Shouts Shouts L42 56 Show channel tells in one pane per channel Afficher les messages de canaux avec un onglet par canal L63 94 Show channel tells on console too (when above option is active) Afficher les messages de canaux sur la console également (si l'option ci-dessus est activée) L31 49 Show rating next to player name Afficher le classement à côté du nom du joueur L33 52 Show shortcut buttons below board Afficher les boutons de raccourcis sous l'échiquier L11 14 Side & Time Côté & Temps L14 15 Side Selection Choix du côté L14 12 Side to move: Vont jouer: L22 26 Smooth joystick cursor Curseur du joystick fluide L29 37 Smooth joystick cursor speed: Vitesse du curseur du joystick fluide L34 50 Smoother animation (eats more CPU) Animations fluides (fait travailler le processeur) L76 77 Sorry, this protocol does not allow to retract a move thru this menu option. Désolé, ce protocole ne permet pas d'annuler votre coup par cette commande. L11 15 Sound Event Événement son L12 16 Sound Events Événements son L6 4 Sounds Sons L54 56 Source code available at http://eboard.sourceforge.net Code source disponible sur http://eboard.sourceforge.net L9 3 Stalemate Pat L18 22 Start a connection Démarre une connexion L14 14 Starting Time: Temps initial: L7 7 Suicide Suicide L8 8 TCP Port Port TCP L9 8 TCP Port: Port TCP L12 20 Tab Position Position des onglets L4 4 Test Test L52 56 The checkbox on the left enables/disables the sound. La case sur la gauche (dés)active le son correspondant. L69 64 The engine will be run with\n/bin/sh -c 'cd directory ; command line' le moteur sera lancé avec\n/bin/sh -c 'cd directory ; commande' L12 20 Think Always Toujours réfléchir L24 43 Think on opponent's time Réfléchir pendant le tour de l'adversaire L4 5 Time Temps L12 20 Time Control Paramètres de temps L15 23 Time Control... Paramètres de temps... L13 14 Time Control: Temps imparti: L16 22 Time Running Out Temps imparti écoulé L7 13 Timeout Plus de temps L44 48 Times can be given as hh:mm:ss , mm:ss or ss Les temps sont de la forme hh:mm:ss, mm:ss ou ss L180 160 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Pour lancer plusieurs commandes, séparez les commandes avec ; (point-virgule).\nPour lancer un script, entrez script.nomduscript (par ex.: script.myscript.pl). L3 4 Top Haut L13 10 Trademark :%s Marque :%s L15 12 Trademark :%s\n Marque :%s\n L30 27 Type: Fischer Clock (ICS-like) Type: Horloge Fischer (ICS) L25 25 Type: Fixed Time per Move Type: Temps fixe par coup L34 52 Type: Use engine's default setting Type: Utiliser les paramètres par défaut du moteur L29 35 Type: X Moves per Time Period Type: X coups par période de temps L26 29 Unable to bind on port %d. Impossible de lier le port %d L24 31 Unable to create socket. Impossible de créer une socket L44 66 Unable to find the DGT board on port %s.\n%s Impossible de se connecter à l'échiquier DGT sur le port %s.\n%s L45 67 Unable to find the DGT board on port %s.\n%s. Impossible de se connecter à l'échiquier DGT sur le port %s.\n%s. L44 66 Unable to find the DGT board on port %s: %s. Impossible de se connecter à l'échiquier DGT sur le port %s: %s. L13 15 Unknown error Erreur inconnue L14 17 Unknown result Résultat inconnu L23 24 Use plain color squares Utiliser des cases unies L5 6 Value Valeur L6 7 Value: Valeur: L7 8 Variant Variante L8 9 Variant: Variante: L24 29 Variant: %s (uneditable) Variante: %s (non modifiable) L4 7 Wait Attente L21 23 Wait for a connection Attente d'une connexion L34 38 Waiting for connection on port %d. Attente d'un connexion dur le port %d. L30 53 Warn when own clock is below: Prévenir quand mon horloge est en dessous du seuil: L18 20 Welcome to eboard. Bienvenue sur eboard L5 6 White Blancs L14 15 White: %s - %s Blancs: %s - %s L10 12 Working... Travaille... L16 21 Write to Console Écrit sur la console L19 24 Wrong address space Mauvaise plage d'adresse L5 7 Wrote Écrite L3 3 Yes Oui L49 71 You can only retract when it's your turn to move. Vous pouvez seulement annuler votre dernier coup quand c'est votre tour L11 14 Your color: Votre couleur: L10 10 Your name: Votre nom: L6 10 [chat] Bavardage: L5 9 [cmd] Commande: L29 31 [eboard] ** $HOME is too long [eboard] ** $HOME est trop long L39 46 [eboard] ** failed to create directory [eboard] ** Création du répertoire échouée L20 24 [eboard] ** no $HOME [eboard] ** pas de $HOME L22 28 [eboard] bad RC line\n [eboard] mauvaise ligne RC\n L4 3 beep bip L5 4 beeps bips L5 5 black Noirs L53 66 can't load PGN move text from %s (error opening file) Ne peut charger le fichier PGN %s (impossible d'ouvrir le fichier) L30 33 can't seek to offset %lu of %s Ne peut se déplacer à %lu de %s L26 26 dgtnix driver version %.1f Driver dgtnix version %.1f L14 24 discards board Supprimer cet échiquier L32 33 eboard Direct Connection Manager Gestionnaire de connexion directe L22 22 eboard version %s (%s) eboard version %s (%s) L343 349 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nCe logiciel est libre ; vous pouvez le distribuer et/ou\nle modifier selon les termes de la GNU General Public\nLicense publiée par la Free Software Foundation ; que\nce soit avec la version 2 de la license, ou (au choix)\nune version postérieure.\n L19 19 eboard: Console #%d eboard: console #%d L60 81 engine claimed illegal move but we didn't move, ignoring it. le moteur annonce un coup illégal alors que nous n'avons pas joué, on l'ignore. L22 34 error parsing PGN data Erreur de lecture des données PGN L11 20 flips board Inverse l'échiquier L4 6 game partie L5 7 games parties L17 17 generic xboard v2 generic xboard v2 L20 21 goes back 1 halfmove Reculer d'1 demi-coup L26 29 goes back to start of game Retourner en début de partie L23 21 goes forward 1 halfmove Avancer d'1 demi-coup L27 22 goes forward to end of game Aller en fin de partie L13 15 illegal move! Coup illégal ! L11 8 in progress en cours L29 31 initial time %s, increment %s temps initial %s, incrément %s L8 8 moves in coups en L2 3 no non L14 23 no such game: pas de telles parties: L19 24 no time control set Pas de réglage de temps L4 5 none aucun L7 4 nothing rien L37 45 opens new scratch board with position Ouvre un nouvel échiquier avec les positions L8 8 per move par coup L18 14 plain console beep bip de console L12 18 play file %s joue le fichier %s L21 27 pops up the move list Afficher la liste des coups L24 32 process creation failed. création du processus échouée L5 7 rated classé L18 24 rated"):_("unrated classé"):_("non classé L6 8 run %s lance %s L10 15 running %s lancement de %s L18 34 savePGN failed: %s enregistrement du PGN échoué: %s L54 83 savePGN failed: Won't save game with less than 2 moves enregistrement du PGN échoué: ne peut enregistrer de partie avec moins de 2 coups L8 9 seconds. secondes. L7 11 unrated non classé L7 17 untimed non chronométré L5 6 white blancs L3 3 yes oui E 536 eboard-1.1.1.orig/multilang/harvest.in0000644000175000017500000000103610757567572017300 0ustar patrikpatrikpackage=eboard langs=cs,de,es,it,ja,pl,pt_BR,fr ../board.cc ../bugpane.cc ../chess.cc ../clock.cc ../dgtboard.cc ../dlg_connect.cc ../dlg_gamelist.cc ../dlg_prefs.cc ../global.cc ../help.cc ../history.cc ../langs.cc ../main.cc ../mainwindow.cc ../movelist.cc ../network.cc ../notebook.cc ../ntext.cc ../p2p.cc ../pieces.cc ../position.cc ../promote.cc ../proto_fics.cc ../proto_p2p.cc ../proto_xboard.cc ../protocol.cc ../quickbar.cc ../script.cc ../seekgraph.cc ../sound.cc ../status.cc ../text.cc ../tstring.cc ../util.cc ../widgetproxy.cc eboard-1.1.1.orig/multilang/eboard.es.dict0000644000175000017500000010465610757567572020017 0ustar patrikpatrikL72 74 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** FALLO AL CARGAR PNG: usando las piezas internas de baja resolución.\n L11 11 Browse... Buscar... L15 20 Play Selected Jugar seleccionada L9 11 Refresh Refrescar L14 16 Remove Field Eliminar campo L5 9 Set Aplicar L1543 1663 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Comenzando\n#M#Tareas comunes en eboard\n\nJugar contra el ordenador\n#S#eboard no "juega al ajedrez" por si mismo, sino que funciona como interfaz para programas que lo hacen,\nllamados "motores", y que no tienen interfaz gráfica propia. Necesita un motor para \njugar contra el ordenador. GNU Chess, Crafty y Sjeng son motores de ajedrez que están disponibles\ngratuitamente.\nUna vez tenga uno de ellos instalado, abre el menú #B#Oponente#K#, y luego el submenú#B#Jugar contra\nun motor#K#, y seleccione la opción apropiada en función del motor que haya instalado.\n\n\n#M#Jugar al ajedrez en Internet\n#S#Eboard soporta el protocolo FICS. FICS se usa en freechess.org, pero otros servidores, como\nUS Chess Live, utilizan software de FICS y deberían funcionar con eboard. ICC no está soportado.\nPara conectar a FICS, abra el menú #B#Oponente#K#, y pulse #B#Conectar a FICS#K#. Para conectar a\notros servidores, abra el menú #B#Peer#K#, y pulse #B#Conectar a otro servidor...#K#.\nAunque se puede entrar en FICS como invitado, disfrutará más de él como usuario registrado. El registro\nse realiza en el sitio web de FICS's en #B#http://www.freechess.org#K#, y es gratuito.\n\n#M#Ver partidas PGN\n#S#PGN es el formato de fichero más usado para guardar partidas de ajedrez. Puede almacenar movimientos y comentarios\n(anotaciones). Para abrir estos ficheros con eboard, abra el menú #B#Ventanas#K# , y pulse\n#B#Partidas en el cliente#K#. En la lista de partidas locales, pulse #B#Cargar PGN...#K#. Para revisar una\npartida, #B#seleciónela#K# y pulse #B#Mostrar#K#. Una nueva pestaña se creará en la ventana principal\ncon la partida.#L# L30 31 %d %s to %s, %d Hz for %d msec %d %s a %s, %d Hz para %d mseg. L13 19 %d games read %d partidas leídas L14 14 %d moves in %s %d mueve en %s L25 25 %d. Connect to %s:%d (%s) %d. Conectar a %s:%d (%s) L41 44 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (blancas) vs. %s (negras)\n%s\n%d:%.2d %d L31 38 %s accepted your game proposal. %s aceptó su proposición de partida. L18 18 %s engine started. Motor %s iniciado. L17 17 %s offers a draw. %s ofrece tablas. L11 17 %s per move %s por movimiento L7 13 %s/move %s/movimiento L33 50 (Wrapped) Match Found at Line %d. Coincidencia (parcial) encontrada en la línea %d. L64 67 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (Apodo en FICS : Pulga) L39 44 (message obfuscated -- password mode ?) (mensaje ofuscado -- ¿en modo contraseña?) L14 19 (no bookmarks) (no hay marcadores) L6 9 (none) (ninguno) L13 19 (time period) (periodo de tiempo) L18 25 * game not found: * partida no encontrada: L47 64 ** [eboard] bad engine protocol # in bookmark: ** [eboard] nº de protocolo del motor erróneo en el marcador: L57 69 ** eboard ** warning: HOME environment variable not set\n ** eboard ** aviso: la variable de entorno HOME no esta establecida\n L26 31 --- %s game to PGN file %s --- %s partida a fichero PGN %s L16 16 --- Disconnected --- Desconectado L14 17 /Game/Ad_journ /Partida/Apla_zar L19 30 /Game/Retract _Move /Partida/Retractar _movimiento L12 17 /Game/_Abort /Partida/_Abortar L17 24 /Game/_Offer Draw /Partida/_Ofrecer tablas L13 19 /Game/_Resign /Partida/_Abandonar L22 27 /Help/_About eboard... /Ayuda/_Acerca de eboard... L17 35 /Help/_Debug Info /Ayuda/_Información de depuración L22 18 /Help/_Getting Started /Ayuda/_Comenzando L11 14 /Help/_Keys /Ayuda/_Teclas L10 11 /Help/sep4 /Ayuda/sep4 L22 26 /Peer/Connect to _FICS /Oponente/Conectar a _FICS L43 36 /Peer/Direct connect with _Remote eboard... /Oponente/Conectar a _Otro eboard... L23 32 /Peer/Engine B_ookmarks /Oponente/Marcadores de m_otores L20 25 /Peer/ICS _Bookmarks /Oponente/M_arcadores ICS L36 42 /Peer/Play against Engine/Cr_afty... /Oponente/Jugar contra un motor/Cr_afty... L41 47 /Peer/Play against Engine/GNU Chess _4... /Oponente/Jugar contra un motor/GNU Chess _4... L44 48 /Peer/Play against Engine/_Generic Engine... /Oponente/Jugar contra un motor/_Motor genérico L35 41 /Peer/Play against Engine/_Sjeng... /Oponente/Jugar contra un motor/_Sjeng... L30 36 /Peer/Play against Engine/sep1 /Oponente/Jugar contra un motor/sep1 L26 32 /Peer/Play against _Engine /Oponente/Jugar contra un _motor L33 38 /Peer/_Connect to Other Server... /Oponente/_Conectar a otro servidor... L17 22 /Peer/_Disconnect /Oponente/_Desconectar L26 25 /Peer/_Empty Scratch Board /Oponente/_Vaciar tablero L11 16 /Peer/_Quit /Oponente/_Salir L42 40 /Peer/_Scratch Board with Initial Position /Oponente/_Tablero con posición inicial L10 14 /Peer/sep2 /Oponente/sep2 L10 14 /Peer/sep3 /Oponente/sep3 L10 14 /Peer/sep4 /Oponente/sep4 L48 52 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Configuración/Piezas dibujadas/Cargar sólo piezas L49 54 /Settings/Bitmapped Piece Sets/Load _Squares Only /Configuración/Piezas dibujadas/Cargar sólo escaques L42 45 /Settings/Bitmapped Piece Sets/Load _Theme /Configuración/Piezas dibujadas/Cargar _tema L31 33 /Settings/Bitmapped Piece _Sets /Configuración/_Piezas dibujadas L35 53 /Settings/Enable Legality _Checking /Configuración/Habilitar _comprobación de legalidad L55 73 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Configuración/Comportamiento ICS/Mostrar paneles de tablero al crearlos L69 82 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Configuración/Comportamiento ICS/_Descartar tableros observados inteligentemente L18 25 /Settings/Pre_move /Configuración/Pre_mover L27 36 /Settings/Sho_w Coordinates /Configuración/_Mostrar coordenadas L24 35 /Settings/_Animate Moves /Configuración/_Animar movimientos L33 47 /Settings/_Beep on Opponent Moves /Configuración/_Pitar cuando mueva el oponente L30 40 /Settings/_Enable Other Sounds /Configuración/_Habilitar otros sonidos L30 47 /Settings/_Highlight Last Move /Configuración/_Resaltar el último movimiento L23 35 /Settings/_ICS Behavior /Configuración/Comportamiento _ICS L25 32 /Settings/_Preferences... /Configuración/_Preferencias... L47 57 /Settings/_Vectorized Pieces (Faster Rendering) /Configuración/Piezas _vectoriales (dibujo más rápido) L14 20 /Settings/sep3 /Configuración/sep3 L23 26 /Windows/Find _Previous /Ventanas/Buscar _anterior L28 36 /Windows/Games on _Client... /Ventanas/Partidas en el _cliente... L31 38 /Windows/Save Desktop _Geometry /Ventanas/Guardar la geometría actual L29 37 /Windows/Save _Text Buffer... /Ventanas/Guardar texto del búfer... L26 37 /Windows/_Ads on Server... /Ventanas/_Anuncios en el servidor... L26 32 /Windows/_Detached Console /Ventanas/Consola in_dependiente L32 41 /Windows/_Find Text (upwards)... /Ventanas/_Buscar texto (hacia arriba)... L28 37 /Windows/_Games on Server... /Ventanas/_Partidas en el servidor... L23 22 /Windows/_Run Script... /Ventanas/_Ejecutar... L13 14 /Windows/sep1 /Ventanas/sep1 L13 14 /Windows/sep2 /Ventanas/sep2 L13 14 /Windows/sep3 /Ventanas/sep3 L6 9 /_Game /_Partida L6 7 /_Help /_Ayuda L6 10 /_Peer /_Oponente L10 15 /_Settings _Configuración L9 10 /_Windows /_Ventanas L106 118 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n L41 48 can't load font.\n no puedo cargar fuente.\n L124 145 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** falló al carcar una o más fuentes de tablero - instale lasfuentes de X11 de 75 y 100 dpi, reinicie X e inténtelo de nuevo.\n L58 66 ** failed to load one or more board fonts\n ** falló al carcar una o más fuentes de tablero\n L34 43 abort request sent petición de aborto enviada L36 49 adjourn request sent petición de aplazamiento enviada L33 43 draw request sent petición de tablas enviada L110 122 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n L45 53 ** bad pattern string: ** cadena de patrón erróneo: L40 47 ** file not found: ** fichero no encontrado: L39 41 failed to load falló al cargar L112 124 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n L34 36 failed to load falló al cargar L42 52 Adjourning not supported El aplazamiento no está soportado L46 50 Incompatible Engine Protocol Protocolo del motor incompatible L33 34 Session Aborted Sesión abortada L35 45 draw request sent petición de tablas enviada L9 10 L17 23 > (password sent) > (contraseña enviada) L23 21 > [issued from menu] %s > [desde el menú] %s L25 19 > [issued from shortcut] > [desde un atajo] L31 28 > [script run from shortcut] %s > [ejecutado desde atajo] %s L12 16 About eboard Acerca de eboard L6 7 Accept Aceptar L36 39 Accepted incoming connection from %s Aceptada la conexión entrante desde %s L14 23 Ad Description Descripción de anuncio L7 17 Ad List Lista de anuncios L23 37 Ad List (refreshing...) Lista de anuncios (refrescándose...) L33 38 Add to Peer/Engine Bookmarks menu Añadir a marcadores de Oponente/Motor L22 26 Address already in use La dirección está en uso L3 8 Ads Anuncios L21 23 Already connected ?!? ¿Ya está conectado?!? L675 895 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. En cualquier sitio:\nF3: Ir al panel anterior.\nF4: Ir al siguiente panel.\nF5: Ir al panel del tablero principal.\nF6: Ir al panel de la consola.\nF7: Ir al panel de búsqueda gráfica (si está disponible).\nF8: Conmutar la visibilidad de la barra de atajos.\nRePag./AvPag.: desplaza el texto de la consola (debe ser visible)\nCtrl+(Flecha Izda.): Atrás 1 medio movimiento\nCtrl+(Flecha Dcha.): Adelante 1 medio movimiento\nCtrl+F: Buscar hacia arriba (en el búfer de la consola principal)\nCtrl+G: Busca el anterior\n\nEn la línea de entrada:\nArriba/Abajo (flechas): moverse a través del histórico de entradas\nIntro: enviar línea de texto\nEscape: cambiar de conversación/modo comando\n\nDetalles sintácticos:\nEn la línea de entrada de la ventana principal\n.. introduciendo %prefix texto pondra el prefijo de chat a texto.\n.. introduciendo %do nombre ejecutara el script nombre. L10 10 Appearance Apariencia L8 8 Appended Añadido L5 7 Apply Aplicar L13 15 Apply Changes Aplicar cambios L24 35 Auto-save observed games Autoguardar las partidas observadas L22 32 Auto-save played games Autoguardar las partidas jugadas L8 11 Autosave Autoguardar L14 14 Axis & Buttons Ejes y botones L10 5 Background Fondo L14 19 Bad descriptor Descriptor erróneo L45 54 Beep (need Pitch, Duration, Count and Device) Pitido (necesita tono, duración, veces y dispositivo) L10 10 Bishop %d Alfil %d L5 5 Black Negro L14 14 Black: %s - %s Negro: %s - %s L119 175 Board Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n Eje del cursor del tablero: %d\nBotón de selección de tablero: %d\nEje de navegación del tablero: %d\nBotón de tabulación atrás: %d\nBotón de tabulación adelante: %d\n L17 24 Board version :%s Versión del tablero: %s L17 21 Bookmark Caption: Título del marcador: L6 5 Bottom Abajo L11 15 Bright Text Texto resaltado L6 6 Browse Buscar L19 28 Buffer Save failed. Falló al guardar el búfer. L8 8 Bughouse Bughouse L22 32 Bughouse: Partner Game Bughouse: Partida del compañero L15 22 Bus address :%s Dirección del bus: %s L14 16 Button Caption Texto del botón L11 16 Button Icon Icono del botón L6 8 Cancel Cancelar L29 39 Cancel Joystick Configuration Cancelar la configuración del joystick L26 31 Cancelled connection wait. Espera por conexión cancelada. L9 10 Change... Cambiar... L13 23 Channel Tells Conversación del canal L9 10 Checkmate Jaque mate L14 20 Chess Programs Programas de ajedrez L11 13 Choose Font Elejir fuente L9 9 Choose... Elejir... L10 16 Clock Font Fuente del reloj L5 6 Close Cerrar L5 5 Color Color L15 19 Color Selection Selección de color L6 7 Colors Colores L7 7 Command Comando L13 18 Command Line: Línea de comando: L8 9 Computer Ordenador L30 35 Computer White vs. Human Black Ordenador blancas vs. Humano negras L24 25 Configure Axis & Buttons Configurar ejes y botones L23 32 Configured Sound Files: Ficheros de sonido configurados: L7 8 Connect Conectar L21 24 Connect to ICS Server Conectar al servidor ICS L20 19 Connected to %s (%s) Conectado a %s (%s) L19 18 Connecting to %s... Conectando a %s... L18 19 Connection refused Conexión rechazada L28 27 Connection to %s:%d failed: Conexión a %s:%d fallida: L7 7 Console Consola L12 17 Console Beep Pitido de consola L12 17 Console Font Fuente de consola L21 27 Console buffer saved. Búfer de consola guardado. L6 6 Count: Veces: L10 10 Crazyhouse Crazyhouse L27 39 DGT board found on port %s. Tablero DGT encontrado en el puerto %s. L29 38 DGT support error: wrong page Error de soporte DGT: página errónea L60 66 DGT warning: position mismatch between eboard and DGT board. Aviso DGT: las posiciones de eboard y el tablero DGT no coinciden. L31 35 DGT: unrecognized code: %c (%d) DGT: código no reconocido: %c (%d) L15 19 Dark Squares... Escaques oscuros... L18 25 Delete All Entries Borrar todas las entradas L17 19 Delete This Entry Borrar esta entrada L12 20 Depth Limit: Profundidad límite: L11 12 Description Descripción L7 12 Device: Dispositivo: L50 59 Directory to run from (e.g., where book files are) Directorio inicial (p.ej., donde los ficheros de aperturas) L10 11 Directory: Directorio: L11 14 Discard All Descartar todo L12 17 Discard Game Descartar partida L7 9 Dismiss Descartar L12 15 Display Game Mostrar partida L9 8 Displayed Mostrado L81 87 Distributed under the terms of the GNU General Public License, version 2 or later Distribuido bajo los términos de la GNU General Public License, versión 2 o posterior L12 16 Draw Offered Ofrecidas tablas L16 25 Draw offer sent. Oferta de tablas enviada. L18 24 Drawn by agreement Tablas por mutuo acuerdo L11 13 Drop Piece: Soltar pieza: L16 18 Duration (msec): Duración (mseg.): L18 22 Dynamic Seek Table Buscar tabla dinámica L17 20 Edit Bookmarks... Editar marcadores... L21 32 Edit Engine Bookmarks Editar marcadores de los motores L14 33 Edit Game Info Editar información de la partida L17 24 Edit Time Control Editar control de tiempo L5 6 Empty Vacío L16 21 Engine Bookmarks Marcadores de motores L14 17 Engine Command Comando del motor L12 14 Engine Type: Tipo de motor: L28 31 Engine Type: %s (uneditable) Tipo de motor: %s (no editable) L43 53 Engine asked more time to startup, waiting. El motor pidió más tiempo para arrancar, esperando. L19 27 Engine command line Línea de comando del motor L14 14 Engine loaded. Motor cargado. L14 19 Engine running Motor en ejecución L30 44 Engine started (2 sec timeout) Motor inicializado (2 seg. tiempo de espera) L18 24 Enter FEN Position Introducir posición FEN L10 14 Event Type Tipo de evento L13 18 Exam.Game #%d Exam.Partida nº%d L21 28 Failed to run engine. Falló al ejecutar el motor. L28 42 Failed to run helper program Falló la ejecución del programa de ayuda L30 43 File to play / Program to run: Fichero a reproducir / programa a ejecutar: L8 8 Filter: Filtro: L14 17 Filter: (none) Filtro: (ninguno) L36 38 Finish the current connection first. Finalizar la conexión actual primero. L30 35 Finish the current game first. Finalize la partida actual primero. L5 16 Flags Características L5 7 Fonts Fuentes L22 21 From Elsewhere (%d %s) De otra parte (%d %s) L20 18 From Engines (%d %s) De motores (%d %s) L8 9 From FEN Desde FEN L16 14 From ICS (%d %s) De ICS (%d %s) L22 23 From PGN Files (%d %s) De ficheros PGN (%d %s) L6 11 Game # Nº partida L8 14 Game #%d Partida nº %d L19 22 Game #%d - %d %d %s Partida #%d - %d %d %s L13 19 Game #%d - %s Partida nº %d - %s L18 24 Game #%d - %s - %s Partida nº %d - %s - %s L20 26 Game #%d - %s vs. %s Partida nº %d - %s vs. %s L21 30 Game #%d - untimed %s Partida nº %d - sin tiempo %s L12 18 Game #%d: %s Partida nº %d: %s L12 17 Game Aborted Partida cancelada L16 26 Game Description Descripción de la partida L21 36 Game Information Font Fuente de información de la partida L9 17 Game List Lista de partidas L25 34 Game List (refreshing...) Lista de partidas (refrescando...) L9 15 Game Lost Partida perdida L12 16 Game Started Partida iniciada L8 14 Game Won Partida ganada L19 21 Game appended to %s Partida añadida a %s L17 17 Game in progress. Partida en curso. L13 21 Game over: %s Partida terminada: %s L19 32 Game proposal sent. Proposición de partida enviada. L13 19 Game started! ¡Partida iniciada! L12 17 Game/Board: Partida/Tablero: L5 8 Games Partidas L24 25 Generic XBoard Engine... Motor XBoard genérico... L8 8 Giveaway Giveaway L46 56 Graphic representation of crazy/bughouse stock Representación gráfica del remanente en crazy/bughouse L16 34 Help: Debug Info Ayuda: Información de depuración L22 18 Help: Getting Started Ayuda: Comenzando L10 13 Help: Keys Ayuda: Teclas L5 11 Hide! ¡Esconder! L18 26 Host not found: %s Servidor no encontrado: %s L8 6 Hostname Nombre L23 25 Hostname or IP address: Máquina o dirección IP: L5 6 Human Humano L30 35 Human White vs. Computer Black Humano blancas vs. Ordenador negras L17 24 Human plays white Humano juega con blancas L13 16 ICS Challenge Competición ICS L25 39 IPC pipe creation failed. falló la creación de la tubería IPC. L2 2 Id Id L104 113 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Si eliges un marcador, el motor jugará\nel siguiente movimiento, ignorando\nel color establecido en el marcador. L43 60 Illegal Drop on %c%d (Legality Checking On) Posición ilegal en %c%d (Comprobación de legalidad activa) L44 62 Illegal Move %c%d%c%d (Legality Checking On) Movimiento ilegal %c%d%c%d (Comprobación de legalidad activa) L23 30 Illegal move, not sent. Movimiento ilegal, no enviado. L17 18 Increment (secs): Incremento (segs): L10 11 Increment: Incremento: L55 64 Inhibit seek lines on console when Seek Table is active Inhibir buscar líneas en la consola si esta activo Buscar tabla L16 17 Initial Position Posición inicial L23 25 Initial time ([mm:]ss): Tiempo inicial ([mm:]ss): L19 19 Initializing engine Inicializando motor L46 55 Invalid answer to DGT_SEND_BRD on port %s: %s Respuesta inválida a DGT_SEND_BRD en el puerto %s: %s L8 8 Joystick Joystick L3 5 Key Clave L4 6 Key: Tecla: L17 17 Kibitzes/Whispers Kibitzes/Susurros L4 5 Kill Matar L10 10 Knight %d Caballo %d L22 26 Last Proposal Received Última propuesta recibida L4 9 Left Izquierda L16 18 Light Squares... Escaques claros... L8 10 Load PGN Cargar PGN L11 13 Load PGN... Cargar PGN... L5 5 Local Local L15 25 Local Game List Lista de partidas locales L21 23 Looking up host %s... Buscando servidor %s... L6 6 Losers Losers L10 17 Main Board Tablero principal L13 11 Mamer and TDs Mamer y TDs L14 15 Manual/Formula Manual/Fórmula L23 40 Match Found at Line %d. Coincidencia encontrada en la línea %d. L15 9 Match Pattern: Patrón: L17 17 Material: %d - %d Material: %d - %d L8 12 Max Ply: Ply máximo: L30 32 Move made (Obs'vd/Exm'd Games) Hecho movimiento (Part. Ob./Ex.) L76 96 Move the axis to be used for moving back and forth\nthrough moves of a game. Mueva el eje a usar para moverse atrás y adelante\na través de los movimientos de una partida. L46 48 Move the axis to be used for selecting pieces. Mueva el eje a usar para seleccionar las piezas. L5 11 Moves Movimientos L22 21 Network is unreachable La red es inaccesible L18 23 News/Notifications Noticias/notificaciones L2 2 No No L9 12 No error. Sin errores. L19 29 No material to mate No hay material para dar mate L23 32 No output from program. No hay salida desde el programa. L8 13 No peer. Sin oponente. L19 25 No previous search. No hay búsqueda previas. L18 21 No proposals left. No quedan propuestas. L22 28 No proposals received. No se recibieron propuestas. L43 52 No response to DGT_SEND_BRD on port %s: %s. No hay respuesta a DGT_SEND_BRD en el puerto %s: %s. L4 7 None Ninguno L12 14 Normal Chess Ajedrez normal L11 12 Normal Text Texto normal L16 20 Not a socket ?!? ¿No es un socket?!? L2 7 OK Aceptar L17 20 Obs'vd Game Ended Part. Observ. acabó L7 8 Observe Observar L2 7 Ok Aceptar L160 177 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Una vez conecte a una maáquina desde este diálogo, será añadida al\nmenú Enlaces/Marcadores ICS. Edita el fichero ~/.eboard/eboard.conf\npara modificar o eliminar entradas. L293 334 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Sólo se añadirán las líneas que coincidan con el patrón anterior\na este panel. Los patrones se pueden sumar (OR) con el carácter |\n(barra vertical). El asterisco (*) se puede usar como comodín.\nEjemplos:\n'(20)|(22)' muestra solo líneas de los canales 20 y 22\n'blik * aburrido' muestra líneas con 'blik '(...)' aburrido'. L14 18 Opponent Moved El oponente movió L7 8 Options Opciones L11 13 PGN Headers Cabeceras PGN L13 12 PGN filename: Fichero PGN: L14 19 Partner Tells: Compañero te dice: L10 11 Pawn %d Peón %d L11 10 Pitch (Hz): Tono (Hz): L4 5 Play Jugar L56 58 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Jugar %s como %s vs. %s (%s, prof. %d, pensar siempre: %s) L58 64 Play WAV (need Device and Filename, sox must be installed) Reproducir WAV (necesita dispositivo y fichero, y sox instalado) L19 19 Play against Crafty Jugar contra Crafty L19 21 Play against Engine Jugar contra un motor L24 24 Play against GNU Chess 4 Jugar contra GNU Chess 4 L18 18 Play against Sjeng Jugar contra Sjeng L6 7 Player Jugador L14 19 Player resigns El jugador abandona L22 33 Player/Color Name Font Fuente de jugador/nombre de color L14 14 Pos: %s vs. %s Pos: %s vs. %s L11 12 Preferences Preferencias L54 54 Press the button to be used for going to the next tab. Pulse el botón a usar para ir al siguiente tabulador. L58 53 Press the button to be used for going to the previous tab. Pulse el botón a usar para ir al tabulador anterior. L51 51 Press the button to be used for selecting a square. Pulse el botón a usar para seleccionar un escaque. L12 16 Private Tell Decir en privado L13 23 Private Tells Conversaciones privadas L23 37 Program exited too soon El programa terminó demasiado pronto L8 8 Progress Progreso L17 14 Promotion Piece Promocionar a L7 8 Propose Proponer L12 16 Propose Game Proponer partida L8 9 Protocol Protocolo L33 37 Protocol mismatch, disconnecting. Protocolo no coincide, desconectando. L10 10 Queen %d Reina %d L5 6 Rated Puntua L6 11 Rating Puntuación L12 20 Rating Range Rango de puntuación L24 35 Read error from program. Error de lectura desde el programa. L33 43 Received a game proposal from %s. Recibida una proposición de partida de %s. L12 19 Recent Hosts Máquinas recientes L12 15 Refresh List Refrescar lista L19 31 Replied to seek #%d Contestó a la búsqueda nº %d L9 9 Resigned. Abandono. L6 9 Result Resultado L20 33 Retracted last move. Retractado el último movimiento. L45 55 Retrieve ICS Channel Lists from eboard.sf.net Recuperar las listas de canales ICS desde eboard.sf.net L18 26 Revert to Defaults Configuración por defecto L18 26 Revert to defaults Configuración por defecto L5 7 Right Derecha L10 10 Rook %d Torre %d L3 8 Run Ejecutar L13 17 Run Engine... Ejecutar motor... L27 46 Run Program (need Filename) Ejecutar programa (necesita nombre de fichero) L47 47 Run autofics.pl script after connecting to FICS Ejecutar autofics.pl despues de conectar a FICS L17 22 Save Buffer As... Guardar búfer como... L12 18 Save Game... Guardar partida... L11 16 Save as PGN Guardar como PGN L10 10 Scratch %d Esquema %d L6 6 Script Guión L11 16 Script List Lista de scripts L34 35 Scrollback limit (0 = unlimited) : Límite de scroll (0 = ilimitado) : L11 12 Search Text Buscar texto L12 12 Search for: Buscar por: L22 20 Search text not found. Texto no encontrado. L8 21 Seek Ads Anuncios de búsqueda L10 12 Seek Table Buscar tabla L15 22 Seek Table Font Fuente de buscar tabla L10 13 Serial :%s Nº serie: %s L10 17 Set Filter Establecer filtro L13 20 Set Filter... Establecer filtro... L49 65 Set depth limit to 0 to use the engine's default. Profundidad límite a 0 para usar el valor por defecto del motor. L13 18 Setup Buttons Configurar botones L21 27 Shortcut Button Setup Configurar atajo del botón L6 6 Shouts Gritos L42 53 Show channel tells in one pane per channel Mostrar conversaciones de canal en un panel por canal L63 72 Show channel tells on console too (when above option is active) Mostrar conversaciones también en consola (si la anterior está activa) L31 47 Show rating next to player name Mostrar puntuación junto al nombre del jugador L33 44 Show shortcut buttons below board Mostrar botones aceleradores bajo el tablero L11 14 Side & Time Bando y tiempo L14 19 Side Selection Selección de bando L14 16 Side to move: Lado que mueve: L22 25 Smooth joystick cursor Cursor del joystick suave L29 40 Smooth joystick cursor speed: Velocidad del cursor del joystick suave: L34 31 Smoother animation (eats more CPU) Animación suave (usa más CPU) L76 78 Sorry, this protocol does not allow to retract a move thru this menu option. Lo siento, este protocolo no permite retractar un movimiento con esta opción. L11 13 Sound Event Evento sonoro L12 17 Sound Events Eventos de sonido L6 7 Sounds Sonidos L54 58 Source code available at http://eboard.sourceforge.net Código fuente disponible en http://eboard.sourceforge.net L9 7 Stalemate Ahogado L18 21 Start a connection Iniciar una conexión L14 15 Starting Time: Tiempo inicial: L7 7 Suicide Suicida L8 10 TCP Port Puerto TCP L9 11 TCP Port: Puerto TCP: L12 24 Tab Position Posición de la pestaña L4 6 Test Probar L52 51 The checkbox on the left enables/disables the sound. La casilla de la izquierda (des)habilita el sonido. L69 74 The engine will be run with\n/bin/sh -c 'cd directory ; command line' El motor se ejecutará con\n/bin/sh -c 'cd directorio ; línea de comando' L12 14 Think Always Pensar siempre L24 32 Think on opponent's time Pensar en el tiempo del oponente L4 6 Time Tiempo L12 17 Time Control Control de tiempo L15 20 Time Control... Control de tiempo... L13 18 Time Control: Control de tiempo: L16 18 Time Running Out Tiempo agotándose L7 15 Timeout Fuera de tiempo L44 44 Times can be given as hh:mm:ss , mm:ss or ss Los tiempos pueden ser hh:mm:ss , mm:ss o ss L180 188 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Para ejecutar múltiples comandos con un atajo sepárelos con ; (punto y coma).\nPara ejecutar un script desde un atajo escriba script.NombreScript como comando, p.ej.: script.miguion.pl . L3 6 Top Arriba L13 20 Trademark :%s Marca registrada: %s L30 36 Type: Fischer Clock (ICS-like) Tipo: Cronómetro Fischer (como ICS) L25 32 Type: Fixed Time per Move Tipo: Tiempo fijo por movimiento L34 50 Type: Use engine's default setting Tipo: Usar la configuración por defecto del motor L29 41 Type: X Moves per Time Period Tipo: X movimientos por periodo de tiempo L26 33 Unable to bind on port %d. No se puede enlazar al puerto %d. L24 28 Unable to create socket. No se puede crear el socket. L44 51 Unable to find the DGT board on port %s: %s. No se encuentra el tablero DGT en el puerto %s: %s. L13 17 Unknown error Error desconocido L14 21 Unknown result Resultado desconocido L23 27 Use plain color squares Usar escaques de colo plano L5 5 Value Valor L6 6 Value: Valor: L7 8 Variant Variante L8 9 Variant: Variante: L24 26 Variant: %s (uneditable) Variante: %s (no editable) L4 7 Wait Esperar L21 25 Wait for a connection Esperar por una conexión L34 36 Waiting for connection on port %d. Esperando conexión en el puerto %d. L30 51 Warn when own clock is below: Avisar cuando el reloj propio esté por debajo de: L18 20 Welcome to eboard. Bienvenido a eboard. L5 6 White Blanco L14 15 White: %s - %s Blanco: %s - %s L10 13 Working... Trabajando... L16 19 Write to Console Escribir en consola L19 31 Wrong address space Espacio de direcciones erróneo L5 7 Wrote Escrito L3 2 Yes Si L49 54 You can only retract when it's your turn to move. Sólo se puede retractar cuando sea su turno de mover. L11 9 Your color: Su color: L10 10 Your name: Su nombre: L6 6 [chat] [chat] L5 5 [cmd] [cmd] L29 36 [eboard] ** $HOME is too long [eboard] ** $HOME es demasiado largo L39 39 [eboard] ** failed to create directory [eboard] ** falló al crear directorio L20 21 [eboard] ** no $HOME [eboard] ** sin $HOME L22 29 [eboard] bad RC line\n [eboard] línea RC errónea\n L4 6 beep pitido L5 7 beeps pitidos L5 6 black negras L53 66 can't load PGN move text from %s (error opening file) no puedo cargar de %s el texto del movimiento PGN (error al abrir) L30 45 can't seek to offset %lu of %s no puedo desplazarme a la posición %lu de %s L26 36 dgtnix driver version %.1f versión del controlador dgtnix %.1f L14 19 discards board descarta el tablero L32 37 eboard Direct Connection Manager Gestor de conexión directa de eboard L22 23 eboard version %s (%s) eboard versión %s (%s) L343 371 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard versión %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nEste programa es software libre; puedes redistribuirlo\ny/o modificarlo bajo los términos de la GNU General\nPublic License, tal y como se publicó por la Free Software\nFoundation; tanto en la versión 2 de la licencia, u\n(opcionalmente) cualquier versión posterior.\n L19 22 eboard: Console #%d eboard: Consola nº %d L60 74 engine claimed illegal move but we didn't move, ignoring it. el motor reclamó un movimiento ilegal pero no hemos movido, ignorándolo. L22 33 error parsing PGN data error interpretando los datos PGN L11 19 flips board invierte el tablero L4 7 game partida L5 8 games partidas L17 19 generic xboard v2 xboard genérico v2 L20 28 goes back 1 halfmove retrocede 1 medio-movimiento L26 30 goes back to start of game vuelve al inicio de la partida L23 25 goes forward 1 halfmove avanza 1 medio-movimiento L27 27 goes forward to end of game avanza al fin de la partida L13 20 illegal move! ¡movimiento ilegal! L11 13 in progress en ejecución L29 32 initial time %s, increment %s tiempo inicial %s, incremento %s L8 8 moves in mueve en L2 2 no no L14 20 no such game: no hay tal partida: L19 21 no time control set Sin control de tiempo L4 4 none nada L7 7 nothing ninguno L37 37 opens new scratch board with position abrir nuevo tablero con una posición L8 14 per move por movimiento L18 17 plain console beep pitido de consola L12 21 play file %s reproducir fichero %s L21 31 pops up the move list muestra la lista de movimientos L24 32 process creation failed. falló la creación del proceso. L5 8 rated puntuada L6 11 run %s ejecutar %s L10 13 running %s ejecutando %s L18 18 savePGN failed: %s falló savePGN: %s L54 63 savePGN failed: Won't save game with less than 2 moves falló savePGN: no salvará partidas con menos de 2 movimientos L8 9 seconds. segundos. L7 10 unrated sin puntos L7 10 untimed sin tiempo L5 7 white blancas L3 2 yes si E 524 eboard-1.1.1.orig/multilang/Makefile0000644000175000017500000000153110757567572016734 0ustar patrikpatrik LANGS = cs de es fr hu it ja pl pt_BR POCOMP = ./pocomp.pl HARVEST = ./harvest.pl DICTS = eboard.cs.dict eboard.de.dict eboard.es.dict eboard.fr.dict eboard.hu.dict eboard.it.dict eboard.ja.dict eboard.pl.dict eboard.pt_BR.dict dicts: $(DICTS) %.dict : %.po $(POCOMP) < $< > $@ update: $(HARVEST) # all targets below this point should be called from the parent directory's # Makefile, or the vars they use will have bogus values install-nls: $(DICTS) $(INSTALL) -d $(datadir) $(INSTALL) -m 0644 $(DICTS) $(datadir) uninstall-nls: for p in $(DICTS); do rm -f $(datadir)/$$p ; done EXTRADIST = README Makefile pocomp.pl harvest.pl harvest.in eboard.hemp eboard.cs.po eboard.de.po eboard.es.po eboard.fr.po eboard.hu.po eboard.it.po eboard.ja.po eboard.pl.po eboard.pt_BR.po dist: $(DICTS) cp -f $(DICTS) $(EXTRADIST) ../$(DIST)/multilang eboard-1.1.1.orig/multilang/eboard.pt_BR.po0000644000175000017500000020364010757567572020102 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** LEITURA PNG FALHOU: usando tema interno de baixa resolução. Vai ficar feio.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " Procurar... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Jogar Selecionado " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " Atualizar " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " Remover Campo " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Alterar " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Introdução\n" "#M#Tarefas Comuns no eboard\n" "\nJogando contra o Computador\n" "#S#eboard não joga xadrez, mas serve de interface para programas que jogam, chamados de\n" "engines ou simplesmente programas de xadrez, que não possuem interface gráfica.\n" "Você precisa de um programa de xadrez para jogar com o computador. GNU Chess, Crafty e\n" "Sjeng são programas gratuitos que jogam xadrez. Uma vez instalados, abra o menu\n" "#B#Parceiro#K# e o submenu em #B#Jogar contra um Programa#K#, e escolha a opção apropriada ao\n" "programa que você instalou.\n" "\n#M#Jogando Xadrez na Internet\n" "#S#Eboard suporta o protocolo FICS. O serviço FICS funciona no endereço freechess.org,\n" "mas outros servidores que usam o software do FICS, como o US Chess Live devem funcionar\n" "com o eboard também. O ICC não é suportado.\n" "Para conectar ao FICS, abra o menu #B#Parceiro#K# e clique em #B#Conectar ao FICS#K#.\n" "Para conectar a outro servidor, use a opção #B#Conectar a Outro Servidor...#K# do menu #B#Parceiro#K#.\n" "Embora você possa entrar no FICS como convidado (guest), você aproveitará melhor o servidor\n" "como usuário registrado. O registro é feito no site #B#http://www.freechess.org#K#,\n" "e é totalmente gratuito.\n" "\n#M#Abrindo Jogos no Formato PGN\n" "#S#PGN é o formato mais comum para armazenar jogos de xadrez. Ele pode armazenar\n" "as jogadas e comentários (anotações). Para abrir este tipo de arquivo no eboard,\n" "clique a opção #B#Jogos no Cliente#K# do menu #B#Janelas#K#, e então clique em #B#Ler PGN...#K#\n" "Para mostrar um jogo em um tabuleiro, selecione-o na lista e clique em #B#Exibir Jogo#K#." # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s para %s, %d Hz por %d mseg" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d jogos lidos" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d jogadas em %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Conectar a %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (brancas) vs. %s (pretas)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s aceitou sua proposta de jogo." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "Programa %s iniciado." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s oferece um empate." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s por jogada" # state: translated # (1) clock.cc:317 msgid "%s/move" msgstr "%s/jogada" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "(Passou do fim) Encontrou na Linha %d." # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (Nome no FICS: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(mensagem omitida -- modo de senha ?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(nenhum atalho)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(nenhum)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(período de tempo)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* jogo não encontrado: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] protocolo inválido em atalho: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** aviso: variável HOME não definida\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- %s jogo no arquivo PGN %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Desconectado" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Jogo/A_diar" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Game/_Voltar Jogada" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Jogo/A_bortar" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Jogo/_Oferecer Empate" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Jogo/_Abandonar" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Ajuda/_Sobre o eboard..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Ajuda/_Dados para Depuração" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Ajuda/_Introdução" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Ajuda/_Teclas" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Ajuda/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Parceiro/Conectar ao _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Parceiro/Conexão direta com eboard _Remoto..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Parceiro/Atal_hos de Programas" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Parceiro/_Atalhos de ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Parceiro/Jogar contra um _Programa/Cr_afty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Parceiro/Jogar contra um _Programa/GNU Chess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Parceiro/Jogar contra um _Programa/Programa _Genérico..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Parceiro/Jogar contra um _Programa/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Parceiro/Jogar contra um _Programa/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Parceiro/Jogar contra um _Programa" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Parceiro/_Conectar a Outro Servidor..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Parceiro/_Desconectar" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Parceiro/Tabuleiro de Rascunho _Vazio" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Parceiro/Sai_r" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Parceiro/Tabuleiro de Rascunho em Posição _Inicial" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Parceiro/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Parceiro/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Parceiro/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Opções/Peças _Bitmap/Carregar _Peças Apenas" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Opções/Peças _Bitmap/Carregar _Tabuleiro Apenas" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Opções/Peças _Bitmap/Carregar _Tema" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Opções/Peças _Bitmap" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Opções/Verificar _Legalidade" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Opções/Comportamento _ICS/Ir Automaticamente para Novos _Tabuleiros" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Opções/Comportamento _ICS/_Descartar Jogos Observados em Segundo Plano" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Opções/Habilitar Pré_move" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Opções/M_ostrar Coordenadas" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Opções/_Animar Jogadas" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Opções/Som _quando o oponente move" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Opções/Habilitar _outros sons" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Opções/_Destacar última Jogada" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Opções/Comportamento _ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Opções/_Preferências..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Opções/Peças _Vetoriais (Mais Rápidas)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Opções/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Janelas/Encontrar de _Novo" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Janelas/Jogos no _Cliente..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Janelas/Salvar _Geometria das Janelas" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Janelas/Salvar Con_teúdo do Console..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Janelas/_Anúncios no Servidor..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Janelas/Console A_dicional" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Janelas/_Encontrar Texto..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Janelas/_Jogos no Servidor..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Janelas/Executar Scri_pt..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Janelas/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Janelas/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Janelas/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Jogo" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_Ajuda" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Parceiro" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/_Opções" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/Ja_nelas" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " impossível carregar fonte.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** uma ou mais fontes do tabuleiro não puderam ser carregadas -instale as fontes de 75 e 100 dpi do X11, reinicie o X e tente novemente.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** uma ou mais fontes do tabuleiro nao puderam ser carregadas\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " pedido de cancelamento enviado" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " pedido de adiamento enviado" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " proposta de empate enviada" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** padrão ilegal: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** arquivo não encontrado: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " falha ao carregar " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " falha ao carregar " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " adiamento não suportado" # state: translated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr " Protocolo Incompatível" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Sessão Cancelada" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " pedido de empate enviado" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (senha enviada)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [a partir de menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [executado de um atalho]" # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [script executado de atalho] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "Sobre o eboard" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Aceitar" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "Conexão aceita, vindo de %s" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Descrição" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Lista de Anúncios" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Lista de Anúncios (atualizando...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Adicionar ao menu de Atalhos" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Endereço em uso" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Anúncios" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Já está conectado ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "Em qualquer lugar:\n" "F3: Ir para a aba anterior.\n" "F4: Ir para a próxima aba.\n" "F5: Ir para o tabuleiro principal.\n" "F6: Ir para o console.\n" "F7: Ir para a tabela de seeks.\n" "F8: Alternar barra de atalhos.\n" "Page Up/Page Down: rola o texto do console.\n" "Ctrl+Esquerda: move uma jogada para trás.\n" "Ctrl+Direira: move uma jogada à frente.\n" "Ctrl+F: Busca de texto no console principal.\n" "Ctrl+G: Repete busca.\n" "\nCampo de entrada:\n" "Para cima/para baixo (setas): move no histórico de comandos.\n" "Enter: envia linha.\n" "Esc: alterna modo Chat/modo Comando.\n" "\nSintaxismos:\n" "No campo de entrada principal:\n" ".. %prefix texto muda o prefixo do modo chat para texto.\n" ".. %do algumscript executa o script algumscript." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Aparência" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "Adicionei" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Aplicar" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Aplicar" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Auto-gravar jogos observados" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Auto-gravar jogos jogados" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Autogravação" # state: translated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "Eixos & Botões" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Fundo" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Descritor inválido" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Bipe (requer Tom, Duração, Contagem e Dispositivo)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Bispo %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Pretas" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Pretas: %s - %s" # state: translated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "Eixo do Cursor do Tabuleiro: %d\n" "Botão de Seleção do Tabuleiro: %d\n" "Eixo de Navegação de Jogadas: %d\n" "Botão para Aba Anterior: %d\n" "Botão para Próxima Aba: %d\n" # state: translated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "Versão do Tabuleiro: %s" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Título do Atalho:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Abaixo" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Texto Claro" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Procurar" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Escrita do conteúdo falhou." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Jogo do Parceiro" # state: translated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "Endereço do Barramento: %s" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Texto do Botão" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "ícone do Botão" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Cancelar" # state: translated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "Cancelar Configuração do Joystick" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Espera por conexão cancelada." # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "Escolher..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Conversa em Canais" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Xeque-Mate" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Programas de Xadrez" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Escolher Fonte" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Escolher..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Fonte do Relógio" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "Fechar" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Cor" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Seleção de Cores" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Cores" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Comando" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Linha de Comando:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Computador" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Computador com Brancas vs. Humano com Pretas" # state: translated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "Configurar Eixos & Botões" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Arquivos de Som Configurados:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Conectar" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Conectar a Servidor ICS" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Conectado a %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "Conectando a %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Conexão Recusada" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Conexão com %s:%d falhou: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Console" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Bipe de Console" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Fonte do Console" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Conteúdo do console salvo." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Contagem:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: translated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "Tabuleiro DGT encontrado na porta %s." # state: translated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "Erro no suporte DGT: página errada" # state: translated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "Alerta DGT: posições diferentes no eboard e no tabuleiro DGT." # state: translated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "DGT: código não reconhecido: %c (%d)" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Casas Pretas..." # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Remover Todos" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Remover este Atalho" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Limite de Profundidade:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Descrição" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Dispositivo:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Diretório de onde executar" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Diretório:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Descartar Tudo" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Descartar Jogo" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Fechar" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Exibir Jogo" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Exibido" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distribuído sob os termos da GNU General Public License, versão 2 ou mais recente" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Proposta de Empate" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Proposta de empate enviada." # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Empate por acordo" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Soltar Peça:" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Duração (mseg):" # state: translated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "Gráfico Dinâmico de Anúncios" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Lista dinâmica de anúncios" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Editar Atalhos..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Editar Atalhos de Programas" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Editar Informações" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Controle de Tempo" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Limpar" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Atalhos de Programas" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Dados do Programa" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Tipo de Programa:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Tipo de Programa: %s (não editável)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Programa pediu mais tempo, esperando." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Linha de comando do programa" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Programa carregado." # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Programa executando" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Programa iniciado (espera de 2 segundos)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Entre a Posição FEN" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Tipo de Evento" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Jogo Exam.#%d" # state: translated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "Linha de comando falhou:" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Programa falhou." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Não conseguiu executar programa" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Arquivo a tocar / Programa a executar:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtro: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtro: (nenhum)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Termine primeiro a conexão atual." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Termine o jogo atual primeiro." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Títulos" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Fontes" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "De Outros Lugares (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "De Programas (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "Do FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "Do ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "De Arquivos PGN (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Jogo #" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Jogo #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Jogo #%d - %d %d %s" # state: translated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "Jogo #%d - %s" # state: translated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "Jogo #%d - %s - %s" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Jogo #%d - %s vs. %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Jogo #%d - sem relógio %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Jogo #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Jogo Cancelado" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Descrição do Jogo" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Fonte de Informações do Jogo" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Lista de Jogos" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Lista de Jogos (atualizando...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Jogo Perdido" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "Jogo iniciado!" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Jogo Vencido" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Jogo adicionado a %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Jogo em andamento." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Jogo terminado: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Oferta de jogo enviada." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Jogo iniciado!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Jogo/Tabuleiro: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Jogos" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Programa XBoard Genérico..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Representação gráfica do estoque de crazy/bughouse" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Ajuda: Dados para Depuração" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Ajuda: Introdução " # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Ajuda: Teclas" # state: translated # (1) network.cc:670 msgid "Helper program not found" msgstr "Programa auxiliar não encontrado" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Esconder!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Servidor não encontrado: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Hostname" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Nome do host ou endereço IP:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "Humano" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "Humano com Brancas vs. Computador com Pretas" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "Humano joga com as Brancas" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Desafio no ICS" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "Criação de pipe IPC falhou." # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Id" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Escolhendo um atalho, o programa\n" "jogará no lado a jogar, ignorando a\n" "configuração do atalho." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Jogada Ilegal em %c%d (Verificação de Legalidade Ligada)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Jogada Ilegal %c%d%c%d (Verificação de Legalidade Ligada)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Jogada ilegal, não enviada." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Incremento (segs):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Incremento:" # state: translated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "Inibir anúncios no console quando o gráfico estiver ativo" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Inibir anúncios no console quando a tabela estiver ativa" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Pos. Inicial" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Tempo inicial ([mm:]ss):" # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Preparando programa" # state: lost (deprecated key) # (1) dgtboard.cc:223 msgid "Invalid answer to DGT_SEND_BRD on port %s: %s " msgstr "Resposta inválida para DGT_SEND_BRD na porta %s: %s " # state: translated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "Joystick" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Chave" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Chave:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibitzes/Whispers" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Parar" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Cavalo %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Última Proposta Recebida" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Esquerda" # state: translated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "Clique esquerdo para jogar, clique direito para atualizar." # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "Casas Brancas..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "Ler PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Ler PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Local" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Lista Local de Jogos" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Procurando servidor %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Tabuleiro" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer e TDs" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manual/Fórmula" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Encontrou na Linha %d." # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Casar Padrão: " # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Material: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Profundidade Máxima:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Movimento (Jogos Observ./Exam.)" # state: translated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" "Mova o eixo a ser usado para navegar pelos movimentos\n" "de um jogo." # state: translated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "Mova o eixo a ser usado para selecionar peças." # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Jogadas" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Rede inalcançavel" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "News/Notificações" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "Não" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Sem erro." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "Material insuficiente para mate" # state: translated # (1) network.cc:781 msgid "No output from program." msgstr "Nenhuma saída do programa." # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Sem parceiro." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Não há busca anterior." # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Não há propostas." # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "Nenhuma proposta recebida" # state: lost (deprecated key) # (1) dgtboard.cc:219 msgid "No response to DGT_SEND_BRD on port %s: %s." msgstr "Sem resposta para DGT_SEND_BRD na porta %s: %s." # state: translated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "Filtragem de Caracteres Não-ASCII" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Nenhum" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Xadrez Normal" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Texto Normal" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "Não é um socket ?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Fim de Jogo Observ." # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Observar" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "Ok" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Conectando uma vez a partir desta caixa de diálogo, o servidor\n" "será adicionado à lista de atalhos de servidores. Edite o\n" "arquivo ~/.eboard/eboard.conf para modificar ou remover atalhos." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Apenas linhas que casem o padrão acima aparecerão\n" "neste console. Padrões podem ser combinados (OU lógico)\n" "com o caractere | (pipe). Um asterisco (*) casa qualquer\n" "sequência.\n" "Exemplos:\n" "'(20)|(22)' mostra apenas linhas dos canais 20 e 22\n" "'blik * bored' mostra apenas linhas 'blik '(...)' bored'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "Movimento do Oponente" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Opções" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "Cabeçalhos PGN" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "Arquivo PGN:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Mensagens do Parceiro:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Peão %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Tom (Hz):" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Jogar" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Jogar %s de %s vs. %s (%s, prof. %d, pensar sempre: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Tocar WAV (requer Dispositivo e Nome de arquivo, requer sox)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Jogar contra o Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Jogar contra Programa" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Jogar contra o GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Jogar contra o Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Jogador" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "Jogador abandonou" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Fonte do Nome Jogador/Cor" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pos: %s vs. %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Preferências" # state: translated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "Pressione o botão a ser usado para ir à próxima aba." # state: translated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "Pressione o botão a ser usado para voltar à aba anterior." # state: translated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "Pressione o botão a ser usado para selecionar peças." # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Mensagem Pessoal" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Mensagens Pessoais" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Programa saiu muito depressa" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Progresso" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Promover para " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Propor" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Propor Jogo" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protocolo" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Erro de protocolo, desconectando." # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Dama %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Rated" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Rating" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Faixa de Rating" # state: translated # (1) network.cc:788 msgid "Read error from program." msgstr "Erro de leitura do programa." # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Proposta de jogo recebida de %s." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Servidores Recentes" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Atualizar Lista" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Respondeu ao seek #%d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Abadonam." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Resultado" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "A última jogada foi desfeita." # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Obter listas de nomes de canais de eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "Cores Originais" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "Fontes Originais" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Direita" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Torre %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Executar" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Programa..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Executar Programa (requer Nome de arquivo)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Executar autofics.pl após conectar ao FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Salvar Conteúdo Como..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Salvar Jogo..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Salvar como PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Rascunho %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Script" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Lista de Scripts" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Limite de scrollback (0 = ilimitado) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Buscar Texto" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Procurar por: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Texto não encontrado." # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Anúncios" # state: translated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "Anúncios" # state: translated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "Anúncios" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Anúncios" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Anúncios" # state: translated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "Serial: %s" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Usar Filtro" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Usar Filtro..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Coloque os valores em zero para\nusar o valor padrão do programa." # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Configurar Botões" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Configuração de Botões de Atalho" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Shouts" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Mostrar canais em uma aba por canal" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Mostrar canais no console também (quando a opção acima estiver ativa)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Mostrar rating ao lado do nome do jogador" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Mostrar botões de atalho abaixo do tabuleiro" # state: translated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "Mostrar hora nas linhas de texto" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Lado & Tempo" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Escolha de Lado" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "Lado a jogar: " # state: translated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "Cursor suave para o joystick" # state: translated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "Velocidade do cursor suave do joystick:" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Animação mais suave (gasta mais CPU)" # state: translated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "Simplificar" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Desculpe, este protocolo não permite voltar uma jogada através deste menu." # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Evento Sonoro" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Eventos Sonoros" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Sons" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Código-fonte disponível em http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Rei afogado" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Iniciar uma conexão" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "Tempo Inicial:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "Porta TCP" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "Porta TCP:" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "Posição das Abas" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Testar" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "O controle à esquerda habilita/desabilita o som." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "O programa será executado com\n/bin/sh -c 'cd diretório ; linha de comando'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "Pensar Sempre" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "Pensar no tempo do oponente" # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Tempo" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Controle de Tempo" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Controle de Tempo..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Controle de Tempo" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Tempo Esgotando" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Tempo Expirou" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Tempos podem ser dados como hh:mm:ss , mm:ss ou ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Para executar vários comandos, separe-os com ; (ponto-e-vírgula)\n" "Para executar um script, use script.nomedoscript" # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Acima" # state: translated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "Marca: %s" # state: translated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "Truncar" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Tipo: Relógio Fischer (ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Tipo: Tempo Fixo por Jogada" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Tipo: Usar o padrão do programa" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Tipo: X Jogadas por Período" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "Impossível associar à porta %d." # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Impossível criar socket." # state: translated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "DGT não encontrado na porta %s." # state: lost (deprecated key) # (1) dgtboard.cc:215 msgid "Unable to find the DGT board on port %s: %s." msgstr "Tabuleiro DGT não encontrado na porta %s: %s." # state: translated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "Erro ao carregar símbolo da biblioteca dgtnix.\n" # state: translated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "Erro ao carregar a biblioteca dgtnix.\n" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Erro desconhecido." # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Resultado desconhecido" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Usar cores lisas nas casas" # state: translated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "Usar sublinhas" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Valor" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Valor:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Variante" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Variante:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Variante: %s (não editável)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Esperar" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Esperar por uma conexão" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Esperando conexão na porta %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Avisar quando o próprio relógio estiver abaixo de: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Bem-vindo ao eboard." # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Brancas" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Brancas: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "Aguarde..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Escrever no Console" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Endereço inválido" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "Escrevi" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Sim" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Você pode voltar apenas quando for a sua vez." # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Sua cor:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Seu nome:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[chat]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[cmd]" # state: translated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "[eboard] ** $HOME longo demais" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** não foi possível criar diretório " # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** sem $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] linha de configuração inválida\n" # state: translated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "[procurar]" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "bipe" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "bipes" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "pretas" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "impossível carregar PGN de %s (erro abrindo arquivo)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "impossível deslocar para offset %lu de %s" # state: lost (deprecated key) # (1) dgtboard.cc:208 msgid "dgtnix driver version %.1f" msgstr "biblioteca dgtnix versão %.1f" # state: translated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "driver dgtnix versão: %s" # state: translated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "dgtnix muito antigo: %f, precisa ser >= %f" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "descarta tabuleiro" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "Gerenciador de Conexão Direta do eboard" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "eboard versão %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard versão %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nEste programa é software livre; você pode redistribui-lo\n" "e/ou modificá-lo sob os termos da GNU General Public\n" "License tal como publicada pela Free Software Foundation;\n" "versão 2 da licença ou (sua opção) qualquer versão\n" "mais recente.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: Console #%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "programa reclamou de jogada ilegal mas não houve jogada, ignorando." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "erro interpretando dados PGN" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "inverte tabuleiro" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "jogo" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "jogos" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "xboard genérico v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "volta meia jogada" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "volta ao início do jogo" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "avança meia jogada" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "avança ao fim do jogo" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "jogada ilegal!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "em andamento" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "tempo inicial %s, incremento %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "Jogadas" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "não" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "jogo inexistente: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "Controle de Tempo" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "nada" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "nada" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "abre novo tabuleiro rascunho com esta posição" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "por jogada" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "bipe de console" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "tocar arquivo %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "abre a lista de jogadas" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "Criação de processo falhou." # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "rated" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "executar %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "rodando %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "savePGN falhou: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "savePGN falhou: Não grava jogos com menos de 2 movimentos" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "segundos." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "unrated" # state: translated # (1) clock.cc:313 msgid "untimed" msgstr "sem relógio" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "brancas" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "sim" eboard-1.1.1.orig/multilang/eboard.pt_BR.dict0000644000175000017500000010427210757567572020410 0ustar patrikpatrikL72 83 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** LEITURA PNG FALHOU: usando tema interno de baixa resolução. Vai ficar feio.\n L11 13 Browse... Procurar... L15 19 Play Selected Jogar Selecionado L9 11 Refresh Atualizar L14 15 Remove Field Remover Campo L5 9 Set Alterar L1543 1603 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Introdução\n#M#Tarefas Comuns no eboard\n\nJogando contra o Computador\n#S#eboard não joga xadrez, mas serve de interface para programas que jogam, chamados de\nengines ou simplesmente programas de xadrez, que não possuem interface gráfica.\nVocê precisa de um programa de xadrez para jogar com o computador. GNU Chess, Crafty e\nSjeng são programas gratuitos que jogam xadrez. Uma vez instalados, abra o menu\n#B#Parceiro#K# e o submenu em #B#Jogar contra um Programa#K#, e escolha a opção apropriada ao\nprograma que você instalou.\n\n#M#Jogando Xadrez na Internet\n#S#Eboard suporta o protocolo FICS. O serviço FICS funciona no endereço freechess.org,\nmas outros servidores que usam o software do FICS, como o US Chess Live devem funcionar\ncom o eboard também. O ICC não é suportado.\nPara conectar ao FICS, abra o menu #B#Parceiro#K# e clique em #B#Conectar ao FICS#K#.\nPara conectar a outro servidor, use a opção #B#Conectar a Outro Servidor...#K# do menu #B#Parceiro#K#.\nEmbora você possa entrar no FICS como convidado (guest), você aproveitará melhor o servidor\ncomo usuário registrado. O registro é feito no site #B#http://www.freechess.org#K#,\ne é totalmente gratuito.\n\n#M#Abrindo Jogos no Formato PGN\n#S#PGN é o formato mais comum para armazenar jogos de xadrez. Ele pode armazenar\nas jogadas e comentários (anotações). Para abrir este tipo de arquivo no eboard,\nclique a opção #B#Jogos no Cliente#K# do menu #B#Janelas#K#, e então clique em #B#Ler PGN...#K#\nPara mostrar um jogo em um tabuleiro, selecione-o na lista e clique em #B#Exibir Jogo#K#. L30 32 %d %s to %s, %d Hz for %d msec %d %s para %s, %d Hz por %d mseg L13 14 %d games read %d jogos lidos L14 16 %d moves in %s %d jogadas em %s L25 25 %d. Connect to %s:%d (%s) %d. Conectar a %s:%d (%s) L41 44 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (brancas) vs. %s (pretas)\n%s\n%d:%.2d %d L31 32 %s accepted your game proposal. %s aceitou sua proposta de jogo. L18 21 %s engine started. Programa %s iniciado. L17 21 %s offers a draw. %s oferece um empate. L11 13 %s per move %s por jogada L7 9 %s/move %s/jogada L33 38 (Wrapped) Match Found at Line %d. (Passou do fim) Encontrou na Linha %d. L64 65 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (Nome no FICS: Pulga) L39 37 (message obfuscated -- password mode ?) (mensagem omitida -- modo de senha ?) L14 15 (no bookmarks) (nenhum atalho) L6 8 (none) (nenhum) L13 19 (time period) (período de tempo) L18 24 * game not found: * jogo não encontrado: L47 43 ** [eboard] bad engine protocol # in bookmark: ** [eboard] protocolo inválido em atalho: L57 50 ** eboard ** warning: HOME environment variable not set\n ** eboard ** aviso: variável HOME não definida\n L26 29 --- %s game to PGN file %s --- %s jogo no arquivo PGN %s L16 16 --- Disconnected --- Desconectado L14 12 /Game/Ad_journ /Jogo/A_diar L19 20 /Game/Retract _Move /Game/_Voltar Jogada L12 14 /Game/_Abort /Jogo/A_bortar L17 22 /Game/_Offer Draw /Jogo/_Oferecer Empate L13 16 /Game/_Resign /Jogo/_Abandonar L22 25 /Help/_About eboard... /Ajuda/_Sobre o eboard... L17 30 /Help/_Debug Info /Ajuda/_Dados para Depuração L22 20 /Help/_Getting Started /Ajuda/_Introdução L11 14 /Help/_Keys /Ajuda/_Teclas L10 11 /Help/sep4 /Ajuda/sep4 L22 27 /Peer/Connect to _FICS /Parceiro/Conectar ao _FICS L43 47 /Peer/Direct connect with _Remote eboard... /Parceiro/Conexão direta com eboard _Remoto... L23 31 /Peer/Engine B_ookmarks /Parceiro/Atal_hos de Programas L20 25 /Peer/ICS _Bookmarks /Parceiro/_Atalhos de ICS L36 46 /Peer/Play against Engine/Cr_afty... /Parceiro/Jogar contra um _Programa/Cr_afty... L41 51 /Peer/Play against Engine/GNU Chess _4... /Parceiro/Jogar contra um _Programa/GNU Chess _4... L44 58 /Peer/Play against Engine/_Generic Engine... /Parceiro/Jogar contra um _Programa/Programa _Genérico... L35 45 /Peer/Play against Engine/_Sjeng... /Parceiro/Jogar contra um _Programa/_Sjeng... L30 40 /Peer/Play against Engine/sep1 /Parceiro/Jogar contra um _Programa/sep1 L26 35 /Peer/Play against _Engine /Parceiro/Jogar contra um _Programa L33 39 /Peer/_Connect to Other Server... /Parceiro/_Conectar a Outro Servidor... L17 22 /Peer/_Disconnect /Parceiro/_Desconectar L26 38 /Peer/_Empty Scratch Board /Parceiro/Tabuleiro de Rascunho _Vazio L11 15 /Peer/_Quit /Parceiro/Sai_r L42 53 /Peer/_Scratch Board with Initial Position /Parceiro/Tabuleiro de Rascunho em Posição _Inicial L10 14 /Peer/sep2 /Parceiro/sep2 L10 14 /Peer/sep3 /Parceiro/sep3 L10 14 /Peer/sep4 /Parceiro/sep4 L48 48 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Opções/Peças _Bitmap/Carregar _Peças Apenas L49 51 /Settings/Bitmapped Piece Sets/Load _Squares Only /Opções/Peças _Bitmap/Carregar _Tabuleiro Apenas L42 39 /Settings/Bitmapped Piece Sets/Load _Theme /Opções/Peças _Bitmap/Carregar _Tema L31 24 /Settings/Bitmapped Piece _Sets /Opções/Peças _Bitmap L35 31 /Settings/Enable Legality _Checking /Opções/Verificar _Legalidade L55 70 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Opções/Comportamento _ICS/Ir Automaticamente para Novos _Tabuleiros L69 73 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Opções/Comportamento _ICS/_Descartar Jogos Observados em Segundo Plano L18 29 /Settings/Pre_move /Opções/Habilitar Pré_move L27 30 /Settings/Sho_w Coordinates /Opções/M_ostrar Coordenadas L24 25 /Settings/_Animate Moves /Opções/_Animar Jogadas L33 37 /Settings/_Beep on Opponent Moves /Opções/Som _quando o oponente move L30 32 /Settings/_Enable Other Sounds /Opções/Habilitar _outros sons L30 34 /Settings/_Highlight Last Move /Opções/_Destacar última Jogada L23 28 /Settings/_ICS Behavior /Opções/Comportamento _ICS L25 27 /Settings/_Preferences... /Opções/_Preferências... L47 43 /Settings/_Vectorized Pieces (Faster Rendering) /Opções/Peças _Vetoriais (Mais Rápidas) L14 14 /Settings/sep3 /Opções/sep3 L23 27 /Windows/Find _Previous /Janelas/Encontrar de _Novo L28 29 /Windows/Games on _Client... /Janelas/Jogos no _Cliente... L31 38 /Windows/Save Desktop _Geometry /Janelas/Salvar _Geometria das Janelas L29 40 /Windows/Save _Text Buffer... /Janelas/Salvar Con_teúdo do Console... L26 34 /Windows/_Ads on Server... /Janelas/_Anúncios no Servidor... L26 27 /Windows/_Detached Console /Janelas/Console A_dicional L32 28 /Windows/_Find Text (upwards)... /Janelas/_Encontrar Texto... L28 30 /Windows/_Games on Server... /Janelas/_Jogos no Servidor... L23 28 /Windows/_Run Script... /Janelas/Executar Scri_pt... L13 13 /Windows/sep1 /Janelas/sep1 L13 13 /Windows/sep2 /Janelas/sep2 L13 13 /Windows/sep3 /Janelas/sep3 L6 6 /_Game /_Jogo L6 7 /_Help /_Ajuda L6 10 /_Peer /_Parceiro L10 10 /_Settings /_Opções L9 9 /_Windows /Ja_nelas L106 120 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n L41 52 can't load font.\n impossível carregar fonte.\n L124 154 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** uma ou mais fontes do tabuleiro não puderam ser carregadas -instale as fontes de 75 e 100 dpi do X11, reinicie o X e tente novemente.\n L58 78 ** failed to load one or more board fonts\n ** uma ou mais fontes do tabuleiro nao puderam ser carregadas\n L34 47 abort request sent pedido de cancelamento enviado L36 44 adjourn request sent pedido de adiamento enviado L33 43 draw request sent proposta de empate enviada L110 124 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n L45 41 ** bad pattern string: ** padrão ilegal: L40 49 ** file not found: ** arquivo não encontrado: L39 42 failed to load falha ao carregar L112 126 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Aviso: fonte fixed não pode ser carregada, o conteúdo desta janela vai ficar horrível.\n L34 37 failed to load falha ao carregar L42 43 Adjourning not supported adiamento não suportado L46 42 Incompatible Engine Protocol Protocolo Incompatível L33 36 Session Aborted Sessão Cancelada L35 41 draw request sent pedido de empate enviado L9 10 L17 17 > (password sent) > (senha enviada) L23 23 > [issued from menu] %s > [a partir de menu] %s L25 26 > [issued from shortcut] > [executado de um atalho] L31 33 > [script run from shortcut] %s > [script executado de atalho] %s L12 14 About eboard Sobre o eboard L6 7 Accept Aceitar L36 28 Accepted incoming connection from %s Conexão aceita, vindo de %s L14 11 Ad Description Descrição L7 18 Ad List Lista de Anúncios L23 35 Ad List (refreshing...) Lista de Anúncios (atualizando...) L33 28 Add to Peer/Engine Bookmarks menu Adicionar ao menu de Atalhos L22 16 Address already in use Endereço em uso L3 9 Ads Anúncios L21 23 Already connected ?!? Já está conectado ?!? L675 699 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. Em qualquer lugar:\nF3: Ir para a aba anterior.\nF4: Ir para a próxima aba.\nF5: Ir para o tabuleiro principal.\nF6: Ir para o console.\nF7: Ir para a tabela de seeks.\nF8: Alternar barra de atalhos.\nPage Up/Page Down: rola o texto do console.\nCtrl+Esquerda: move uma jogada para trás.\nCtrl+Direira: move uma jogada à frente.\nCtrl+F: Busca de texto no console principal.\nCtrl+G: Repete busca.\n\nCampo de entrada:\nPara cima/para baixo (setas): move no histórico de comandos.\nEnter: envia linha.\nEsc: alterna modo Chat/modo Comando.\n\nSintaxismos:\nNo campo de entrada principal:\n.. %prefix texto muda o prefixo do modo chat para texto.\n.. %do algumscript executa o script algumscript. L10 10 Appearance Aparência L8 9 Appended Adicionei L5 7 Apply Aplicar L13 7 Apply Changes Aplicar L24 28 Auto-save observed games Auto-gravar jogos observados L22 25 Auto-save played games Auto-gravar jogos jogados L8 14 Autosave Autogravação L14 15 Axis & Buttons Eixos & Botões L10 5 Background Fundo L14 19 Bad descriptor Descritor inválido L45 52 Beep (need Pitch, Duration, Count and Device) Bipe (requer Tom, Duração, Contagem e Dispositivo) L10 10 Bishop %d Bispo %d L5 6 Black Pretas L14 15 Black: %s - %s Pretas: %s - %s L119 167 Board Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n Eixo do Cursor do Tabuleiro: %d\nBotão de Seleção do Tabuleiro: %d\nEixo de Navegação de Jogadas: %d\nBotão para Aba Anterior: %d\nBotão para Próxima Aba: %d\n L17 24 Board version :%s Versão do Tabuleiro: %s L17 18 Bookmark Caption: Título do Atalho: L6 6 Bottom Abaixo L11 11 Bright Text Texto Claro L6 8 Browse Procurar L19 28 Buffer Save failed. Escrita do conteúdo falhou. L8 8 Bughouse Bughouse L22 26 Bughouse: Partner Game Bughouse: Jogo do Parceiro L15 27 Bus address :%s Endereço do Barramento: %s L14 15 Button Caption Texto do Botão L11 16 Button Icon ícone do Botão L6 8 Cancel Cancelar L29 35 Cancel Joystick Configuration Cancelar Configuração do Joystick L26 30 Cancelled connection wait. Espera por conexão cancelada. L9 11 Change... Escolher... L13 18 Channel Tells Conversa em Canais L9 10 Checkmate Xeque-Mate L14 19 Chess Programs Programas de Xadrez L11 14 Choose Font Escolher Fonte L9 11 Choose... Escolher... L10 17 Clock Font Fonte do Relógio L5 6 Close Fechar L5 3 Color Cor L15 18 Color Selection Seleção de Cores L6 5 Colors Cores L7 7 Command Comando L13 17 Command Line: Linha de Comando: L8 10 Computer Computador L30 44 Computer White vs. Human Black Computador com Brancas vs. Humano com Pretas L24 26 Configure Axis & Buttons Configurar Eixos & Botões L23 29 Configured Sound Files: Arquivos de Som Configurados: L7 8 Connect Conectar L21 23 Connect to ICS Server Conectar a Servidor ICS L20 19 Connected to %s (%s) Conectado a %s (%s) L19 18 Connecting to %s... Conectando a %s... L18 17 Connection refused Conexão Recusada L28 27 Connection to %s:%d failed: Conexão com %s:%d falhou: L7 7 Console Console L12 15 Console Beep Bipe de Console L12 16 Console Font Fonte do Console L21 27 Console buffer saved. Conteúdo do console salvo. L6 9 Count: Contagem: L10 10 Crazyhouse Crazyhouse L27 37 DGT board found on port %s. Tabuleiro DGT encontrado na porta %s. L29 35 DGT support error: wrong page Erro no suporte DGT: página errada L60 63 DGT warning: position mismatch between eboard and DGT board. Alerta DGT: posições diferentes no eboard e no tabuleiro DGT. L31 38 DGT: unrecognized code: %c (%d) DGT: código não reconhecido: %c (%d) L15 15 Dark Squares... Casas Pretas... L18 13 Delete All Entries Remover Todos L17 19 Delete This Entry Remover este Atalho L12 23 Depth Limit: Limite de Profundidade: L11 11 Description Descrição L7 12 Device: Dispositivo: L50 27 Directory to run from (e.g., where book files are) Diretório de onde executar L10 11 Directory: Diretório: L11 14 Discard All Descartar Tudo L12 14 Discard Game Descartar Jogo L7 6 Dismiss Fechar L12 11 Display Game Exibir Jogo L9 7 Displayed Exibido L81 83 Distributed under the terms of the GNU General Public License, version 2 or later Distribuído sob os termos da GNU General Public License, versão 2 ou mais recente L12 18 Draw Offered Proposta de Empate L16 27 Draw offer sent. Proposta de empate enviada. L18 17 Drawn by agreement Empate por acordo L11 13 Drop Piece: Soltar Peça: L16 17 Duration (msec): Duração (mseg): L18 31 Dynamic Seek Graph Gráfico Dinâmico de Anúncios L18 28 Dynamic Seek Table Lista dinâmica de anúncios L17 17 Edit Bookmarks... Editar Atalhos... L21 27 Edit Engine Bookmarks Editar Atalhos de Programas L14 20 Edit Game Info Editar Informações L17 17 Edit Time Control Controle de Tempo L5 6 Empty Limpar L16 20 Engine Bookmarks Atalhos de Programas L14 17 Engine Command Dados do Programa L12 17 Engine Type: Tipo de Programa: L28 37 Engine Type: %s (uneditable) Tipo de Programa: %s (não editável) L43 37 Engine asked more time to startup, waiting. Programa pediu mais tempo, esperando. L19 28 Engine command line Linha de comando do programa L14 19 Engine loaded. Programa carregado. L14 19 Engine running Programa executando L30 40 Engine started (2 sec timeout) Programa iniciado (espera de 2 segundos) L18 21 Enter FEN Position Entre a Posição FEN L10 14 Event Type Tipo de Evento L13 13 Exam.Game #%d Jogo Exam.#%d L20 24 Failed command line: Linha de comando falhou: L21 16 Failed to run engine. Programa falhou. L28 32 Failed to run helper program Não conseguiu executar programa L30 38 File to play / Program to run: Arquivo a tocar / Programa a executar: L8 8 Filter: Filtro: L14 16 Filter: (none) Filtro: (nenhum) L36 34 Finish the current connection first. Termine primeiro a conexão atual. L30 30 Finish the current game first. Termine o jogo atual primeiro. L5 8 Flags Títulos L5 6 Fonts Fontes L22 25 From Elsewhere (%d %s) De Outros Lugares (%d %s) L20 20 From Engines (%d %s) De Programas (%d %s) L8 6 From FEN Do FEN L16 14 From ICS (%d %s) Do ICS (%d %s) L22 23 From PGN Files (%d %s) De Arquivos PGN (%d %s) L6 6 Game # Jogo # L8 8 Game #%d Jogo #%d L19 19 Game #%d - %d %d %s Jogo #%d - %d %d %s L13 13 Game #%d - %s Jogo #%d - %s L18 18 Game #%d - %s - %s Jogo #%d - %s - %s L20 20 Game #%d - %s vs. %s Jogo #%d - %s vs. %s L21 26 Game #%d - untimed %s Jogo #%d - sem relógio %s L12 12 Game #%d: %s Jogo #%d: %s L12 14 Game Aborted Jogo Cancelado L16 19 Game Description Descrição do Jogo L21 30 Game Information Font Fonte de Informações do Jogo L9 14 Game List Lista de Jogos L25 31 Game List (refreshing...) Lista de Jogos (atualizando...) L9 12 Game Lost Jogo Perdido L12 14 Game Started Jogo iniciado! L8 12 Game Won Jogo Vencido L19 20 Game appended to %s Jogo adicionado a %s L17 18 Game in progress. Jogo em andamento. L13 18 Game over: %s Jogo terminado: %s L19 23 Game proposal sent. Oferta de jogo enviada. L13 14 Game started! Jogo iniciado! L12 16 Game/Board: Jogo/Tabuleiro: L5 5 Games Jogos L24 28 Generic XBoard Engine... Programa XBoard Genérico... L8 8 Giveaway Giveaway L46 53 Graphic representation of crazy/bughouse stock Representação gráfica do estoque de crazy/bughouse L16 29 Help: Debug Info Ajuda: Dados para Depuração L22 20 Help: Getting Started Ajuda: Introdução L10 13 Help: Keys Ajuda: Teclas L24 33 Helper program not found Programa auxiliar não encontrado L5 9 Hide! Esconder! L18 28 Host not found: %s Servidor não encontrado: %s L8 8 Hostname Hostname L23 29 Hostname or IP address: Nome do host ou endereço IP: L5 6 Human Humano L30 44 Human White vs. Computer Black Humano com Brancas vs. Computador com Pretas L17 26 Human plays white Humano joga com as Brancas L13 14 ICS Challenge Desafio no ICS L25 29 IPC pipe creation failed. Criação de pipe IPC falhou. L2 2 Id Id L104 97 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Escolhendo um atalho, o programa\njogará no lado a jogar, ignorando a\nconfiguração do atalho. L43 58 Illegal Drop on %c%d (Legality Checking On) Jogada Ilegal em %c%d (Verificação de Legalidade Ligada) L44 59 Illegal Move %c%d%c%d (Legality Checking On) Jogada Ilegal %c%d%c%d (Verificação de Legalidade Ligada) L23 28 Illegal move, not sent. Jogada ilegal, não enviada. L17 18 Increment (secs): Incremento (segs): L10 11 Increment: Incremento: L55 59 Inhibit seek lines on console when Seek Graph is active Inibir anúncios no console quando o gráfico estiver ativo L55 57 Inhibit seek lines on console when Seek Table is active Inibir anúncios no console quando a tabela estiver ativa L16 12 Initial Position Pos. Inicial L23 24 Initial time ([mm:]ss): Tempo inicial ([mm:]ss): L19 19 Initializing engine Preparando programa L46 53 Invalid answer to DGT_SEND_BRD on port %s: %s Resposta inválida para DGT_SEND_BRD na porta %s: %s L8 8 Joystick Joystick L3 5 Key Chave L4 6 Key: Chave: L17 17 Kibitzes/Whispers Kibitzes/Whispers L4 5 Kill Parar L10 10 Knight %d Cavalo %d L22 25 Last Proposal Received Última Proposta Recebida L4 8 Left Esquerda L43 58 Left click to play, right click to refresh. Clique esquerdo para jogar, clique direito para atualizar. L16 16 Light Squares... Casas Brancas... L8 7 Load PGN Ler PGN L11 10 Load PGN... Ler PGN... L5 5 Local Local L15 20 Local Game List Lista Local de Jogos L21 25 Looking up host %s... Procurando servidor %s... L6 6 Losers Losers L10 9 Main Board Tabuleiro L13 11 Mamer and TDs Mamer e TDs L14 15 Manual/Formula Manual/Fórmula L23 22 Match Found at Line %d. Encontrou na Linha %d. L15 15 Match Pattern: Casar Padrão: L17 17 Material: %d - %d Material: %d - %d L8 21 Max Ply: Profundidade Máxima: L30 31 Move made (Obs'vd/Exm'd Games) Movimento (Jogos Observ./Exam.) L76 66 Move the axis to be used for moving back and forth\nthrough moves of a game. Mova o eixo a ser usado para navegar pelos movimentos\nde um jogo. L46 47 Move the axis to be used for selecting pieces. Mova o eixo a ser usado para selecionar peças. L5 7 Moves Jogadas L22 18 Network is unreachable Rede inalcançavel L18 19 News/Notifications News/Notificações L2 4 No Não L9 9 No error. Sem erro. L19 31 No material to mate Material insuficiente para mate L23 27 No output from program. Nenhuma saída do programa. L8 13 No peer. Sem parceiro. L19 24 No previous search. Não há busca anterior. L18 19 No proposals left. Não há propostas. L22 25 No proposals received. Nenhuma proposta recebida L43 47 No response to DGT_SEND_BRD on port %s: %s. Sem resposta para DGT_SEND_BRD na porta %s: %s. L29 34 Non-ASCII Character Filtering Filtragem de Caracteres Não-ASCII L4 6 None Nenhum L12 13 Normal Chess Xadrez Normal L11 12 Normal Text Texto Normal L16 21 Not a socket ?!? Não é um socket ?!? L2 2 OK OK L17 19 Obs'vd Game Ended Fim de Jogo Observ. L7 8 Observe Observar L2 2 Ok Ok L160 190 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Conectando uma vez a partir desta caixa de diálogo, o servidor\nserá adicionado à lista de atalhos de servidores. Edite o\narquivo ~/.eboard/eboard.conf para modificar ou remover atalhos. L293 304 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Apenas linhas que casem o padrão acima aparecerão\nneste console. Padrões podem ser combinados (OU lógico)\ncom o caractere | (pipe). Um asterisco (*) casa qualquer\nsequência.\nExemplos:\n'(20)|(22)' mostra apenas linhas dos canais 20 e 22\n'blik * bored' mostra apenas linhas 'blik '(...)' bored'. L14 21 Opponent Moved Movimento do Oponente L7 8 Options Opções L11 15 PGN Headers Cabeçalhos PGN L13 12 PGN filename: Arquivo PGN: L14 22 Partner Tells: Mensagens do Parceiro: L10 11 Pawn %d Peão %d L11 9 Pitch (Hz): Tom (Hz): L4 5 Play Jogar L56 55 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Jogar %s de %s vs. %s (%s, prof. %d, pensar sempre: %s) L58 60 Play WAV (need Device and Filename, sox must be installed) Tocar WAV (requer Dispositivo e Nome de arquivo, requer sox) L19 21 Play against Crafty Jogar contra o Crafty L19 21 Play against Engine Jogar contra Programa L24 26 Play against GNU Chess 4 Jogar contra o GNU Chess 4 L18 20 Play against Sjeng Jogar contra o Sjeng L6 7 Player Jogador L14 17 Player resigns Jogador abandonou L22 25 Player/Color Name Font Fonte do Nome Jogador/Cor L14 14 Pos: %s vs. %s Pos: %s vs. %s L11 13 Preferences Preferências L54 55 Press the button to be used for going to the next tab. Pressione o botão a ser usado para ir à próxima aba. L58 59 Press the button to be used for going to the previous tab. Pressione o botão a ser usado para voltar à aba anterior. L51 54 Press the button to be used for selecting a square. Pressione o botão a ser usado para selecionar peças. L12 16 Private Tell Mensagem Pessoal L13 18 Private Tells Mensagens Pessoais L23 28 Program exited too soon Programa saiu muito depressa L8 9 Progress Progresso L17 15 Promotion Piece Promover para L7 6 Propose Propor L12 11 Propose Game Propor Jogo L8 9 Protocol Protocolo L33 33 Protocol mismatch, disconnecting. Erro de protocolo, desconectando. L10 10 Queen %d Dama %d L5 5 Rated Rated L6 6 Rating Rating L12 15 Rating Range Faixa de Rating L24 28 Read error from program. Erro de leitura do programa. L33 32 Received a game proposal from %s. Proposta de jogo recebida de %s. L12 19 Recent Hosts Servidores Recentes L12 15 Refresh List Atualizar Lista L19 21 Replied to seek #%d Respondeu ao seek #%d L9 9 Resigned. Abadonam. L6 9 Result Resultado L20 30 Retracted last move. A última jogada foi desfeita. L45 48 Retrieve ICS Channel Lists from eboard.sf.net Obter listas de nomes de canais de eboard.sf.net L18 15 Revert to Defaults Cores Originais L18 16 Revert to defaults Fontes Originais L5 7 Right Direita L10 10 Rook %d Torre %d L3 8 Run Executar L13 11 Run Engine... Programa... L27 42 Run Program (need Filename) Executar Programa (requer Nome de arquivo) L47 43 Run autofics.pl script after connecting to FICS Executar autofics.pl após conectar ao FICS L17 24 Save Buffer As... Salvar Conteúdo Como... L12 14 Save Game... Salvar Jogo... L11 15 Save as PGN Salvar como PGN L10 11 Scratch %d Rascunho %d L6 6 Script Script L11 16 Script List Lista de Scripts L34 38 Scrollback limit (0 = unlimited) : Limite de scrollback (0 = ilimitado) : L11 12 Search Text Buscar Texto L12 14 Search for: Procurar por: L22 22 Search text not found. Texto não encontrado. L8 9 Seek Ads Anúncios L10 9 Seek Graph Anúncios L15 9 Seek Graph Font Anúncios L10 9 Seek Table Anúncios L15 9 Seek Table Font Anúncios L10 10 Serial :%s Serial: %s L10 11 Set Filter Usar Filtro L13 14 Set Filter... Usar Filtro... L49 66 Set depth limit to 0 to use the engine's default. Coloque os valores em zero para\nusar o valor padrão do programa. L13 18 Setup Buttons Configurar Botões L21 35 Shortcut Button Setup Configuração de Botões de Atalho L6 6 Shouts Shouts L42 35 Show channel tells in one pane per channel Mostrar canais em uma aba por canal L63 72 Show channel tells on console too (when above option is active) Mostrar canais no console também (quando a opção acima estiver ativa) L31 41 Show rating next to player name Mostrar rating ao lado do nome do jogador L33 45 Show shortcut buttons below board Mostrar botões de atalho abaixo do tabuleiro L30 32 Show timestamps for text lines Mostrar hora nas linhas de texto L11 12 Side & Time Lado & Tempo L14 15 Side Selection Escolha de Lado L14 14 Side to move: Lado a jogar: L22 28 Smooth joystick cursor Cursor suave para o joystick L29 39 Smooth joystick cursor speed: Velocidade do cursor suave do joystick: L34 38 Smoother animation (eats more CPU) Animação mais suave (gasta mais CPU) L14 11 Soft translate Simplificar L76 76 Sorry, this protocol does not allow to retract a move thru this menu option. Desculpe, este protocolo não permite voltar uma jogada através deste menu. L11 13 Sound Event Evento Sonoro L12 15 Sound Events Eventos Sonoros L6 4 Sounds Sons L54 58 Source code available at http://eboard.sourceforge.net Código-fonte disponível em http://eboard.sourceforge.net L9 11 Stalemate Rei afogado L18 20 Start a connection Iniciar uma conexão L14 14 Starting Time: Tempo Inicial: L7 7 Suicide Suicide L8 9 TCP Port Porta TCP L9 10 TCP Port: Porta TCP: L12 18 Tab Position Posição das Abas L4 6 Test Testar L52 49 The checkbox on the left enables/disables the sound. O controle à esquerda habilita/desabilita o som. L69 77 The engine will be run with\n/bin/sh -c 'cd directory ; command line' O programa será executado com\n/bin/sh -c 'cd diretório ; linha de comando' L12 13 Think Always Pensar Sempre L24 27 Think on opponent's time Pensar no tempo do oponente L4 5 Time Tempo L12 17 Time Control Controle de Tempo L15 20 Time Control... Controle de Tempo... L13 17 Time Control: Controle de Tempo L16 15 Time Running Out Tempo Esgotando L7 13 Timeout Tempo Expirou L44 50 Times can be given as hh:mm:ss , mm:ss or ss Tempos podem ser dados como hh:mm:ss , mm:ss ou ss L180 116 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Para executar vários comandos, separe-os com ; (ponto-e-vírgula)\nPara executar um script, use script.nomedoscript L3 5 Top Acima L13 9 Trademark :%s Marca: %s L8 7 Truncate Truncar L30 28 Type: Fischer Clock (ICS-like) Tipo: Relógio Fischer (ICS) L25 27 Type: Fixed Time per Move Tipo: Tempo Fixo por Jogada L34 32 Type: Use engine's default setting Tipo: Usar o padrão do programa L29 28 Type: X Moves per Time Period Tipo: X Jogadas por Período L26 33 Unable to bind on port %d. Impossível associar à porta %d. L24 25 Unable to create socket. Impossível criar socket. L40 32 Unable to find the DGT board on port %s. DGT não encontrado na porta %s. L44 46 Unable to find the DGT board on port %s: %s. Tabuleiro DGT não encontrado na porta %s: %s. L39 49 Unable to load dgtnix library symbol.\n Erro ao carregar símbolo da biblioteca dgtnix.\n L32 39 Unable to load dgtnix library.\n Erro ao carregar a biblioteca dgtnix.\n L13 18 Unknown error Erro desconhecido. L14 22 Unknown result Resultado desconhecido L23 26 Use plain color squares Usar cores lisas nas casas L15 14 Use underscores Usar sublinhas L5 5 Value Valor L6 6 Value: Valor: L7 8 Variant Variante L8 9 Variant: Variante: L24 29 Variant: %s (uneditable) Variante: %s (não editável) L4 7 Wait Esperar L21 24 Wait for a connection Esperar por uma conexão L34 31 Waiting for connection on port %d. Esperando conexão na porta %d. L30 53 Warn when own clock is below: Avisar quando o próprio relógio estiver abaixo de: L18 20 Welcome to eboard. Bem-vindo ao eboard. L5 7 White Brancas L14 16 White: %s - %s Brancas: %s - %s L10 10 Working... Aguarde... L16 19 Write to Console Escrever no Console L19 19 Wrong address space Endereço inválido L5 7 Wrote Escrevi L3 3 Yes Sim L49 46 You can only retract when it's your turn to move. Você pode voltar apenas quando for a sua vez. L11 8 Your color: Sua cor: L10 9 Your name: Seu nome: L6 6 [chat] [chat] L5 5 [cmd] [cmd] L29 30 [eboard] ** $HOME is too long [eboard] ** $HOME longo demais L39 48 [eboard] ** failed to create directory [eboard] ** não foi possível criar diretório L20 21 [eboard] ** no $HOME [eboard] ** sem $HOME L22 44 [eboard] bad RC line\n [eboard] linha de configuração inválida\n L6 10 [find] [procurar] L4 4 beep bipe L5 5 beeps bipes L5 6 black pretas L53 53 can't load PGN move text from %s (error opening file) impossível carregar PGN de %s (erro abrindo arquivo) L30 42 can't seek to offset %lu of %s impossível deslocar para offset %lu de %s L26 30 dgtnix driver version %.1f biblioteca dgtnix versão %.1f L25 25 dgtnix driver version: %s driver dgtnix versão: %s L41 42 dgtnix version too old: %f, must be >= %f dgtnix muito antigo: %f, precisa ser >= %f L14 18 discards board descarta tabuleiro L32 40 eboard Direct Connection Manager Gerenciador de Conexão Direta do eboard L22 22 eboard version %s (%s) eboard versão %s (%s) L343 344 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard versão %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nEste programa é software livre; você pode redistribui-lo\ne/ou modificá-lo sob os termos da GNU General Public\nLicense tal como publicada pela Free Software Foundation;\nversão 2 da licença ou (sua opção) qualquer versão\nmais recente.\n L19 19 eboard: Console #%d eboard: Console #%d L60 68 engine claimed illegal move but we didn't move, ignoring it. programa reclamou de jogada ilegal mas não houve jogada, ignorando. L22 28 error parsing PGN data erro interpretando dados PGN L11 17 flips board inverte tabuleiro L4 4 game jogo L5 5 games jogos L17 19 generic xboard v2 xboard genérico v2 L20 17 goes back 1 halfmove volta meia jogada L26 24 goes back to start of game volta ao início do jogo L23 19 goes forward 1 halfmove avança meia jogada L27 22 goes forward to end of game avança ao fim do jogo L13 14 illegal move! jogada ilegal! L11 12 in progress em andamento L29 31 initial time %s, increment %s tempo inicial %s, incremento %s L8 7 moves in Jogadas L2 4 no não L14 18 no such game: jogo inexistente: L19 17 no time control set Controle de Tempo L4 4 none nada L7 4 nothing nada L37 47 opens new scratch board with position abre novo tabuleiro rascunho com esta posição L8 10 per move por jogada L18 15 plain console beep bipe de console L12 16 play file %s tocar arquivo %s L21 23 pops up the move list abre a lista de jogadas L24 29 process creation failed. Criação de processo falhou. L5 5 rated rated L6 11 run %s executar %s L10 10 running %s rodando %s L18 18 savePGN failed: %s savePGN falhou: %s L54 58 savePGN failed: Won't save game with less than 2 moves savePGN falhou: Não grava jogos com menos de 2 movimentos L8 9 seconds. segundos. L7 7 unrated unrated L7 12 untimed sem relógio L5 7 white brancas L3 3 yes sim E 542 eboard-1.1.1.orig/multilang/README0000644000175000017500000000234110757567572016154 0ustar patrikpatrik Hello, starting with eboard 0.9.5, the awfully bad-documented and bloated GNU gettext has been dropped, in favor of an 80-line perl script and 200 lines of C++ code (the source distribution of gettext has several megabytes these days...I keep getting amazed on how GNU manages to make things bloated). ---------- Translators: (If you want to fix oneof the inactive/unmaintained translations, the best thing to do is join the eboard-devel mailing list linked from eboard's website) pt_BR, Brazilian Portuguese: Felipe Bergo active, maintained es, Spanish: Ricardo Mones Lastra active, maintained de, German: Bernhard Bialas active, maintained cs, Czech: Ales Dolecek active, maintained it, Italian: Gabriele Stilli Massimo Danieli active, maintained ja, Japanese: Katsumi Ikeda active, maintained pl, Polish Piotr Wajnberg active, maintained fr, French Pierre Boulenguez active, maintained hu, Hungarian Bajusz Tamás active, maintained eboard-1.1.1.orig/multilang/eboard.de.dict0000644000175000017500000007714710757567572020004 0ustar patrikpatrikL72 88 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** PNG laden fehlgeschlagen: benutze internen Figurenset. Es wird häßlich aussehen.\n L11 13 Browse... Übersicht... L15 14 Play Selected Spiel anbieten L9 13 Refresh Aktualisieren L14 13 Remove Field Entferne Feld L5 5 Set Set L1543 2003 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Erste Schritte#M#\n\nGegen den Computer spielen\n#S#eboard kann nicht selbst "Schach spielen": es bietet eine Schnittstelle zu Schachprogrammen\nohne eigene graphische Benutzeroberfläche, den sogenannten"Enginen" d.h. Schachmotore.\nGNUChess, Crafty und Sjeng sind frei erhältliche Engines.Sind die Engines installiert, öffne das\n#B#Partner#K# Menü, dann im #B#Spiel gegen Engine#K# Untermenü wähle die entsprechende Engine,\ngegen die gespielt werden soll. Weitere starke Engines,die man einbinden kann, sind Yace, \nComet, Amy, TCB und Phalanx XXII. Diese kann man einbinden über das Menü #B#Partner#K#/#B#Spiel\ngegen Engine#K#/#B#Generische Engine#K#\n\n#M#Schachspielen im Internet\n#S#Eboard unterstützt das FICS-Protokoll. FICS- Server sind z.B. www.freechess.org, aber auch\nandere "Schachserver" wie US Chess Live benutzten die FICS-Software und sollten mit\neboard problemlos erreichbar sein. ICS wird nicht unterstützt. Um eine Verbindung zu FICS\naufzubauen, öffne das #B#Partner#K#-Menü dann #B#Verbinde mit FICS#K#. Um eine Verbindung zum\nanderen Server aufzubauen öffne das #B#Partner#K#-Menü, dann #B#Verbinde mit anderem Server#K#.\nObwohl man sich als Gast (Guest) am FICS-Server einloggen kann,hat man als registrierter\nBenutzer mehr Spaß. Die Registrierung kann auf der FICS-Seite #B#http://www.freechess.org#K#\nkostenlos durchgeführt werden.\n\n#M#PGN-Datenbanken\n#S#PGN ist ein weitverbreitetes Dateiformat zur Speicherung von Schachpartien. Es können Züge,\nKommentare und Varianten gespeichert werden Der Zugriff auf PGN-Dateien von eboard aus\ngeschieht über das #B#Fenster#K#-Menü. Dann #B#Partien auf dem Client#K# auswählen. In dem\nnachfolgendem Fenster #B#Partie laden#K# wählen. Die in der PGN-Datei enthaltenen Partien werden\nnun gelistet. Mit der Maus die die gewünschte Partie auswählen und #B#Partie ansehen#K# drücken. Die\nPartie erscheint in eboard in einem eigenem Schirm, erreichbar über den neuen Tabulator im\nHauptfenster.#L# L30 31 %d %s to %s, %d Hz for %d msec %d %s to %s, %d Hz für %d msec L13 18 %d games read %d Partien gelesen L14 14 %d moves in %s %d Züge in %s L25 27 %d. Connect to %s:%d (%s) %d. Verbinde mit %s:%d (%s) L41 43 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (Weiss) vs. %s (Schwarz)\n%s\n%d:%.2d %d L31 33 %s accepted your game proposal. %s hat Spielvorschlag akzeptiert. L18 20 %s engine started. %s Engine gestartet. L17 19 %s offers a draw. %s bietet Remis an. L11 10 %s per move %s pro Zug L33 43 (Wrapped) Match Found at Line %d. (Umgebrochen) Übereinstimmung in Zeile %d L64 62 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (FICS-Name: Pulga) L39 39 (message obfuscated -- password mode ?) (Nachricht verworren-- Passwort-Modus?) L14 19 (no bookmarks) (keine Lesezeichen) L6 6 (none) (kein) L13 12 (time period) (Zeitspanne) L18 25 * game not found: * Partie nicht gefunden: L47 55 ** [eboard] bad engine protocol # in bookmark: ** [eboard] falsches Engine protocol # in Lesezeichen: L57 60 ** eboard ** warning: HOME environment variable not set\n ** eboard ** Warnung: HOME-Umgebungsvariable nicht gesetzt\n L26 30 --- %s game to PGN file %s --- %s Partie zur PGN-Datei %s L16 15 --- Disconnected ---Unterbrochen L14 17 /Game/Ad_journ /Partie/_Vertagen L19 18 /Game/Retract _Move _Zug zurücknehmen L12 18 /Game/_Abort /Partie/Ab_brechen L17 23 /Game/_Offer Draw /Partie/_Remis anbieten L13 17 /Game/_Resign /Partie/_Aufgeben L22 23 /Help/_About eboard... /Hilfe/Über _eboard... L17 18 /Help/_Debug Info /Hilfe/_Debug Info L22 22 /Help/_Getting Started /Hilfe/Erste _Schritte L11 14 /Help/_Keys /Hilfe/_Tasten L10 11 /Help/sep4 /Hilfe/sep4 L22 27 /Peer/Connect to _FICS /Partner/Verbinde mit _FICS L43 40 /Peer/Direct connect with _Remote eboard... /Partner/Verbinde mit eboard im _Netz... L23 28 /Peer/Engine B_ookmarks /Partner/Engine _Lesezeichen L20 25 /Peer/ICS _Bookmarks /Partner/_ICS Lesezeichen L36 38 /Peer/Play against Engine/Cr_afty... /Partner/Spiel gegen Engine/Cr_afty... L41 42 /Peer/Play against Engine/GNU Chess _4... /Partner/Spiel gegen Engine/GNUChess _4... L44 49 /Peer/Play against Engine/_Generic Engine... /Partner/Spiel gegen Engine/_Generische Engine... L35 37 /Peer/Play against Engine/_Sjeng... /Partner/Spiel gegen Engine/_Sjeng... L30 32 /Peer/Play against Engine/sep1 /Partner/Spiel gegen Engine/sep1 L26 28 /Peer/Play against _Engine /Partner/Spiel gegen _Engine L33 40 /Peer/_Connect to Other Server... /Partner/_Verbinde mit anderem Server... L17 21 /Peer/_Disconnect Partner/_Unterbrechen L26 38 /Peer/_Empty Scratch Board Partner/_Stellungseingabe-Leeres Brett L11 16 /Peer/_Quit Partner/_Beenden L42 41 /Peer/_Scratch Board with Initial Position Partner/Stellungseingabe-_Anfangsstellung L10 12 /Peer/sep2 Partner/sep2 L10 13 /Peer/sep3 /Partner/sep3 L10 13 /Peer/sep4 /Partner/sep4 L48 54 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Einstellungen/Figurensets (Bitmaps)/Lade nur _Figuren L49 52 /Settings/Bitmapped Piece Sets/Load _Squares Only /Einstellungen/Figurensets (Bitmaps)/Lade nur _Brett L42 46 /Settings/Bitmapped Piece Sets/Load _Theme /Einstellungen/Figurensets (Bitmaps)/Lade _Set L31 37 /Settings/Bitmapped Piece _Sets /Einstellungen/_Figurensets (Bitmaps) L35 44 /Settings/Enable Legality _Checking /Einstellungen/Aktiviere _Legalitätprüfung L55 59 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Einstellungen/ICS Verhalten/Öffne Schirme nach _Erzeugung L69 76 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Einstellungen/ICS Verhalten/Smartes _schließen von Schirmen nach Spielende L18 32 /Settings/Pre_move /Einstellungen/Ziehen i_m Voraus L27 33 /Settings/Sho_w Coordinates /Einstellungen/Zeige _Koordinaten L24 31 /Settings/_Animate Moves /Einstellungen/_Züge animieren L33 40 /Settings/_Beep on Opponent Moves /Einstellungen/_Ton beim Zug des Gegners L30 39 /Settings/_Enable Other Sounds /Einstellungen/_Andere Töne aktivieren L30 39 /Settings/_Highlight Last Move /Einstellungen/Letzten Zug _hervorheben L23 29 /Settings/_ICS Behavior /Einstellungen/_ICS Verhalten L25 24 /Settings/_Preferences... /Einstellungen/_Optionen L47 59 /Settings/_Vectorized Pieces (Faster Rendering) /Einstellungen/_Vektorgraphik-Figuren (Schnelleres rendern) L14 19 /Settings/sep3 /Einstellungen/sep3 L23 24 /Windows/Find _Previous Fenster/Finde _vorherige L28 31 /Windows/Games on _Client... Fenster/Partien auf dem _Client L31 34 /Windows/Save Desktop _Geometry Fenster/Desktop-_Geometrie sichern L29 32 /Windows/Save _Text Buffer... Fenster/_Textspeicher sichern... L26 31 /Windows/_Ads on Server... Fenster/_Anzeigen auf Server... L26 29 /Windows/_Detached Console Fenster/_Freistehende Konsole L32 31 /Windows/_Find Text (upwards)... Fenster/Finde Text (auf_wärts) L28 30 /Windows/_Games on Server... Fenster/_Partien auf Server... L23 25 /Windows/_Run Script... Fenster/_Starte Skript... L13 12 /Windows/sep1 Fenster/sep1 L13 12 /Windows/sep2 Fenster/sep2 L13 12 /Windows/sep3 Fenster/sep3 L6 8 /_Game /Par_tie L6 7 /_Help /_Hilfe L6 9 /_Peer /_Partner L10 15 /_Settings /_Einstellungen L9 8 /_Windows _Fenster L106 118 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Warnung: konnte festen Font nicht laden. Dieser Dialoginhalt wird häßlich aussehen.\n\n L41 47 can't load font.\n kann Font nicht laden.\n L124 152 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** Laden von einem oder mehreren Fonts fehlgeschlagen - X11 75 dpi und 100 dpi Fonts installieren, X neu starten und nochmal versuchen.\n L58 76 ** failed to load one or more board fonts\n ** Laden von einem oder mehreren Brett-Fonts fehlgeschlagen\n L34 45 abort request sent Abbruch-Anforderung gesendet L36 45 adjourn request sent Vertagen-Anforderung gesendet L33 42 draw request sent Remis-Anforderung gesendet L110 120 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Warnung: konnte festen Font nicht laden, DieserDialoginhalt wird häßlich aussehen.\n L45 42 ** bad pattern string: ** falsches Muster: L40 46 ** file not found: ** Datei nicht gefunden: L39 40 failed to load laden fehlgeschlagen L112 124 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Warnung: konnte festen Font nicht laden. Dieser Dialoginhalt wird häßlich aussehen.\n\n L34 40 failed to load laden fehlgeschlagen L42 45 Adjourning not supported Vertagen nicht unterstützt L33 38 Session Aborted Sitztung abgebrochen L35 44 draw request sent Remis-Anforderung gesendet L9 11 L17 21 > (password sent) > (Passwort gesendet) L23 26 > [issued from menu] %s > [Ausgegeben vom Menu] %s L25 27 > [issued from shortcut] > [gestartet vom Kurztaste] L31 34 > [script run from shortcut] %s > [Starte Skript vom Kurztaste] %s L12 12 About eboard Über eboard L6 11 Accept Akzeptieren L36 39 Accepted incoming connection from %s Eingehende Verbindung von %s akzeptiert L14 21 Ad Description Anzeigen-Beschreibung L7 13 Ad List Anzeigenliste L23 31 Ad List (refreshing...) Anzeigenliste (aktualisiere...) L33 48 Add to Peer/Engine Bookmarks menu Zum Partner/Engine-Lesezeichen Menü hinzufügen L22 22 Address already in use Adresse bereits belegt L3 8 Ads Anzeigen L21 21 Already connected ?!? Bereits verbunden ?!? L675 781 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. Überall:\nF3: Geht zum vorherigen Schirm.\nF4: Geht zum nächsten Schirm.\nF5: Geht zum Spielbrett-Schirm.\nF6: Geht zum Konsolen-Schirm.\nF7: Geht zum Anzeigentafel-Schirm (wenn verfügbar).\nF8: Umschaltung Kurzbefehl-Bar sichtbar/unsichtbar.\nBild hoch/Bild runter: scrollt die Textkonsole (mus sichtbar sein\nStrg+(Linkspfeil): 1 Halbzug Rückwärts\nStrg+(Rechtspfeil): 1 Halbzug Vorwärts\nStrg+F: Finde vorangehende(Hauptkonsolen-Puffer)\nStrg+G: Finde Vorherige\n\nEingabe box:\nPfeil nach Oben/Unten : durch die Eingabe-Historie gehen\nEnter: Textzeile senden\nEsc: Umschalten Chat-/Befehls-Modus\n\nSyntax:\nIn der Eingabe-Box des Hauptfensters:\n.. Eingabe des %prefix Text setzt den Chat-Prefix auf Text.\n.. Eingabe von %do Skriptname startet das Skript Skriptname. L10 11 Appearance Erscheinung L8 10 Appended angehangen L5 11 Apply Übernehmen L13 23 Apply Changes Änderungen übernehmen L24 36 Auto-save observed games Beobachtete Partien autom. speichern L22 34 Auto-save played games Gespielte Partien autom. speichern L8 16 Autosave Autom. speichern L10 11 Background Hintergrund L14 19 Bad descriptor Falscher Descriptor L45 59 Beep (need Pitch, Duration, Count and Device) Geräusch (benötigt Tonhöhe, Tondauer, Zähler und Gerät L10 12 Bishop %d Läufer %d L5 7 Black Schwarz L14 16 Black: %s - %s Schwarz: %s - %s L17 27 Bookmark Caption: Lesezeichen Kurzbezeichnung L6 5 Bottom Unten L11 12 Bright Text Breiter Text L6 10 Browse Übersicht L19 39 Buffer Save failed. Zwischenspeicher sichern fehlgeschlagen L8 8 Bughouse Bughouse L22 23 Bughouse: Partner Game Bughouse: Partner Spiel L14 12 Button Caption Tasten- Name L11 11 Button Icon Tasten-Icon L6 9 Cancel Abbrechen L26 30 Cancelled connection wait. Abgebrochene Verbindung wartet L9 10 Change... Ändern... L13 15 Channel Tells Kanal-Nachricht L9 4 Checkmate Matt L14 15 Chess Programs Schachprogramme L11 11 Choose Font Wähle Font L9 6 Choose... Wähle L10 8 Clock Font Uhr Font L5 10 Close Schließen L5 5 Color Farbe L15 11 Color Selection Farbauswahl L6 6 Colors Farben L7 6 Command Befehl L13 13 Command Line: Kommandozeile L8 8 Computer Computer L30 35 Computer White vs. Human Black Computer Weiß gegen Mensch Schwarz L23 26 Configured Sound Files: Konigurierte Klang-Dateien L7 8 Connect Verbinde L21 23 Connect to ICS Server Verbinde mit ICS Server L20 21 Connected to %s (%s) Verbunden mit %s (%s) L19 18 Connecting to %s... Verbinde mit %s... L18 20 Connection refused Verbindung abgelehnt L28 37 Connection to %s:%d failed: Verbindung mit %s:%d fehlgeschlagen: L7 7 Console Konsole L12 18 Console Beep Konsolen-Geräusch L12 13 Console Font Konsolen-Font L21 37 Console buffer saved. Konsole - Zwischenspeicher gesichert. L6 7 Count: Zähler L10 10 Crazyhouse Crazyhouse L15 15 Dark Squares... Schwarze Felder L18 23 Delete All Entries Alle Einträge löschen L17 23 Delete This Entry Diesen Eintrag löschen L12 16 Depth Limit: Max. Rechentiefe L11 12 Description Beschreibung L7 7 Device: Gerät: L50 58 Directory to run from (e.g., where book files are) Start-Verzeichnis (d.h. da wo die Eröffnungsbücher sind) L10 11 Directory: Verzeichnis L11 14 Discard All Alle verwerfen L12 16 Discard Game Partie verwerfen L7 10 Dismiss Abgewiesen L12 14 Display Game Partie ansehen L9 7 Displayed Gesehen L81 90 Distributed under the terms of the GNU General Public License, version 2 or later Veröffentlicht unter den Bedingungen der GNU General Public Lizenz, Version 2 oder höher L12 15 Draw Offered Remis angeboten L16 21 Draw offer sent. Remisangebot gesendet L18 16 Drawn by agreement Remis vereinbart L11 11 Drop Piece: Ziehe Stein L16 12 Duration (msec): Dauer (msec) L18 24 Dynamic Seek Table Dynamische Anzeigentafel L17 24 Edit Bookmarks... Lesezeichen editieren... L21 28 Edit Engine Bookmarks Engine Lesezeichen editieren L14 20 Edit Game Info Partieinfo editieren L17 20 Edit Time Control Zeitmodus einstellen L5 4 Empty Leer L16 18 Engine Bookmarks Engine Lesezeichen L14 13 Engine Command Engine Befehl L12 10 Engine Type: Engine Typ L28 33 Engine Type: %s (uneditable) Engine Typ: %s (nicht editierbar) L43 48 Engine asked more time to startup, waiting. Engine forderte mehr Zeit zum starten an, warten L19 19 Engine command line Engine Befehlszeile L14 14 Engine loaded. Engine geladen L14 17 Engine running Engine in Betrieb L30 33 Engine started (2 sec timeout) Engine gestartet (2 sek. timeout) L18 21 Enter FEN Position FEN-Position eingeben L10 12 Event Type Ereignis-Typ L13 17 Exam.Game #%d Analys.Partie #%d L21 31 Failed to run engine. Start der Engine fehlgeschlagen L28 39 Failed to run helper program Start des Hilfsprogramms fehlgeschlagen L30 42 File to play / Program to run: Datei zum Abspielen / Programm zum Starten L8 8 Filter: Filter: L14 14 Filter: (none) Filter: (kein) L36 41 Finish the current connection first. Die bestehende Verbindung zuerst beenden. L30 35 Finish the current game first. Zuerst die laufende Partie beenden. L5 5 Flags Flags L5 5 Fonts Fonts L22 20 From Elsewhere (%d %s) Von Irgendwo (%d %s) L20 26 From Engines (%d %s) Von Engine-Spielen (%d %s) L8 3 From FEN FEN L16 15 From ICS (%d %s) Vom ICS (%d %s) L22 23 From PGN Files (%d %s) Aus PGN-Dateien (%d %s) L6 6 Game # Partie L8 10 Game #%d Partie #%d L19 21 Game #%d - %d %d %s Partie #%d - %d %d %s L20 22 Game #%d - %s vs. %s Partie #%d - %s vs. %s L21 34 Game #%d - untimed %s Partie #%d - ohne Zeitkontrolle %s L12 14 Game #%d: %s Partie #%d: %s L12 18 Game Aborted Partie abgebrochen L16 18 Game Description Partiebeschreibung L21 24 Game Information Font Partie Informations Font L9 11 Game List Partieliste L25 30 Game List (refreshing...) Partieliste (aktualisieren...) L9 15 Game Lost Partie verloren L12 16 Game Started Partie gestarted L8 15 Game Won Partie gewonnen L19 22 Game appended to %s Partie angefügt an %s L17 13 Game in progress. Partie läuft L13 17 Game over: %s Partie zu Ende %s L19 26 Game proposal sent. Spielaufforderung gesendet L13 16 Game started! Partie gestartet L12 14 Game/Board: Partie/Brett: L5 7 Games Partien L24 27 Generic XBoard Engine... Generische XBoard Engine... L8 8 Giveaway Giveaway L46 47 Graphic representation of crazy/bughouse stock Grafische Darstellung von crazy/bughouse Vorrat L16 10 Help: Debug Info Debug Info L22 14 Help: Getting Started Erste Schritte L10 13 Help: Keys Hilfe: Tasten L5 10 Hide! Verdecken! L18 23 Host not found: %s Host nicht gefunden: %s L8 8 Hostname Hostname L23 25 Hostname or IP address: Hostname oder IP-Adresse: L5 6 Human Mensch L30 35 Human White vs. Computer Black Mensch Weiß gegen Computer Schwarz L17 23 Human plays white Mensch spielt mit Weiß L13 13 ICS Challenge ICS Challenge L25 34 IPC pipe creation failed. IPC -Pipe-Erzeugung fehlgeschlagen L2 3 Id Nr. L104 126 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Wenn man ein Lesezeichen anklickt, spielt die Engine\n den nächsten Zug, die Seite-Einstellungen\nim Lesezeichen ignorierend. L43 53 Illegal Drop on %c%d (Legality Checking On) Illegaler Zug zum Feld %c%d (Legalitätsprüfung Ein) L44 48 Illegal Move %c%d%c%d (Legality Checking On) Illegaler Zug %c%d%c%d (Legalitätsprüfung Ein) L23 29 Illegal move, not sent. Illegaler Zug, nicht gesendet L17 17 Increment (secs): Inkrement (sek): L10 9 Increment: Inkrement L55 64 Inhibit seek lines on console when Seek Table is active Verhindere Anzeigen auf der Konsole wenn Anzeigentafel aktiv ist L16 16 Initial Position Ausgangsstellung L23 19 Initial time ([mm:]ss): Startzeit (mm:ss): L19 20 Initializing engine Initialisiere Engine L3 5 Key Taste L4 5 Key: Taste L17 20 Kibitzes/Whispers Kibitze/Zuflüsterer L4 7 Kill Beenden L10 11 Knight %d Springer %d L22 26 Last Proposal Received Letzten Vorschlag erhalten L4 5 Left Links L16 13 Light Squares... Weisse Felder L8 9 Load PGN PGN laden L11 12 Load PGN... PGN laden... L5 5 Local Lokal L15 18 Local Game List Lokale Partieliste L21 16 Looking up host %s... Suche Host %s... L6 6 Losers Losers L10 10 Main Board Spielbrett L13 14 Mamer and TDs Admins und TDs L14 16 Manual/Formula Manuell/Formular L23 38 Match Found at Line %d. Übereinstimmung gefunden in Zeile %d L15 24 Match Pattern: Übereinstimmung Muster: L17 17 Material: %d - %d Material: %d - %d L8 13 Max Ply: Max Suchtiefe L30 29 Move made (Obs'vd/Exm'd Games) Zug! (Beob./Nachgesp.Partien) L5 5 Moves Züge L22 29 Network is unreachable Netzwerk ist nicht erreichbar L18 19 News/Notifications Neuigkeiten/Notizen L2 4 No Nein L9 11 No error. Kein Fehler L19 31 No material to mate Zuwenig Material zum Mattsetzen L8 12 No peer. Kein Partner L19 21 No previous search. Keine vorherige Suche L18 27 No proposals left. Keine Vorschläge vorhanden L22 26 No proposals received. Keine Vorschläge erhalten L4 5 None Keine L12 12 Normal Chess Normalschach L11 13 Normal Text Normaler Text L16 20 Not a socket ?!? Nicht ein Socket ?!? L2 2 OK OK L17 26 Obs'vd Game Ended Beobachtete Partie beendet L7 10 Observe Beobachten L2 2 Ok OK L160 232 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Wenn Sie -aus diesem Dialog- eine Verbindung zu einem Host aufbauen,wird\neine entsprechendes Lesezeichen in das Peer/ICS Menü eingefügt. Editieren Sie\ndie ~/.eboard/eboard.conf Datei um das Lesezeichen zu ändern oder entfernen. L293 355 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Nur Zeilen, die mit dem oben gezeigetn Muster übereinstimmen, werden\nzu diesem Text-Schirm hinzugefügt. Muster können geODERt werden mit dem Zeichen | \nEin * (Stern) kann benutzt werden als sog. Joker.\nBeispiele:\n'(20 | (22)' zeigen nur Zeilen aus den Kanälen 20 und 22\n'blik * bored zeigt Zeilen welche das Muster 'blik '(...)' bored' enthalten. L14 18 Opponent Moved Gegner hat gezogen L7 8 Options Optionen L11 15 PGN Headers PGN Partiedaten L13 13 PGN filename: PGN-Dateiname L14 12 Partner Tells: Partner sagt L10 11 Pawn %d Bauer %d L11 13 Pitch (Hz): Tonhöhe (Hz) L4 6 Play Spiele L56 62 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Spiele %s als %s gegen %s (%s, max.Tiefe %d, Rechne immer: %s) L58 69 Play WAV (need Device and Filename, sox must be installed) Spiele WAV (benötigt Gerät und Dateiname, sox muß installiert sein L19 18 Play against Crafty Spiel gegen Crafty L19 18 Play against Engine Spiel gegen Engine L24 23 Play against GNU Chess 4 Spiel gegen GNU Chess 4 L18 17 Play against Sjeng Spiel gegen Sjeng L6 7 Player Spieler L14 16 Player resigns Spieler gibt auf L22 23 Player/Color Name Font Spieler/Farbe Name Font L14 14 Pos: %s vs. %s Pos: %s vs. %s L11 8 Preferences Optionen L12 17 Private Tell Private Nachricht L13 19 Private Tells Private Nachrichten L23 27 Program exited too soon Programm zu schnell beendet L8 11 Progress Fortschritt L17 17 Promotion Piece Verwandlung in: L7 9 Propose Vorschlag L12 14 Propose Game Spielvorschlag L8 9 Protocol Protokoll L33 39 Protocol mismatch, disconnecting. Falsches Protokoll, Verbindungsabbruch. L10 11 Queen %d Dame %d L5 9 Rated Bewertung L6 7 Rating Wertung L12 16 Rating Range Bewertungsspanne L33 34 Received a game proposal from %s. Spielaufforderung von %s empfangen L12 12 Recent Hosts Letzte Hosts L12 19 Refresh List Liste aktualisieren L19 25 Replied to seek #%d Geantworted auf Suche #%d L9 10 Resigned. Aufgegeben L6 8 Result Ergebnis L20 25 Retracted last move. Letzten Zug zurücknehmen L45 47 Retrieve ICS Channel Lists from eboard.sf.net ICS Channel List von eboard.sf.net zurückholen L18 34 Revert to Defaults Rückkehr zu Standardeinstellungen L18 34 Revert to defaults Rückkehr zu Standardeinstellungen L5 6 Right Rechts L10 11 Rook %d Turm %d L3 7 Run Starten L13 16 Run Engine... Starte Engine... L27 36 Run Program (need Filename) Starte Programm (benötigt Dateiname L47 61 Run autofics.pl script after connecting to FICS Starte das Script autofics.pl nach Verbindungsaufbau zum FICS L17 31 Save Buffer As... Zwischenspeicher sichern als... L12 16 Save Game... Partie speichern L11 16 Save as PGN In PGN speichern L10 8 Scratch %d Brett %d L6 6 Script Skript L11 12 Script List Skript-Liste L34 46 Scrollback limit (0 = unlimited) : Limit fürs zurückscrollen (0 = unbegrenzt) : L11 10 Search Text Suche Text L12 12 Search for: Suche nach: L22 29 Search text not found. Gesuchten Text nicht gefunden L8 15 Seek Ads Such - Anzeigen L10 13 Seek Table Anzeigentafel L15 13 Seek Table Font Anzeigentafel L10 17 Set Filter Filter einstellen L13 20 Set Filter... Filter einstellen... L49 94 Set depth limit to 0 to use the engine's default. Setzte irgendeines von diesen Feldern zu Null\num die Default-Einstellung der Engine zu nutzen L13 16 Setup Buttons Setup von Tasten L21 16 Shortcut Button Setup Kurztasten-Setup L6 7 Shouts Schreie L42 49 Show channel tells in one pane per channel Zeige Kanal-Nachrichten in einem Schirm pro Kanal L63 73 Show channel tells on console too (when above option is active) Zeige Kanal-Nachrichten auch auf der Konsole (Wenn o.g. Option aktiv ist) L31 41 Show rating next to player name Zeige Wertungszahl neben den Spielernamen L33 40 Show shortcut buttons below board Zeige Tasten-Kurzbefehle unter dem Brett L11 12 Side & Time Farbe & Zeit L14 8 Side Selection Farbwahl L14 13 Side to move: Seite am Zug: L34 51 Smoother animation (eats more CPU) Flüssigere Animation (benötigt mehr CPU-Leistung) L76 75 Sorry, this protocol does not allow to retract a move thru this menu option. Dieses Protokoll erlaubt keine Rücknahme der Züge durch diese Menüoption L11 14 Sound Event Klang-Ereignis L12 15 Sound Events Klangereignisse L6 7 Sounds Klänge L54 55 Source code available at http://eboard.sourceforge.net Quellkode vefügbar unter http://eboard.sourceforge.net L9 4 Stalemate Patt L18 18 Start a connection Verbindung starten L14 11 Starting Time: Anfangszeit L7 7 Suicide Suicide L8 8 TCP Port TCP Port L9 8 TCP Port: TCP Port L12 12 Tab Position Tab Position L4 4 Test Test L52 58 The checkbox on the left enables/disables the sound. Die Box auf der linken Seite aktiviert/deaktiviert den Ton L69 83 The engine will be run with\n/bin/sh -c 'cd directory ; command line' Die Engine wird gestartet mit dem Befehl\n/bin/sh-c 'cd Verzeichnis ; Befehlszeile' L12 21 Think Always Immer Züge berechnen L24 36 Think on opponent's time Rechne während der Zeit des Gegners L4 4 Time Zeit L12 9 Time Control Zeitmodus L15 12 Time Control... Zeitmodus... L13 13 Time Control: Zeitkontrolle L16 14 Time Running Out Zeit läuft ab L7 7 Timeout Timeout L44 45 Times can be given as hh:mm:ss , mm:ss or ss Zeit als hh:mm:ss oder mm:ss oder ss eingeben L180 235 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Um mehrere Befehle über eine Kurztaste zu starten, sind die Befehlemit einem ; (semikolon) zu trennen.\nUm ein Skript über eine Kurztaste zu starten, ist der Befehl in der Form script.Skriptname einzugeben z.B. script.Meinskript.pl . L3 4 Top Oben L30 16 Type: Fischer Clock (ICS-like) Typ: Fischer-Uhr L25 23 Type: Fixed Time per Move Typ: Feste Zeit pro Zug L34 32 Type: Use engine's default setting Typ: Grundeinstellung der Engine L29 30 Type: X Moves per Time Period Typ: X-Züge in der Zeitspanne L26 30 Unable to bind on port %d. Kann an Port %d nicht anbinden L24 26 Unable to create socket. Kann Socket nicht erzeugen L13 18 Unknown error Unbekannter Fehler L14 20 Unknown result Unbekanntes Ergebnis L23 26 Use plain color squares Einfarbige Felder benutzen L5 4 Value Wert L6 5 Value: Wert: L7 8 Variant Variante L8 8 Variant: Variante L24 31 Variant: %s (uneditable) Variante: %s (nicht editierbar) L4 5 Wait Warte L21 21 Wait for a connection Auf Verbindung warten L34 31 Waiting for connection on port %d. Warte auf Verbindung am Port %d L30 47 Warn when own clock is below: Warnen, wenn eigene Zeit unterhalb von .. ist: L18 20 Welcome to eboard. Wilkommen bei eboard L5 5 White Weiss L14 14 White: %s - %s Weiss: %s - %s L10 12 Working... Arbeitend... L16 19 Write to Console Schreibe in Konsole L19 19 Wrong address space Falscher Adressraum L5 11 Wrote geschrieben L3 2 Yes Ja L49 52 You can only retract when it's your turn to move. Man kann nur Züge zurücknehmen wenn man am Zug ist L11 11 Your color: Ihre Farbe: L10 8 Your name: Ihr Name L6 6 [chat] [chat] L5 5 [cmd] [cmd] L39 48 [eboard] ** failed to create directory [eboard] ** Verzeichniserstellung fehlgeschlagen L20 22 [eboard] ** no $HOME [eboard] ** kein $HOME L22 34 [eboard] bad RC line\n [eboard] schlechte RC-Verbindung\n L4 9 beep Geräusch L5 10 beeps Geräusche L5 7 black Schwarz L53 65 can't load PGN move text from %s (error opening file) kann PGN Züge nicht laden von %s (Fehler beim Öffnen der Datei) L30 31 can't seek to offset %lu of %s Dateifehler ab offset %lu of %s L14 19 discards board Schließt das Brett L32 30 eboard Direct Connection Manager eboard Netzverbindungs-Manager L22 22 eboard version %s (%s) Eboard Version %s (%s) L343 356 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nDieses Program ist freie Software; Sie können es verteilen\nund/oder modifizieren unter den Bedingungen der GNU General\nPublic License publiziert durch die Free Software\nFoundation; entweder Version 2 der Lizenz, oder\n(wahlweise) eine spätere Version.\n L19 11 eboard: Console #%d Konsole #%d L60 76 engine claimed illegal move but we didn't move, ignoring it. Engine beanstandete illegalen Zug, aber wir haben nicht gezogen, Ignorieren. L22 37 error parsing PGN data Fehler beim analysieren von PGN-Daten L11 14 flips board Brett umdrehen L4 6 game Partie L5 7 games Partien L17 17 generic xboard v2 Generic XBoard V2 L20 22 goes back 1 halfmove Geht 1 Halbzug zurück L26 29 goes back to start of game Geht zurück zum Partieanfang L23 28 goes forward 1 halfmove Geht einen Halbzug vorwärts L27 29 goes forward to end of game Geht vorwärts zum Partieende L13 14 illegal move! Illegaler Zug! L11 9 in progress in Arbeit L29 28 initial time %s, increment %s Anfangszeit %s, Inkrement %s L8 8 moves in Züge in L2 4 no Nein L14 21 no such game: keine solche Partie: L19 26 no time control set kein Zeitmodus eingestellt L4 5 none keine L7 6 nothing Nichts L37 49 opens new scratch board with position Öffnet neues Stellungseingabe-Brett mit Position L8 7 per move pro Zug L18 28 plain console beep Einfaches Konsolen-Geräusch L12 15 play file %s Spiele Datei %s L21 28 pops up the move list Öffnet das Zugliste-Fenster L24 32 process creation failed. Prozess-Erzeugung fehlgeschlagen L5 8 rated bewertet L6 9 run %s Starte %s L10 17 running %s Ausführen von %s L18 26 savePGN failed: %s savePGN fehlgeschlagen: %s L54 76 savePGN failed: Won't save game with less than 2 moves savePGN fehlgeschlagen: Kann Spiele mit weniger als 2 Zügen nicht speichern L8 8 seconds. Sekunden L7 14 unrated nicht bewertet L5 5 white Weiß L3 2 yes Ja E 492 eboard-1.1.1.orig/multilang/eboard.ja.dict0000644000175000017500000006354610757567572020004 0ustar patrikpatrikL72 109 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** PNG ã®èª­è¾¼ã«å¤±æ•—: 内蔵ã®ä½Žè§£åƒåº¦ã®é§’セットを使ã„ã¾ã™ã€‚見ãŸã‚悪ã„ã‘ã©ã­ã€‚ L11 11 Browse... 閲覧... L15 17 Play Selected ãƒ—ãƒ¬ã‚¤é¸æŠž L9 8 Refresh æ›´æ–° L14 23 Remove Field フィールド削除 L5 8 Set 設定 L30 35 %d %s to %s, %d Hz for %d msec %d %s ã‚’ %s ã¸, %d Hz ã‚’ %d msec L13 33 %d games read %d ã®ã‚²ãƒ¼ãƒ ã‚’読ã¿ã¾ã—㟠L14 31 %d moves in %s %d 㯠%s ã«ç§»å‹•ã—ã¾ã—㟠L25 30 %d. Connect to %s:%d (%s) %d. %s:%d (%s) ã«ç¹‹ãŽã¾ã™ L41 37 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (白) 対 %s (é»’)\n%s\n%d:%.2d %d L31 45 %s accepted your game proposal. %s ã¯ã‚²ãƒ¼ãƒ ã®ç”³è¾¼ã‚’断りã¾ã—ãŸã€‚ L18 39 %s engine started. %s エンジンを起動ã—ã¾ã—ãŸã€‚ L17 48 %s offers a draw. %s ã¯å¼•ã分ã‘ã‚’ææ¡ˆã—ã¦ãã¾ã—ãŸã€‚ L33 65 (Wrapped) Match Found at Line %d. (Wrapped) %d 行ã«ä¸€è‡´ã™ã‚‹æ–‡å­—列を見ã¤ã‘ã¾ã—ãŸã€‚ L64 64 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (FICS handle: Pulga) L39 65 (message obfuscated -- password mode ?) (メッセージãŒä¸æ˜Žçž­ã§ã™ -- パスワードモード ?) L14 26 (no bookmarks) (ブックマークãªã—) L6 8 (none) (ãªã—) L13 17 (time period) (時間区切り) L18 37 * game not found: * ゲームãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: L47 77 ** [eboard] bad engine protocol # in bookmark: ** [eboard] 䏿­£ãªã‚¨ãƒ³ã‚¸ãƒ³ã®ãƒ—ロトコル # in ブックマーク: L57 71 ** eboard ** warning: HOME environment variable not set\n ** eboard ** 警告: 環境変数 HOME ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“\n L26 44 --- %s game to PGN file %s --- ゲーム %s ã‚’ PGN ファイル %s 㸠L16 28 --- Disconnected --- 接続を切りã¾ã—㟠L14 21 /Game/Ad_journ /ゲーム/延期(_d) L19 24 /Game/Retract _Move /ゲーム/å¾…ã£ãŸ(_M) L12 21 /Game/_Abort /ゲーム/中断(_A) L17 33 /Game/_Offer Draw /ゲーム/引ãåˆ†ã‘ææ¡ˆ(_O) L13 21 /Game/_Resign /ゲーム/投了(_R) L22 37 /Help/_About eboard... /ヘルプ/eboard ã«ã¤ã„ã¦(_A)... L17 33 /Help/_Debug Info /ヘルプ/デãƒãƒƒã‚°æƒ…å ±(_D) L22 27 /Help/_Getting Started /ヘルプ/ã¯ã˜ã‚ã«(_G) L11 27 /Help/_Keys /ヘルプ/キー入力(_K) L10 10 /Help/sep4 /Help/sep4 L22 25 /Peer/Connect to _FICS /接続/FICSã«æŽ¥ç¶š(_F) L43 39 /Peer/Direct connect with _Remote eboard... /接続/別ã®eboardã«ç›´æŽ¥æŽ¥ç¶š(_R) L23 45 /Peer/Engine B_ookmarks /接続/エンジンã®ãƒ–ックマーク(_o) L20 36 /Peer/ICS _Bookmarks /接続/ICSã®ãƒ–ックマーク(_B) L36 46 /Peer/Play against Engine/Cr_afty... /接続/コンピュータã¨å¯¾æˆ¦/Cr_afty... L41 51 /Peer/Play against Engine/GNU Chess _4... /接続/コンピュータã¨å¯¾æˆ¦/GNU CHess _4... L44 54 /Peer/Play against Engine/_Generic Engine... /接続/コンピュータã¨å¯¾æˆ¦/_Generic Engine... L35 45 /Peer/Play against Engine/_Sjeng... /接続/コンピュータã¨å¯¾æˆ¦/_Sjeng... L30 40 /Peer/Play against Engine/sep1 /接続/コンピュータã¨å¯¾æˆ¦/sep1 L26 35 /Peer/Play against _Engine /接続/コンピュータã¨å¯¾æˆ¦ L33 36 /Peer/_Connect to Other Server... /接続/ä»–ã®ã‚µãƒ¼ãƒã«æŽ¥ç¶š(_C) L17 27 /Peer/_Disconnect /接続/接続を切る(_D) L26 36 /Peer/_Empty Scratch Board /接続/空ã®ç·¨é›†ç”¨ãƒœãƒ¼ãƒ‰(_E) L11 18 /Peer/_Quit /接続/終了(_Q) L42 60 /Peer/_Scratch Board with Initial Position /接続/é§’ãŒåˆæœŸä½ç½®ã«ä¸¦ã‚“ã ç·¨é›†ç”¨ãƒœãƒ¼ãƒ‰(_S) L10 12 /Peer/sep2 /接続/sep2 L10 12 /Peer/sep3 /接続/sep3 L10 12 /Peer/sep4 /接続/sep4 L48 64 /Settings/Bitmapped Piece Sets/Load _Pieces Only /設定/ビットマップ駒セット/é§’ã ã‘読ã¿è¾¼ã‚€(_P) L49 70 /Settings/Bitmapped Piece Sets/Load _Squares Only /設定/ビットマップ駒セット/ボードã ã‘読ã¿è¾¼ã‚€(_S) L42 67 /Settings/Bitmapped Piece Sets/Load _Theme /設定/ビットマップ駒セット/テーマを読ã¿è¾¼ã‚€(_T) L31 38 /Settings/Bitmapped Piece _Sets /設定/ビットマップ駒セット L35 48 /Settings/Enable Legality _Checking /設定/正当性ã®ãƒã‚§ãƒƒã‚¯ã‚’有効ã«(_C) L55 73 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /設定/ICS ã®æŒ¯èˆž/ボードを他よりも手å‰ã«ãƒãƒƒãƒ—アップ L69 92 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /設定/ICS ã®æŒ¯èˆž/ゲーム終了後ã«è¦³å¯Ÿã—ã¦ã„ãŸãƒœãƒ¼ãƒ‰ã‚’ã™ãã«ç ´æ£„(_D) L18 27 /Settings/Pre_move /設定/プレムーブ(_m) L27 27 /Settings/Sho_w Coordinates /設定/座標を表示(_w) L24 42 /Settings/_Animate Moves /設定/移動をアニメーション(_A) L33 42 /Settings/_Beep on Opponent Moves /設定/相手ã®ç§»å‹•ã§ãƒ“ープ音(_B) L30 39 /Settings/_Enable Other Sounds /設定/ä»–ã®åŠ¹æžœéŸ³ã‚’æœ‰åŠ¹ã«(_E) L30 45 /Settings/_Highlight Last Move /設定/最後ã®ç§»å‹•ã‚’ãƒã‚¤ãƒ©ã‚¤ãƒˆ(_H) L23 22 /Settings/_ICS Behavior /設定/_ICS ã®æŒ¯èˆž L25 21 /Settings/_Preferences... /設定/設定(_P)... L47 63 /Settings/_Vectorized Pieces (Faster Rendering) /設定/_é§’ã®ãƒ™ã‚¯ã‚¿ãƒ¼åŒ–(レンダリングãŒé€Ÿã„)(_V) L14 12 /Settings/sep3 /設定/sep3 L23 33 /Windows/Find _Previous /ウィンドウ/å‰ã‚’探ã™(_P) L28 60 /Windows/Games on _Client... /ウィンドウ/クライアントã®ã‚²ãƒ¼ãƒ è¡¨ç¤º(_C)... L31 54 /Windows/Save Desktop _Geometry /ウィンドウ/デスクップã®ä½ç½®ã‚’ä¿å­˜(_G) L29 63 /Windows/Save _Text Buffer... /ウィンドウ/テキストãƒãƒƒãƒ•ã‚¡ã‚’ä¿å­˜ã™ã‚‹(_T)... L26 43 /Windows/_Ads on Server... /ウィンドウ/_サーãƒã® ad 表示... L26 45 /Windows/_Detached Console /ウィンドウ/コンソールを切断(_D) L32 56 /Windows/_Find Text (upwards)... /ウィンドウ/テキスト検索(上方å‘ã«)(_F)... L28 51 /Windows/_Games on Server... /ウィンドウ/サーãƒã®ã‚²ãƒ¼ãƒ è¡¨ç¤º(_G)... L23 48 /Windows/_Run Script... /ウィンドウ/スクリプトを実行(_R)... L13 21 /Windows/sep1 /ウィンドウ/sep1 L13 21 /Windows/sep2 /ウィンドウ/sep2 L13 21 /Windows/sep3 /ウィンドウ/sep3 L6 14 /_Game /ゲーム(_G) L6 14 /_Help /ヘルプ(_H) L6 11 /_Peer /接続(_P) L10 11 /_Settings /設定(_S) L9 20 /_Windows /ウィンドウ(_W) L106 163 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚ L41 77 can't load font.\n フォントをロードã§ãã¾ã›ã‚“ã§ã—ãŸã€‚.\n L124 189 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** ボードã®ãƒ•ォント読ã¿è¾¼ã¿ã«å¤±æ•— - X11 ã® 75dip 㨠100 dip ã®ãƒ•ォントをインストールã—ã¦ã€X ã‚’å†èµ·å‹•ã—ã€ã¾ãŸæŒ‘戦ã—ã¦ä¸‹ã•ã„。\n L58 65 ** failed to load one or more board fonts\n ** ボードã®ãƒ•ォント読ã¿è¾¼ã¿ã«å¤±æ•—\n L34 43 abort request sent 中断リクエストé€ä¿¡ L36 43 adjourn request sent 延期リクエストé€ä¿¡ L33 49 draw request sent 引ã分ã‘リクエストé€ä¿¡ L110 167 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚ L45 62 ** bad pattern string: ** æ­£ã—ããªã„パターン文字列: L40 62 ** file not found: ** ファイルãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: L39 46 failed to load 読ã¿è¾¼ã¿ã«å¤±æ•— L112 169 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚ L34 41 failed to load 読ã¿è¾¼ã¿ã«å¤±æ•— L42 17 Adjourning not supported L33 42 Session Aborted セッションを中断 L35 51 draw request sent 引ã分ã‘リクエストé€ä¿¡ L9 9 L17 25 > (password sent) > (パスワードé€ä¿¡) L23 34 > [issued from menu] %s > [メニューã‹ã‚‰ã®ç™ºè¡Œ] %s L25 38 > [issued from shortcut] [ショートカットã‹ã‚‰ã®ç™ºè¡Œ] L31 58 > [script run from shortcut] %s > [ショートカットã‹ã‚‰å®Ÿè¡Œã®ã‚¹ã‚¯ãƒªãƒ—ト] %s L12 16 About eboard eboard を中断 L6 15 Accept å—ã‘入れる L36 48 Accepted incoming connection from %s %s ã‹ã‚‰ã®æ¬¡ã®æŽ¥ç¶šã‚’å—ã‘入れã¾ã—㟠L14 12 Ad Description Ad ã®è©³ç´° L7 12 Ad List Ad ã®ä¸€è¦§ L23 27 Ad List (refreshing...) Ad ã®ä¸€è¦§ (更新中...) L33 61 Add to Peer/Engine Bookmarks menu 接続/エンジンをブックマークメニューã«è¿½åŠ  L22 45 Address already in use アドレスã¯ã™ã§ã«ä½¿ç”¨ã—ã¦ã„ã¾ã™ L3 2 Ads Ad L21 34 Already connected ?!? ã™ã§ã«æŽ¥ç¶šã—ã¦ã„ã¾ã™ ?!? L675 956 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. ã™ã¹ã¦ã®å ´æ‰€:\nF3: å‰ã®ãƒšãƒ¼ã‚¸ã«ç§»å‹•。\nF4: 次ã®ãƒšãƒ¼ã‚¸ã«ç§»å‹•。\nF5: メインボードã«ç§»å‹•。\nF6: コンソールã«ç§»å‹•。\nF7: (ã‚‚ã—å¯èƒ½ãªã‚‰) 探索グラフã«ç§»å‹•。\nF8: ショートカットãƒãƒ¼ã®è¡¨ç¤º/éžè¡¨ç¤ºã®åˆ‡æ›¿ãˆã€‚\nPage Up/Page Down: (表示ã—ã¦ã„ã‚‹)テキストコンソールã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã€‚\nCtrl+(Left Arrow): åŠç”»é¢ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«åˆ†æˆ»ã‚‹ã€‚\nCtrl+(Right Arrow): åŠç”»é¢åˆ†ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«é€²ã‚€ã€‚\nCtrl+F: 上方å‘ã«æ¤œç´¢ (main console buffer)\nCtrl+G: å‰ã‚’検索\n\n入力ボックス:\nUp/下矢å°: 入力履歴ã«ç§»å‹•\nEnter: 一行入力をé€ã‚‹\nEsc: ãƒãƒ£ãƒƒãƒˆ/コマンド モードã®åˆ‡æ›¿ãˆ\n\nシンタックス:\nメインウィンドウã®å…¥åŠ›ãƒœãƒƒã‚¯ã‚¹ã§ã¯:\n.. 「%prefix〠ã®å…¥åŠ›ã¯ãƒãƒ£ãƒƒãƒˆã®ã€Œprefixã€ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚\n.. 「%do スクリプトåã€ã®å…¥åŠ›ã¯ã€Œã‚¹ã‚¯ãƒªãƒ—トåã€ã‚’実行ã—ã¾ã™ã€‚ L10 6 Appearance 外観 L8 6 Appended 追加 L5 6 Apply é©ç”¨ L13 15 Apply Changes 変更をé©ç”¨ L24 42 Auto-save observed games 観察ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ ã‚’自動ä¿å­˜ L22 39 Auto-save played games プレイã—ãŸã‚²ãƒ¼ãƒ ã‚’自動ä¿å­˜ L8 12 Autosave 自動ä¿å­˜ L14 15 Bad descriptor 䏿­£ãªè¨˜è¿° L45 75 Beep (need Pitch, Duration, Count and Device) ビープ (ピッãƒã€ç¶™ç¶šæ™‚é–“ã€ã‚«ã‚¦ãƒ³ãƒˆã€ãƒ‡ãƒã‚¤ã‚¹ãŒå¿…è¦) L10 18 Bishop %d ビショップ %d L14 12 Black: %s - %s é»’: %s - %s L17 30 Bookmark Caption: ブックマークã®è¦‹å‡ºã— L6 3 Bottom 下 L6 6 Browse 閲覧 L19 45 Buffer Save failed. ãƒãƒƒãƒ•ã‚¡ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ L8 15 Bughouse ãƒã‚°ãƒã‚¦ã‚¹ L22 44 Bughouse: Partner Game ãƒã‚°ãƒã‚¦ã‚¹: パートナーã®ã‚²ãƒ¼ãƒ  L14 21 Button Caption ボタンã®è¦‹å‡ºã— L11 24 Button Icon ボタンã®ã‚¢ã‚¤ã‚³ãƒ³ L6 6 Cancel å–æ¶ˆ L26 36 Cancelled connection wait. 接続待ã¡ã‚’å–æ¶ˆã—ã¾ã—ãŸã€‚ L9 9 Change... 変更... L13 24 Channel Tells ãƒãƒ£ãƒ³ãƒãƒ«ã®è¡¨ç¤º L9 21 Checkmate ãƒã‚§ãƒƒã‚¯ãƒ¡ã‚¤ãƒˆ L11 21 Choose Font ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠž L9 9 Choose... é¸æŠž... L10 27 Clock Font クロックã®ãƒ•ォント L5 9 Close é–‰ã˜ã‚‹ L5 3 Color 色 L15 12 Color Selection 色ã®é¸æŠž L6 3 Colors 色 L7 12 Command コマンド L13 23 Command Line: コマンドライン": L8 18 Computer コンピュータ L30 37 Computer White vs. Human Black コンピュータ 白 対 人間 é»’ L23 31 Configured Sound Files: サウンドファイル編集: L7 6 Connect 接続 L21 22 Connect to ICS Server ICS サーãƒã«æŽ¥ç¶š L20 17 Connected to %s (%s) %s (%s) ã«æŽ¥ç¶š L19 18 Connecting to %s... %s ã«æŽ¥ç¶šä¸­... L18 30 Connection refused 接続を拒å¦ã•れã¾ã—㟠L28 29 Connection to %s:%d failed: %s:%d ã¸ã®æŽ¥ç¶šã‚’失敗: L7 15 Console コンソール L12 25 Console Beep コンソール ブザー L12 30 Console Font コンソールã®ãƒ•ォント L21 33 Console buffer saved. コンソールãƒãƒƒãƒ•ã‚¡ä¿å­˜ L6 13 Count: カウント: L10 24 Crazyhouse クレージーãƒã‚¦ã‚¹ L18 36 Delete All Entries ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’削除 L17 21 Delete This Entry ã“ã®é …目を削除 L12 25 Depth Limit: æ€è€ƒã®æ·±ã•ã®åˆ¶é™: L11 6 Description 詳細 L7 13 Device: デãƒã‚¤ã‚¹: L50 78 Directory to run from (e.g., where book files are) 実行ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª (例ãˆã°ã€ãƒ–ックファイルã®ã‚る所) L10 19 Directory: ディレクトリ: L11 15 Discard All ã™ã¹ã¦ç ´æ£„ L12 18 Discard Game ゲームを破棄 L7 9 Dismiss ã‚„ã‚ã‚‹ L12 18 Display Game ゲームを表示 L9 6 Displayed 表示 L12 21 Draw Offered 引ã分ã‘ã‚’ææ¡ˆ L16 33 Draw offer sent. 引ã分ã‘ã®ææ¡ˆã‚’é€ä¿¡ã€‚ L18 27 Drawn by agreement åˆæ„ã«ã‚ˆã‚Šå¼•ã分㑠L16 20 Duration (msec): 継続時間 (msec): L18 15 Dynamic Seek Table 動的探索表 L17 30 Edit Bookmarks... ブックマークを編集... L21 42 Edit Engine Bookmarks エンジンã®ãƒ–ックマークを編集 L14 24 Edit Game Info ゲーム情報を編集 L17 21 Edit Time Control 時間制御を編集 L5 3 Empty 空 L16 33 Engine Bookmarks エンジンã®ãƒ–ックマーク L14 27 Engine Command エンジンã®ã‚³ãƒžãƒ³ãƒ‰ L12 22 Engine Type: エンジンã®ç¨®é¡ž: L28 40 Engine Type: %s (uneditable) エンジンã®ç¨®é¡ž: %s (編集ä¸å¯) L43 84 Engine asked more time to startup, waiting. エンジンã®èµ·å‹•ã«ã‚‚ã†å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€ãŠå¾…ã¡ä¸‹ã•ã„。 L19 36 Engine command line エンジンã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ L14 30 Engine loaded. エンジンを読ã¿è¾¼ã¿ã€‚ L14 21 Engine running エンジン実行中 L30 56 Engine started (2 sec timeout) エンジン開始ã—ã¾ã—㟠(2 秒タイムアウト) L18 37 Enter FEN Position FEN ã®å ´æ‰€ã‚’入力ã—ã¦ä¸‹ã•ã„ L10 18 Event Type イベント種類 L13 19 Exam.Game #%d ゲーム検証 #%d L21 33 Failed to run engine. エンジンã®å®Ÿè¡Œã«å¤±æ•—。 L28 39 Failed to run helper program 補助プログラムã®å®Ÿè¡Œã«å¤±æ•— L30 57 File to play / Program to run: プレイã™ã‚‹ãƒ•ァイル / 実行ã™ã‚‹ãƒ—ログラム L8 14 Filter: フィルタ: L14 22 Filter: (none) フィルタ: (ãªã—) L36 54 Finish the current connection first. ã¾ãšç¾åœ¨ã®æŽ¥ç¶šã‚’終了ã•ã›ã¦ãã ã•ã„。 L30 54 Finish the current game first. ã¾ãšç¾åœ¨ã®ã‚²ãƒ¼ãƒ ã‚’終了ã•ã›ã¦ä¸‹ã•ã„。 L5 9 Flags フラグ L5 12 Fonts フォント L8 10 From FEN FEN ã‹ã‚‰ L6 11 Game # ゲーム # L8 13 Game #%d ゲーム #%d L19 24 Game #%d - %d %d %s ゲーム #%d - %d %d %s L20 25 Game #%d - %s vs. %s ゲーム #%d - %s 対 %s L21 9 Game #%d - untimed %s ゲーム L12 17 Game #%d: %s ゲーム #%d: %s L12 15 Game Aborted ゲーム中断 L16 18 Game Description ゲームã®è©³ç´° L21 27 Game Information Font ゲーム情報フォント L9 18 Game List ゲームリスト L25 36 Game List (refreshing...) ゲームã®ãƒªã‚¹ãƒˆ (更新中...) L9 15 Game Lost ゲーム敗退 L12 15 Game Started ゲーム開始 L8 15 Game Won ゲームå‹åˆ© L19 24 Game appended to %s %s ã«ã‚²ãƒ¼ãƒ ã‚’追加 L17 15 Game in progress. ゲーム中。 L13 25 Game over: %s ゲームオーãƒãƒ¼: %s L19 36 Game proposal sent. ゲーム申込をé€ã‚Šã¾ã—ãŸã€‚ L13 16 Game started! ゲーム開始! L12 21 Game/Board: ゲーム/ボード: L5 9 Games ゲーム L24 29 Generic XBoard Engine... 汎用 XBoard エンジン... L8 18 Giveaway ギブアウェイ L46 46 Graphic representation of crazy/bughouse stock クレージー/ãƒã‚°ãƒã‚¦ã‚¹ã®ç”»é¢ç”»åƒ L16 29 Help: Debug Info ヘルプ: デãƒãƒƒã‚°æƒ…å ± L22 24 Help: Getting Started ヘルプ: ã¯ã˜ã‚ã« L10 23 Help: Keys ヘルプ: キー入力 L5 7 Hide! éš ã™! L18 37 Host not found: %s ホストãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: %s L8 12 Hostname ホストå L23 38 Hostname or IP address: ホストåã¾ãŸã¯ IP アドレス: L5 6 Human 人間 L30 37 Human White vs. Computer Black 人間 白 対 コンピュータ é»’ L17 24 Human plays white 人間ãŒç™½ã§ãƒ—レイ L13 19 ICS Challenge ICS ãƒãƒ£ãƒ¬ãƒ³ã‚¸ L25 43 IPC pipe creation failed. IPC パイプ生æˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ L2 2 Id Id L55 63 Inhibit seek lines on console when Seek Table is active æŽ¢ç´¢è¡¨ãŒæœ‰åŠ¹ãªæ™‚ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®æŽ¢ç´¢è¡Œã‚’抑制 L4 6 Kill 中断 L4 3 Left å·¦ L8 16 Load PGN PGN 読ã¿è¾¼ã¿ L11 19 Load PGN... PGN 読ã¿è¾¼ã¿... L5 12 Local ローカル L15 30 Local Game List ローカルã®ã‚²ãƒ¼ãƒ ä¸€è¦§ L6 15 Losers ルーザーズ L23 30 Match Found at Line %d. %d 行ã«ä¸€è‡´ã—ã¾ã—ãŸã€‚ L15 18 Match Pattern: 一致パターン L8 15 Max Ply: 最大プライ L30 52 Move made (Obs'vd/Exm'd Games) 手番ãŒç§»å‹• (観察/検査ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ ) L8 15 No peer. 接続ãªã—。 L19 30 No previous search. 剿–¹ã«ã¯ã‚りã¾ã›ã‚“。 L12 18 Normal Chess 通常ã®ãƒã‚§ã‚¹ L2 6 OK 実行 L17 36 Obs'vd Game Ended 観察ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ ãŒçµ‚了 L7 6 Observe 観察 L2 6 Ok 実行 L293 385 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. 上ã®ãƒ‘ターンã«ä¸€è‡´ã™ã‚‹è¡Œã®ã¿ãŒã€ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã«è¿½åŠ ã•れã¾ã™ã€‚\nパターンã¯ã€| (パイプ) 文字㧠「ã¾ãŸã¯ã€ã‚’表ã›ã¾ã™ã€‚\n* (アスタリスク) ã¯ã™ã¹ã¦ã«ä¸€è‡´ã—ã¾ã™ã€‚\n例:\n'(20)|(22)' ã¯ã€ãƒãƒ£ãƒ³ãƒãƒ« 20 㨠22 ã®è¡Œã®ã¿ã‚’表示ã—ã¾ã™ã€‚\n'blk * bored' ã¯ã€'blk '(...)' bored' ã‚’å«ã‚€è¡Œã‚’表示ã—ã¾ã™ã€‚ L14 15 Opponent Moved 相手ã®ç§»å‹• L13 19 PGN filename: PGN ファイルå L11 14 Pitch (Hz): ピッム(Hz) L4 9 Play プレイ L56 63 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) プレイ %s, %s 対 %s (%s, 最高深度 %d, 常時æ€è€ƒ: %s) L58 125 Play WAV (need Device and Filename, sox must be installed) WAV ã‚’å†ç”Ÿ (デãƒã‚¤ã‚¹ã¨ãƒ•ァイルåãŒå¿…è¦ã§ã™ã€‚sox ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™) L19 19 Play against Crafty Crafty ã¨ãƒ—レイ L19 24 Play against Engine エンジンã¨ãƒ—レイ L24 24 Play against GNU Chess 4 GNU Chess 4 ã¨ãƒ—レイ L18 18 Play against Sjeng Sjeng ã¨ãƒ—レイ L6 15 Player プレイヤー L22 40 Player/Color Name Font プレイヤーã®åå‰ã®ãƒ•ォント L11 6 Preferences 設定 L12 12 Private Tell é›»è©±ç•ªå· L23 42 Program exited too soon プログラムã¯ã™ãã«çµ‚了ã—ã¾ã™ L8 6 Progress é€²æ— L17 15 Promotion Piece 昇進ã™ã‚‹é§’ L8 15 Protocol プロトコル L33 48 Protocol mismatch, disconnecting. プロトコルã®ä¸ä¸€è‡´ã€åˆ‡æ–­ã—ã¾ã™ã€‚ L10 15 Queen %d クイーン %d L12 15 Refresh List 一覧を更新 L6 6 Result çµæžœ L45 61 Retrieve ICS Channel Lists from eboard.sf.net ICS ãƒãƒ£ãƒ³ãƒãƒ«ä¸€è¦§ã‚’ eboard.sf.net ã‹ã‚‰å¼•ã出㙠L18 24 Revert to Defaults ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™ L18 24 Revert to defaults ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™ L5 3 Right å³ L3 6 Run 実行 L27 51 Run Program (need Filename) プログラムを実行 (ファイルåãŒå¿…è¦) L47 62 Run autofics.pl script after connecting to FICS FICS ã«æŽ¥ç¶šã—ãŸå¾Œã€autofics.pl スクリプトを実行 L17 39 Save Buffer As... ゲームをåå‰ã‚’ã¤ã‘ã¦ä¿å­˜... L12 21 Save Game... ゲームをä¿å­˜... L11 19 Save as PGN PGN ã¨ã—ã¦ä¿å­˜ L6 15 Script スクリプト L11 21 Script List スクリプト一覧 L34 48 Scrollback limit (0 = unlimited) : スクロールãƒãƒƒã‚¯ç¯„囲 (0 = 無制é™) : L11 18 Search Text テキスト検索 L12 26 Search for: 検索ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆ: L22 54 Search text not found. 検索テキストã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ L10 9 Seek Table 探索表 L15 30 Seek Table Font 探索表フォントを探㙠L10 21 Set Filter フィルタを設定 L13 24 Set Filter... フィルタを設定... L49 99 Set depth limit to 0 to use the engine's default. æ€è€ƒã®æ·±ã•ã®åˆ¶é™ã‚’ 0 ã«ã™ã‚‹ã¨ã€ã‚¨ãƒ³ã‚¸ãƒ³ã®ãƒ‡ãƒ•ォルトãŒä½¿ç”¨ã•れã¾ã™ã€‚ L13 18 Setup Buttons ボタンを設定 L21 39 Shortcut Button Setup ショートカットボタンを設定 L42 63 Show channel tells in one pane per channel 表示ãƒãƒ£ãƒ³ãƒãƒ«ã¯ãƒãƒ£ãƒ³ãƒãƒ«æ¯Žã«ä¸€ã¤ãšã¤è¡¨ç¤º L63 90 Show channel tells on console too (when above option is active) 表示ãƒãƒ£ãƒ³ãƒãƒ«ã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«ã‚‚表示 (上ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åŠ¹ãªæ™‚) L31 54 Show rating next to player name プレイヤーåã®éš£ã«ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’表示 L33 57 Show shortcut buttons below board ショートカットボタンをボードã®ä¸‹ã«è¡¨ç¤º L11 15 Side & Time æ‰‹ç•ªã¨æ™‚é–“ L14 15 Side Selection 手番ã®é¸æŠž L34 68 Smoother animation (eats more CPU) 滑らã‹ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ (多ãã® CPU パワーを消費) L12 24 Sound Events サウンドイベント L6 12 Sounds サウンド L7 15 Suicide スーサイド L12 12 Tab Position タブä½ç½® L4 9 Test テスト L52 70 The checkbox on the left enables/disables the sound. å·¦ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã§ã‚µã‚¦ãƒ³ãƒ‰ã®æœ‰åй/無効を設定 L69 82 The engine will be run with\n/bin/sh -c 'cd directory ; command line' エンジン㯠/bin/sh -c 'cd directory ; command line'\nã§å®Ÿè¡Œã•れã¾ã™ã€‚ L24 36 Think on opponent's time ç›¸æ‰‹ã®æ™‚é–“ã®ã¨ãも考ãˆã‚‹ L12 12 Time Control 時間設定 L15 15 Time Control... 時間設定... L13 13 Time Control: 時間設定: L16 12 Time Running Out 時間切れ L7 12 Timeout 時間切れ L44 71 Times can be given as hh:mm:ss , mm:ss or ss 時間㯠hh:mm:ssã€mm:ssã€ss ã®ã„ãšã‚Œã‹ã§è¨­å®šã§ãã¾ã™ã€‚ L3 3 Top 上 L30 66 Type: Fischer Clock (ICS-like) タイプ: フィッシャークロック (ICS ã®ã‚ˆã†ãªã‚‚ã®) L25 32 Type: Fixed Time per Move タイプ: 固定時間ã§å‹•ã L34 59 Type: Use engine's default setting タイプ: エンジンã®ãƒ‡ãƒ•ォルトã®è¨­å®šã‚’使ㆠL29 46 Type: X Moves per Time Period タイプ: X ã¯æ™‚間区切りã”ã¨ã«å‹•ã L23 33 Use plain color squares 装飾ã®ãªã„色ã®ç›®ã‚’使用 L7 6 Variant 変種 L8 7 Variant: 変種: L24 25 Variant: %s (uneditable) 変種: %s (編集ä¸å¯) L4 6 Wait 待㤠L21 27 Wait for a connection 接続を待ã£ã¦ã„ã¾ã™ L34 46 Waiting for connection on port %d. ãƒãƒ¼ãƒˆ %d ã®æŽ¥ç¶šã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚ L30 65 Warn when own clock is below: 自分ã®ã‚¯ãƒ­ãƒƒã‚¯ãŒæ¬¡ã®ç§’数未満ã«ãªã£ãŸã‚‰è­¦å‘Š: L18 22 Welcome to eboard. eboard ã¸ã‚ˆã†ã“ã L14 12 White: %s - %s 白: %s - %s L10 12 Working... æ€è€ƒä¸­... L16 30 Write to Console ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«æ›¸ã出㙠L19 30 Wrong address space é–“é•ã£ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ç©ºé–“ L5 9 Wrote 書ã„㟠L11 16 Your color: ã‚ãªãŸã®è‰²: L10 19 Your name: ã‚ãªãŸã®åå‰: L6 14 [chat] [ãƒãƒ£ãƒƒãƒˆ] L5 14 [cmd] [コマンド] L39 61 [eboard] ** failed to create directory [eboard] ** ディレクトリã®ä½œæˆã«å¤±æ•—ã—ã¾ã—㟠L20 39 [eboard] ** no $HOME [eboard} ** $HOME ã¯å­˜åœ¨ã—ã¾ã›ã‚“ L22 42 [eboard] bad RC line\n [eboard] é–“é•ã£ãŸ RC ラインã§ã™\n L4 9 beep ブザー L5 9 beeps ブザー L5 3 black é»’ L53 101 can't load PGN move text from %s (error opening file) %s ã‹ã‚‰ PGN 移動テキストを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—㟠(ファイルオープンエラー) L30 57 can't seek to offset %lu of %s オフセット %lu ã‚’ %s ã‹ã‚‰æŽ¢ã›ã¾ã›ã‚“ã§ã—㟠L32 46 eboard Direct Connection Manager eboard ダイレクト接続マãƒãƒ¼ã‚¸ãƒ£ãƒ¼ L343 609 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n\n[å‚考日本語訳]\nã“ã®ãƒ—ログラムã¯ãƒ•リーソフトウェアã§ã™; Free Software\nFoundation ã® GNU General Public License ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã¾ãŸã¯\nãれ以é™ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®ã‚‚ã¨ã§ã€è‡ªç”±ã«æ”¹å¤‰ãƒ»å†é…布ã§ãã¾ã™ã€‚\n L19 27 eboard: Console #%d eboard: コンソール #%d L22 31 error parsing PGN data PGN データã®è§£æžã‚¨ãƒ©ãƒ¼ L11 30 flips board ボードをã²ã£ãり返㙠L20 12 goes back 1 halfmove 一手戻る L26 24 goes back to start of game ã‚²ãƒ¼ãƒ é–‹å§‹ã«æˆ»ã‚‹ L23 12 goes forward 1 halfmove 一手進む L27 24 goes forward to end of game ゲーム終了ã«é€²ã‚€ L13 22 illegal move! æ­£ã—ããªã„å‹•ã! L2 9 no ã„ã„㈠L14 36 no such game: ãã‚“ãªã‚²ãƒ¼ãƒ ã¯ã‚りã¾ã›ã‚“ L37 51 opens new scratch board with position ç¾åœ¨ã®é§’ä½ç½®ã§ç·¨é›†ç”¨ã®ãƒœãƒ¼ãƒ‰ã‚’作る L12 25 play file %s ファイル %s を実行 L21 15 pops up the move list 棋譜を表示 L24 30 process creation failed. プロセス生æˆã«å¤±æ•—。 L6 9 run %s 実行 %s L10 12 running %s 実行中 %s L18 26 savePGN failed: %s PGN ã®ä¿å­˜ã«å¤±æ•—: %s L54 62 savePGN failed: Won't save game with less than 2 moves PGN ã®ä¿å­˜ã«å¤±æ•—: Won't save game with less than 2 moves L8 6 seconds. 秒。 L5 3 white 白 L3 6 yes ã¯ã„ E 388 eboard-1.1.1.orig/multilang/eboard.pl.po0000644000175000017500000020505010757567572017504 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** Åadowanie PNG nieudane: używam wbudowanego zestawu bierek o niskiej rozdzielczoÅ›ci (brzydki).\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " PrzeglÄ…daj... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Graj zaznaczone " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " OdÅ›wież " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " UsuÅ„ pole " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Ustaw " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Szybki start\n" "#M#Typowe czynnoÅ›ci w programie eboard\n" "\nGra przeciw komputerowi\n" "#S#Sam eboard nie potrafi \"grać w szachy\", ale sÅ‚uży za interfejs graficzny dla programów\n" "grajÄ…cych, które takiego interfejsu nie posiadajÄ…. Aby grać przeciw komputerowi\n" "potrzeba wÅ‚aÅ›nie takiego programu. GNU Chess, Crafty czy Sjeng sÄ… przykÅ‚adami programów\n" "dostÄ™pnych za darmo. Po zainstalowaniu jednego z nich, wejdź do menu #B#Partner#K#, a nastÄ™pnie\n" " #B#Graj przeciw programowi szchowemu#K# i wybierz opcjÄ™ w zależnoÅ›ci od posiadanego programu.\n" "\n#M#Gra przez Internet\n" "#S#Eboard obsÅ‚uguje protokół FICS obowiÄ…zujÄ…cy na serwerze freechess.org - inne serwery, \n" "jak na przykÅ‚ad US Chess Live, używajÄ…ce opragramowania FICS powinny dziaÅ‚ać z eboard. \n" "ICC nie jest obsÅ‚ugiwany. Aby połączyc siÄ™ z FICS, wejdź do menu #B#Partner#K# i \n" " kliknij na #B#Połącz z FICS#K#. Aby połączyć siÄ™ z innymi serwerami, wejdź do menu #B#Partner#K# \n" "a nastÄ™pnie #B#Połącz z innym serwerem...#K#.\n" "Na FICS można zalogować siÄ™ jako gość, lecz wiÄ™cej zabawy daje gra jako zarejestrowany\n" "użytkownik. Darmowej rejestracji można dokonać na stronie FICS #B#http://www.freechess.org#K#.\n" "\n#M#PrzeglÄ…danie partii w formacie PGN\n" "#S#PGN jest najbardziej rozpowszechnionym formatem zapisu partii szachowych. Potrafi zapisywać\n" "zarówno posuniÄ™cia jak i komentarze (analizy). Aby otworzyć plik PGN w programie eboard,\n" "wejdź do menu #B#Okna#K# i kliknij na #B#Partie na kliencie#K#. NastÄ™pnie, w otwartym okienku\n" "kliknij na #B#Otwórz PGN...#K#. Aby obejrzeć partiÄ™,\n" "#B#zaznacz jÄ…#K# a nastÄ™pnie kliknij na #B#WyÅ›wietl partiÄ™#K#. Partia zostanie umieszczona \n" "w głównym oknie programu w nowej zakÅ‚adce szachownicy .#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s na %s, %d Hz na %d ms" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "Przeczytano %d partii" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d posunięć w ciÄ…gu %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Połącz z %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (biaÅ‚e) vs. %s (czarne)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s przyjÄ…Å‚ ofertÄ™ gry" # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "Program %s uruchomiony." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s proponuje remis." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s na ruch" # state: untranslated # (1) clock.cc:317 msgid "%s/move" msgstr "" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "Trafienie w wierszu %d. (miniÄ™to koniec pliku)" # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (ksywka na FICS : Pulga)" # state: lost (deprecated key) #: mainwindow.cc:791 msgid "(c) 2001-2002 Felipe Bergo (FICS Handle: Pulga)" msgstr "(c) 2001-2002 Felipe Bergo (ksywka na FICS : Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(wiadomość nieczytelna -- tryb hasÅ‚a ?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(brak zakÅ‚adek)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "brak" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "okres czasu" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* nie znaleziono partii: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] nieprawidÅ‚owy protokół programu grajÄ…cego w zakÅ‚adce : " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** uwaga: Nie ustawiono zmiennej HOME \n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- Partia zostaÅ‚a %s do pliku PGN %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Rozłączono" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partie/_Odłóż na później" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Partie/_Cofnij posuniÄ™cie" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partie/_Przerwij partiÄ™" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Game/Zaproponuj _remis" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partie/_Poddaj partiÄ™" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Pomoc/_O programie..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Pomoc/_Informacje dla programisty" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Pomoc/_Szybki start" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Pomoc/_Klawisze" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/NápovÄ›da/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Partner/Połącz z _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Partner/_BezpoÅ›rednie połączenie z innym eboard..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Partner/ZakÅ‚adki programów grajÄ…cych" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Partner/ZakÅ‚adki _ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Partner/Graj przeciw programowi/_Crafty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Partner/Graj przeciw programowi/_GNU Chess 4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Partner/Graj przeciw programowi/_Inny program..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Partner/Graj przeciw programowi/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Partner/Graj przeciw programowi/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Partner/Graj przeciw programowi szachowemu" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Partner/_Połącz z innym serwerem..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Partner/_Rozłącz" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Partner/_Pusta szachownica" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Partner/_ZakoÅ„cz" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Partner/Szachownica z pozycjÄ… _wyjÅ›ciowÄ…" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Partner/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Partner/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Partner/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Ustawienia/WyglÄ…d bierek/Åaduj tylko wyglÄ…d bierek" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Ustawienia/WyglÄ…d bierek/Åaduj tylko wyglÄ…d szachownicy" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Ustawienia/WyglÄ…d bierek/Åaduj zestaw" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Ustawienia/_WyglÄ…d" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Ustawienia/Włącz sprawdzanie poprawnoÅ›ci posunięć" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Ustawienia/Ustawienia ICS/Pr_zełączaj na zakÅ‚adkÄ™ ostatnio utworzonej szachownicy" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Ustawienia/Ustawienia ICS/Usuwaj zakÅ‚adkÄ™ po zakoÅ„czeniu obserwowanej partii" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Ustawienia/_Antycypacja nastÄ™pnego posuniÄ™cia" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Ustawienia/Pokaż _współrzÄ™dne" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Ustawienia/_Animacja posunięć" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Ustawienia/Graj dźwiÄ™k, gdy przeciwnik wykonuje ruch" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Ustawienia/_Włącz pozostaÅ‚e dźwiÄ™ki" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Ustawienia/_PodÅ›wietlaj ostatnie posuniÄ™cie" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Ustawienia/Ustawienia _ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Ustawienia/_Preferencje..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Ustawienia/_Wektorowe bierki (Szybsze rysowanie)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Ustawienia/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Okna/Znajdź p_oprzedni" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Okna/Partie na _kliencie..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Okna/ZapamiÄ™taj _rozmiary okna" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Okna/Zapisz tekst z _bufora..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Okna/_Oferty gry na serwerze..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Okna/Osobne okno kon_soli" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Okna/_Znajdź tekst (w górÄ™)..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Okna/_Partie na serwerze..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Okna/_Uruchom skrypt..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Okna/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Okna/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Okna/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Partia" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/Po_moc" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Partner" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/_Ustawienia" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/_Okna" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n" "\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " nie można zaÅ‚adować fontu.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** Å‚adowanie jednego lub wiÄ™ce fontów nieudane - zainstaluj fonty o rozdzielczoÅ›ci 75 i 100 dpi, zrestartuj X i spróbuj ponownie.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** Å‚adowanie jednego lub wiÄ™ce fontów nieudane\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " oferta przerwania partii wysÅ‚ana" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " oferta odÅ‚ożenia partii wysÅ‚ana" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " oferta remisu wysÅ‚ana" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n" "\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** nieprawidÅ‚owy wzorzec: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** nie znaleziono pliku: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " Å‚adowanie nieudane " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n" "\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " Å‚adowanie nieudane " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " Brak obsÅ‚ugi odkÅ‚adania partii" # state: untranslated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr "" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Przerwano sesjÄ™" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " wysÅ‚ano ofertÄ™ remisu" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (hasÅ‚o wysÅ‚ane)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [wywoÅ‚ano z menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [polecenie wydane za pomocÄ… skrótu] " # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [uruchomiono skrypt za pomocÄ… skrótu ] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "O programie" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Przyjmij" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "PrzyjÄ™to połączenie nadchodzÄ…ce od %s" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Szczegóły oferty" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Lista ofert gry" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Lista ofert (odÅ›wieżam...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Dodaj do zakÅ‚adek" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Adresa jest już używany" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Oferty" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Połączenie już istnieje ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "DziaÅ‚ajÄ… w dowolnym miejscu:\n" "F3: Przejdź do poprzedniej zakÅ‚adki\n" "F4: Przejdź do nastÄ™pnej zakÅ‚adki\n" "F5: Przejdź do głównej szachownicy\n" "F6: Przejdź do konsoli\n" "F7: Lista ofert gry (jeÅ›li dostÄ™pna)\n" "F8: Włącz/Wyłącz pasek skrótów\n" "Page Up/Page Down: przewija tekst na konsoli (jeÅ›li jest widoczna)\n" "Ctrl+(strzaÅ‚ka w lewo): Wstecz o jeden półruch\n" "Ctrl+(strzaÅ‚ka w prawo): Naprzód o jeden półruch\n" "Ctrl+F: Wyszukaj w górÄ™ (bufor konsoli)\n" "Ctrl+G: Znajdź poprzedni\n" "\nPasek komend:\n" "StrzaÅ‚ki Góra/Dół: przewija wczeÅ›niej wpisane komendy\n" "Enter: WyÅ›lij wpisany tekst\n" "Esc: Przełącza miÄ™dzy trybem Komend/Rozmowy\n" "\nSkÅ‚adnia:\n" "Pasek komend w oknie głównym:\n" ".. wpisanie %prefix text przełączy prefiks rozmowy na tekst.\n" ".. wpisanie %do scriptname wykona skrypt." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "WyglÄ…d" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "dodana" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Zastosuj" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Zastosuj" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Automatyczny zapis obserwowanych partii" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Automatyczny zapis rozegranych partii" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Automatyczne zapisywanie" # state: untranslated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "TÅ‚o" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "NieprawidÅ‚owy deskryptor" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Graj SygnaÅ‚ (wymagane wysokość, czas trwania, liczba i urzÄ…dzenie)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Goniec %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Czarne" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Czarne: %s - %s" # state: untranslated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" # state: untranslated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Nazwa programu:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Dół" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Jasny tekst" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "PrzeglÄ…daj" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Zapis bufora nieudany." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Kloc" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Kloc: Partia z partnerem" # state: untranslated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Napis na przycisku" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Ikona przycisku" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Anuluj" # state: untranslated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Anulowano oczekiwanie na połączenie" # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "ZmieÅ„..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Wiadomość od kanaÅ‚u" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Mat" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Programy szachowe" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Wybierz font" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Wybierz..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Font zegara" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr " Zamknij " # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Kolor" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Wybór koloru" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Kolory" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Polecenie" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Polecenie wywoÅ‚ania:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Komputer" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Komputer (BiaÅ‚e) vs CzÅ‚owiek (Czarne)" # state: untranslated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Włączone pliki dźwiÄ™kowe:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Połącz" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Połącz z sewerem ICS" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Połączono z %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "ÅÄ…czÄ™ z %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Połączenie odrzucone" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Połączenie z %s:%d nieudane: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Konsola" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "SygnaÅ‚ z PC speaker'a" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Font konsoli" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Zapisano bufor konsoli." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Liczba:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Kloc" # state: untranslated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "" # state: untranslated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "" # state: untranslated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Czarne pola..." # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "UsuÅ„ wszystkie wpisy" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "UsuÅ„ ten wpis" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Ograniczenie głębokoÅ›ci obliczeÅ„:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Opis" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "UrzÄ…dzenie:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "PoczÄ…tkowy katalog (np. lokalizacja książki debiutowej)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Katalog:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Porzuć wszystkie" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Porzuć partiÄ™" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Wyjdź" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "WyÅ›wietl partiÄ™" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "WyÅ›wietlana" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Rozprowadzany na zasadach licencji GNU GPL w wersji 2 lub późniejszej" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Zaproponowano remis" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Oferta remisu wysÅ‚ana" # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Zgodzono siÄ™ na remis" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Wstaw bierkÄ™:" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Czas trwania (ms):" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Dynamiczna tabela ofert" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Edytuj zakÅ‚adki..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Edytuj zakÅ‚adki programów grajÄ…cych" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Edytuj informacje o partii" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Edytuj tempo gry" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Pusta" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "ZakÅ‚adki programów grajÄ…cych" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Polecenie wywoÅ‚ania programu" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Rodzaj programu grajÄ…cego:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Typ programu: %s (brak możliwoÅ›ci edycji)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Program prosi o wiÄ™cej czasu na wystartowanie, czekam." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Parametry wywoÅ‚ania programu" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Program zaÅ‚adowany." # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Program grajÄ…cy uruchomiony" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Program uruchomiony (2 sekundy oczekiwania)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Wprowadź pozycjÄ™ w zapisie FEN" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Typ zdarzenia" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "OglÄ…daj partiÄ™ #%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Uruchomienie programu nie powiodÅ‚o siÄ™." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Uruchomienie programu pomocniczego nieudane" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Plik dźwiÄ™kowy / program do odtwarzania:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtr:" # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtr: (brak)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "ZakoÅ„cz najpierw bieżące poÅ‚aczenie" # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "ZakoÅ„cz najpierw bieżącÄ… partiÄ™" # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Oznaczenia" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Fonty" # state: lost (deprecated key) # (1) dlg_gamelist.cc:523 msgid "From Elsewhere " msgstr "Z innych źródeÅ‚ (%d %s)" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "Z innych źródeÅ‚" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "Z programów grajÄ…cych (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "Z FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "Z ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "Z plików PGN (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Partia #" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partia #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partia #%d - %d %d %s" # state: untranslated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "" # state: untranslated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partia #%d - %s vs. %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partia #%d - bez zegara %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Partia #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partia przerwana" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Opis partii" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Font informacji o partii" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Lista partii" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Lista partii (odÅ›wieżam...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Partia przegrana" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "RozpoczÄ™to partiÄ™" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Partia wygrana" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "PartiÄ™ dopisano do %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partia trwa." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Koniec partii #%d: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Oferta gry wysÅ‚ana." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Partia rozpoczÄ™ta!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partia/Szachownica: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Partie" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Dowolny program grajÄ…cy zgodny z XBoard..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Graficzna pula bierek w grze typu crazy/kloc " # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Pomoc: Informacje dla programisty" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Pomoc: Szybki start" # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Pomoc: Klawisze" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Ukryj!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Nie znaleziono serwera: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Nazwa serwera" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Nazwa komputera lub adres IP" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "CzÅ‚owiek" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "CzÅ‚owiek (BiaÅ‚e) vs Komputer (Czarne)" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "CzÅ‚owiek gra biaÅ‚ymi" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Propozycja gry (ICS)" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "Utworzenie potoku IPC nieudane." # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Lp" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "JeÅ›li wybierzesz zakÅ‚adkÄ™, \n" "program szachowy wykona nastÄ™pny ruch,\n" "nie baczÄ…c na ustawienia kolejnoÅ›ci w zakÅ‚adce." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "NieprawidÅ‚owe wstawienie %c%d (sprawdzanie poprawnoÅ›ci)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "NieprawidÅ‚owe posuniÄ™cie %c%d%c%d (sprawdzanie poprawnoÅ›ci)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "NieprawidÅ‚owy ruch." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Inkrementacja (sek):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Inkrementacja:" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Nie wyÅ›wietlaj ofert gry na konsoli, gdy włączona jest ich tabela" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Pozycja wyjÅ›ciowa" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Czas poczÄ…tkowo ([mm:]ss):" # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Uruchamianie programu grajÄ…cego" # state: untranslated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Klucz" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Nagłówek:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibicuje/Szepcze" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Zabij" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Skoczek %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Ostatnio otrzymana oferta" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Lewo" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "BiaÅ‚e pola..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "ZaÅ‚aduj PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Otwórz PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Lokalnie" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Lokalna lista partii" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Szukam serwera %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Szachownica" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer i TD" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "RÄ™cznie/Wzorzec" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Trafienie w wierszu %d." # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Dopasuj wzorzec" # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "MateriaÅ‚: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Maks. głębokość w półruchach:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Wykonano posuniÄ™cie (obserwane/oglÄ…dane) " # state: untranslated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # state: untranslated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "" # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "PosuniÄ™cia" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Sieć niedostÄ™pna" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "WiadomoÅ›ci/OgÅ‚oszenia" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "Nie" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Nie ma błędu." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "NiewystarczajÄ…cy materiaÅ‚ do zamatowania" # state: untranslated # (1) network.cc:781 msgid "No output from program." msgstr "" # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Brak przeciwnika." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Brak wczeÅ›niejszych wyszukiwaÅ„" # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Nie ma wiÄ™cej ofert" # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "Nie otrzymano żadnych ofert" # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Brak" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "ZwykÅ‚e szachy" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "ZwykÅ‚y tekst" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "To nie gniazdko ?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Obserwowana partia zakoÅ„czona" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Obserwuj" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "OK" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Po połączeniu z serwerem wpisanym w tym okienku, zostanie utworzony\n" "skrót w rozwijanym menu Partner/ZakÅ‚adki ICS. W celu modyfikacji lub \n" "usuniÄ™cia wpisów edytuj plik ~/.eboard/eboard.conf." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Tylko linie odpowiadajÄ…ce powyższemu wzorcowi zostanÄ… dodane\n" "do tego pola tekstowego. Wzorce mogÄ… być łączone operacjÄ… OR przy pomocy\n" "znaku | (potok). Znak * (gwiazdka) dopasuje cokolwiek.\n" "PrzykÅ‚ady:\n" "'(20)|(22)' wyÅ›wietla wyłącznie linijki z kanałów 20 i 22\n" "'blik * bored' wyÅ›wietla linijki zawierajÄ…ce 'blik '(...)' bored'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "Przeciwnik wykonaÅ‚ ruch" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Opcje" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "Nagłówki PGN" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "Nazwa pliku PGN:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Partner mówi:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Pion %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Wysokość (Hz):" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Graj" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Graj %s jako %s vs %s (%s, głębokość %d, myÅ›l na czasie przeciwnika: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Odtwarzaj WAV (wymagane urzÄ…dzenie i nazwa pliku oraz program sox)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Graj przeciw programowi Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Graj przeciw programowi" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Graj przeciw programowi GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Graj przeciw programowi Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Gracz" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "Gracz poddaje siÄ™" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Font nazwy biaÅ‚ych/czarnych" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pozycja: %s vs %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Preferencje" # state: untranslated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "" # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Rozmowa (prywatnie)" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Rozmowa (prywatnie)" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Program przedwczeÅ›nie zakoÅ„czyÅ‚ pracÄ™" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "W trakcie wykonywania" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Promuj pionka w " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Zaproponuj" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Złóż ofertÄ™ gry" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protokół" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Niekompatybilny protokół, rozłączanie" # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Hetman %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Kalkulacje" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Ranking" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Różnica rankingu" # state: untranslated # (1) network.cc:788 msgid "Read error from program." msgstr "" # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Otrzymano ofertÄ™ gry od %s." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Odwiedzone serwery" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "OdÅ›wież listÄ™" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Odpowiedziano na ofertÄ™. %d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Poddano siÄ™." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Rezultat" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Wycofano ostatnie posuniÄ™cie" # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Pobierz listÄ™ kanałów ICS z eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "Przywróć ustawienia domyÅ›lne" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "Przywróć ustawienia domyÅ›lne" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Prawo" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Wieża %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Uruchom" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Uruchom program..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Uruchom program (potrzeba nazwy pliku)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Uruchamiaj skrypt autofics.pl po połączeniu z FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Zapisz bufor tekstowy jako..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Zapisz partiÄ™..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Zapisz jako PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Nowa %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Skrypt" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Lista skryptów" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Limit przewijania konsoli (0 = bez ograniczeÅ„) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Szukaj tekstu" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Wyszukaj: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Nie odnaleziono poszukiwanego tekstu." # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Lista ofert gry" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Tabela ofert gry" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Font tabeli ofert gry" # state: untranslated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Ustaw filtr" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Ustaw filtr..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Ustaw głębokość na 0, aby użyć domyÅ›lnych ustawieÅ„ programu." # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Ustawienia przycisków" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Ustawienia przycisku skrótów" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Krzyczy" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "WiadomoÅ›ci od poszczególnych kanałów w osobnych zakÅ‚adkach" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Pokazuj wiadomoÅ›ci od kanaÅ‚u również na konsoli (gdy włączona powyższa opcja)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Pokazuj ranking obok nazwy gracza" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Pokazuj przyciski skrótów pod szachownicÄ…" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Kolor i tempo" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Wybór koloru" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "PosuniÄ™cie: " # state: untranslated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "" # state: untranslated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "PÅ‚ynna animacja (bardziej obciąża procesor)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Ten protokół nie pozwala na wycofanie posuniÄ™cia przez to menu" # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Zdarzenie dźwiÄ™kowe" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Zdarzenia dźwiÄ™kowe" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "DźwiÄ™ki" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Kod źródÅ‚owy dostÄ™pny na http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Pat" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Nawiąż połączenie" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "PoczÄ…tkowo czasu:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "Port TCP" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "Port TCP" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "PoÅ‚ożenie zakÅ‚adek" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Test" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "Guzik po lewej włącza/wyÅ‚acza dźwiÄ™k." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "Program zostanie uruchomiony jako\n/bin/sh -c 'cd katalog; wywoÅ‚anie programu'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "MyÅ›l na czasie przeciwnika" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "MyÅ›l na czasie przecwnika." # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Tempo" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Tempo gry" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Tempo gry..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Tempo gry:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Czas siÄ™ koÅ„czy" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Przekroczono czas oczekiwania" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Czas w formacie hh:mm:ss , mm:ss lub ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Aby wykonać kilka poleceÅ„ na raz, oddziel je znakiem ; (Å›rednik). \n" "Aby uruchomić skrypt użyj nast. formatu w polu polecenia: script.NazwaSkryptu , np.: script.mójskrypt.pl ." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Góra" # state: untranslated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Tempo: Zegar Fischera (styl ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Tempo: Ustalony czas na jedno posuniÄ™cie" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Tempo: DomyÅ›lne ustawienia programu grajÄ…cego" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Tempo: Ustalony czas na X posunięć" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "PrzywiÄ…zanie do portu nieudane %d." # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Stworzenie gniazdka nieudane" # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Nieznany błąd" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Neznany rezultat" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Pola w jednolitym kolorze" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Wartość" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Wartość:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Typ" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Typ:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Typ: %s (brak możliwoÅ›ci edycji)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Czekaj" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Oczekuj na połączenie" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Oczekiwanie na połączenia na porcie %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Ostrzegaj gdy na zegarze jest mniej niż " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Witaj w programie eboard" # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "BiaÅ‚e" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "BiaÅ‚e: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "ProszÄ™ czekać..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "WyÅ›wietl na konsoli" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "NieprawidÅ‚owa przestrzeÅ„ adresowa" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "Zapisano" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Tak" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Wycofywanie dozwolone wyłącznie na wÅ‚asnym posuniÄ™ciu" # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Twój kolor:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Twoja nazwa" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[rozmowa]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[komenda]" # state: untranslated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** utworzenie katalagu nie powiodÅ‚o siÄ™" # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** brak zmiennej $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] nieprawidÅ‚owa linia w pliku konfiguracyjnym\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "sygnaÅ‚" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "sygnaÅ‚" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "czarne" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "nie można zaÅ‚adować zapisu PGN z pliku %s (bÅ‚ad przy otwieraniu)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "nie można przejść do poÅ‚ożenia %lu w %s" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "Zamknij zakÅ‚adkÄ™ szachownicy" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "Menadżer połączeÅ„ bezpoÅ›rednich" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "wersja eboard %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard w wersji %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nNiniejszy program jest wolnym oprogramowaniem; możesz go\n" "rozprowadzać i/lub modyfikować na warunkach Powszechnej\n" "Licencji Publicznej GNU, wydanej przez Free Software Foundation,\n" "w wersji 2-giej lub późniejszych. \n" # state: lost (deprecated key) #: help.cc:78 msgid "" "eboard version %s\n" "(c) 2000-2002 Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard w wersji %s\n" "(c) 2000-2002 Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nNiniejszy program jest wolnym oprogramowaniem; możesz go\n" "rozprowadzać i/lub modyfikować na warunkach Powszechnej\n" "Licencji Publicznej GNU, wydanej przez Free Software Foundation,\n" "w wersji 2-giej lub późniejszych. \n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: Konsola #%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "program grajÄ…cy reklamuje nieprawidÅ‚owe posuniÄ™cie, którego nie byÅ‚o." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "błędy w pliku PGN" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "Obróć szachownicÄ™" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "partia" # state: lost (deprecated key) #: proto_fics.cc:701 msgid "game %d" msgstr "partia %d" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "partie" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "zgodny z xboard v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "Cofnij o jeden półruch" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "Idź na poczÄ…tek partii" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "Naprzód o jeden półruch" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "Idź na koniec partii" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "nieprawidÅ‚owe posuniÄ™cie!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "partia trwa" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "poczÄ…tkowo %s, inkrementacja %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "posunięć w ciÄ…gu" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "Nie" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "partia nie istnieje: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "Nie ustawiono tempa gry" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "brak" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "brak" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "otwórz nowÄ… szachownicÄ™ z pozycjÄ…" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "na ruch" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "dźwiÄ™k z PC speaker'a" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "odtwarzaj plik %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "WyÅ›wietl listÄ™ posunięć" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "stworzenie procesu nieudane." # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "do rankingu" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "uruchom %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "w trakcie wykonywania %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "Zapis do PGN nieudany: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "Zapis do PGN nieudany: Partia ma mniej niż 2 posuniÄ™cia" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "sekund." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "poza rankingiem" # state: untranslated # (1) clock.cc:313 msgid "untimed" msgstr "" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "biaÅ‚e" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "Tak" eboard-1.1.1.orig/multilang/eboard.hu.dict0000644000175000017500000007741610757567572020027 0ustar patrikpatrikL72 101 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** PNG betöltés sikertelen: kis felbontású saját figurák használata. Rosszabbul fog kinézni. L11 12 Browse... Tallóz... L15 27 Play Selected Játék a kiválasztottal L9 10 Refresh Frissít L14 23 Remove Field MezÅ‘ eltávolítása L5 11 Set Beállít L1543 1864 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#BevezetÅ‘\n#M#LehetÅ‘ségek az eboard-ban\n\nJáték a számítógép ellen\n#S#Az eboard program maga "nem tud sakkozni", csak egy grafikus felület, viszont futtatni tud\nmás sakkprogramokat, úgynevezett "gépeket", melyek nem rendelkeznek grafikus felülettel.\nAhhoz, hogy a számítógéppel sakkozz, szükség van egy ilyen programra (gépre).\nA GNU Chess, Crafty és Sjeng ilyen ingyenesen elérhetÅ‘ gépek. Ha ezek közül már telepítve\nvan valamelyik, nyisd meg a #B#Partner#K# menüt, aztán a #B#Gép elleni játék#K# almenüt, és\na gépek közül válaszd azt, amelyik telepítve van a számítógépeden.\n\n#M#Játék az Interneten\n#S#Az eboard támogatja a FICS protokollt. A FICS a freechess.org szerverén fut, de más\nszerverek, mint például a US Chess Live is a FICS szoftverét használják, így szintén működnek\naz eboard-dal. Az ICC nem támogatott.\nA FICS-hez kapcsolódáshoz nyisd meg a #B#Partner#K# menüt, majd válaszd a \n#B#Kapcsolódás a FICS-hez#K# almenüt. Más szerverekhez való kapcsolódáshoz nyisd meg a #B#Partner#K#\nmenüt, majd válaszd a #B#Kapcsolódás másik szerverhez...#K# almenüt.\nBejelentkezhetsz a FICS-re vendégként is (guest néven), de jobban fogod élvezi azt regisztrált\nfelhasználóként. Regisztrálni ingyen lehet a FICS honlapján: #B#http://www.freechess.org#K#.\n\n#M#PGN játszmák tallózása\n#S#A PGN a legelterjedtebb fájlformátum sakkjátszmák tárolására. Ebben megjegyzések is\ntárolhatók. Ilyen fájlok megnyitásához válaszd az #B#Ablakok#K# menüt, majd kattints a\n#B#Játszmák a kliensen#K# almenüre. A helyi lista ablakban kattints a #B#PGN betöltése...#K#\ngombra. Egy játszma megtekintéséhez #B#válaszd ki#K# azt, majd kattints a #B#megjelenít#K# gombra.\nEgy új panel jön majd létre a fÅ‘ ablakban a betöltött játszmával.#L# L30 30 %d %s to %s, %d Hz for %d msec %d %s to %s, %d Hz %d emp -hez L13 23 %d games read %d játszma beolvasása L14 19 %d moves in %s %s lépés %d alatt L41 46 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (világos) vs. %s (sötét)\n%s\n%d:%.2d %d L31 37 %s accepted your game proposal. %s elfogadta a játszma ajánlatodat. L18 19 %s engine started. %s gép elindítva. L17 22 %s offers a draw. %s döntetlent ajánl. L11 17 %s per move %s lépésenként L7 10 %s/move %s/lépés L33 31 (Wrapped) Match Found at Line %d. (Wrapped) egyezés a %d sorban. L64 62 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (FICS név: Pulga) L39 40 (message obfuscated -- password mode ?) (összezavart üzenet -- jelszó mód ?) L14 20 (no bookmarks) (nincs könyvjelzÅ‘) L6 7 (none) (üres) L13 12 (time period) (idÅ‘tartam) L18 28 * game not found: * játszma nem található: L47 54 ** [eboard] bad engine protocol # in bookmark: ** [eboard] hibás gép protocol # a könyvjelzÅ‘ben: L57 78 ** eboard ** warning: HOME environment variable not set\n ** eboard ** figyelmeztetés: a HOME környezeti változó nincs beállítva\n L26 32 --- %s game to PGN file %s --- %s játszma a %s PGN fájlba L16 26 --- Disconnected --- Kapcsolat megszakítva L14 20 /Game/Ad_journ /Játszma/_Elhalaszt L19 29 /Game/Retract _Move /Játszma/Lépést _visszavon L12 21 /Game/_Abort /Játszma/_Megszakít L17 29 /Game/_Offer Draw /Játszma/_Döntetlent ajánl L13 16 /Game/_Resign /Játszma/_Felad L22 17 /Help/_About eboard... /Súgó/_Névjegy L17 38 /Help/_Debug Info /Súgó/_Információk hibakereséshez L22 18 /Help/_Getting Started /Súgó/_BevezetÅ‘ L11 25 /Help/_Keys /Súgó/_Gyorsbillentyűk L10 12 /Help/sep4 /Súgó/sep4 L22 34 /Peer/Connect to _FICS /Partner/Kapcsolódás a _FICS-hez L43 53 /Peer/Direct connect with _Remote eboard... /Partner/Közvetlen kapcsolódás _távoli eboard-hoz L23 28 /Peer/Engine B_ookmarks /Partner/Gép könyv_jelzÅ‘k L20 27 /Peer/ICS _Bookmarks /Partner/ICS _könyvjelzÅ‘k L36 39 /Peer/Play against Engine/Cr_afty... /Partner/Gép elleni játék/_Crafty... L38 42 /Peer/Play against Engine/GNU Chess... /Partner/Gép elleni játék/_GNU Chess... L44 46 /Peer/Play against Engine/_Generic Engine... /Partner/Gép elleni játék/_Ãltalános gép L35 38 /Peer/Play against Engine/_Sjeng... /Partner/Gép elleni játék/_Sjeng... L30 33 /Peer/Play against Engine/sep1 /Partner/Gép elleni játék/sep1 L26 29 /Peer/Play against _Engine /Partner/_Gép elleni játék L33 43 /Peer/_Connect to Other Server... /Partner/Kapcsolódás másik szerverhez... L17 25 /Peer/_Disconnect /Partner/Kapcsolat _vége L26 47 /Peer/_Empty Scratch Board /Partner/Ãllás felállítása _üres táblán L11 19 /Peer/_Quit /Partner/_Kilépés L42 47 /Peer/_Scratch Board with Initial Position /Partner/Ãllás felállítása _alapállással L10 13 /Peer/sep2 /Partner/sep2 L10 13 /Peer/sep3 /Partner/sep3 L10 13 /Peer/sep4 /Partner/sep4 L48 65 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Beállítások/Bittérképes készlet/Csak _figurák betöltése L49 63 /Settings/Bitmapped Piece Sets/Load _Squares Only /Beállítások/Bittérképes készlet/Csak _tábla betöltése L42 57 /Settings/Bitmapped Piece Sets/Load _Theme /Beállítások/Bittérképes készlet/_Téma betöltése L31 38 /Settings/Bitmapped Piece _Sets /Beállítások/Bittérképes készlet L35 41 /Settings/Enable Legality _Checking /Beállítások/Szabályok _ellenÅ‘rzése L55 64 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Beállítások/ICS tulajdonságok/Tábla panel _létrehozáskor L69 94 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Beállítások/ICS tulajdonságok/Vizsgált állások bezárása ha a játszma befejezÅ‘dött L18 39 /Settings/Pre_move /Beállítások/Lépések _elÅ‘jelzése L27 39 /Settings/Sho_w Coordinates /Beállítások/_Kordináták mutatása L24 38 /Settings/_Animate Moves /Beállítások/_Lépések animálása L33 51 /Settings/_Beep on Opponent Moves /Beállítások/_Csipogás az ellenfél lépésekor L30 46 /Settings/_Enable Other Sounds /Beállítások/Egyéb hangok _engedélyezése L30 43 /Settings/_Highlight Last Move /Beállítások/_Utolsó lépés kijelzése L23 35 /Settings/_ICS Behavior /Beállítások/_ICS tulajdonságok L25 31 /Settings/_Preferences... /Beállítások/_Beállítások L47 64 /Settings/_Vectorized Pieces (Faster Rendering) /Beállítások/_Vektorizált figurák (gyorsabb megjelenítés) L14 20 /Settings/sep3 /Beállítások/sep3 L23 17 /Windows/Find _Previous /Ablakok/_ElÅ‘zÅ‘ L28 38 /Windows/Games on _Client... /Ablakok/Játszmák a _helyi gépen... L31 30 /Windows/Save Desktop _Geometry /Ablakok/_Elrendezés mentése L29 38 /Windows/Save _Text Buffer... /Ablakok/Szöveges _puffer mentése... L26 36 /Windows/_Ads on Server... /Ablakok/_Hirdetések a szerveren... L26 33 /Windows/_Detached Console /Ablakok/Konzol _külön ablakban L32 35 /Windows/_Find Text (upwards)... /Ablakok/Szöveg keresése (elÅ‘re) L28 35 /Windows/_Games on Server... /Ablakok/_Játszmák a szerveren... L23 31 /Windows/_Run Script... /Ablakok/_Szkript futtatása... L13 13 /Windows/sep1 /Ablakok/sep1 L13 13 /Windows/sep2 /Ablakok/sep2 L13 13 /Windows/sep3 /Ablakok/sep3 L6 10 /_Game /_Játszma L6 8 /_Help /_Súgó L6 9 /_Peer /_Partner L10 16 /_Settings /_Beállítások L9 9 /_Windows /_Ablakok L106 122 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n\n L34 39 abort request sent elvet üzenet elküldve L36 43 adjourn request sent elhalaszt üzenet elküldve L33 44 draw request sent döntetlen üzenet elküldve L110 126 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n\n L45 47 ** bad pattern string: ** hibás minta sztring: L40 43 ** file not found: ** nincs ilyen fájl: L39 46 failed to load sikertelen betöltés L112 126 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n L42 46 Adjourning not supported elhalasztás nem támogatott L46 49 Incompatible Engine Protocol nem kompatibilis gép protokoll L33 36 Session Aborted menet megszakítva L35 46 draw request sent döntetlen üzenet elküldve L9 14 L17 21 > (password sent) > (jelszó elküldve) L23 25 > [issued from menu] %s > [menübÅ‘l indítva] %s L25 32 > [issued from shortcut] > [gyorsbillentyűvel indítva] L31 43 > [script run from shortcut] %s > [gyorsbillentyűvel indított szkript] %s L12 8 About eboard Névjegy L6 7 Accept Elfogad L36 46 Accepted incoming connection from %s %s BejövÅ‘ kapcsolódási kéreleme elfogadva L14 19 Ad Description Hirdetés leírása L7 15 Ad List Hirdetés lista L23 32 Ad List (refreshing...) Hirdetés lista (frissítés...) L33 36 Add to Peer/Engine Bookmarks menu Hozzáadás a Partner/Gép menühöz L22 19 Address already in use A cím már foglalt L3 11 Ads Hirdetések L21 21 Already connected ?!? Már csatlakozott ?!? L675 696 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. Mindenhol érvényes:\nF3: ElÅ‘zÅ‘ panel.\nF4: KövetkezÅ‘ panel.\nF5: FÅ‘ tábla panel.\nF6: Konzol panel.\nF7: Keresés grafikon panel (ha elérhetÅ‘).\nF8: Nyomógombok láthatósága kapcsoló.\nPage Up/Page Down: szöveges konzol görgetése\nCtrl+(Balra nyíl): 1 lépés vissza\nCtrl+(Jobbra nyíl): 1 lépés elÅ‘re\nCtrl+F: Keresés elÅ‘re (fÅ‘ konzol puffer)\nCtrl+G: ElÅ‘zÅ‘ keresése\n\nBeviteli mezÅ‘ben:\nFel/Le (nyilak): mozgás a beviteli elÅ‘zményekben\nEnter: szöveg elküldése\nEsc: Cset/Parancs mód kapcsoló\n\nSzintaxis:\nA fÅ‘ ablak beviteli mezÅ‘jében:\n.. %prefix szöveg beállítja a cset prefixet szöveg -re.\n.. %do szkriptneve futtatja a szkriptneve szkriptet. L10 11 Appearance Megjelenés L8 10 Appended Hozzáadva L5 8 Apply Alkalmaz L13 25 Apply Changes Változások alkalmazása L24 41 Auto-save observed games Vizsgált játszmák automatikus mentése L22 37 Auto-save played games Játszott partik automatikus mentése L8 19 Autosave Automatikus mentés L14 24 Axis & Buttons Koordináták és Gombok L10 8 Background Háttér L14 14 Bad descriptor Hibás leíró L45 9 Beep (need Pitch, Duration, Count and Device) Csipogás L10 8 Bishop %d Futó %d L5 7 Black Sötét L14 16 Black: %s - %s Sötét: %s - %s L119 136 Board Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n Tábla kurzor irány: %d\nTábla kiválasztó gomb: %d\nTábla tallózás irány: %d\nElÅ‘zÅ‘ fül gomb: %d\nKövetkezÅ‘ fül gomb: %d\n L17 18 Board version :%s Tábla verzió: %s L17 22 Bookmark Caption: KönyvjelzÅ‘ szövege: L6 4 Bottom Alul L11 15 Bright Text Fényes szöveg L6 7 Browse Tallóz L19 27 Buffer Save failed. Puffer mentése sikertelen. L8 10 Bughouse Négykezes L22 33 Bughouse: Partner Game Négykezes: a partner játszmája L15 13 Bus address :%s Busz cím :%s L14 19 Button Caption Nyomógomb felirata L11 17 Button Icon Nyomógomb ikonja L6 7 Cancel Mégsem L29 36 Cancel Joystick Configuration Joystick beállítás megszakítása L26 25 Cancelled connection wait. Várakozás megszakítva. L9 13 Change... Változtat... L13 18 Channel Tells Csatorna mondások L9 4 Checkmate Matt L14 13 Chess Programs Sakkprogramok L11 24 Choose Font Válassz betűkészletet L9 11 Choose... Választ... L10 19 Clock Font Óra betűkészlete L5 6 Close Bezár L5 5 Color Szín L15 20 Color Selection Szín kiválasztása L6 7 Colors Színek L7 7 Command Parancs L13 11 Command Line: Parancssor: L8 14 Computer Számítógép L30 41 Computer White vs. Human Black Számítógép világos vs. Ember sötét L24 34 Configure Axis & Buttons Tengelyek és gombok beállítása L23 26 Configured Sound Files: Hangfájlok beállítása: L7 12 Connect Csatlakozás L21 27 Connect to ICS Server Csatlakozás ICS szerverhez L20 20 Connected to %s (%s) Csatlakozás %s (%s) L19 18 Connecting to %s... Csatlakozás %s... L18 28 Connection refused Csatlakozás visszautasítva L28 38 Connection to %s:%d failed: Csatlakozás ehhez: %s:%d sikertelen: L7 6 Console Konzol L12 16 Console Beep Konzol csipogás L12 21 Console Font Konzol betűkészlete L21 23 Console buffer saved. Konzol puffer elmentve. L6 12 Count: Számláló: L10 15 Crazyhouse Årültek háza L27 35 DGT board found on port %s. A %s porton DGT táblát találtam. L29 20 DGT support error: wrong page DGT hiba: hibás lap L60 74 DGT warning: position mismatch between eboard and DGT board. DGT figyelmeztetés: nem egyezik a pozíció az eboard és a DGT között. L31 29 DGT: unrecognized code: %c (%d) DGT: ismeretlen kód: %c (%d) L15 17 Dark Squares... Sötét mezÅ‘k... L18 28 Delete All Entries Összes bejegyzés törlése L17 20 Delete This Entry Bejegyzés törlése L12 18 Depth Limit: Mélység korlát: L11 8 Description Leírás L7 8 Device: Eszköz: L50 65 Directory to run from (e.g., where book files are) Könyvtár, ahonnan futtat (ahol a megnyitástár fájlok vannak) L10 11 Directory: Könyvtár: L11 28 Discard All Minden játszma abbahagyása L12 21 Discard Game Játszma abbahagyása L7 12 Dismiss Elutasítás L12 18 Display Game Játszma mutatása L9 8 Displayed Mutatott L81 81 Distributed under the terms of the GNU General Public License, version 2 or later Distributed under the terms of the GNU General Public License, version 2 or later L12 19 Draw Offered Döntetlen ajánlat L16 29 Draw offer sent. Döntetlen ajánlat elküldve L18 25 Drawn by agreement Döntetlen megegyezéssel L11 17 Drop Piece: Figura lerakása: L16 17 Duration (msec): IdÅ‘tartam (msec) L18 26 Dynamic Seek Table Dinamikus keresési tábla L17 30 Edit Bookmarks... KönyvjelzÅ‘k szerkesztése... L21 32 Edit Engine Bookmarks Gép könyvjelzÅ‘k szerkesztése L14 36 Edit Game Info Játszma információk szerkesztése L17 25 Edit Time Control IdÅ‘kontrol szerkesztése L5 5 Empty Üres L16 18 Engine Bookmarks Gép könyvjelzÅ‘k L14 12 Engine Command Gép parancs L12 13 Engine Type: Gép típusa: L28 37 Engine Type: %s (uneditable) Gép típusa: %s (nem szerkeszthetÅ‘) L43 47 Engine asked more time to startup, waiting. Gép indítása többször kérve, várakozás. L19 16 Engine command line Gép parancssora L14 15 Engine loaded. Gép betöltve. L14 8 Engine running Gép fut L30 30 Engine started (2 sec timeout) Gép elindítva (2 mp timeout) L18 22 Enter FEN Position Ãrd be a FEN állást L10 16 Event Type Esemény típusa L13 27 Exam.Game #%d #%d játszma végrehajtása L21 27 Failed to run engine. Gép indítása sikertelen. L28 37 Failed to run helper program A segédprogram futtatása sikertelen L30 42 File to play / Program to run: Lejátszandó fájl / Futtatandó program: L8 7 Filter: SzűrÅ‘ L14 16 Filter: (none) SzűrÅ‘: (üres) L36 45 Finish the current connection first. ElÅ‘ször az aktuális kapcsolat befejezése. L30 44 Finish the current game first. ElÅ‘ször az aktuális játszma befejezése. L5 9 Flags Zászlók L5 15 Fonts Betűkészletek L22 18 From Elsewhere (%d %s) Valahonnan (%d %s) L20 18 From Engines (%d %s) GépekbÅ‘l (%d %s) L8 8 From FEN FEN-bÅ‘l L16 16 From ICS (%d %s) ICS-bÅ‘l (%d %s) L22 23 From PGN Files (%d %s) PGN fájlokból (%d %s) L6 10 Game # Játszma # L8 12 Game #%d Játszma #%d L13 17 Game #%d - %s Játszma #%d - %s L18 21 Game #%d - %s - %s Játszma #%d - %s %s L20 24 Game #%d - %s vs. %s Játszma #%d - %s vs. %s L12 16 Game #%d: %s Játszma #%d: %s L12 21 Game Aborted Játszma megszakítva L16 18 Game Description Játszma leírása L21 37 Game Information Font Játszma információk betűkészlete L9 14 Game List Játszma lista L25 31 Game List (refreshing...) Játszma lista (frissítés...) L9 20 Game Lost Játszma elveszítve L12 17 Game Started Játszma elkezdve L8 18 Game Won Játszma megnyerve L19 29 Game appended to %s Játszma hozzáadva ehhez: %s L17 21 Game in progress. Játszma folyamatban. L13 18 Game over: %s Játszma vége: %s L19 28 Game proposal sent. Játszma javaslat elküldve. L13 25 Game started! A játszma elkezdÅ‘dött. L12 16 Game/Board: Játszma/Ãllás L5 10 Games Játszmák L24 26 Generic XBoard Engine... Ãltalános XBoard gép... L8 10 Giveaway Elárul(?) L46 49 Graphic representation of crazy/bughouse stock Årültek háza/négykezes grafikus ábrázolása L16 37 Help: Debug Info Súgó: Információk hibakereséshez L22 17 Help: Getting Started Súgó: BevezetÅ‘ L10 24 Help: Keys Súgó: Gyorsbillentyűk L5 7 Hide! Elrejt! L18 28 Host not found: %s Gépnév nem található: %s L8 8 Hostname Gépnév L23 22 Hostname or IP address: Gépnév, vagy IP cím L5 5 Human Ember L30 41 Human White vs. Computer Black Ember Világos vs. Számítógép Sötét L17 29 Human plays white Az ember játszik világossal L13 13 ICS Challenge ICS kihívás L25 28 IPC pipe creation failed. IPC csÅ‘ létrehozási hiba. L2 2 Id Id L104 130 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Amikor kiválasztasz egy könyvjelzÅ‘t,\nmindíg a gép következik majd lépésre,\nfüggetlenül a könyvjelzÅ‘ben leírtaktól. L43 68 Illegal Drop on %c%d (Legality Checking On) Szabálytalan lerakás: %c%d (szabályok ellenÅ‘rzése bekapcsolva) L44 69 Illegal Move %c%d%c%d (Legality Checking On) Szabálytalan lépés %c%d%c%d (szabályok ellenÅ‘rzése bekapcsolva) L23 41 Illegal move, not sent. Szabálytalan lépés, nem küldhetÅ‘ el. L17 17 Increment (secs): Növekmény (mp): L10 12 Increment: Növekmény: L55 56 Inhibit seek lines on console when Seek Table is active Keresési sorok tiltása amíg a keresési tábla aktív L16 17 Initial Position Kiinduló állás L23 24 Initial time ([mm:]ss): KezdÅ‘ idÅ‘ ([perc:]mp): L19 21 Initializing engine Gép inicializálása L46 49 Invalid answer to DGT_SEND_BRD on port %s: %s Érvénytelen DGT_SEND_BRD válasz (port %s): %s L8 8 Joystick Joystick L3 5 Key Kulcs L4 6 Key: Kulcs: L17 15 Kibitzes/Whispers Kibicek/Súgók L4 6 Kill Megöl L10 8 Knight %d Huszár: L22 26 Last Proposal Received Utolsó javaslat elfogadva L4 3 Left Bal L16 18 Light Squares... Világos mezÅ‘k... L8 15 Load PGN PGN betöltése L11 18 Load PGN... PGN betöltése... L5 5 Local Helyi L15 20 Local Game List Helyi játszma lista L21 20 Looking up host %s... %s gép keresése... L6 9 Losers Pancserek L10 10 Main Board FÅ‘ tábla L13 14 Mamer and TDs Mamer és TD-k L14 13 Manual/Formula Kézi/Képlet L23 21 Match Found at Line %d. Találat a %d sorban. L15 7 Match Pattern: Minta: L17 14 Material: %d - %d Anyag: %d - %d L8 16 Max Ply: Max féllépés: L30 46 Move made (Obs'vd/Exm'd Games) Megtett lépések (Vizsgált/Játszott partik) L5 9 Moves Lépések L22 28 Network is unreachable A hálózat nem érthetÅ‘ el L18 21 News/Notifications Hírek/Értesítések L2 3 No Nem L9 11 No error. Nincs hiba. L19 32 No material to mate Nincs elég anyag a mattadáshoz L23 34 No output from program. Nincs kimenet a program számára. L8 14 No peer. Nincs partner. L19 23 No previous search. Nincs elÅ‘zÅ‘ keresés. L18 21 No proposals left. Nincs több javaslat. L22 23 No proposals received. Nem érkezett javaslat. L43 41 No response to DGT_SEND_BRD on port %s: %s. Nincs DGT_SEND_BRD válasz (port %s): %s. L4 5 None Semmi L12 17 Normal Chess Hagyományos sakk L11 15 Normal Text Normál szöveg L16 14 Not a socket ?!? Nem socket ?!? L2 2 OK Ok L17 38 Obs'vd Game Ended A megtekintett játszma befejezÅ‘dött L7 7 Observe Megnéz L2 2 Ok Ok L160 174 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Ha egyszer már kapcsolódtál innen egy géphez, az hozzáadódik a\nPartner/ICS könyvjelzÅ‘k menühöz. Módosíthatod vagy törölheted a \n~/.eboard/eboard.conf fájban. L14 20 Opponent Moved Az ellenfél lépett L7 7 Options Opciók L11 13 PGN Headers PGN fejlécek L13 13 PGN filename: PGN fájlév: L14 17 Partner Tells: Parter üzenetek: L10 10 Pawn %d Gyalog %d L11 10 Pitch (Hz): Pitch (Hz) L4 11 Play Lejátszás L56 74 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) %s, %s vs. %s (%s, max számítási mélység %d, mindíg gondolkodik: %s) L58 16 Play WAV (need Device and Filename, sox must be installed) WAV lejátszása L19 21 Play against Crafty Crafty elleni játék L19 19 Play against Engine Gép elleni játék L22 24 Play against GNU Chess GNU Chess elleni játék L18 20 Play against Sjeng Sjeng elleni játék L6 9 Player Játékos L14 19 Player resigns A játékos feladta L22 35 Player/Color Name Font Játékos/szín név betűkészlete L14 14 Pos: %s vs. %s Poz: %s vs. %s L11 14 Preferences Beállítások L12 14 Private Tell Magán mondás L13 16 Private Tells Magán mondások L23 32 Program exited too soon A program túl gyakran kilépett L8 8 Progress Haladás L17 33 Promotion Piece Figurák gyalogátváltozáshoz L7 8 Propose Ajánlat L12 17 Propose Game Játszma ajánlat L8 9 Protocol Protokoll L33 39 Protocol mismatch, disconnecting. Nem egyezÅ‘ protokoll, kapcsolat vége. L10 11 Queen %d Vezér %d L5 10 Rated Értékelt L6 12 Rating Értékszám L12 23 Rating Range Értékszám tartomány L24 29 Read error from program. Olvasási hiba a programtól. L33 38 Received a game proposal from %s. Játszma javaslat érkezett innen: %s. L12 16 Recent Hosts ElÅ‘zÅ‘ gépnév L12 18 Refresh List Lista frissítése L19 29 Replied to seek #%d #%d keresés visszajátszása L9 8 Resigned. Feladva. L6 9 Result Eredmény L20 30 Retracted last move. Utolsó lépés visszavonása. L45 65 Retrieve ICS Channel Lists from eboard.sf.net ICS csatornák listájának letöltése az eboard.sf.net címrÅ‘l L18 35 Revert to Defaults Kiinduló állás visszaállítása L18 35 Revert to defaults Kiinduló állás visszaállítása L5 4 Right Jobb L10 11 Rook %d Bástya %d L3 6 Run Futtat L13 18 Run Engine... Gép futtatása... L27 41 Run Program (need Filename) Program futtatása (fájlév szükséges) L47 66 Run autofics.pl script after connecting to FICS Az autofics.pl szkript futtatása miután kapcsolódott a FICS-hez L17 23 Save Buffer As... Puffer mentése mint... L12 20 Save Game... Játszma mentése... L11 14 Save as PGN Mentés PNG-be L10 13 Scratch %d Felállít %d L6 7 Script Szkript L11 13 Script List Szkript lista L34 39 Scrollback limit (0 = unlimited) : Visszagörgetési korlát (0=végtelen) L11 17 Search Text Szöveg keresése L12 18 Search for: Keresett szöveg: L22 35 Search text not found. A keresett szöveg nem található. L8 21 Seek Ads Hirdetések keresése L10 17 Seek Table Ãllás keresése L15 28 Seek Table Font KeresÅ‘tábla betűkészlete L10 9 Serial :%s Soros :%s L10 21 Set Filter SzűrÅ‘ beállítása L13 24 Set Filter... SzűrÅ‘ beállítása... L49 81 Set depth limit to 0 to use the engine's default. Ãllítsd a számítási mélység korlátját 0-ra a gép alapbeállításaihoz. L13 26 Setup Buttons Nyomógombok beállítása L21 26 Shortcut Button Setup Nyomógombok beállítása L6 14 Shouts Bekiabálások L42 60 Show channel tells in one pane per channel Csatorna mondások mutatása csatornánként külön panelen L63 73 Show channel tells on console too (when above option is active) Csatorna mondások mutatása a konzolon is (amikor a fenti opció aktív) L31 47 Show rating next to player name Értékszám mutatása a játékos neve mellett L33 37 Show shortcut buttons below board Nyomógombok mutatása a tábla alatt L11 14 Side & Time Szín és idÅ‘ L14 18 Side Selection Szín választása L14 23 Side to move: Lépésre következik: L22 20 Smooth joystick cursor Sima joystick kurzor L29 31 Smooth joystick cursor speed: Sima joystick kurzor sebesség: L34 41 Smoother animation (eats more CPU) Simább animáció (több CPU használat) L76 78 Sorry, this protocol does not allow to retract a move thru this menu option. Sajnálom, de ez a protokoll nem teszi lehetÅ‘vé a lépések visszavonását. L11 13 Sound Event Hang esemény L12 15 Sound Events Hang események L6 6 Sounds Hangok L54 59 Source code available at http://eboard.sourceforge.net A forráskód elérhetÅ‘ itt: http://eboard.sourceforge.net L9 4 Stalemate Patt L18 26 Start a connection Kapcsolat kezdeményezése L14 12 Starting Time: KezdÅ‘ idÅ‘: L7 11 Suicide Franciasakk L8 8 TCP Port TCP port L9 9 TCP Port: TCP Port: L12 18 Tab Position Fülek pozíciója L4 5 Test Teszt L52 60 The checkbox on the left enables/disables the sound. A baloldali jelölÅ‘négyzet engedélyezi/tiltja a hangokat. L12 22 Think Always Ãllandó gondolkodás L24 51 Think on opponent's time Gondolkodás az ellenfél gondolkodási ideje alatt L4 4 Time IdÅ‘ L12 12 Time Control IdÅ‘ kontrol L15 15 Time Control... IdÅ‘ kontrol... L13 13 Time Control: IdÅ‘ kontrol: L16 15 Time Running Out IdÅ‘túllépés L7 15 Timeout IdÅ‘túllépés L44 60 Times can be given as hh:mm:ss , mm:ss or ss IdÅ‘t megadni a következÅ‘képpen lehet óó:pp:mm vagy mm L180 201 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Ha egy nyomógombbal több parancsot akarsz futtatni, akkor a parancsokat válszd el ; -vel.\nHa egy szkriptet akarsz futatni egy nyomógombbal, akkor írd be a szkript nevét pl.: script.myscript.pl . L3 5 Top Fönt L13 12 Trademark :%s Védjegy :%s L30 33 Type: Fischer Clock (ICS-like) Típus: Fischer óra (ICS-szerű) L25 34 Type: Fixed Time per Move Típus: lépésenként azonos idÅ‘ L34 48 Type: Use engine's default setting Típus: a gép alapbeállításainak használata L29 34 Type: X Moves per Time Period Típus: X lépés adott idÅ‘ alatt L26 35 Unable to bind on port %d. Nem lehet kapcsolódni a %d porton. L24 32 Unable to create socket. Nem lehet létrehozni socket-et. L44 40 Unable to find the DGT board on port %s: %s. Nem található DGT tábla %s porton: %s L13 15 Unknown error Ismeretlen hiba L14 20 Unknown result Ismeretlen eredmény L23 36 Use plain color squares Egyszerű színes mezÅ‘k használata L5 7 Value Érték L6 8 Value: Érték: L7 9 Variant Változat L8 10 Variant: Változat: L24 34 Variant: %s (uneditable) Változat: %s (nem szerkeszthetÅ‘) L4 11 Wait Várakozás L21 29 Wait for a connection Várakozás a kapcsolódásra L34 42 Waiting for connection on port %d. Várakozás a kapcsolódásra a %d porton. L30 46 Warn when own clock is below: Figyelmeztetés, ha saját idÅ‘ kevesebb mint: L18 28 Welcome to eboard. Üdvözöllek az eboard-ban! L5 8 White Világos L14 17 White: %s - %s Világos: %s - %s L10 11 Working... Dolgozom... L16 17 Write to Console Ãrás a konzolra L19 21 Wrong address space Hibás címtartomány L5 4 Wrote Ãrt L3 4 Yes Igen L49 61 You can only retract when it's your turn to move. Csak akkor vonhatod vissza a lépést, amikor te következel. L11 6 Your color: Szín: L10 5 Your name: Név: L6 6 [chat] [cset] L5 9 [cmd] [parancs] L29 32 [eboard] ** $HOME is too long [eboard] ** a $HOME túl hosszú L39 53 [eboard] ** failed to create directory [eboard] ** nem sikerült a könyvtárat létrehozni L20 37 [eboard] ** no $HOME [eboard] ** nincs beállítva a $HOME L22 24 [eboard] bad RC line\n [eboard] hibás RC sor\n L4 9 beep csipogás L5 11 beeps csipogások L5 7 black sötét L53 74 can't load PGN move text from %s (error opening file) nem sikerült betölteni a lépést a %s PGN-bÅ‘l (fájl megnyitási hiba) L26 29 dgtnix driver version %.1f dgtnix meghajtó verzió %.1f L14 17 discards board tábla bezárása L32 31 eboard Direct Connection Manager eboard direkt kapcsolat kezelÅ‘ L22 22 eboard version %s (%s) eboard verzió %s (%s) L19 18 eboard: Console #%d eboard: Konzol #%d L60 71 engine claimed illegal move but we didn't move, ignoring it. a gép szabálytalan lépést jelzett, de mi nem léptünk, no problem. L22 28 error parsing PGN data hiba a PNG olvasása közben L11 17 flips board fordított tábla L4 8 game játszma L5 8 games játszma L17 21 generic xboard v2 általános xboard v2 L20 18 goes back 1 halfmove egy lépés vissza L26 17 goes back to start of game játszma elejére L23 18 goes forward 1 halfmove egy lépés elÅ‘re L27 17 goes forward to end of game játszma végére L13 22 illegal move! szabálytalan lépés! L11 11 in progress folyamatban L29 31 initial time %s, increment %s kezdeti idÅ‘ %s, növekmény %s L8 7 moves in lépés L2 3 no nem L14 21 no such game: nincs ilyen játszma: L19 29 no time control set nincs beállítva idÅ‘kontrol L4 5 none üres L7 5 nothing semmi L37 4 opens new scratch board with position új L8 14 per move lépésenként L18 26 plain console beep egyszerű konzol csipogás L12 21 play file %s %s fájl lejátszása L21 26 pops up the move list elÅ‘hozza a lépéslistát L24 33 process creation failed. sikertelen processz létrehozás. L5 10 rated értékelt L6 13 run %s %s futtatása L10 13 running %s %s futtatása L18 32 savePGN failed: %s %s PGN fájl mentése sikertelen L54 73 savePGN failed: Won't save game with less than 2 moves PGN fájl mentése sikertelen: nem lehet 2-nél kevesebb lépést menteni L8 11 seconds. másodperc. L7 14 unrated nem értékelt L7 20 untimed idÅ‘kontrol nélkül L5 8 white világos L3 4 yes igen E 508 eboard-1.1.1.orig/multilang/eboard.de.po0000644000175000017500000020157310757567572017467 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** PNG laden fehlgeschlagen: benutze internen Figurenset. Es wird häßlich aussehen.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr "Übersicht..." # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr "Spiel anbieten" # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr "Aktualisieren" # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr "Entferne Feld" # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Set " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Erste Schritte#M#\n" "\nGegen den Computer spielen\n" "#S#eboard kann nicht selbst \"Schach spielen\": es bietet eine Schnittstelle zu Schachprogrammen\n" "ohne eigene graphische Benutzeroberfläche, den sogenannten\"Enginen\" d.h. Schachmotore.\n" "GNUChess, Crafty und Sjeng sind frei erhältliche Engines.Sind die Engines installiert, öffne das\n" "#B#Partner#K# Menü, dann im #B#Spiel gegen Engine#K# Untermenü wähle die entsprechende Engine,\n" "gegen die gespielt werden soll. Weitere starke Engines,die man einbinden kann, sind Yace, \n" "Comet, Amy, TCB und Phalanx XXII. Diese kann man einbinden über das Menü #B#Partner#K#/#B#Spiel\n" "gegen Engine#K#/#B#Generische Engine#K#\n" "\n#M#Schachspielen im Internet\n" "#S#Eboard unterstützt das FICS-Protokoll. FICS- Server sind z.B. www.freechess.org, aber auch\n" "andere \"Schachserver\" wie US Chess Live benutzten die FICS-Software und sollten mit\n" "eboard problemlos erreichbar sein. ICS wird nicht unterstützt. Um eine Verbindung zu FICS\n" "aufzubauen, öffne das #B#Partner#K#-Menü dann #B#Verbinde mit FICS#K#. Um eine Verbindung zum\n" "anderen Server aufzubauen öffne das #B#Partner#K#-Menü, dann #B#Verbinde mit anderem Server#K#.\n" "Obwohl man sich als Gast (Guest) am FICS-Server einloggen kann,hat man als registrierter\n" "Benutzer mehr Spaß. Die Registrierung kann auf der FICS-Seite #B#http://www.freechess.org#K#\n" "kostenlos durchgeführt werden.\n" "\n#M#PGN-Datenbanken\n" "#S#PGN ist ein weitverbreitetes Dateiformat zur Speicherung von Schachpartien. Es können Züge,\n" "Kommentare und Varianten gespeichert werden Der Zugriff auf PGN-Dateien von eboard aus\n" "geschieht über das #B#Fenster#K#-Menü. Dann #B#Partien auf dem Client#K# auswählen. In dem\n" "nachfolgendem Fenster #B#Partie laden#K# wählen. Die in der PGN-Datei enthaltenen Partien werden\n" "nun gelistet. Mit der Maus die die gewünschte Partie auswählen und #B#Partie ansehen#K# drücken. Die\n" "Partie erscheint in eboard in einem eigenem Schirm, erreichbar über den neuen Tabulator im\n" "Hauptfenster.#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s to %s, %d Hz für %d msec" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d Partien gelesen" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d Züge in %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Verbinde mit %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (Weiss) vs. %s (Schwarz)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s hat Spielvorschlag akzeptiert." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "%s Engine gestartet." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s bietet Remis an." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s pro Zug" # state: untranslated # (1) clock.cc:317 msgid "%s/move" msgstr "" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "(Umgebrochen) Übereinstimmung in Zeile %d " # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (FICS-Name: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(Nachricht verworren-- Passwort-Modus?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(keine Lesezeichen)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(kein)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(Zeitspanne)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* Partie nicht gefunden: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] falsches Engine protocol # in Lesezeichen: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** Warnung: HOME-Umgebungsvariable nicht gesetzt\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- %s Partie zur PGN-Datei %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "---Unterbrochen" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partie/_Vertagen" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "_Zug zurücknehmen" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partie/Ab_brechen" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Partie/_Remis anbieten" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partie/_Aufgeben" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Hilfe/Über _eboard..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Hilfe/_Debug Info" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Hilfe/Erste _Schritte" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Hilfe/_Tasten" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Hilfe/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Partner/Verbinde mit _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Partner/Verbinde mit eboard im _Netz..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Partner/Engine _Lesezeichen" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Partner/_ICS Lesezeichen" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Partner/Spiel gegen Engine/Cr_afty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Partner/Spiel gegen Engine/GNUChess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Partner/Spiel gegen Engine/_Generische Engine..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Partner/Spiel gegen Engine/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Partner/Spiel gegen Engine/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Partner/Spiel gegen _Engine" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Partner/_Verbinde mit anderem Server..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "Partner/_Unterbrechen" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "Partner/_Stellungseingabe-Leeres Brett" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "Partner/_Beenden" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "Partner/Stellungseingabe-_Anfangsstellung" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "Partner/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Partner/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Partner/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Einstellungen/Figurensets (Bitmaps)/Lade nur _Figuren" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Einstellungen/Figurensets (Bitmaps)/Lade nur _Brett" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Einstellungen/Figurensets (Bitmaps)/Lade _Set" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Einstellungen/_Figurensets (Bitmaps)" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Einstellungen/Aktiviere _Legalitätprüfung" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Einstellungen/ICS Verhalten/Öffne Schirme nach _Erzeugung" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Einstellungen/ICS Verhalten/Smartes _schließen von Schirmen nach Spielende" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Einstellungen/Ziehen i_m Voraus" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Einstellungen/Zeige _Koordinaten" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Einstellungen/_Züge animieren" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Einstellungen/_Ton beim Zug des Gegners" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Einstellungen/_Andere Töne aktivieren" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Einstellungen/Letzten Zug _hervorheben" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Einstellungen/_ICS Verhalten" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Einstellungen/_Optionen" # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Einstellungen/_Vektorgraphik-Figuren (Schnelleres rendern)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Einstellungen/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "Fenster/Finde _vorherige" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "Fenster/Partien auf dem _Client" # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "Fenster/Desktop-_Geometrie sichern" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "Fenster/_Textspeicher sichern..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "Fenster/_Anzeigen auf Server..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "Fenster/_Freistehende Konsole" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "Fenster/Finde Text (auf_wärts)" # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "Fenster/_Partien auf Server..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "Fenster/_Starte Skript..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "Fenster/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "Fenster/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "Fenster/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/Par_tie" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_Hilfe" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Partner" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/_Einstellungen" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "_Fenster" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Warnung: konnte festen Font nicht laden. Dieser Dialoginhalt wird häßlich aussehen.\n" "\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " kann Font nicht laden.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** Laden von einem oder mehreren Fonts fehlgeschlagen - X11 75 dpi und 100 dpi Fonts installieren, X neu starten und nochmal versuchen.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** Laden von einem oder mehreren Brett-Fonts fehlgeschlagen\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " Abbruch-Anforderung gesendet " # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " Vertagen-Anforderung gesendet" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " Remis-Anforderung gesendet" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Warnung: konnte festen Font nicht laden, DieserDialoginhalt wird häßlich aussehen.\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** falsches Muster: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** Datei nicht gefunden: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " laden fehlgeschlagen " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Warnung: konnte festen Font nicht laden. Dieser Dialoginhalt wird häßlich aussehen.\n" "\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " laden fehlgeschlagen " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " Vertagen nicht unterstützt" # state: untranslated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr "" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Sitztung abgebrochen" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " Remis-Anforderung gesendet" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (Passwort gesendet)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [Ausgegeben vom Menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [gestartet vom Kurztaste]" # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [Starte Skript vom Kurztaste] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "Über eboard" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Akzeptieren" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "Eingehende Verbindung von %s akzeptiert" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Anzeigen-Beschreibung" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Anzeigenliste" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Anzeigenliste (aktualisiere...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Zum Partner/Engine-Lesezeichen Menü hinzufügen" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Adresse bereits belegt" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Anzeigen" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Bereits verbunden ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "Überall:\n" "F3: Geht zum vorherigen Schirm.\n" "F4: Geht zum nächsten Schirm.\n" "F5: Geht zum Spielbrett-Schirm.\n" "F6: Geht zum Konsolen-Schirm.\n" "F7: Geht zum Anzeigentafel-Schirm (wenn verfügbar).\n" "F8: Umschaltung Kurzbefehl-Bar sichtbar/unsichtbar.\n" "Bild hoch/Bild runter: scrollt die Textkonsole (mus sichtbar sein\n" "Strg+(Linkspfeil): 1 Halbzug Rückwärts\n" "Strg+(Rechtspfeil): 1 Halbzug Vorwärts\n" "Strg+F: Finde vorangehende(Hauptkonsolen-Puffer)\n" "Strg+G: Finde Vorherige\n" "\nEingabe box:\n" "Pfeil nach Oben/Unten : durch die Eingabe-Historie gehen\n" "Enter: Textzeile senden\n" "Esc: Umschalten Chat-/Befehls-Modus\n" "\nSyntax:\n" "In der Eingabe-Box des Hauptfensters:\n" ".. Eingabe des %prefix Text setzt den Chat-Prefix auf Text.\n" ".. Eingabe von %do Skriptname startet das Skript Skriptname." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Erscheinung" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "angehangen" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Übernehmen" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Änderungen übernehmen" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Beobachtete Partien autom. speichern" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Gespielte Partien autom. speichern" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Autom. speichern" # state: untranslated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Hintergrund" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Falscher Descriptor" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Geräusch (benötigt Tonhöhe, Tondauer, Zähler und Gerät" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Läufer %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Schwarz" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Schwarz: %s - %s" # state: untranslated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" # state: untranslated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Lesezeichen Kurzbezeichnung" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Unten" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Breiter Text" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Übersicht" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Zwischenspeicher sichern fehlgeschlagen" # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Partner Spiel" # state: untranslated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Tasten- Name" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Tasten-Icon" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Abbrechen" # state: untranslated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Abgebrochene Verbindung wartet" # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "Ändern..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Kanal-Nachricht" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Matt" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Schachprogramme" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Wähle Font" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Wähle" # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Uhr Font" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "Schließen" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Farbe" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Farbauswahl" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Farben" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Befehl" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Kommandozeile" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Computer" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Computer Weiß gegen Mensch Schwarz" # state: untranslated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Konigurierte Klang-Dateien" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Verbinde" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Verbinde mit ICS Server" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Verbunden mit %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "Verbinde mit %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Verbindung abgelehnt" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Verbindung mit %s:%d fehlgeschlagen: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Konsole" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Konsolen-Geräusch" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Konsolen-Font" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Konsole - Zwischenspeicher gesichert." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Zähler" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: untranslated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "" # state: untranslated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "" # state: untranslated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Schwarze Felder" # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Alle Einträge löschen" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Diesen Eintrag löschen" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Max. Rechentiefe" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Beschreibung" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Gerät:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Start-Verzeichnis (d.h. da wo die Eröffnungsbücher sind)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Verzeichnis" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Alle verwerfen" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Partie verwerfen" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Abgewiesen" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Partie ansehen" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Gesehen" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Veröffentlicht unter den Bedingungen der GNU General Public Lizenz, Version 2 oder höher" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Remis angeboten" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Remisangebot gesendet" # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Remis vereinbart" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Ziehe Stein" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Dauer (msec)" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Dynamische Anzeigentafel" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Lesezeichen editieren..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Engine Lesezeichen editieren" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Partieinfo editieren" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Zeitmodus einstellen" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Leer" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Engine Lesezeichen" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Engine Befehl" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Engine Typ" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Engine Typ: %s (nicht editierbar)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Engine forderte mehr Zeit zum starten an, warten" # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Engine Befehlszeile" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Engine geladen" # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Engine in Betrieb" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Engine gestartet (2 sek. timeout)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "FEN-Position eingeben" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Ereignis-Typ" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Analys.Partie #%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Start der Engine fehlgeschlagen" # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Start des Hilfsprogramms fehlgeschlagen" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Datei zum Abspielen / Programm zum Starten" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filter: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filter: (kein)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Die bestehende Verbindung zuerst beenden." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Zuerst die laufende Partie beenden." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Flags" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Fonts" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "Von Irgendwo (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "Von Engine-Spielen (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "Vom ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "Aus PGN-Dateien (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Partie" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partie #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partie #%d - %d %d %s" # state: untranslated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "" # state: untranslated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partie #%d - %s vs. %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partie #%d - ohne Zeitkontrolle %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Partie #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partie abgebrochen" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Partiebeschreibung" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Partie Informations Font" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Partieliste" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Partieliste (aktualisieren...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Partie verloren" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "Partie gestarted" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Partie gewonnen" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Partie angefügt an %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partie läuft" # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Partie zu Ende %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Spielaufforderung gesendet" # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Partie gestartet" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partie/Brett: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Partien" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Generische XBoard Engine..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Grafische Darstellung von crazy/bughouse Vorrat" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Debug Info" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Erste Schritte" # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Hilfe: Tasten" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Verdecken!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Host nicht gefunden: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Hostname" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Hostname oder IP-Adresse:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "Mensch" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "Mensch Weiß gegen Computer Schwarz" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "Mensch spielt mit Weiß" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "ICS Challenge" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "IPC -Pipe-Erzeugung fehlgeschlagen" # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Nr." # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Wenn man ein Lesezeichen anklickt, spielt die Engine\n" " den nächsten Zug, die Seite-Einstellungen\n" "im Lesezeichen ignorierend." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Illegaler Zug zum Feld %c%d (Legalitätsprüfung Ein)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Illegaler Zug %c%d%c%d (Legalitätsprüfung Ein)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Illegaler Zug, nicht gesendet" # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Inkrement (sek): " # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Inkrement" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Verhindere Anzeigen auf der Konsole wenn Anzeigentafel aktiv ist" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Ausgangsstellung" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Startzeit (mm:ss): " # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Initialisiere Engine" # state: untranslated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Taste" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Taste" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibitze/Zuflüsterer" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Beenden" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Springer %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Letzten Vorschlag erhalten" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Links" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "Weisse Felder" # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "PGN laden" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "PGN laden..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Lokal" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Lokale Partieliste" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Suche Host %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Spielbrett" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Admins und TDs" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manuell/Formular" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Übereinstimmung gefunden in Zeile %d " # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Übereinstimmung Muster:" # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Material: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Max Suchtiefe" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Zug! (Beob./Nachgesp.Partien)" # state: untranslated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # state: untranslated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "" # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Züge" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Netzwerk ist nicht erreichbar" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "Neuigkeiten/Notizen" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "Nein" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Kein Fehler" # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "Zuwenig Material zum Mattsetzen" # state: untranslated # (1) network.cc:781 msgid "No output from program." msgstr "" # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Kein Partner" # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Keine vorherige Suche" # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Keine Vorschläge vorhanden" # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "Keine Vorschläge erhalten" # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Keine" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Normalschach" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Normaler Text" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "Nicht ein Socket ?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Beobachtete Partie beendet" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Beobachten" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "OK" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Wenn Sie -aus diesem Dialog- eine Verbindung zu einem Host aufbauen,wird\n" "eine entsprechendes Lesezeichen in das Peer/ICS Menü eingefügt. Editieren Sie\n" "die ~/.eboard/eboard.conf Datei um das Lesezeichen zu ändern oder entfernen." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Nur Zeilen, die mit dem oben gezeigetn Muster übereinstimmen, werden\n" "zu diesem Text-Schirm hinzugefügt. Muster können geODERt werden mit dem Zeichen | \n" "Ein * (Stern) kann benutzt werden als sog. Joker.\n" "Beispiele:\n" "'(20 | (22)' zeigen nur Zeilen aus den Kanälen 20 und 22\n" "'blik * bored zeigt Zeilen welche das Muster 'blik '(...)' bored' enthalten." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "Gegner hat gezogen" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Optionen" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "PGN Partiedaten" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "PGN-Dateiname" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Partner sagt" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Bauer %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Tonhöhe (Hz)" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Spiele" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Spiele %s als %s gegen %s (%s, max.Tiefe %d, Rechne immer: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Spiele WAV (benötigt Gerät und Dateiname, sox muß installiert sein" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Spiel gegen Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Spiel gegen Engine" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Spiel gegen GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Spiel gegen Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Spieler" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "Spieler gibt auf" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Spieler/Farbe Name Font" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pos: %s vs. %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Optionen" # state: untranslated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "" # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Private Nachricht" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Private Nachrichten" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Programm zu schnell beendet" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Fortschritt" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Verwandlung in: " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Vorschlag" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Spielvorschlag" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protokoll" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Falsches Protokoll, Verbindungsabbruch." # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Dame %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Bewertung" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Wertung" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Bewertungsspanne" # state: untranslated # (1) network.cc:788 msgid "Read error from program." msgstr "" # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Spielaufforderung von %s empfangen" # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Letzte Hosts" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Liste aktualisieren" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Geantworted auf Suche #%d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Aufgegeben" # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Ergebnis" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Letzten Zug zurücknehmen" # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "ICS Channel List von eboard.sf.net zurückholen" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "Rückkehr zu Standardeinstellungen" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "Rückkehr zu Standardeinstellungen" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Rechts" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Turm %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Starten" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Starte Engine..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Starte Programm (benötigt Dateiname" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Starte das Script autofics.pl nach Verbindungsaufbau zum FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Zwischenspeicher sichern als..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Partie speichern" # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "In PGN speichern" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Brett %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Skript" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Skript-Liste" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Limit fürs zurückscrollen (0 = unbegrenzt) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Suche Text" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Suche nach: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Gesuchten Text nicht gefunden" # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Such - Anzeigen" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Anzeigentafel" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Anzeigentafel" # state: untranslated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Filter einstellen" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Filter einstellen..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Setzte irgendeines von diesen Feldern zu Null\num die Default-Einstellung der Engine zu nutzen" # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Setup von Tasten" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Kurztasten-Setup" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Schreie" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Zeige Kanal-Nachrichten in einem Schirm pro Kanal" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Zeige Kanal-Nachrichten auch auf der Konsole (Wenn o.g. Option aktiv ist)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Zeige Wertungszahl neben den Spielernamen" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Zeige Tasten-Kurzbefehle unter dem Brett" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Farbe & Zeit" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Farbwahl" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "Seite am Zug:" # state: untranslated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "" # state: untranslated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Flüssigere Animation (benötigt mehr CPU-Leistung)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Dieses Protokoll erlaubt keine Rücknahme der Züge durch diese Menüoption" # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Klang-Ereignis" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Klangereignisse" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Klänge" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Quellkode vefügbar unter http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Patt" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Verbindung starten" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "Anfangszeit" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "TCP Port" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "TCP Port" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "Tab Position" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Test" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "Die Box auf der linken Seite aktiviert/deaktiviert den Ton" # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "Die Engine wird gestartet mit dem Befehl\n/bin/sh-c 'cd Verzeichnis ; Befehlszeile'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "Immer Züge berechnen" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "Rechne während der Zeit des Gegners" # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Zeit" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Zeitmodus" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Zeitmodus..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Zeitkontrolle" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Zeit läuft ab" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Timeout" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Zeit als hh:mm:ss oder mm:ss oder ss eingeben" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Um mehrere Befehle über eine Kurztaste zu starten, sind die Befehlemit einem ; (semikolon) zu trennen.\n" "Um ein Skript über eine Kurztaste zu starten, ist der Befehl in der Form script.Skriptname einzugeben z.B. script.Meinskript.pl ." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Oben" # state: untranslated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Typ: Fischer-Uhr" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Typ: Feste Zeit pro Zug" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Typ: Grundeinstellung der Engine" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Typ: X-Züge in der Zeitspanne" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "Kann an Port %d nicht anbinden" # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Kann Socket nicht erzeugen" # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Unbekannter Fehler" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Unbekanntes Ergebnis" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Einfarbige Felder benutzen" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Wert" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Wert:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Variante" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Variante" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Variante: %s (nicht editierbar)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Warte" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Auf Verbindung warten" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Warte auf Verbindung am Port %d" # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Warnen, wenn eigene Zeit unterhalb von .. ist: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Wilkommen bei eboard" # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Weiss" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Weiss: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "Arbeitend..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Schreibe in Konsole" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Falscher Adressraum" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "geschrieben" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Ja" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Man kann nur Züge zurücknehmen wenn man am Zug ist" # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Ihre Farbe:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Ihr Name" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[chat]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[cmd]" # state: untranslated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** Verzeichniserstellung fehlgeschlagen" # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** kein $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] schlechte RC-Verbindung\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "Geräusch" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "Geräusche" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "Schwarz" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "kann PGN Züge nicht laden von %s (Fehler beim Öffnen der Datei)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "Dateifehler ab offset %lu of %s" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "Schließt das Brett" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "eboard Netzverbindungs-Manager" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "Eboard Version %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nDieses Program ist freie Software; Sie können es verteilen\n" "und/oder modifizieren unter den Bedingungen der GNU General\n" "Public License publiziert durch die Free Software\n" "Foundation; entweder Version 2 der Lizenz, oder\n" "(wahlweise) eine spätere Version.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "Konsole #%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "Engine beanstandete illegalen Zug, aber wir haben nicht gezogen, Ignorieren." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "Fehler beim analysieren von PGN-Daten" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "Brett umdrehen" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "Partie" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "Partien" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "Generic XBoard V2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "Geht 1 Halbzug zurück" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "Geht zurück zum Partieanfang" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "Geht einen Halbzug vorwärts" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "Geht vorwärts zum Partieende" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "Illegaler Zug!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "in Arbeit" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "Anfangszeit %s, Inkrement %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "Züge in" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "Nein" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "keine solche Partie: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "kein Zeitmodus eingestellt" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "keine" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "Nichts" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "Öffnet neues Stellungseingabe-Brett mit Position" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "pro Zug" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "Einfaches Konsolen-Geräusch" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "Spiele Datei %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "Öffnet das Zugliste-Fenster" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "Prozess-Erzeugung fehlgeschlagen" # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "bewertet" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "Starte %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "Ausführen von %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "savePGN fehlgeschlagen: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "savePGN fehlgeschlagen: Kann Spiele mit weniger als 2 Zügen nicht speichern" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "Sekunden" # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "nicht bewertet" # state: untranslated # (1) clock.cc:313 msgid "untimed" msgstr "" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "Weiß" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "Ja" eboard-1.1.1.orig/multilang/eboard.it.po0000644000175000017500000020526610757567572017516 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** CARICAMENTO PNG FALLITO: pezzi interni a bassa risoluzione in uso. La finestra avrà un aspetto orribile.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " Sfoglia... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Gioca selezione " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " Aggiorna " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " Rimuovi campo " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Imposta " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Introduzione\n" "#M#Usi tipici di eboard\n" "\nGiocare contro il computer\n" "#S#Eboard non gioca a scacchi di per sé, ma serve da interfaccia a programmi che lo fanno, chiamati\n" "motori, che non possiedono una propria interfaccia grafica.\n" "Per giocare contro il computer, è necessario scegliere un motore. GNU Chess, Crafty e\n" "Sjeng sono motori gratuiti per giocare a scacchi. Una volta installati, aprire il menu \n" "#B#Connessioni#K# e il sottomenu #B#Gioca contro un motore#K# e scegliere le opzioni appropriate per\n" "il motore installato.\n" "\n#M#Giocare a scacchi su Internet\n" "#S#Eboard supporta il protocollo FICS. Il servizio FICS gira su freechess.org,\n" "ma anche altri server che usano il software di FICS, come US Chess Live dovrebbero funzionare\n" "con eboard. Il protocollo ICC non è supportato.\n" "Per connettersi a FICS, aprire il menu #B#Connessioni#K# e cliccare su #B#Connetti a FICS#K#.\n" "Per connettersi a un altro server, usare #B#Connetti a un altro server...#K# nel menu #B#Connessioni#K#.\n" "Anche se si può entrare in FICS come ospite, si potrà usufruire appieno del servizio\n" "registrandosi. La registrazione viene fatta al sito #B#http://www.freechess.org#K#,\n" "ed è totalmente gratuita.\n" "\n#M#Vedere partite in formato PGN\n" "#S#PGN è il formato più comune per archiviare partite di scacchi. Può archiviare\n" "sia mosse che commenti (annotazioni). Per aprire questo tipo di file in eboard,\n" "cliccare su #B#Partite sul client#K# nel menu #B#Finestre#K#, quindi su #B#Carica PGN...#K#.\n" "Per vedere una partita sulla scacchiera, selezionarla dalla lista e cliccare su #B#Mostra Partita#K#.\n" "Verrà creata una nuova scheda con la partita nella finestra principale.#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s per %s, %d Hz per %d msec" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d partite lette" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d mosse in %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Connessione a %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (bianco) contro %s (nero)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s ha accettato la sfida." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "Motore %s avviato." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s offre la patta." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s per mossa" # state: translated # (1) clock.cc:317 msgid "%s/move" msgstr "%s/mossa" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "(Dall'inizio) Corrispondenza trovata alla riga %d." # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (Nome su FICS: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(messaggio nascosto -- modalità password?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(nessun segnalibro)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(nessuna)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(periodo di tempo)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* partita non trovata: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] numero di protocollo non valido nel segnalibro: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** avviso: variabile d'ambiente HOME non definita\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- %s partita salvata nel file PGN %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Disconnesso" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partita/A_ggiorna" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Partita/Ritira _mossa" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partita/A_nnulla" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Partita/_Offri patta" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partita/_Abbandona" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Aiuto/Informazioni su _eboard..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Aiuto/Informazioni per il _debug" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Aiuto/_Introduzione" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Aiuto/_Tasti" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Aiuto/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Connessioni/Connetti a _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Connessioni/Connetti direttamente con eboard in _remoto..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Connessioni/Segnali_bri motori" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Connessioni/_Segnalibri ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Connessioni/Gioca contro un motore/Cr_afty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Connessioni/Gioca contro un motore/GNU Chess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Connessioni/Gioca contro un motore/Motore _generico..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Connessioni/Gioca contro un motore/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Connessioni/Gioca contro un motore/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Connessioni/Gioca contro un _motore" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Connessioni/_Connetti a un altro server..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Connessioni/_Disconnetti" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Connessioni/Scacchiera _vuota" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Connessioni/_Esci" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Connessioni/Scacchiera con posizione _iniziale" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Connessioni/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Connessioni/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Connessioni/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Opzioni/Pezzi bitmap/Carica solo i _pezzi" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Opzioni/Pezzi bitmap/Carica solo la _scacchiera" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Opzioni/Pezzi bitmap/Carica il _tema" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Opzioni/Pezzi _bitmap" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Opzioni/Controlla _legalità" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Opzioni/_ICS/Vai automaticamente a nuova _scacchiera" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Opzioni/ICS/Scar_ta le partite osservate in secondo piano" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Opzioni/Anticipa _mossa" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Opzioni/M_ostra coordinate" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Opzioni/_Anima mosse" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Opzioni/_Suona quando l'avversario muove" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Opzioni/Abilita altri suo_ni" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Opzioni/Evi_denzia l'ultima mossa" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Opzioni/_ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Opzioni/_Preferenze..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Opzioni/Pezzi _vettoriali (più veloce)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Opzioni/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Finestre/Trova _precedente" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Finestre/Partite sul _client..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Finestre/Salva _dimensioni finestra" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Finestre/Salv_a buffer di testo..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Finestre/_Richieste sul server..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Finestre/Co_nsole separata" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Finestre/Ricerca _testo (verso l'alto)..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Finestre/_Partite sul server..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Finestre/Avvia _script..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Finestre/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Finestre/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Finestre/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Partita" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_Aiuto" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Connessioni" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/_Opzioni" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/_Finestre" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n" "\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " impossibile caricare il tipo di carattere.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** impossibile caricare uno o più tipi di carattere della scacchiera; installare i tipi di carattere di X11 a 75 e 100 dpi, riavviare X e riprovare.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** impossibile caricare uno o più tipi di carattere della scacchiera\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " richiesta di annullamento inviata" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " richiesta di aggiornamento inviata" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " richiesta di patta inviata" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n" "\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** stringa di ricerca non valida: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** file non trovato: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " impossibile caricare " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n" "\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " impossibile caricare " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " Aggiornamento non supportato" # state: translated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr " Protocollo del motore incompatibile" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Sessione cancellata" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " richiesta di patta inviata" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (password inviata)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [eseguito da menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [eseguito da pulsante]" # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [script eseguito da pulsante] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "Informazioni su eboard" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Accetta" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "Connessione proveniente da %s accettata" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Descrizione della richiesta" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Lista delle richieste" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Lista delle richieste (in aggiornamento...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Aggiungi al menu Connessioni/Segnalibri motori" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Indirizzo già in uso" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Richieste" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Già connesso?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "Ovunque:\n" "F3: finestra precedente.\n" "F4: finestra successiva.\n" "F5: scacchiera principale.\n" "F6: finestra della console.\n" "F7: finestra delle richieste (se disponibile).\n" "F8: mostra/nasconde la barra dei pulsanti.\n" "PagSu/PagGiù: scorre la console (deve essere visibile).\n" "Ctrl+FrecciaSx: indietro di una semimossa.\n" "Ctrl+FrecciaDx: avanti di una semimossa.\n" "Ctrl+F: ricerca il testo verso l'alto nella console principale.\n" "Ctrl+G: cerca precedente.\n" "\nRiga di comando:\n" "Su/Giù (frecce): scorre la cronologia dei comandi.\n" "Invio: invia testo.\n" "Esc: alterna modalità chat/modalità comandi.\n" "\nSintassi:\n" "Nella riga di comando principale:\n" "... %prefix testo imposta il prefisso della modalità chat a testo.\n" "... %do nomescript esegue lo script nomescript." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Aspetto" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "Accodato" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Applica" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Applica modifiche" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Salva automaticamente le partite osservate" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Salva automaticamente le partite giocate" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Salva automaticamente" # state: translated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "Assi e pulsanti" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Sfondo" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Descrittore errato" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Beep (richiede frequenza, durata, numero e device)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Alfiere %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Nero" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Nero: %s - %s" # state: translated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "Asse del cursore della scacchiera: %d\n" "Pulsante di selezione della scacchiera: %d\n" "Asse per spostarsi sulla scacchiera: %d\n" "Pulsante per la scheda precedente: %d\n" "Pulsante per la scheda successiva: %d\n" # state: translated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "Versione scacchiera: %s" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Testo del segnalibro:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Basso" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Testo evidenziato" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Sfoglia" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Salvataggio del buffer fallito." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Gioco a coppie" # state: translated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "Indirizzo del bus: %s" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Testo del pulsante" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Icona del pulsante" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Annulla" # state: translated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "Annulla la configurazione del joystick" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Connessione in attesa annullata." # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "Cambia..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Conversazioni in canale" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Scacco matto" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Programmi di scacchi" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Scegliere il tipo di carattere" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Scegli..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Tipo di carattere per l'orologio" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "Chiudi" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Colore" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Selezione colori" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Colori" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Comando" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Riga di comando:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Computer" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Computer con bianco contro umano con nero" # state: translated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "Configura assi e pulsanti" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "File audio configurati:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Connessione" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Connessione al server ICS" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Connesso a %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "Connessione a %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Connessione rifiutata" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Connessione a %s:%d fallita: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Console" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Beep di console" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Tipo di carattere per la console" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Buffer della console salvato." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Numero:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: translated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "Scacchiera DGT trovata sulla porta %s." # state: translated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "Errore di supporto DGT: pagina sbagliata" # state: translated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "Avvertenza DGT: le posizioni su eboard e sulla scacchiera DGT non coincidono." # state: translated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "DGT: codice non riconosciuto: %c (%d)" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Case scure..." # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Cancella tutte le voci" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Cancella questa voce" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Profondità di ricerca:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Descrizione" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Device:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Directory di esecuzione (es. dove si trovano i libri)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Directory:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Cancella tutto" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Cancella partita" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Elimina" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Mostra partita" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Mostrata" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distribuito secondo la GNU General Public License, versione 2 o successive" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Patta proposta" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Proposta di patta inviata." # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Patta per accordo" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Posiziona pezzo:" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Durata (msec):" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Lista dinamica delle richieste" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Modifica segnalibri..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Modifica segnalibri motori" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Modifica dati della partita" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Modifica controllo del tempo" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Vuota" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Segnalibri motori" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Comando del motore" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Tipo di motore:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Tipo di motore: %s (non modificabile)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Il motore ha chiesto più tempo per avviarsi, attendere." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Riga di comando del motore" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Motore caricato." # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Motore in esecuzione" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Motore in esecuzione (scadenza 2 sec)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Inserire la posizione FEN" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Tipo di evento" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Esamina partita num.%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Avvio motore fallito." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Impossibile eseguire il programma accessorio" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "File da suonare/programma da eseguire:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtro: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtro: (nessuno)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Terminare prima la connessione in corso." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Terminare prima la partita in corso." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Flag" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Tipi di carattere" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "Da altre fonti (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "Da motori (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "Da FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "Da ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "Da file PGN (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Partita num." # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partita num.%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partita num.%d - %d %d %s" # state: translated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "Partita num.%d - %s" # state: translated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "Partita num.%d - %s - %s" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partita num.%d - %s contro %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partita num.%d - senza orologio %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Partita num.%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partita annullata" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Descrizione della partita" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Tipo di carattere per le informazioni sulla partita" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Lista delle partite" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Lista delle partite (in aggiornamento...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Partita persa" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "Partita iniziata" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Partita vinta" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Partita accodata a %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partita in corso." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Partita finita: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Sfida inviata." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Partita iniziata!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partita/scacchiera: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Partite" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Motore XBoard generico..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Vinciperdi" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Mostra il materiale in crazy/bughouse" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Aiuto: dati per il debug" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Aiuto: introduzione " # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Aiuto: tasti" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Nascondi!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Host non trovato: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Nome host" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Nome host o indirizzo IP:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "Umano" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "Umano con bianco contro computer con nero" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "L'umano gioca col bianco" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Sfida ICS" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "Creazione della pipe IPC fallita." # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Id" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Se si sceglie un segnalibro, il motore\n" "giocherà la prossima mossa, ignorando il\n" "colore impostato nelle preferenze." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Inserimento non legale di un pezzo in %c%d (controllo di legalità attivato)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Mossa non legale %c%d%c%d (controllo di legalità attivato)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Mossa non legale, non inviata." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Incremento (secondi):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Incremento:" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Nascondi le richieste in console quando è attiva la lista richieste" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Posizione iniziale" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Tempo iniziale ([mm:]ss):" # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Inizializzazione motore" # state: lost (deprecated key) # (1) dgtboard.cc:223 msgid "Invalid answer to DGT_SEND_BRD on port %s: %s " msgstr "Risposta non valida a DGT_SEND_BRD sulla porta %s: %s " # state: translated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "Joystick" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Chiave" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Chiave:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibitz/Whisper" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Termina" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Cavallo %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Ultima proposta ricevuta" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Sinistra" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "Case chiare..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "Carica PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Carica PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Locale" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Lista delle partite locali" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Ricerca dell'host %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Scacchiera principale" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer e TD" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manuale/Formula" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Corrispondenza trovata alla riga %d." # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Criterio di ricerca: " # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Materiale: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Profondità massima in semimosse:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Mossa effettuata (partite esaminate/osservate)" # state: translated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" "Muovere l'asse da utilizzare per scorrere avanti e indietro\n" "le mosse di una partita." # state: translated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "Muovere l'asse da utilizzare per selezionare i pezzi." # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Mosse" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Rete irraggiungibile" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "Novità/avvisi" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "No" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Nessun errore." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "Materiale insufficiente per dare matto" # state: translated # (1) network.cc:781 msgid "No output from program." msgstr "Nessun output dal programma." # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Connessione non disponibile." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Nessuna ricerca precedente." # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Nessuna proposta in sospeso." # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "Nessuna proposta ricevuta." # state: lost (deprecated key) # (1) dgtboard.cc:219 msgid "No response to DGT_SEND_BRD on port %s: %s." msgstr "Nessuna risposta a DGT_SEND_BRD sulla porta %s: %s." # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Nulla" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Scacchi normali" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Testo normale" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "Non è un socket?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Partita osservata terminata" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Osserva" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "Ok" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Connettendosi da questa finestra di dialogo, l'host\n" "verrà aggiunto al menu Connessioni/Segnalibri ICS. Modificare il\n" "file ~/.eboard/eboard.conf per cambiare o eliminare le voci." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Solo le linee che soddisfino il criterio di ricerca\n" "appariranno in console. I criteri possono essere combinati in OR\n" "con il carattere | (pipe). Un asterisco (*) soddisfa\n" "una qualsiasi sequenza.\n" "Exempi:\n" "'(20)|(22)' mostra le linee dei canali 20 e 22\n" "'blik * annoiato' mostra le linee che contengono 'blik '(...)' annoiato'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "L'avversario ha mosso" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Opzioni" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "Intestazioni PGN" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "File PGN:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Messaggi al compagno:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Pedone %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Frequenza (Hz):" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Gioca" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Gioca %s come %s contro %s (%s, prof. max. %d, pensa sempre: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Suona WAV (richiede device e file, sox deve essere installato)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Gioca contro Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Gioca contro motore" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Gioca contro GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Gioca contro Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Giocatore" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "Il giocatore abbandona" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Tipo di carattere per il nome del giocatore/colore" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pos: %s contro %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Opzioni" # state: translated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "Premere il pulsante da utilizzare per passare alla scheda successiva." # state: translated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "Premere il pulsante da utilizzare per passare alla scheda precedente." # state: translated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "Premere il pulsante da utilizzare per selezionare una casa." # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Messaggio privato" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Messaggi privati" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Programma uscito troppo presto" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Progresso" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Promozione a: " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Proporre" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Proporre partita" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protocollo" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Errore di protocollo, disconnessione." # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Donna %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Valutata" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Punteggio" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Intervallo di punteggio" # state: translated # (1) network.cc:788 msgid "Read error from program." msgstr "Errore di lettura dal programma." # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Ricevuta una proposta di partita da %s." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Ultimi host" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Aggiorna lista" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Risposto alla richiesta num.%d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Abbandonato." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Risultato" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Ultima mossa annullata." # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Scaricare la lista dei canali ICS da eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "Ripristina predefiniti" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "Ripristina predefiniti" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Destra" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Torre %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Esegui" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Esegui motore..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Esegui programma (richiede file)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Esegui autofics.pl dopo la connessione a FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Salva buffer con nome..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Salva partita..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Salva come PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Vuota %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Script" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Lista degli script" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Numero massimo di righe (0 = illimitato):" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Ricerca testo" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Cerca: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Testo non trovato." # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Richieste" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Lista richieste" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Tipo di carattere per la lista richieste" # state: translated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "Seriale: %s" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Imposta filtro" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Imposta filtro..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Imposta a 0 il limite di profondità\nper usare i valori predefiniti del motore." # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Configura pulsanti" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Configura i pulsanti di scelta rapida" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Shout" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Mostra i canali in finestre distinte" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Mostra le conversazioni in canale anche in console (quando l'opzione sopra è attivata)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Mostra il punteggio accanto al nome del giocatore" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Mostra pulsanti sotto la scacchiera" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Colore e tempo" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Scelta del colore" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "Mossa al: " # state: translated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "Rendi fluido il cursore del joystick" # state: translated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "Velocità del cursore fluido del joystick:" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Animazione avanzata (richiede più CPU)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Spiacente, questo protocollo non permette di annullare una mossa con questa opzione." # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Evento sonoro" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Eventi sonori" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Suoni" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Sorgenti disponibili su http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Stallo" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Inizia connessione" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "Tempo iniziale:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "Porta TCP" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "Porta TCP:" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "Posizione delle schede" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Prova" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "La casella a sinistra attiva/disattiva il sonoro." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "Il motore sarà eseguito come\n/bin/sh -c 'cd directory; riga di comando'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "Pensa sempre" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "Pensa sul tempo dell'avversario" # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Tempo" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Controllo del tempo" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Controllo del tempo..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Controllo del tempo:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Il tempo sta scadendo" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Timeout" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Il tempo può essere espresso come hh:mm:ss, mm:ss o ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Per eseguire più comandi, separarli con ; (punto e virgola).\n" "Per eseguire uno script, usare script.nomescript, es. script.mioscript.pl." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Alto" # state: translated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "Trademark: %s" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Tipo: orologio Fischer (come ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Tipo: tempo fisso per mossa" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Tipo: Usa le opzioni predefinite del motore" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Tipo: X mosse per periodo di tempo" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "Impossibile collegarsi alla porta %d." # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Impossibile creare il socket." # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: lost (deprecated key) # (1) dgtboard.cc:215 msgid "Unable to find the DGT board on port %s: %s." msgstr "Impossibile trovare la scacchiera DGT sulla porta %s: %s." # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Errore sconosciuto" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Risultato sconosciuto" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Colora le case in tinta unita" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Valore" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Valore:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Variante" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Variante:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Variante: %s (non modificabile)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Attendere" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Attendere la connessione" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Attendere la connessione sulla porta %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Avvisa quando rimangono meno di: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Benvenuto in eboard." # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Bianco" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Bianco: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "In corso..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Scrivi in console" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Spazio di indirizzo non valido" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "Scritto" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Sì" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "È possibile ritirare la mossa solo al momento del proprio turno." # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Colore:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Nome:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[chat]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[cmd]" # state: translated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "[eboard] ** $HOME è troppo lunga" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** impossibile creare la directory " # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** $HOME non definita" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] riga RC non valida\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "beep" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "beep" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "nero" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "impossibile caricare le mosse dal file PGN %s (errore di apertura del file)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "impossibile cercare l'offset %lu di %s" # state: lost (deprecated key) # (1) dgtboard.cc:208 msgid "dgtnix driver version %.1f" msgstr "driver dgtnix versione %.1f" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "elimina scacchiera" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "Gestore di connessione diretta di eboard" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "eboard versione %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard versione %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nQuesto programma è software libero; è possibile ridistribuirlo\n" "e/o modificarlo nei termini della GNU General Public\n" "License come pubblicata dalla Free Software Foundation;\n" "versione 2 della licenza o (a scelta) qualsiasi versione\n" "più recente.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: console num.%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "il motore ha segnalato una mossa non legale ma l'utente non ha mosso; ignorare." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "errore lettura dati PGN" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "ruota scacchiera" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "partita" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "partite" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "xboard generico v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "indietro di una semimossa" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "torna a inizio partita" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "avanti di una semimossa" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "va a fine partita" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "mossa non legale!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "in corso" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "tempo iniziale %s, incremento %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "mosse in" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "no" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "partita inesistente: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "nessun controllo di tempo" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "nulla" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "niente" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "apre nuova scacchiera con questa posizione" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "per mossa" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "beep di console" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "suona file %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "mostra la lista delle mosse" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "creazione del processo fallita." # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "valutata" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "esegui %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "%s in esecuzione" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "savePGN fallito: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "savePGN fallito: impossibile salvare una partita con meno di 2 mosse" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "secondi." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "non valutata" # state: translated # (1) clock.cc:313 msgid "untimed" msgstr "senza orologio" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "bianco" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "sì" eboard-1.1.1.orig/multilang/eboard.it.dict0000644000175000017500000010446510757567572020022 0ustar patrikpatrikL72 111 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** CARICAMENTO PNG FALLITO: pezzi interni a bassa risoluzione in uso. La finestra avrà un aspetto orribile.\n L11 12 Browse... Sfoglia... L15 17 Play Selected Gioca selezione L9 10 Refresh Aggiorna L14 15 Remove Field Rimuovi campo L5 9 Set Imposta L1543 1674 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Introduzione\n#M#Usi tipici di eboard\n\nGiocare contro il computer\n#S#Eboard non gioca a scacchi di per sé, ma serve da interfaccia a programmi che lo fanno, chiamati\nmotori, che non possiedono una propria interfaccia grafica.\nPer giocare contro il computer, è necessario scegliere un motore. GNU Chess, Crafty e\nSjeng sono motori gratuiti per giocare a scacchi. Una volta installati, aprire il menu \n#B#Connessioni#K# e il sottomenu #B#Gioca contro un motore#K# e scegliere le opzioni appropriate per\nil motore installato.\n\n#M#Giocare a scacchi su Internet\n#S#Eboard supporta il protocollo FICS. Il servizio FICS gira su freechess.org,\nma anche altri server che usano il software di FICS, come US Chess Live dovrebbero funzionare\ncon eboard. Il protocollo ICC non è supportato.\nPer connettersi a FICS, aprire il menu #B#Connessioni#K# e cliccare su #B#Connetti a FICS#K#.\nPer connettersi a un altro server, usare #B#Connetti a un altro server...#K# nel menu #B#Connessioni#K#.\nAnche se si può entrare in FICS come ospite, si potrà usufruire appieno del servizio\nregistrandosi. La registrazione viene fatta al sito #B#http://www.freechess.org#K#,\ned è totalmente gratuita.\n\n#M#Vedere partite in formato PGN\n#S#PGN è il formato più comune per archiviare partite di scacchi. Può archiviare\nsia mosse che commenti (annotazioni). Per aprire questo tipo di file in eboard,\ncliccare su #B#Partite sul client#K# nel menu #B#Finestre#K#, quindi su #B#Carica PGN...#K#.\nPer vedere una partita sulla scacchiera, selezionarla dalla lista e cliccare su #B#Mostra Partita#K#.\nVerrà creata una nuova scheda con la partita nella finestra principale.#L# L30 31 %d %s to %s, %d Hz for %d msec %d %s per %s, %d Hz per %d msec L13 16 %d games read %d partite lette L14 14 %d moves in %s %d mosse in %s L25 28 %d. Connect to %s:%d (%s) %d. Connessione a %s:%d (%s) L41 44 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (bianco) contro %s (nero)\n%s\n%d:%.2d %d L31 25 %s accepted your game proposal. %s ha accettato la sfida. L18 18 %s engine started. Motore %s avviato. L17 18 %s offers a draw. %s offre la patta. L11 12 %s per move %s per mossa L7 8 %s/move %s/mossa L33 50 (Wrapped) Match Found at Line %d. (Dall'inizio) Corrispondenza trovata alla riga %d. L64 65 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (Nome su FICS: Pulga) L39 43 (message obfuscated -- password mode ?) (messaggio nascosto -- modalità password?) L14 19 (no bookmarks) (nessun segnalibro) L6 9 (none) (nessuna) L13 18 (time period) (periodo di tempo) L18 23 * game not found: * partita non trovata: L47 60 ** [eboard] bad engine protocol # in bookmark: ** [eboard] numero di protocollo non valido nel segnalibro: L57 61 ** eboard ** warning: HOME environment variable not set\n ** eboard ** avviso: variabile d'ambiente HOME non definita\n L26 38 --- %s game to PGN file %s --- %s partita salvata nel file PGN %s L16 15 --- Disconnected --- Disconnesso L14 18 /Game/Ad_journ /Partita/A_ggiorna L19 22 /Game/Retract _Move /Partita/Ritira _mossa L12 17 /Game/_Abort /Partita/A_nnulla L17 21 /Game/_Offer Draw /Partita/_Offri patta L13 19 /Game/_Resign /Partita/_Abbandona L22 33 /Help/_About eboard... /Aiuto/Informazioni su _eboard... L17 33 /Help/_Debug Info /Aiuto/Informazioni per il _debug L22 20 /Help/_Getting Started /Aiuto/_Introduzione L11 13 /Help/_Keys /Aiuto/_Tasti L10 11 /Help/sep4 /Aiuto/sep4 L22 29 /Peer/Connect to _FICS /Connessioni/Connetti a _FICS L43 59 /Peer/Direct connect with _Remote eboard... /Connessioni/Connetti direttamente con eboard in _remoto... L23 31 /Peer/Engine B_ookmarks /Connessioni/Segnali_bri motori L20 28 /Peer/ICS _Bookmarks /Connessioni/_Segnalibri ICS L36 46 /Peer/Play against Engine/Cr_afty... /Connessioni/Gioca contro un motore/Cr_afty... L41 51 /Peer/Play against Engine/GNU Chess _4... /Connessioni/Gioca contro un motore/GNU Chess _4... L44 55 /Peer/Play against Engine/_Generic Engine... /Connessioni/Gioca contro un motore/Motore _generico... L35 45 /Peer/Play against Engine/_Sjeng... /Connessioni/Gioca contro un motore/_Sjeng... L30 40 /Peer/Play against Engine/sep1 /Connessioni/Gioca contro un motore/sep1 L26 36 /Peer/Play against _Engine /Connessioni/Gioca contro un _motore L33 43 /Peer/_Connect to Other Server... /Connessioni/_Connetti a un altro server... L17 25 /Peer/_Disconnect /Connessioni/_Disconnetti L26 30 /Peer/_Empty Scratch Board /Connessioni/Scacchiera _vuota L11 18 /Peer/_Quit /Connessioni/_Esci L42 47 /Peer/_Scratch Board with Initial Position /Connessioni/Scacchiera con posizione _iniziale L10 17 /Peer/sep2 /Connessioni/sep2 L10 17 /Peer/sep3 /Connessioni/sep3 L10 17 /Peer/sep4 /Connessioni/sep4 L48 42 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Opzioni/Pezzi bitmap/Carica solo i _pezzi L49 48 /Settings/Bitmapped Piece Sets/Load _Squares Only /Opzioni/Pezzi bitmap/Carica solo la _scacchiera L42 37 /Settings/Bitmapped Piece Sets/Load _Theme /Opzioni/Pezzi bitmap/Carica il _tema L31 22 /Settings/Bitmapped Piece _Sets /Opzioni/Pezzi _bitmap L35 29 /Settings/Enable Legality _Checking /Opzioni/Controlla _legalità L55 53 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Opzioni/_ICS/Vai automaticamente a nuova _scacchiera L69 58 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Opzioni/ICS/Scar_ta le partite osservate in secondo piano L18 24 /Settings/Pre_move /Opzioni/Anticipa _mossa L27 27 /Settings/Sho_w Coordinates /Opzioni/M_ostra coordinate L24 21 /Settings/_Animate Moves /Opzioni/_Anima mosse L33 41 /Settings/_Beep on Opponent Moves /Opzioni/_Suona quando l'avversario muove L30 29 /Settings/_Enable Other Sounds /Opzioni/Abilita altri suo_ni L30 34 /Settings/_Highlight Last Move /Opzioni/Evi_denzia l'ultima mossa L23 13 /Settings/_ICS Behavior /Opzioni/_ICS L25 23 /Settings/_Preferences... /Opzioni/_Preferenze... L47 40 /Settings/_Vectorized Pieces (Faster Rendering) /Opzioni/Pezzi _vettoriali (più veloce) L14 13 /Settings/sep3 /Opzioni/sep3 L23 27 /Windows/Find _Previous /Finestre/Trova _precedente L28 32 /Windows/Games on _Client... /Finestre/Partite sul _client... L31 36 /Windows/Save Desktop _Geometry /Finestre/Salva _dimensioni finestra L29 35 /Windows/Save _Text Buffer... /Finestre/Salv_a buffer di testo... L26 34 /Windows/_Ads on Server... /Finestre/_Richieste sul server... L26 27 /Windows/_Detached Console /Finestre/Co_nsole separata L32 42 /Windows/_Find Text (upwards)... /Finestre/Ricerca _testo (verso l'alto)... L28 32 /Windows/_Games on Server... /Finestre/_Partite sul server... L23 26 /Windows/_Run Script... /Finestre/Avvia _script... L13 14 /Windows/sep1 /Finestre/sep1 L13 14 /Windows/sep2 /Finestre/sep2 L13 14 /Windows/sep3 /Finestre/sep3 L6 9 /_Game /_Partita L6 7 /_Help /_Aiuto L6 13 /_Peer /_Connessioni L10 9 /_Settings /_Opzioni L9 10 /_Windows /_Finestre L106 145 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n\n L41 67 can't load font.\n impossibile caricare il tipo di carattere.\n L124 166 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** impossibile caricare uno o più tipi di carattere della scacchiera; installare i tipi di carattere di X11 a 75 e 100 dpi, riavviare X e riprovare.\n L58 86 ** failed to load one or more board fonts\n ** impossibile caricare uno o più tipi di carattere della scacchiera\n L34 51 abort request sent richiesta di annullamento inviata L36 52 adjourn request sent richiesta di aggiornamento inviata L33 44 draw request sent richiesta di patta inviata L110 149 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n\n L45 56 ** bad pattern string: ** stringa di ricerca non valida: L40 42 ** file not found: ** file non trovato: L39 45 failed to load impossibile caricare L112 151 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Attenzione: impossibile caricare il tipo di carattere fixed; il contenuto di questa finestra apparirà orribile.\n\n L34 40 failed to load impossibile caricare L42 48 Adjourning not supported Aggiornamento non supportato L46 55 Incompatible Engine Protocol Protocollo del motore incompatibile L33 39 Session Aborted Sessione cancellata L35 46 draw request sent richiesta di patta inviata L9 10 L17 20 > (password sent) > (password inviata) L23 23 > [issued from menu] %s > [eseguito da menu] %s L25 24 > [issued from shortcut] > [eseguito da pulsante] L31 34 > [script run from shortcut] %s > [script eseguito da pulsante] %s L12 22 About eboard Informazioni su eboard L6 7 Accept Accetta L36 39 Accepted incoming connection from %s Connessione proveniente da %s accettata L14 27 Ad Description Descrizione della richiesta L7 21 Ad List Lista delle richieste L23 43 Ad List (refreshing...) Lista delle richieste (in aggiornamento...) L33 46 Add to Peer/Engine Bookmarks menu Aggiungi al menu Connessioni/Segnalibri motori L22 21 Address already in use Indirizzo già in uso L3 9 Ads Richieste L21 16 Already connected ?!? Già connesso?!? L675 753 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. Ovunque:\nF3: finestra precedente.\nF4: finestra successiva.\nF5: scacchiera principale.\nF6: finestra della console.\nF7: finestra delle richieste (se disponibile).\nF8: mostra/nasconde la barra dei pulsanti.\nPagSu/PagGiù: scorre la console (deve essere visibile).\nCtrl+FrecciaSx: indietro di una semimossa.\nCtrl+FrecciaDx: avanti di una semimossa.\nCtrl+F: ricerca il testo verso l'alto nella console principale.\nCtrl+G: cerca precedente.\n\nRiga di comando:\nSu/Giù (frecce): scorre la cronologia dei comandi.\nInvio: invia testo.\nEsc: alterna modalità chat/modalità comandi.\n\nSintassi:\nNella riga di comando principale:\n... %prefix testo imposta il prefisso della modalità chat a testo.\n... %do nomescript esegue lo script nomescript. L10 7 Appearance Aspetto L8 8 Appended Accodato L5 7 Apply Applica L13 17 Apply Changes Applica modifiche L24 42 Auto-save observed games Salva automaticamente le partite osservate L22 40 Auto-save played games Salva automaticamente le partite giocate L8 21 Autosave Salva automaticamente L14 15 Axis & Buttons Assi e pulsanti L10 6 Background Sfondo L14 18 Bad descriptor Descrittore errato L45 50 Beep (need Pitch, Duration, Count and Device) Beep (richiede frequenza, durata, numero e device) L10 11 Bishop %d Alfiere %d L5 4 Black Nero L14 13 Black: %s - %s Nero: %s - %s L119 202 Board Cursor Axis: %d\nBoard Select Button: %d\nBoard Browsing Axis: %d\nPrevious Tab Button: %d\nNext Tab Button: %d\n Asse del cursore della scacchiera: %d\nPulsante di selezione della scacchiera: %d\nAsse per spostarsi sulla scacchiera: %d\nPulsante per la scheda precedente: %d\nPulsante per la scheda successiva: %d\n L17 23 Board version :%s Versione scacchiera: %s L17 21 Bookmark Caption: Testo del segnalibro: L6 5 Bottom Basso L11 17 Bright Text Testo evidenziato L6 7 Browse Sfoglia L19 31 Buffer Save failed. Salvataggio del buffer fallito. L8 8 Bughouse Bughouse L22 24 Bughouse: Partner Game Bughouse: Gioco a coppie L15 21 Bus address :%s Indirizzo del bus: %s L14 18 Button Caption Testo del pulsante L11 18 Button Icon Icona del pulsante L6 7 Cancel Annulla L29 38 Cancel Joystick Configuration Annulla la configurazione del joystick L26 32 Cancelled connection wait. Connessione in attesa annullata. L9 9 Change... Cambia... L13 23 Channel Tells Conversazioni in canale L9 12 Checkmate Scacco matto L14 20 Chess Programs Programmi di scacchi L11 30 Choose Font Scegliere il tipo di carattere L9 9 Choose... Scegli... L10 32 Clock Font Tipo di carattere per l'orologio L5 6 Close Chiudi L5 6 Color Colore L15 16 Color Selection Selezione colori L6 6 Colors Colori L7 7 Command Comando L13 16 Command Line: Riga di comando: L8 8 Computer Computer L30 41 Computer White vs. Human Black Computer con bianco contro umano con nero L24 25 Configure Axis & Buttons Configura assi e pulsanti L23 23 Configured Sound Files: File audio configurati: L7 11 Connect Connessione L21 25 Connect to ICS Server Connessione al server ICS L20 18 Connected to %s (%s) Connesso a %s (%s) L19 19 Connecting to %s... Connessione a %s... L18 21 Connection refused Connessione rifiutata L28 29 Connection to %s:%d failed: Connessione a %s:%d fallita: L7 7 Console Console L12 15 Console Beep Beep di console L12 32 Console Font Tipo di carattere per la console L21 29 Console buffer saved. Buffer della console salvato. L6 7 Count: Numero: L10 10 Crazyhouse Crazyhouse L27 38 DGT board found on port %s. Scacchiera DGT trovata sulla porta %s. L29 40 DGT support error: wrong page Errore di supporto DGT: pagina sbagliata L60 77 DGT warning: position mismatch between eboard and DGT board. Avvertenza DGT: le posizioni su eboard e sulla scacchiera DGT non coincidono. L31 37 DGT: unrecognized code: %c (%d) DGT: codice non riconosciuto: %c (%d) L15 13 Dark Squares... Case scure... L18 22 Delete All Entries Cancella tutte le voci L17 20 Delete This Entry Cancella questa voce L12 23 Depth Limit: Profondità di ricerca: L11 11 Description Descrizione L7 7 Device: Device: L50 53 Directory to run from (e.g., where book files are) Directory di esecuzione (es. dove si trovano i libri) L10 10 Directory: Directory: L11 14 Discard All Cancella tutto L12 16 Discard Game Cancella partita L7 7 Dismiss Elimina L12 14 Display Game Mostra partita L9 8 Displayed Mostrata L81 74 Distributed under the terms of the GNU General Public License, version 2 or later Distribuito secondo la GNU General Public License, versione 2 o successive L12 14 Draw Offered Patta proposta L16 26 Draw offer sent. Proposta di patta inviata. L18 17 Drawn by agreement Patta per accordo L11 16 Drop Piece: Posiziona pezzo: L16 14 Duration (msec): Durata (msec): L18 30 Dynamic Seek Table Lista dinamica delle richieste L17 22 Edit Bookmarks... Modifica segnalibri... L21 26 Edit Engine Bookmarks Modifica segnalibri motori L14 27 Edit Game Info Modifica dati della partita L17 28 Edit Time Control Modifica controllo del tempo L5 5 Empty Vuota L16 17 Engine Bookmarks Segnalibri motori L14 18 Engine Command Comando del motore L12 15 Engine Type: Tipo di motore: L28 37 Engine Type: %s (uneditable) Tipo di motore: %s (non modificabile) L43 56 Engine asked more time to startup, waiting. Il motore ha chiesto più tempo per avviarsi, attendere. L19 26 Engine command line Riga di comando del motore L14 16 Engine loaded. Motore caricato. L14 20 Engine running Motore in esecuzione L30 37 Engine started (2 sec timeout) Motore in esecuzione (scadenza 2 sec) L18 25 Enter FEN Position Inserire la posizione FEN L10 14 Event Type Tipo di evento L13 22 Exam.Game #%d Esamina partita num.%d L21 21 Failed to run engine. Avvio motore fallito. L28 44 Failed to run helper program Impossibile eseguire il programma accessorio L30 38 File to play / Program to run: File da suonare/programma da eseguire: L8 8 Filter: Filtro: L14 17 Filter: (none) Filtro: (nessuno) L36 40 Finish the current connection first. Terminare prima la connessione in corso. L30 36 Finish the current game first. Terminare prima la partita in corso. L5 4 Flags Flag L5 17 Fonts Tipi di carattere L22 22 From Elsewhere (%d %s) Da altre fonti (%d %s) L20 17 From Engines (%d %s) Da motori (%d %s) L8 6 From FEN Da FEN L16 14 From ICS (%d %s) Da ICS (%d %s) L22 19 From PGN Files (%d %s) Da file PGN (%d %s) L6 12 Game # Partita num. L8 14 Game #%d Partita num.%d L19 25 Game #%d - %d %d %s Partita num.%d - %d %d %s L13 19 Game #%d - %s Partita num.%d - %s L18 24 Game #%d - %s - %s Partita num.%d - %s - %s L20 29 Game #%d - %s vs. %s Partita num.%d - %s contro %s L21 34 Game #%d - untimed %s Partita num.%d - senza orologio %s L12 18 Game #%d: %s Partita num.%d: %s L12 17 Game Aborted Partita annullata L16 25 Game Description Descrizione della partita L21 51 Game Information Font Tipo di carattere per le informazioni sulla partita L9 19 Game List Lista delle partite L25 41 Game List (refreshing...) Lista delle partite (in aggiornamento...) L9 13 Game Lost Partita persa L12 16 Game Started Partita iniziata L8 13 Game Won Partita vinta L19 21 Game appended to %s Partita accodata a %s L17 17 Game in progress. Partita in corso. L13 18 Game over: %s Partita finita: %s L19 14 Game proposal sent. Sfida inviata. L13 17 Game started! Partita iniziata! L12 20 Game/Board: Partita/scacchiera: L5 7 Games Partite L24 25 Generic XBoard Engine... Motore XBoard generico... L8 10 Giveaway Vinciperdi L46 37 Graphic representation of crazy/bughouse stock Mostra il materiale in crazy/bughouse L16 24 Help: Debug Info Aiuto: dati per il debug L22 20 Help: Getting Started Aiuto: introduzione L10 12 Help: Keys Aiuto: tasti L5 9 Hide! Nascondi! L18 20 Host not found: %s Host non trovato: %s L8 9 Hostname Nome host L23 25 Hostname or IP address: Nome host o indirizzo IP: L5 5 Human Umano L30 41 Human White vs. Computer Black Umano con bianco contro computer con nero L17 24 Human plays white L'umano gioca col bianco L13 9 ICS Challenge Sfida ICS L25 33 IPC pipe creation failed. Creazione della pipe IPC fallita. L2 2 Id Id L104 117 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Se si sceglie un segnalibro, il motore\ngiocherà la prossima mossa, ignorando il\ncolore impostato nelle preferenze. L43 76 Illegal Drop on %c%d (Legality Checking On) Inserimento non legale di un pezzo in %c%d (controllo di legalità attivato) L44 59 Illegal Move %c%d%c%d (Legality Checking On) Mossa non legale %c%d%c%d (controllo di legalità attivato) L23 30 Illegal move, not sent. Mossa non legale, non inviata. L17 21 Increment (secs): Incremento (secondi): L10 11 Increment: Incremento: L55 68 Inhibit seek lines on console when Seek Table is active Nascondi le richieste in console quando è attiva la lista richieste L16 18 Initial Position Posizione iniziale L23 25 Initial time ([mm:]ss): Tempo iniziale ([mm:]ss): L19 23 Initializing engine Inizializzazione motore L46 54 Invalid answer to DGT_SEND_BRD on port %s: %s Risposta non valida a DGT_SEND_BRD sulla porta %s: %s L8 8 Joystick Joystick L3 6 Key Chiave L4 7 Key: Chiave: L17 14 Kibitzes/Whispers Kibitz/Whisper L4 7 Kill Termina L10 10 Knight %d Cavallo %d L22 24 Last Proposal Received Ultima proposta ricevuta L4 8 Left Sinistra L16 14 Light Squares... Case chiare... L8 10 Load PGN Carica PGN L11 13 Load PGN... Carica PGN... L5 6 Local Locale L15 26 Local Game List Lista delle partite locali L21 23 Looking up host %s... Ricerca dell'host %s... L6 6 Losers Losers L10 21 Main Board Scacchiera principale L13 10 Mamer and TDs Mamer e TD L14 15 Manual/Formula Manuale/Formula L23 36 Match Found at Line %d. Corrispondenza trovata alla riga %d. L15 21 Match Pattern: Criterio di ricerca: L17 18 Material: %d - %d Materiale: %d - %d L8 33 Max Ply: Profondità massima in semimosse: L30 46 Move made (Obs'vd/Exm'd Games) Mossa effettuata (partite esaminate/osservate) L76 85 Move the axis to be used for moving back and forth\nthrough moves of a game. Muovere l'asse da utilizzare per scorrere avanti e indietro\nle mosse di una partita. L46 53 Move the axis to be used for selecting pieces. Muovere l'asse da utilizzare per selezionare i pezzi. L5 5 Moves Mosse L22 20 Network is unreachable Rete irraggiungibile L18 14 News/Notifications Novità/avvisi L2 2 No No L9 14 No error. Nessun errore. L19 38 No material to mate Materiale insufficiente per dare matto L23 28 No output from program. Nessun output dal programma. L8 28 No peer. Connessione non disponibile. L19 27 No previous search. Nessuna ricerca precedente. L18 28 No proposals left. Nessuna proposta in sospeso. L22 26 No proposals received. Nessuna proposta ricevuta. L43 51 No response to DGT_SEND_BRD on port %s: %s. Nessuna risposta a DGT_SEND_BRD sulla porta %s: %s. L4 5 None Nulla L12 15 Normal Chess Scacchi normali L11 13 Normal Text Testo normale L16 19 Not a socket ?!? Non è un socket?!? L2 2 OK OK L17 27 Obs'vd Game Ended Partita osservata terminata L7 7 Observe Osserva L2 2 Ok Ok L160 180 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Connettendosi da questa finestra di dialogo, l'host\nverrà aggiunto al menu Connessioni/Segnalibri ICS. Modificare il\nfile ~/.eboard/eboard.conf per cambiare o eliminare le voci. L293 328 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Solo le linee che soddisfino il criterio di ricerca\nappariranno in console. I criteri possono essere combinati in OR\ncon il carattere | (pipe). Un asterisco (*) soddisfa\nuna qualsiasi sequenza.\nExempi:\n'(20)|(22)' mostra le linee dei canali 20 e 22\n'blik * annoiato' mostra le linee che contengono 'blik '(...)' annoiato'. L14 21 Opponent Moved L'avversario ha mosso L7 7 Options Opzioni L11 16 PGN Headers Intestazioni PGN L13 9 PGN filename: File PGN: L14 21 Partner Tells: Messaggi al compagno: L10 10 Pawn %d Pedone %d L11 15 Pitch (Hz): Frequenza (Hz): L4 5 Play Gioca L56 64 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Gioca %s come %s contro %s (%s, prof. max. %d, pensa sempre: %s) L58 62 Play WAV (need Device and Filename, sox must be installed) Suona WAV (richiede device e file, sox deve essere installato) L19 19 Play against Crafty Gioca contro Crafty L19 19 Play against Engine Gioca contro motore L24 24 Play against GNU Chess 4 Gioca contro GNU Chess 4 L18 18 Play against Sjeng Gioca contro Sjeng L6 9 Player Giocatore L14 22 Player resigns Il giocatore abbandona L22 50 Player/Color Name Font Tipo di carattere per il nome del giocatore/colore L14 17 Pos: %s vs. %s Pos: %s contro %s L11 7 Preferences Opzioni L54 69 Press the button to be used for going to the next tab. Premere il pulsante da utilizzare per passare alla scheda successiva. L58 69 Press the button to be used for going to the previous tab. Premere il pulsante da utilizzare per passare alla scheda precedente. L51 59 Press the button to be used for selecting a square. Premere il pulsante da utilizzare per selezionare una casa. L12 17 Private Tell Messaggio privato L13 16 Private Tells Messaggi privati L23 30 Program exited too soon Programma uscito troppo presto L8 9 Progress Progresso L17 14 Promotion Piece Promozione a: L7 8 Propose Proporre L12 16 Propose Game Proporre partita L8 10 Protocol Protocollo L33 37 Protocol mismatch, disconnecting. Errore di protocollo, disconnessione. L10 9 Queen %d Donna %d L5 8 Rated Valutata L6 9 Rating Punteggio L12 23 Rating Range Intervallo di punteggio L24 32 Read error from program. Errore di lettura dal programma. L33 39 Received a game proposal from %s. Ricevuta una proposta di partita da %s. L12 11 Recent Hosts Ultimi host L12 14 Refresh List Aggiorna lista L19 30 Replied to seek #%d Risposto alla richiesta num.%d L9 12 Resigned. Abbandonato. L6 9 Result Risultato L20 23 Retracted last move. Ultima mossa annullata. L45 50 Retrieve ICS Channel Lists from eboard.sf.net Scaricare la lista dei canali ICS da eboard.sf.net L18 22 Revert to Defaults Ripristina predefiniti L18 22 Revert to defaults Ripristina predefiniti L5 6 Right Destra L10 10 Rook %d Torre %d L3 6 Run Esegui L13 16 Run Engine... Esegui motore... L27 32 Run Program (need Filename) Esegui programma (richiede file) L47 45 Run autofics.pl script after connecting to FICS Esegui autofics.pl dopo la connessione a FICS L17 24 Save Buffer As... Salva buffer con nome... L12 16 Save Game... Salva partita... L11 14 Save as PGN Salva come PGN L10 8 Scratch %d Vuota %d L6 6 Script Script L11 18 Script List Lista degli script L34 41 Scrollback limit (0 = unlimited) : Numero massimo di righe (0 = illimitato): L11 13 Search Text Ricerca testo L12 7 Search for: Cerca: L22 18 Search text not found. Testo non trovato. L8 9 Seek Ads Richieste L10 15 Seek Table Lista richieste L15 40 Seek Table Font Tipo di carattere per la lista richieste L10 11 Serial :%s Seriale: %s L10 14 Set Filter Imposta filtro L13 17 Set Filter... Imposta filtro... L49 80 Set depth limit to 0 to use the engine's default. Imposta a 0 il limite di profondità\nper usare i valori predefiniti del motore. L13 18 Setup Buttons Configura pulsanti L21 37 Shortcut Button Setup Configura i pulsanti di scelta rapida L6 5 Shouts Shout L42 36 Show channel tells in one pane per channel Mostra i canali in finestre distinte L63 87 Show channel tells on console too (when above option is active) Mostra le conversazioni in canale anche in console (quando l'opzione sopra è attivata) L31 49 Show rating next to player name Mostra il punteggio accanto al nome del giocatore L33 35 Show shortcut buttons below board Mostra pulsanti sotto la scacchiera L11 14 Side & Time Colore e tempo L14 17 Side Selection Scelta del colore L14 10 Side to move: Mossa al: L22 36 Smooth joystick cursor Rendi fluido il cursore del joystick L29 42 Smooth joystick cursor speed: Velocità del cursore fluido del joystick: L34 39 Smoother animation (eats more CPU) Animazione avanzata (richiede più CPU) L76 84 Sorry, this protocol does not allow to retract a move thru this menu option. Spiacente, questo protocollo non permette di annullare una mossa con questa opzione. L11 13 Sound Event Evento sonoro L12 13 Sound Events Eventi sonori L6 5 Sounds Suoni L54 53 Source code available at http://eboard.sourceforge.net Sorgenti disponibili su http://eboard.sourceforge.net L9 6 Stalemate Stallo L18 18 Start a connection Inizia connessione L14 15 Starting Time: Tempo iniziale: L7 7 Suicide Suicide L8 9 TCP Port Porta TCP L9 10 TCP Port: Porta TCP: L12 22 Tab Position Posizione delle schede L4 5 Test Prova L52 49 The checkbox on the left enables/disables the sound. La casella a sinistra attiva/disattiva il sonoro. L69 73 The engine will be run with\n/bin/sh -c 'cd directory ; command line' Il motore sarà eseguito come\n/bin/sh -c 'cd directory; riga di comando' L12 12 Think Always Pensa sempre L24 31 Think on opponent's time Pensa sul tempo dell'avversario L4 5 Time Tempo L12 19 Time Control Controllo del tempo L15 22 Time Control... Controllo del tempo... L13 20 Time Control: Controllo del tempo: L16 21 Time Running Out Il tempo sta scadendo L7 7 Timeout Timeout L44 55 Times can be given as hh:mm:ss , mm:ss or ss Il tempo può essere espresso come hh:mm:ss, mm:ss o ss L180 137 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Per eseguire più comandi, separarli con ; (punto e virgola).\nPer eseguire uno script, usare script.nomescript, es. script.mioscript.pl. L3 4 Top Alto L13 13 Trademark :%s Trademark: %s L30 33 Type: Fischer Clock (ICS-like) Tipo: orologio Fischer (come ICS) L25 27 Type: Fixed Time per Move Tipo: tempo fisso per mossa L34 43 Type: Use engine's default setting Tipo: Usa le opzioni predefinite del motore L29 34 Type: X Moves per Time Period Tipo: X mosse per periodo di tempo L26 37 Unable to bind on port %d. Impossibile collegarsi alla porta %d. L24 29 Unable to create socket. Impossibile creare il socket. L44 57 Unable to find the DGT board on port %s: %s. Impossibile trovare la scacchiera DGT sulla porta %s: %s. L13 18 Unknown error Errore sconosciuto L14 21 Unknown result Risultato sconosciuto L23 29 Use plain color squares Colora le case in tinta unita L5 6 Value Valore L6 7 Value: Valore: L7 8 Variant Variante L8 9 Variant: Variante: L24 31 Variant: %s (uneditable) Variante: %s (non modificabile) L4 9 Wait Attendere L21 24 Wait for a connection Attendere la connessione L34 40 Waiting for connection on port %d. Attendere la connessione sulla porta %d. L30 33 Warn when own clock is below: Avvisa quando rimangono meno di: L18 20 Welcome to eboard. Benvenuto in eboard. L5 6 White Bianco L14 15 White: %s - %s Bianco: %s - %s L10 11 Working... In corso... L16 17 Write to Console Scrivi in console L19 30 Wrong address space Spazio di indirizzo non valido L5 7 Wrote Scritto L3 3 Yes Sì L49 65 You can only retract when it's your turn to move. È possibile ritirare la mossa solo al momento del proprio turno. L11 7 Your color: Colore: L10 5 Your name: Nome: L6 6 [chat] [chat] L5 5 [cmd] [cmd] L29 33 [eboard] ** $HOME is too long [eboard] ** $HOME è troppo lunga L39 44 [eboard] ** failed to create directory [eboard] ** impossibile creare la directory L20 30 [eboard] ** no $HOME [eboard] ** $HOME non definita L22 29 [eboard] bad RC line\n [eboard] riga RC non valida\n L4 4 beep beep L5 4 beeps beep L5 4 black nero L53 75 can't load PGN move text from %s (error opening file) impossibile caricare le mosse dal file PGN %s (errore di apertura del file) L30 38 can't seek to offset %lu of %s impossibile cercare l'offset %lu di %s L26 27 dgtnix driver version %.1f driver dgtnix versione %.1f L14 18 discards board elimina scacchiera L32 40 eboard Direct Connection Manager Gestore di connessione diretta di eboard L22 23 eboard version %s (%s) eboard versione %s (%s) L343 349 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard versione %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nQuesto programma è software libero; è possibile ridistribuirlo\ne/o modificarlo nei termini della GNU General Public\nLicense come pubblicata dalla Free Software Foundation;\nversione 2 della licenza o (a scelta) qualsiasi versione\npiù recente.\n L19 22 eboard: Console #%d eboard: console num.%d L60 79 engine claimed illegal move but we didn't move, ignoring it. il motore ha segnalato una mossa non legale ma l'utente non ha mosso; ignorare. L22 23 error parsing PGN data errore lettura dati PGN L11 16 flips board ruota scacchiera L4 7 game partita L5 7 games partite L17 18 generic xboard v2 xboard generico v2 L20 25 goes back 1 halfmove indietro di una semimossa L26 22 goes back to start of game torna a inizio partita L23 23 goes forward 1 halfmove avanti di una semimossa L27 17 goes forward to end of game va a fine partita L13 17 illegal move! mossa non legale! L11 8 in progress in corso L29 32 initial time %s, increment %s tempo iniziale %s, incremento %s L8 8 moves in mosse in L2 2 no no L14 21 no such game: partita inesistente: L19 25 no time control set nessun controllo di tempo L4 5 none nulla L7 6 nothing niente L37 42 opens new scratch board with position apre nuova scacchiera con questa posizione L8 9 per move per mossa L18 15 plain console beep beep di console L12 13 play file %s suona file %s L21 27 pops up the move list mostra la lista delle mosse L24 31 process creation failed. creazione del processo fallita. L5 8 rated valutata L6 9 run %s esegui %s L10 16 running %s %s in esecuzione L18 19 savePGN failed: %s savePGN fallito: %s L54 68 savePGN failed: Won't save game with less than 2 moves savePGN fallito: impossibile salvare una partita con meno di 2 mosse L8 8 seconds. secondi. L7 12 unrated non valutata L7 14 untimed senza orologio L5 6 white bianco L3 3 yes sì E 524 eboard-1.1.1.orig/multilang/eboard.hemp0000644000175000017500000006724610757567572017422 0ustar patrikpatrik# (2) msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr "" # (1) msgid " Browse... " msgstr "" # (1) msgid " Remove Field " msgstr "" # (1) msgid " Set " msgstr "" # (1) msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" # (1) msgid "%d %s to %s, %d Hz for %d msec" msgstr "" # (1) msgid "%d games read" msgstr "" # (2) msgid "%d moves in %s" msgstr "" # (1) msgid "%d. Connect to %s:%d (%s)" msgstr "" # (1) msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "" # (1) msgid "%s accepted your game proposal." msgstr "" # (1) msgid "%s engine started." msgstr "" # (2) msgid "%s offers a draw." msgstr "" # (1) msgid "%s per move" msgstr "" # (1) msgid "%s/move" msgstr "" # (1) msgid "(Wrapped) Match Found at Line %d." msgstr "" # (1) msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "" # (1) msgid "(message obfuscated -- password mode ?)" msgstr "" # (2) msgid "(no bookmarks)" msgstr "" # (2) msgid "(none)" msgstr "" # (1) msgid "(time period)" msgstr "" # (1) msgid "* game not found: " msgstr "" # (1) msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "" # (1) msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "" # (1) msgid "--- %s game to PGN file %s" msgstr "" # (1) msgid "--- Disconnected" msgstr "" # (1) msgid "/Game/Ad_journ" msgstr "" # (1) msgid "/Game/Retract _Move" msgstr "" # (1) msgid "/Game/_Abort" msgstr "" # (1) msgid "/Game/_Offer Draw" msgstr "" # (1) msgid "/Game/_Resign" msgstr "" # (1) msgid "/Help/_About eboard..." msgstr "" # (1) msgid "/Help/_Debug Info" msgstr "" # (1) msgid "/Help/_Getting Started" msgstr "" # (1) msgid "/Help/_Keys" msgstr "" # (1) msgid "/Help/sep4" msgstr "" # (1) msgid "/Peer/Connect to _FICS" msgstr "" # (1) msgid "/Peer/Direct connect with _Remote eboard..." msgstr "" # (1) msgid "/Peer/Engine B_ookmarks" msgstr "" # (1) msgid "/Peer/ICS _Bookmarks" msgstr "" # (1) msgid "/Peer/Play against Engine/Cr_afty..." msgstr "" # (1) msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "" # (1) msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "" # (1) msgid "/Peer/Play against Engine/_Sjeng..." msgstr "" # (1) msgid "/Peer/Play against Engine/sep1" msgstr "" # (1) msgid "/Peer/Play against _Engine" msgstr "" # (1) msgid "/Peer/_Connect to Other Server..." msgstr "" # (1) msgid "/Peer/_Disconnect" msgstr "" # (1) msgid "/Peer/_Empty Scratch Board" msgstr "" # (1) msgid "/Peer/_Quit" msgstr "" # (1) msgid "/Peer/_Scratch Board with Initial Position" msgstr "" # (1) msgid "/Peer/sep2" msgstr "" # (2) msgid "/Peer/sep3" msgstr "" # (1) msgid "/Peer/sep4" msgstr "" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "" # (1) msgid "/Settings/Bitmapped Piece _Sets" msgstr "" # (1) msgid "/Settings/Enable Legality _Checking" msgstr "" # (1) msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "" # (1) msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "" # (1) msgid "/Settings/Pre_move" msgstr "" # (1) msgid "/Settings/Sho_w Coordinates" msgstr "" # (1) msgid "/Settings/_Animate Moves" msgstr "" # (1) msgid "/Settings/_Beep on Opponent Moves" msgstr "" # (1) msgid "/Settings/_Enable Other Sounds" msgstr "" # (1) msgid "/Settings/_Highlight Last Move" msgstr "" # (1) msgid "/Settings/_ICS Behavior" msgstr "" # (1) msgid "/Settings/_Preferences..." msgstr "" # (1) msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "" # (5) msgid "/Settings/sep3" msgstr "" # (1) msgid "/Windows/Find _Previous" msgstr "" # (1) msgid "/Windows/Games on _Client..." msgstr "" # (1) msgid "/Windows/Save Desktop _Geometry" msgstr "" # (1) msgid "/Windows/Save _Text Buffer..." msgstr "" # (1) msgid "/Windows/_Ads on Server..." msgstr "" # (1) msgid "/Windows/_Detached Console" msgstr "" # (1) msgid "/Windows/_Find Text (upwards)..." msgstr "" # (1) msgid "/Windows/_Games on Server..." msgstr "" # (1) msgid "/Windows/_Run Script..." msgstr "" # (1) msgid "/Windows/sep1" msgstr "" # (1) msgid "/Windows/sep2" msgstr "" # (3) msgid "/Windows/sep3" msgstr "" # (1) msgid "/_Game" msgstr "" # (1) msgid "/_Help" msgstr "" # (1) msgid "/_Peer" msgstr "" # (1) msgid "/_Settings" msgstr "" # (1) msgid "/_Windows" msgstr "" # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" # (1) msgid " abort request sent" msgstr "" # (1) msgid " adjourn request sent" msgstr "" # (1) msgid " draw request sent" msgstr "" # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" # (2) msgid " ** bad pattern string: " msgstr "" # (2) msgid " ** file not found: " msgstr "" # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" # (1) msgid " Adjourning not supported" msgstr "" # (1) msgid " Incompatible Engine Protocol" msgstr "" # (1) msgid " Session Aborted" msgstr "" # (1) msgid " draw request sent" msgstr "" # (1) msgid "" msgstr "" # (1) msgid "> (password sent)" msgstr "" # (2) msgid "> [issued from menu] %s" msgstr "" # (1) msgid "> [issued from shortcut] " msgstr "" # (1) msgid "> [script run from shortcut] %s" msgstr "" # (1) msgid "About eboard" msgstr "" # (1) msgid "Accept" msgstr "" # (1) msgid "Accepted incoming connection from %s" msgstr "" # (1) msgid "Ad Description" msgstr "" # (2) msgid "Ad List" msgstr "" # (1) msgid "Ad List (refreshing...)" msgstr "" # (1) msgid "Add to Peer/Engine Bookmarks menu" msgstr "" # (1) msgid "Address already in use" msgstr "" # (1) msgid "Ads" msgstr "" # (1) msgid "Already connected ?!?" msgstr "" # (1) msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" # (1) msgid "Appearance" msgstr "" # (1) msgid "Appended" msgstr "" # (1) msgid "Apply" msgstr "" # (1) msgid "Apply Changes" msgstr "" # (1) msgid "Auto-save observed games" msgstr "" # (1) msgid "Auto-save played games" msgstr "" # (1) msgid "Autosave" msgstr "" # (1) msgid "Axis & Buttons" msgstr "" # (1) msgid "Background" msgstr "" # (1) msgid "Bad descriptor" msgstr "" # (1) msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "" # (1) msgid "Bishop %d" msgstr "" # (5) msgid "Black" msgstr "" # (1) msgid "Black: %s - %s" msgstr "" # (1) msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" # (1) msgid "Board version :%s" msgstr "" # (1) msgid "Bookmark Caption:" msgstr "" # (1) msgid "Bottom" msgstr "" # (1) msgid "Bright Text" msgstr "" # (1) msgid "Browse" msgstr "" # (1) msgid "Buffer Save failed." msgstr "" # (1) msgid "Bughouse" msgstr "" # (2) msgid "Bughouse: Partner Game" msgstr "" # (1) msgid "Bus address :%s" msgstr "" # (1) msgid "Button Caption" msgstr "" # (1) msgid "Button Icon" msgstr "" # (9) msgid "Cancel" msgstr "" # (1) msgid "Cancel Joystick Configuration" msgstr "" # (1) msgid "Cancelled connection wait." msgstr "" # (1) msgid "Change..." msgstr "" # (2) msgid "Channel Tells" msgstr "" # (2) msgid "Checkmate" msgstr "" # (1) msgid "Chess Programs" msgstr "" # (1) msgid "Choose Font" msgstr "" # (5) msgid "Choose..." msgstr "" # (1) msgid "Clock Font" msgstr "" # (7) msgid "Close" msgstr "" # (1) msgid "Color Selection" msgstr "" # (1) msgid "Colors" msgstr "" # (1) msgid "Command" msgstr "" # (1) msgid "Command Line:" msgstr "" # (1) msgid "Computer" msgstr "" # (1) msgid "Computer White vs. Human Black" msgstr "" # (3) msgid "Configure Axis & Buttons" msgstr "" # (1) msgid "Configured Sound Files:" msgstr "" # (2) msgid "Connect" msgstr "" # (1) msgid "Connect to ICS Server" msgstr "" # (2) msgid "Connected to %s (%s)" msgstr "" # (2) msgid "Connecting to %s..." msgstr "" # (1) msgid "Connection refused" msgstr "" # (1) msgid "Connection to %s:%d failed: " msgstr "" # (3) msgid "Console" msgstr "" # (1) msgid "Console Beep" msgstr "" # (1) msgid "Console Font" msgstr "" # (1) msgid "Console buffer saved." msgstr "" # (1) msgid "Count:" msgstr "" # (1) msgid "Crazyhouse" msgstr "" # (1) msgid "DGT board found on port %s." msgstr "" # (1) msgid "DGT support error: wrong page" msgstr "" # (1) msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "" # (1) msgid "DGT: unrecognized code: %c (%d)" msgstr "" # (1) msgid "Dark Squares..." msgstr "" # (1) msgid "Delete All Entries" msgstr "" # (1) msgid "Delete This Entry" msgstr "" # (1) msgid "Depth Limit:" msgstr "" # (1) msgid "Description" msgstr "" # (1) msgid "Device:" msgstr "" # (1) msgid "Directory to run from (e.g., where book files are)" msgstr "" # (1) msgid "Directory:" msgstr "" # (1) msgid "Discard All" msgstr "" # (1) msgid "Discard Game" msgstr "" # (1) msgid "Dismiss" msgstr "" # (1) msgid "Display Game" msgstr "" # (1) msgid "Displayed" msgstr "" # (1) msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" # (1) msgid "Draw Offered" msgstr "" # (1) msgid "Draw offer sent." msgstr "" # (2) msgid "Drawn by agreement" msgstr "" # (1) msgid "Drop Piece:" msgstr "" # (1) msgid "Duration (msec):" msgstr "" # (1) msgid "Dynamic Seek Graph" msgstr "" # (1) msgid "Edit Bookmarks..." msgstr "" # (1) msgid "Edit Engine Bookmarks" msgstr "" # (1) msgid "Edit Game Info" msgstr "" # (1) msgid "Edit Time Control" msgstr "" # (1) msgid "Empty" msgstr "" # (1) msgid "Engine Bookmarks" msgstr "" # (1) msgid "Engine Command" msgstr "" # (2) msgid "Engine Type:" msgstr "" # (1) msgid "Engine Type: %s (uneditable)" msgstr "" # (1) msgid "Engine asked more time to startup, waiting." msgstr "" # (1) msgid "Engine command line" msgstr "" # (1) msgid "Engine loaded." msgstr "" # (1) msgid "Engine running" msgstr "" # (1) msgid "Engine started (2 sec timeout)" msgstr "" # (1) msgid "Enter FEN Position" msgstr "" # (1) msgid "Event Type" msgstr "" # (1) msgid "Exam.Game #%d" msgstr "" # (1) msgid "Failed command line:" msgstr "" # (2) msgid "Failed to run engine." msgstr "" # (1) msgid "Failed to run helper program" msgstr "" # (1) msgid "File to play / Program to run:" msgstr "" # (4) msgid "Filter: " msgstr "" # (1) msgid "Filter: (none)" msgstr "" # (1) msgid "Finish the current connection first." msgstr "" # (1) msgid "Finish the current game first." msgstr "" # (1) msgid "Fonts" msgstr "" # (1) msgid "From Elsewhere (%d %s)" msgstr "" # (1) msgid "From Engines (%d %s)" msgstr "" # (1) msgid "From FEN" msgstr "" # (1) msgid "From ICS (%d %s)" msgstr "" # (1) msgid "From PGN Files (%d %s)" msgstr "" # (1) msgid "Game #" msgstr "" # (2) msgid "Game #%d" msgstr "" # (1) msgid "Game #%d - %s" msgstr "" # (1) msgid "Game #%d - %s - %s" msgstr "" # (1) msgid "Game #%d - %s vs. %s" msgstr "" # (1) msgid "Game #%d: %s" msgstr "" # (2) msgid "Game Aborted" msgstr "" # (1) msgid "Game Description" msgstr "" # (1) msgid "Game Information Font" msgstr "" # (2) msgid "Game List" msgstr "" # (1) msgid "Game List (refreshing...)" msgstr "" # (1) msgid "Game Lost" msgstr "" # (1) msgid "Game Started" msgstr "" # (1) msgid "Game Won" msgstr "" # (4) msgid "Game appended to %s" msgstr "" # (1) msgid "Game in progress." msgstr "" # (1) msgid "Game over: %s" msgstr "" # (1) msgid "Game proposal sent." msgstr "" # (2) msgid "Game started!" msgstr "" # (1) msgid "Game/Board: " msgstr "" # (1) msgid "Games" msgstr "" # (1) msgid "Generic XBoard Engine..." msgstr "" # (1) msgid "Giveaway" msgstr "" # (1) msgid "Graphic representation of crazy/bughouse stock" msgstr "" # (1) msgid "Help: Debug Info" msgstr "" # (1) msgid "Help: Getting Started " msgstr "" # (1) msgid "Help: Keys" msgstr "" # (1) msgid "Helper program not found" msgstr "" # (1) msgid "Hide!" msgstr "" # (2) msgid "Host not found: %s" msgstr "" # (1) msgid "Hostname" msgstr "" # (1) msgid "Hostname or IP address:" msgstr "" # (1) msgid "Human" msgstr "" # (1) msgid "Human White vs. Computer Black" msgstr "" # (1) msgid "Human plays white" msgstr "" # (1) msgid "ICS Challenge" msgstr "" # (1) msgid "IPC pipe creation failed." msgstr "" # (1) msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" # (1) msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "" # (1) msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "" # (1) msgid "Illegal move, not sent." msgstr "" # (1) msgid "Increment (secs):" msgstr "" # (1) msgid "Increment:" msgstr "" # (1) msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # (1) msgid "Initial Position" msgstr "" # (1) msgid "Initial time ([mm:]ss):" msgstr "" # (1) msgid "Initializing engine" msgstr "" # (1) msgid "Joystick" msgstr "" # (1) msgid "Key" msgstr "" # (1) msgid "Key:" msgstr "" # (1) msgid "Kibitzes/Whispers" msgstr "" # (1) msgid "Kill" msgstr "" # (1) msgid "Knight %d" msgstr "" # (1) msgid "Last Proposal Received" msgstr "" # (1) msgid "Left" msgstr "" # (1) msgid "Left click to play, right click to refresh." msgstr "" # (1) msgid "Light Squares..." msgstr "" # (1) msgid "Load PGN" msgstr "" # (1) msgid "Load PGN..." msgstr "" # (1) msgid "Local" msgstr "" # (1) msgid "Local Game List" msgstr "" # (2) msgid "Looking up host %s..." msgstr "" # (1) msgid "Losers" msgstr "" # (1) msgid "Main Board" msgstr "" # (1) msgid "Mamer and TDs" msgstr "" # (1) msgid "Match Found at Line %d." msgstr "" # (1) msgid "Match Pattern: " msgstr "" # (1) msgid "Material: %d - %d" msgstr "" # (1) msgid "Max Ply:" msgstr "" # (1) msgid "Move made (Obs'vd/Exm'd Games)" msgstr "" # (1) msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # (1) msgid "Move the axis to be used for selecting pieces." msgstr "" # (1) msgid "Moves" msgstr "" # (1) msgid "Network is unreachable" msgstr "" # (1) msgid "News/Notifications" msgstr "" # (1) msgid "No" msgstr "" # (3) msgid "No error." msgstr "" # (2) msgid "No material to mate" msgstr "" # (1) msgid "No output from program." msgstr "" # (1) msgid "No peer." msgstr "" # (1) msgid "No previous search." msgstr "" # (1) msgid "No proposals left." msgstr "" # (1) msgid "No proposals received." msgstr "" # (1) msgid "Non-ASCII Character Filtering" msgstr "" # (5) msgid "None" msgstr "" # (1) msgid "Normal Chess" msgstr "" # (1) msgid "Normal Text" msgstr "" # (1) msgid "Not a socket ?!?" msgstr "" # (2) msgid "OK" msgstr "" # (1) msgid "Obs'vd Game Ended" msgstr "" # (1) msgid "Observe" msgstr "" # (5) msgid "Ok" msgstr "" # (1) msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" # (1) msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" # (1) msgid "Opponent Moved" msgstr "" # (1) msgid "Options" msgstr "" # (1) msgid "PGN Headers" msgstr "" # (1) msgid "PGN filename:" msgstr "" # (1) msgid "Partner Tells:" msgstr "" # (1) msgid "Pawn %d" msgstr "" # (1) msgid "Pitch (Hz):" msgstr "" # (1) msgid "Play" msgstr "" # (1) msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "" # (1) msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "" # (1) msgid "Play against Crafty" msgstr "" # (1) msgid "Play against Engine" msgstr "" # (1) msgid "Play against GNU Chess 4" msgstr "" # (1) msgid "Play against Sjeng" msgstr "" # (2) msgid "Player resigns" msgstr "" # (1) msgid "Player/Color Name Font" msgstr "" # (1) msgid "Pos: %s vs. %s" msgstr "" # (1) msgid "Preferences" msgstr "" # (1) msgid "Press the button to be used for going to the next tab." msgstr "" # (1) msgid "Press the button to be used for going to the previous tab." msgstr "" # (1) msgid "Press the button to be used for selecting a square." msgstr "" # (1) msgid "Private Tell" msgstr "" # (1) msgid "Private Tells" msgstr "" # (1) msgid "Program exited too soon" msgstr "" # (1) msgid "Progress" msgstr "" # (1) msgid "Promotion Piece " msgstr "" # (1) msgid "Propose" msgstr "" # (1) msgid "Propose Game" msgstr "" # (1) msgid "Protocol" msgstr "" # (2) msgid "Protocol mismatch, disconnecting." msgstr "" # (1) msgid "Queen %d" msgstr "" # (1) msgid "Read error from program." msgstr "" # (1) msgid "Received a game proposal from %s." msgstr "" # (1) msgid "Recent Hosts" msgstr "" # (4) msgid "Refresh List" msgstr "" # (1) msgid "Replied to seek #%d" msgstr "" # (2) msgid "Resigned." msgstr "" # (1) msgid "Result" msgstr "" # (1) msgid "Retracted last move." msgstr "" # (1) msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "" # (1) msgid "Revert to Defaults" msgstr "" # (1) msgid "Revert to defaults" msgstr "" # (1) msgid "Right" msgstr "" # (1) msgid "Rook %d" msgstr "" # (1) msgid "Run" msgstr "" # (1) msgid "Run Engine..." msgstr "" # (1) msgid "Run Program (need Filename)" msgstr "" # (1) msgid "Run autofics.pl script after connecting to FICS" msgstr "" # (1) msgid "Save Buffer As..." msgstr "" # (1) msgid "Save Game..." msgstr "" # (1) msgid "Save as PGN" msgstr "" # (2) msgid "Scratch %d" msgstr "" # (1) msgid "Script" msgstr "" # (1) msgid "Script List" msgstr "" # (1) msgid "Scrollback limit (0 = unlimited) :" msgstr "" # (1) msgid "Search text not found." msgstr "" # (1) msgid "Seek Ads" msgstr "" # (2) msgid "Seek Graph" msgstr "" # (1) msgid "Seek Graph Font" msgstr "" # (1) msgid "Serial :%s" msgstr "" # (1) msgid "Set Filter" msgstr "" # (1) msgid "Set Filter..." msgstr "" # (1) msgid "Set depth limit to 0 to use the engine's default." msgstr "" # (1) msgid "Setup Buttons" msgstr "" # (1) msgid "Shortcut Button Setup" msgstr "" # (1) msgid "Shouts" msgstr "" # (1) msgid "Show channel tells in one pane per channel" msgstr "" # (1) msgid "Show channel tells on console too (when above option is active)" msgstr "" # (1) msgid "Show rating next to player name" msgstr "" # (1) msgid "Show shortcut buttons below board" msgstr "" # (1) msgid "Show timestamps for text lines" msgstr "" # (1) msgid "Side & Time" msgstr "" # (1) msgid "Side Selection" msgstr "" # (2) msgid "Side to move: " msgstr "" # (1) msgid "Smooth joystick cursor" msgstr "" # (1) msgid "Smooth joystick cursor speed:" msgstr "" # (1) msgid "Smoother animation (eats more CPU)" msgstr "" # (1) msgid "Soft translate" msgstr "" # (1) msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" # (1) msgid "Sound Event" msgstr "" # (1) msgid "Sound Events" msgstr "" # (1) msgid "Sounds" msgstr "" # (1) msgid "Source code available at http://eboard.sourceforge.net" msgstr "" # (2) msgid "Stalemate" msgstr "" # (1) msgid "Start a connection" msgstr "" # (1) msgid "Starting Time:" msgstr "" # (1) msgid "Suicide" msgstr "" # (1) msgid "TCP Port" msgstr "" # (2) msgid "TCP Port:" msgstr "" # (1) msgid "Tab Position" msgstr "" # (1) msgid "Test" msgstr "" # (1) msgid "The checkbox on the left enables/disables the sound." msgstr "" # (1) msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "" # (1) msgid "Think Always" msgstr "" # (1) msgid "Think on opponent's time" msgstr "" # (1) msgid "Time Control" msgstr "" # (1) msgid "Time Control..." msgstr "" # (1) msgid "Time Control:" msgstr "" # (1) msgid "Time Running Out" msgstr "" # (1) msgid "Timeout" msgstr "" # (1) msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "" # (1) msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" # (1) msgid "Top" msgstr "" # (1) msgid "Trademark :%s" msgstr "" # (1) msgid "Truncate" msgstr "" # (1) msgid "Type: Fischer Clock (ICS-like)" msgstr "" # (1) msgid "Type: Fixed Time per Move" msgstr "" # (1) msgid "Type: Use engine's default setting" msgstr "" # (1) msgid "Type: X Moves per Time Period" msgstr "" # (1) msgid "Unable to bind on port %d." msgstr "" # (1) msgid "Unable to create socket." msgstr "" # (1) msgid "Unable to find the DGT board on port %s." msgstr "" # (1) msgid "Unable to load dgtnix library symbol.\n" msgstr "" # (1) msgid "Unable to load dgtnix library.\n" msgstr "" # (1) msgid "Unknown error" msgstr "" # (1) msgid "Unknown result" msgstr "" # (1) msgid "Use plain color squares" msgstr "" # (1) msgid "Use underscores" msgstr "" # (1) msgid "Value" msgstr "" # (1) msgid "Value:" msgstr "" # (3) msgid "Variant" msgstr "" # (2) msgid "Variant:" msgstr "" # (1) msgid "Variant: %s (uneditable)" msgstr "" # (1) msgid "Wait" msgstr "" # (1) msgid "Wait for a connection" msgstr "" # (1) msgid "Waiting for connection on port %d." msgstr "" # (1) msgid "Warn when own clock is below: " msgstr "" # (1) msgid "Welcome to eboard." msgstr "" # (5) msgid "White" msgstr "" # (1) msgid "White: %s - %s" msgstr "" # (1) msgid "Working..." msgstr "" # (1) msgid "Write to Console" msgstr "" # (1) msgid "Wrong address space" msgstr "" # (1) msgid "Wrote" msgstr "" # (1) msgid "Yes" msgstr "" # (1) msgid "You can only retract when it's your turn to move." msgstr "" # (1) msgid "Your color:" msgstr "" # (1) msgid "Your name:" msgstr "" # (1) msgid "[chat]" msgstr "" # (2) msgid "[cmd]" msgstr "" # (1) msgid "[eboard] ** $HOME is too long" msgstr "" # (1) msgid "[eboard] ** failed to create directory " msgstr "" # (1) msgid "[eboard] ** no $HOME" msgstr "" # (1) msgid "[eboard] bad RC line\n" msgstr "" # (1) msgid "[find]" msgstr "" # (1) msgid "beep" msgstr "" # (1) msgid "beeps" msgstr "" # (1) msgid "black" msgstr "" # (1) msgid "can't load PGN move text from %s (error opening file)" msgstr "" # (1) msgid "can't seek to offset %lu of %s" msgstr "" # (1) msgid "dgtnix driver version: %s" msgstr "" # (1) msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # (1) msgid "discards board" msgstr "" # (1) msgid "eboard Direct Connection Manager" msgstr "" # (1) msgid "eboard version %s (%s)" msgstr "" # (1) msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" # (1) msgid "eboard: Console #%d" msgstr "" # (1) msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "" # (1) msgid "error parsing PGN data" msgstr "" # (1) msgid "flips board" msgstr "" # (5) msgid "game" msgstr "" # (5) msgid "games" msgstr "" # (1) msgid "generic xboard v2" msgstr "" # (1) msgid "goes back 1 halfmove" msgstr "" # (1) msgid "goes back to start of game" msgstr "" # (1) msgid "goes forward 1 halfmove" msgstr "" # (1) msgid "goes forward to end of game" msgstr "" # (1) msgid "illegal move!" msgstr "" # (1) msgid "in progress" msgstr "" # (1) msgid "initial time %s, increment %s" msgstr "" # (1) msgid "moves in" msgstr "" # (1) msgid "no" msgstr "" # (2) msgid "no such game: " msgstr "" # (1) msgid "no time control set" msgstr "" # (2) msgid "none" msgstr "" # (1) msgid "nothing" msgstr "" # (1) msgid "opens new scratch board with position" msgstr "" # (1) msgid "per move" msgstr "" # (1) msgid "plain console beep" msgstr "" # (1) msgid "play file %s" msgstr "" # (1) msgid "pops up the move list" msgstr "" # (1) msgid "process creation failed." msgstr "" # (2) msgid "rated" msgstr "" # (1) msgid "run %s" msgstr "" # (1) msgid "running %s" msgstr "" # (1) msgid "savePGN failed: %s" msgstr "" # (1) msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "" # (1) msgid "seconds." msgstr "" # (2) msgid "unrated" msgstr "" # (1) msgid "untimed" msgstr "" # (1) msgid "white" msgstr "" # (1) msgid "yes" msgstr "" eboard-1.1.1.orig/multilang/pocomp.pl0000755000175000017500000000213110757567572017126 0ustar patrikpatrik#!/usr/bin/perl # # ...because it's easier to write my own internationalization # support than understanding gnu gettext and all the incompatibilities # between its versions # my $msgcount = 0; my $id = ""; my $msg = ""; my $state = 0; while($_=<>) { chomp; if ($state == 0) { if (/^msgid\s+\"(.*)\"/) { $id = $1; $msg = ""; $state = 1; next; } next; } if ($state == 1) { if (/^\"(.*)\"/) { $id = "$id$1"; next; } if (/^msgstr\s+\"(.*)\"/) { $msg = $1; $state = 2; next; } next; } if ($state == 2) { if (/^\"(.*)\"/) { $msg = "$msg$1"; next; } $id =~ s/\\"/"/g; $msg =~ s/\\"/"/g; $idlen = length($id); $msglen = length($msg); if ($idlen > 0 && $msglen > 0) { $msgcount++; print "L$idlen $msglen\n"; print "$id\n"; print "$msg\n"; } $state = 0; next; } } if ($state != 0) { $idlen = length($id); $msglen = length($msg); if ($idlen > 0 && $msglen > 0) { $msgcount++; print "L$idlen $msglen\n"; print "$id\n"; print "$msg\n"; } } print "E $msgcount\n"; eboard-1.1.1.orig/multilang/eboard.hu.po0000644000175000017500000012614610757567572017515 0ustar patrikpatrikonzol leka# (2) msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** PNG betöltés sikertelen: kis felbontású saját figurák használata. Rosszabbul fog kinézni." # (1) msgid " Browse... " msgstr " Tallóz... " # (1) msgid " Play Selected " msgstr " Játék a kiválasztottal " # (1) msgid " Refresh " msgstr " Frissít " # (1) msgid " Remove Field " msgstr " MezÅ‘ eltávolítása " # (1) msgid " Set " msgstr " Beállít " # (1) msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#BevezetÅ‘\n" "#M#LehetÅ‘ségek az eboard-ban\n" "\nJáték a számítógép ellen\n" "#S#Az eboard program maga \"nem tud sakkozni\", csak egy grafikus felület, viszont futtatni tud\n" "más sakkprogramokat, úgynevezett \"gépeket\", melyek nem rendelkeznek grafikus felülettel.\n" "Ahhoz, hogy a számítógéppel sakkozz, szükség van egy ilyen programra (gépre).\n" "A GNU Chess, Crafty és Sjeng ilyen ingyenesen elérhetÅ‘ gépek. Ha ezek közül már telepítve\n" "van valamelyik, nyisd meg a #B#Partner#K# menüt, aztán a #B#Gép elleni játék#K# almenüt, és\n" "a gépek közül válaszd azt, amelyik telepítve van a számítógépeden.\n" "\n#M#Játék az Interneten\n" "#S#Az eboard támogatja a FICS protokollt. A FICS a freechess.org szerverén fut, de más\n" "szerverek, mint például a US Chess Live is a FICS szoftverét használják, így szintén működnek\n" "az eboard-dal. Az ICC nem támogatott.\n" "A FICS-hez kapcsolódáshoz nyisd meg a #B#Partner#K# menüt, majd válaszd a \n" "#B#Kapcsolódás a FICS-hez#K# almenüt. Más szerverekhez való kapcsolódáshoz nyisd meg a #B#Partner#K#\n" "menüt, majd válaszd a #B#Kapcsolódás másik szerverhez...#K# almenüt.\n" "Bejelentkezhetsz a FICS-re vendégként is (guest néven), de jobban fogod élvezi azt regisztrált\n" "felhasználóként. Regisztrálni ingyen lehet a FICS honlapján: #B#http://www.freechess.org#K#.\n" "\n#M#PGN játszmák tallózása\n" "#S#A PGN a legelterjedtebb fájlformátum sakkjátszmák tárolására. Ebben megjegyzések is\n" "tárolhatók. Ilyen fájlok megnyitásához válaszd az #B#Ablakok#K# menüt, majd kattints a\n" "#B#Játszmák a kliensen#K# almenüre. A helyi lista ablakban kattints a #B#PGN betöltése...#K#\n" "gombra. Egy játszma megtekintéséhez #B#válaszd ki#K# azt, majd kattints a #B#megjelenít#K# gombra.\n" "Egy új panel jön majd létre a fÅ‘ ablakban a betöltött játszmával.#L#" # (1) msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s to %s, %d Hz %d emp -hez" # (1) msgid "%d games read" msgstr "%d játszma beolvasása" # (2) msgid "%d moves in %s" msgstr "%s lépés %d alatt" # (1) msgid "%d. Connect to %s:%d (%s)" msgstr "" # (1) msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (világos) vs. %s (sötét)\n%s\n%d:%.2d %d" # (1) msgid "%s accepted your game proposal." msgstr "%s elfogadta a játszma ajánlatodat." # (1) msgid "%s engine started." msgstr "%s gép elindítva." # (2) msgid "%s offers a draw." msgstr "%s döntetlent ajánl." # (1) msgid "%s per move" msgstr "%s lépésenként" # (1) msgid "%s/move" msgstr "%s/lépés" # (1) msgid "(Wrapped) Match Found at Line %d." msgstr "(Wrapped) egyezés a %d sorban." # (1) msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (FICS név: Pulga)" # (1) msgid "(message obfuscated -- password mode ?)" msgstr "(összezavart üzenet -- jelszó mód ?)" # (2) msgid "(no bookmarks)" msgstr "(nincs könyvjelzÅ‘)" # (2) msgid "(none)" msgstr "(üres)" # (1) msgid "(time period)" msgstr "(idÅ‘tartam)" # (1) msgid "* game not found: " msgstr "* játszma nem található: " # (1) msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] hibás gép protocol # a könyvjelzÅ‘ben: " # (1) msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** figyelmeztetés: a HOME környezeti változó nincs beállítva\n" # (1) msgid "--- %s game to PGN file %s" msgstr "--- %s játszma a %s PGN fájlba" # (1) msgid "--- Disconnected" msgstr "--- Kapcsolat megszakítva" # (1) msgid "/Game/Ad_journ" msgstr "/Játszma/_Elhalaszt" # (1) msgid "/Game/Retract _Move" msgstr "/Játszma/Lépést _visszavon" # (1) msgid "/Game/_Abort" msgstr "/Játszma/_Megszakít" # (1) msgid "/Game/_Offer Draw" msgstr "/Játszma/_Döntetlent ajánl" # (1) msgid "/Game/_Resign" msgstr "/Játszma/_Felad" # (1) msgid "/Help/_About eboard..." msgstr "/Súgó/_Névjegy" # (1) msgid "/Help/_Debug Info" msgstr "/Súgó/_Információk hibakereséshez" # (1) msgid "/Help/_Getting Started" msgstr "/Súgó/_BevezetÅ‘" # (1) msgid "/Help/_Keys" msgstr "/Súgó/_Gyorsbillentyűk" # (1) msgid "/Help/sep4" msgstr "/Súgó/sep4" # (1) msgid "/Peer/Connect to _FICS" msgstr "/Partner/Kapcsolódás a _FICS-hez" # (1) msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Partner/Közvetlen kapcsolódás _távoli eboard-hoz" # (1) msgid "/Peer/Engine B_ookmarks" msgstr "/Partner/Gép könyv_jelzÅ‘k" # (1) msgid "/Peer/ICS _Bookmarks" msgstr "/Partner/ICS _könyvjelzÅ‘k" # (1) msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Partner/Gép elleni játék/_Crafty..." # (1) msgid "/Peer/Play against Engine/GNU Chess..." msgstr "/Partner/Gép elleni játék/_GNU Chess..." # (1) msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Partner/Gép elleni játék/_Ãltalános gép" # (1) msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Partner/Gép elleni játék/_Sjeng..." # (1) msgid "/Peer/Play against Engine/sep1" msgstr "/Partner/Gép elleni játék/sep1" # (1) msgid "/Peer/Play against _Engine" msgstr "/Partner/_Gép elleni játék" # (1) msgid "/Peer/_Connect to Other Server..." msgstr "/Partner/Kapcsolódás másik szerverhez..." # (1) msgid "/Peer/_Disconnect" msgstr "/Partner/Kapcsolat _vége" # (1) msgid "/Peer/_Empty Scratch Board" msgstr "/Partner/Ãllás felállítása _üres táblán" # (1) msgid "/Peer/_Quit" msgstr "/Partner/_Kilépés" # (1) msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Partner/Ãllás felállítása _alapállással" # (1) msgid "/Peer/sep2" msgstr "/Partner/sep2" # (2) msgid "/Peer/sep3" msgstr "/Partner/sep3" # (1) msgid "/Peer/sep4" msgstr "/Partner/sep4" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Beállítások/Bittérképes készlet/Csak _figurák betöltése" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Beállítások/Bittérképes készlet/Csak _tábla betöltése" # (1) msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Beállítások/Bittérképes készlet/_Téma betöltése" # (1) msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Beállítások/Bittérképes készlet" # (1) msgid "/Settings/Enable Legality _Checking" msgstr "/Beállítások/Szabályok _ellenÅ‘rzése" # (1) msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Beállítások/ICS tulajdonságok/Tábla panel _létrehozáskor" # (1) msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Beállítások/ICS tulajdonságok/Vizsgált állások bezárása ha a játszma befejezÅ‘dött" # (1) msgid "/Settings/Pre_move" msgstr "/Beállítások/Lépések _elÅ‘jelzése" # (1) msgid "/Settings/Sho_w Coordinates" msgstr "/Beállítások/_Kordináták mutatása" # (1) msgid "/Settings/_Animate Moves" msgstr "/Beállítások/_Lépések animálása" # (1) msgid "/Settings/_Beep on Opponent Moves" msgstr "/Beállítások/_Csipogás az ellenfél lépésekor" # (1) msgid "/Settings/_Enable Other Sounds" msgstr "/Beállítások/Egyéb hangok _engedélyezése" # (1) msgid "/Settings/_Highlight Last Move" msgstr "/Beállítások/_Utolsó lépés kijelzése" # (1) msgid "/Settings/_ICS Behavior" msgstr "/Beállítások/_ICS tulajdonságok" # (1) msgid "/Settings/_Preferences..." msgstr "/Beállítások/_Beállítások" # (1) msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Beállítások/_Vektorizált figurák (gyorsabb megjelenítés)" # (5) msgid "/Settings/sep3" msgstr "/Beállítások/sep3" # (1) msgid "/Windows/Find _Previous" msgstr "/Ablakok/_ElÅ‘zÅ‘" # (1) msgid "/Windows/Games on _Client..." msgstr "/Ablakok/Játszmák a _helyi gépen..." # (1) msgid "/Windows/Save Desktop _Geometry" msgstr "/Ablakok/_Elrendezés mentése" # (1) msgid "/Windows/Save _Text Buffer..." msgstr "/Ablakok/Szöveges _puffer mentése..." # (1) msgid "/Windows/_Ads on Server..." msgstr "/Ablakok/_Hirdetések a szerveren..." # (1) msgid "/Windows/_Detached Console" msgstr "/Ablakok/Konzol _külön ablakban" # (1) msgid "/Windows/_Find Text (upwards)..." msgstr "/Ablakok/Szöveg keresése (elÅ‘re)" # (1) msgid "/Windows/_Games on Server..." msgstr "/Ablakok/_Játszmák a szerveren..." # (1) msgid "/Windows/_Run Script..." msgstr "/Ablakok/_Szkript futtatása..." # (1) msgid "/Windows/sep1" msgstr "/Ablakok/sep1" # (1) msgid "/Windows/sep2" msgstr "/Ablakok/sep2" # (3) msgid "/Windows/sep3" msgstr "/Ablakok/sep3" # (1) msgid "/_Game" msgstr "/_Játszma" # (1) msgid "/_Help" msgstr "/_Súgó" # (1) msgid "/_Peer" msgstr "/_Partner" # (1) msgid "/_Settings" msgstr "/_Beállítások" # (1) msgid "/_Windows" msgstr "/_Ablakok" # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n" "\n" # (1) msgid " abort request sent" msgstr " elvet üzenet elküldve" # (1) msgid " adjourn request sent" msgstr " elhalaszt üzenet elküldve" # (1) msgid " draw request sent" msgstr " döntetlen üzenet elküldve" # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n" "\n" # (2) msgid " ** bad pattern string: " msgstr " ** hibás minta sztring: " # (2) msgid " ** file not found: " msgstr " ** nincs ilyen fájl: " # (1) msgid " failed to load " msgstr " sikertelen betöltés " # (1) msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Figyelmeztetés: nem lehet a fontot betölteni, ez az ablaknak borzasztóan fog kinézni.\n" # (1) msgid " Adjourning not supported" msgstr " elhalasztás nem támogatott" # (1) msgid " Incompatible Engine Protocol" msgstr " nem kompatibilis gép protokoll" # (1) msgid " Session Aborted" msgstr " menet megszakítva" # (1) msgid " draw request sent" msgstr " döntetlen üzenet elküldve" # (1) msgid "" msgstr "" # (1) msgid "> (password sent)" msgstr "> (jelszó elküldve)" # (2) msgid "> [issued from menu] %s" msgstr "> [menübÅ‘l indítva] %s" # (1) msgid "> [issued from shortcut] " msgstr "> [gyorsbillentyűvel indítva] " # (1) msgid "> [script run from shortcut] %s" msgstr "> [gyorsbillentyűvel indított szkript] %s" # (1) msgid "About eboard" msgstr "Névjegy" # (1) msgid "Accept" msgstr "Elfogad" # (1) msgid "Accepted incoming connection from %s" msgstr "%s BejövÅ‘ kapcsolódási kéreleme elfogadva" # (1) msgid "Ad Description" msgstr "Hirdetés leírása" # (2) msgid "Ad List" msgstr "Hirdetés lista" # (1) msgid "Ad List (refreshing...)" msgstr "Hirdetés lista (frissítés...)" # (1) msgid "Add to Peer/Engine Bookmarks menu" msgstr "Hozzáadás a Partner/Gép menühöz" # (1) msgid "Address already in use" msgstr "A cím már foglalt" # (1) msgid "Ads" msgstr "Hirdetések" # (1) msgid "Already connected ?!?" msgstr "Már csatlakozott ?!?" # (1) msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "Mindenhol érvényes:\n" "F3: ElÅ‘zÅ‘ panel.\n" "F4: KövetkezÅ‘ panel.\n" "F5: FÅ‘ tábla panel.\n" "F6: Konzol panel.\n" "F7: Keresés grafikon panel (ha elérhetÅ‘).\n" "F8: Nyomógombok láthatósága kapcsoló.\n" "Page Up/Page Down: szöveges konzol görgetése\n" "Ctrl+(Balra nyíl): 1 lépés vissza\n" "Ctrl+(Jobbra nyíl): 1 lépés elÅ‘re\n" "Ctrl+F: Keresés elÅ‘re (fÅ‘ konzol puffer)\n" "Ctrl+G: ElÅ‘zÅ‘ keresése\n" "\nBeviteli mezÅ‘ben:\n" "Fel/Le (nyilak): mozgás a beviteli elÅ‘zményekben\n" "Enter: szöveg elküldése\n" "Esc: Cset/Parancs mód kapcsoló\n" "\nSzintaxis:\n" "A fÅ‘ ablak beviteli mezÅ‘jében:\n" ".. %prefix szöveg beállítja a cset prefixet szöveg -re.\n" ".. %do szkriptneve futtatja a szkriptneve szkriptet." # (1) msgid "Appearance" msgstr "Megjelenés" # (1) msgid "Appended" msgstr "Hozzáadva" # (1) msgid "Apply" msgstr "Alkalmaz" # (1) msgid "Apply Changes" msgstr "Változások alkalmazása" # (1) msgid "Auto-save observed games" msgstr "Vizsgált játszmák automatikus mentése" # (1) msgid "Auto-save played games" msgstr "Játszott partik automatikus mentése" # (1) msgid "Autosave" msgstr "Automatikus mentés" # (1) msgid "Axis & Buttons" msgstr "Koordináták és Gombok" # (1) msgid "Background" msgstr "Háttér" # (1) msgid "Bad descriptor" msgstr "Hibás leíró" # (1) msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Csipogás" # (1) msgid "Bishop %d" msgstr "Futó %d" # (5) msgid "Black" msgstr "Sötét" # (1) msgid "Black: %s - %s" msgstr "Sötét: %s - %s" # (1) msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "Tábla kurzor irány: %d\n" "Tábla kiválasztó gomb: %d\n" "Tábla tallózás irány: %d\n" "ElÅ‘zÅ‘ fül gomb: %d\n" "KövetkezÅ‘ fül gomb: %d\n" # (1) msgid "Board version :%s" msgstr "Tábla verzió: %s" # (1) msgid "Bookmark Caption:" msgstr "KönyvjelzÅ‘ szövege:" # (1) msgid "Bottom" msgstr "Alul" # (1) msgid "Bright Text" msgstr "Fényes szöveg" # (1) msgid "Browse" msgstr "Tallóz" # (1) msgid "Buffer Save failed." msgstr "Puffer mentése sikertelen." # (1) msgid "Bughouse" msgstr "Négykezes" # (2) msgid "Bughouse: Partner Game" msgstr "Négykezes: a partner játszmája" # (1) msgid "Bus address :%s" msgstr "Busz cím :%s" # (1) msgid "Button Caption" msgstr "Nyomógomb felirata" # (1) msgid "Button Icon" msgstr "Nyomógomb ikonja" # (10) msgid "Cancel" msgstr "Mégsem" # (1) msgid "Cancel Joystick Configuration" msgstr "Joystick beállítás megszakítása" # (1) msgid "Cancelled connection wait." msgstr "Várakozás megszakítva." # (1) msgid "Change..." msgstr "Változtat..." # (2) msgid "Channel Tells" msgstr "Csatorna mondások" # (2) msgid "Checkmate" msgstr "Matt" # (1) msgid "Chess Programs" msgstr "Sakkprogramok" # (1) msgid "Choose Font" msgstr "Válassz betűkészletet" # (5) msgid "Choose..." msgstr "Választ..." # (1) msgid "Clock Font" msgstr "Óra betűkészlete" # (7) msgid "Close" msgstr "Bezár" # (1) msgid "Color" msgstr "Szín" # (1) msgid "Color Selection" msgstr "Szín kiválasztása" # (1) msgid "Colors" msgstr "Színek" # (1) msgid "Command" msgstr "Parancs" # (1) msgid "Command Line:" msgstr "Parancssor:" # (1) msgid "Computer" msgstr "Számítógép" # (1) msgid "Computer White vs. Human Black" msgstr "Számítógép világos vs. Ember sötét" # (3) msgid "Configure Axis & Buttons" msgstr "Tengelyek és gombok beállítása" # (1) msgid "Configured Sound Files:" msgstr "Hangfájlok beállítása:" # (2) msgid "Connect" msgstr "Csatlakozás" # (1) msgid "Connect to ICS Server" msgstr "Csatlakozás ICS szerverhez" # (2) msgid "Connected to %s (%s)" msgstr "Csatlakozás %s (%s)" # (2) msgid "Connecting to %s..." msgstr "Csatlakozás %s..." # (1) msgid "Connection refused" msgstr "Csatlakozás visszautasítva" # (1) msgid "Connection to %s:%d failed: " msgstr "Csatlakozás ehhez: %s:%d sikertelen: " # (3) msgid "Console" msgstr "Konzol" # (1) msgid "Console Beep" msgstr "Konzol csipogás" # (1) msgid "Console Font" msgstr "Konzol betűkészlete" # (1) msgid "Console buffer saved." msgstr "Konzol puffer elmentve." # (1) msgid "Count:" msgstr "Számláló:" # (1) msgid "Crazyhouse" msgstr "Årültek háza" # (1) msgid "DGT board found on port %s." msgstr "A %s porton DGT táblát találtam." # (1) msgid "DGT support error: wrong page" msgstr "DGT hiba: hibás lap" # (1) msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "DGT figyelmeztetés: nem egyezik a pozíció az eboard és a DGT között." # (1) msgid "DGT: unrecognized code: %c (%d)" msgstr "DGT: ismeretlen kód: %c (%d)" # (1) msgid "Dark Squares..." msgstr "Sötét mezÅ‘k..." # (1) msgid "Delete All Entries" msgstr "Összes bejegyzés törlése" # (1) msgid "Delete This Entry" msgstr "Bejegyzés törlése" # (1) msgid "Depth Limit:" msgstr "Mélység korlát:" # (1) msgid "Description" msgstr "Leírás" # (1) msgid "Device:" msgstr "Eszköz:" # (1) msgid "Directory to run from (e.g., where book files are)" msgstr "Könyvtár, ahonnan futtat (ahol a megnyitástár fájlok vannak)" # (1) msgid "Directory:" msgstr "Könyvtár:" # (1) msgid "Discard All" msgstr "Minden játszma abbahagyása" # (1) msgid "Discard Game" msgstr "Játszma abbahagyása" # (1) msgid "Dismiss" msgstr "Elutasítás" # (1) msgid "Display Game" msgstr "Játszma mutatása" # (1) msgid "Displayed" msgstr "Mutatott" # (1) msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distributed under the terms of the GNU General Public License, version 2 or later" # (1) msgid "Draw Offered" msgstr "Döntetlen ajánlat" # (1) msgid "Draw offer sent." msgstr "Döntetlen ajánlat elküldve" # (2) msgid "Drawn by agreement" msgstr "Döntetlen megegyezéssel" # (1) msgid "Drop Piece:" msgstr "Figura lerakása:" # (1) msgid "Duration (msec):" msgstr "IdÅ‘tartam (msec)" # (1) msgid "Dynamic Seek Table" msgstr "Dinamikus keresési tábla" # (1) msgid "Edit Bookmarks..." msgstr "KönyvjelzÅ‘k szerkesztése..." # (1) msgid "Edit Engine Bookmarks" msgstr "Gép könyvjelzÅ‘k szerkesztése" # (1) msgid "Edit Game Info" msgstr "Játszma információk szerkesztése" # (1) msgid "Edit Time Control" msgstr "IdÅ‘kontrol szerkesztése" # (1) msgid "Empty" msgstr "Üres" # (1) msgid "Engine Bookmarks" msgstr "Gép könyvjelzÅ‘k" # (1) msgid "Engine Command" msgstr "Gép parancs" # (2) msgid "Engine Type:" msgstr "Gép típusa:" # (1) msgid "Engine Type: %s (uneditable)" msgstr "Gép típusa: %s (nem szerkeszthetÅ‘)" # (1) msgid "Engine asked more time to startup, waiting." msgstr "Gép indítása többször kérve, várakozás." # (1) msgid "Engine command line" msgstr "Gép parancssora" # (1) msgid "Engine loaded." msgstr "Gép betöltve." # (1) msgid "Engine running" msgstr "Gép fut" # (1) msgid "Engine started (2 sec timeout)" msgstr "Gép elindítva (2 mp timeout)" # (1) msgid "Enter FEN Position" msgstr "Ãrd be a FEN állást" # (1) msgid "Event Type" msgstr "Esemény típusa" # (1) msgid "Exam.Game #%d" msgstr "#%d játszma végrehajtása" # (1) msgid "Failed to run engine." msgstr "Gép indítása sikertelen." # (1) msgid "Failed to run helper program" msgstr "A segédprogram futtatása sikertelen" # (1) msgid "File to play / Program to run:" msgstr "Lejátszandó fájl / Futtatandó program:" # (4) msgid "Filter: " msgstr "SzűrÅ‘" # (1) msgid "Filter: (none)" msgstr "SzűrÅ‘: (üres)" # (1) msgid "Finish the current connection first." msgstr "ElÅ‘ször az aktuális kapcsolat befejezése." # (1) msgid "Finish the current game first." msgstr "ElÅ‘ször az aktuális játszma befejezése." # (1) msgid "Flags" msgstr "Zászlók" # (1) msgid "Fonts" msgstr "Betűkészletek" # (1) msgid "From Elsewhere (%d %s)" msgstr "Valahonnan (%d %s)" # (1) msgid "From Engines (%d %s)" msgstr "GépekbÅ‘l (%d %s)" # (1) msgid "From FEN" msgstr "FEN-bÅ‘l" # (1) msgid "From ICS (%d %s)" msgstr "ICS-bÅ‘l (%d %s)" # (1) msgid "From PGN Files (%d %s)" msgstr "PGN fájlokból (%d %s)" # (1) msgid "Game #" msgstr "Játszma #" # (2) msgid "Game #%d" msgstr "Játszma #%d" # (1) msgid "Game #%d - %s" msgstr "Játszma #%d - %s" # (1) msgid "Game #%d - %s - %s" msgstr "Játszma #%d - %s %s" # (1) msgid "Game #%d - %s vs. %s" msgstr "Játszma #%d - %s vs. %s" # (1) msgid "Game #%d: %s" msgstr "Játszma #%d: %s" # (2) msgid "Game Aborted" msgstr "Játszma megszakítva" # (1) msgid "Game Description" msgstr "Játszma leírása" # (1) msgid "Game Information Font" msgstr "Játszma információk betűkészlete" # (2) msgid "Game List" msgstr "Játszma lista" # (1) msgid "Game List (refreshing...)" msgstr "Játszma lista (frissítés...)" # (1) msgid "Game Lost" msgstr "Játszma elveszítve" # (1) msgid "Game Started" msgstr "Játszma elkezdve" # (1) msgid "Game Won" msgstr "Játszma megnyerve" # (4) msgid "Game appended to %s" msgstr "Játszma hozzáadva ehhez: %s" # (1) msgid "Game in progress." msgstr "Játszma folyamatban." # (1) msgid "Game over: %s" msgstr "Játszma vége: %s" # (1) msgid "Game proposal sent." msgstr "Játszma javaslat elküldve." # (2) msgid "Game started!" msgstr "A játszma elkezdÅ‘dött." # (1) msgid "Game/Board: " msgstr "Játszma/Ãllás" # (1) msgid "Games" msgstr "Játszmák" # (1) msgid "Generic XBoard Engine..." msgstr "Ãltalános XBoard gép..." # (1) msgid "Giveaway" msgstr "Elárul(?)" # (1) msgid "Graphic representation of crazy/bughouse stock" msgstr "Årültek háza/négykezes grafikus ábrázolása" # (1) msgid "Help: Debug Info" msgstr "Súgó: Információk hibakereséshez" # (1) msgid "Help: Getting Started " msgstr "Súgó: BevezetÅ‘" # (1) msgid "Help: Keys" msgstr "Súgó: Gyorsbillentyűk" # (1) msgid "Hide!" msgstr "Elrejt!" # (2) msgid "Host not found: %s" msgstr "Gépnév nem található: %s" # (1) msgid "Hostname" msgstr "Gépnév" # (1) msgid "Hostname or IP address:" msgstr "Gépnév, vagy IP cím" # (1) msgid "Human" msgstr "Ember" # (1) msgid "Human White vs. Computer Black" msgstr "Ember Világos vs. Számítógép Sötét" # (1) msgid "Human plays white" msgstr "Az ember játszik világossal" # (1) msgid "ICS Challenge" msgstr "ICS kihívás" # (1) msgid "IPC pipe creation failed." msgstr "IPC csÅ‘ létrehozási hiba." # (1) msgid "Id" msgstr "Id" # (1) msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Amikor kiválasztasz egy könyvjelzÅ‘t,\n" "mindíg a gép következik majd lépésre,\n" "függetlenül a könyvjelzÅ‘ben leírtaktól." # (1) msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Szabálytalan lerakás: %c%d (szabályok ellenÅ‘rzése bekapcsolva)" # (1) msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Szabálytalan lépés %c%d%c%d (szabályok ellenÅ‘rzése bekapcsolva)" # (1) msgid "Illegal move, not sent." msgstr "Szabálytalan lépés, nem küldhetÅ‘ el." # (1) msgid "Increment (secs):" msgstr "Növekmény (mp):" # (1) msgid "Increment:" msgstr "Növekmény:" # (1) msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Keresési sorok tiltása amíg a keresési tábla aktív" # (1) msgid "Initial Position" msgstr "Kiinduló állás" # (1) msgid "Initial time ([mm:]ss):" msgstr "KezdÅ‘ idÅ‘ ([perc:]mp):" # (1) msgid "Initializing engine" msgstr "Gép inicializálása" # (1) msgid "Invalid answer to DGT_SEND_BRD on port %s: %s " msgstr "Érvénytelen DGT_SEND_BRD válasz (port %s): %s " # (1) msgid "Joystick" msgstr "Joystick" # (1) msgid "Key" msgstr "Kulcs" # (1) msgid "Key:" msgstr "Kulcs:" # (1) msgid "Kibitzes/Whispers" msgstr "Kibicek/Súgók" # (1) msgid "Kill" msgstr "Megöl" # (1) msgid "Knight %d" msgstr "Huszár:" # (1) msgid "Last Proposal Received" msgstr "Utolsó javaslat elfogadva" # (1) msgid "Left" msgstr "Bal" # (1) msgid "Light Squares..." msgstr "Világos mezÅ‘k..." # (1) msgid "Load PGN" msgstr "PGN betöltése" # (1) msgid "Load PGN..." msgstr "PGN betöltése..." # (1) msgid "Local" msgstr "Helyi" # (1) msgid "Local Game List" msgstr "Helyi játszma lista" # (2) msgid "Looking up host %s..." msgstr "%s gép keresése..." # (1) msgid "Losers" msgstr "Pancserek" # (1) msgid "Main Board" msgstr "FÅ‘ tábla" # (1) msgid "Mamer and TDs" msgstr "Mamer és TD-k" # (1) msgid "Manual/Formula" msgstr "Kézi/Képlet" # (1) msgid "Match Found at Line %d." msgstr "Találat a %d sorban." # (1) msgid "Match Pattern: " msgstr "Minta: " # (1) msgid "Material: %d - %d" msgstr "Anyag: %d - %d" # (1) msgid "Max Ply:" msgstr "Max féllépés:" # (1) msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Megtett lépések (Vizsgált/Játszott partik)" # (1) msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # (1) msgid "Move the axis to be used for selecting pieces." msgstr "" # (1) msgid "Moves" msgstr "Lépések" # (1) msgid "Network is unreachable" msgstr "A hálózat nem érthetÅ‘ el" # (1) msgid "News/Notifications" msgstr "Hírek/Értesítések" # (1) msgid "No" msgstr "Nem" # (3) msgid "No error." msgstr "Nincs hiba." # (2) msgid "No material to mate" msgstr "Nincs elég anyag a mattadáshoz" # (1) msgid "No output from program." msgstr "Nincs kimenet a program számára." # (1) msgid "No peer." msgstr "Nincs partner." # (1) msgid "No previous search." msgstr "Nincs elÅ‘zÅ‘ keresés." # (1) msgid "No proposals left." msgstr "Nincs több javaslat." # (1) msgid "No proposals received." msgstr "Nem érkezett javaslat." # (1) msgid "No response to DGT_SEND_BRD on port %s: %s." msgstr "Nincs DGT_SEND_BRD válasz (port %s): %s." # (4) msgid "None" msgstr "Semmi" # (1) msgid "Normal Chess" msgstr "Hagyományos sakk" # (1) msgid "Normal Text" msgstr "Normál szöveg" # (1) msgid "Not a socket ?!?" msgstr "Nem socket ?!?" # (2) msgid "OK" msgstr "Ok" # (1) msgid "Obs'vd Game Ended" msgstr "A megtekintett játszma befejezÅ‘dött" # (1) msgid "Observe" msgstr "Megnéz" # (6) msgid "Ok" msgstr "Ok" # (1) msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Ha egyszer már kapcsolódtál innen egy géphez, az hozzáadódik a\n" "Partner/ICS könyvjelzÅ‘k menühöz. Módosíthatod vagy törölheted a \n" "~/.eboard/eboard.conf fájban." # (1) msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" # (1) msgid "Opponent Moved" msgstr "Az ellenfél lépett" # (1) msgid "Options" msgstr "Opciók" # (1) msgid "PGN Headers" msgstr "PGN fejlécek" # (1) msgid "PGN filename:" msgstr "PGN fájlév:" # (1) msgid "Partner Tells:" msgstr "Parter üzenetek:" # (1) msgid "Pawn %d" msgstr "Gyalog %d" # (1) msgid "Pitch (Hz):" msgstr "Pitch (Hz)" # (1) msgid "Play" msgstr "Lejátszás" # (1) msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "%s, %s vs. %s (%s, max számítási mélység %d, mindíg gondolkodik: %s)" # (1) msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "WAV lejátszása" # (1) msgid "Play against Crafty" msgstr "Crafty elleni játék" # (1) msgid "Play against Engine" msgstr "Gép elleni játék" # (1) msgid "Play against GNU Chess" msgstr "GNU Chess elleni játék" # (1) msgid "Play against Sjeng" msgstr "Sjeng elleni játék" # (1) msgid "Player" msgstr "Játékos" # (2) msgid "Player resigns" msgstr "A játékos feladta" # (1) msgid "Player/Color Name Font" msgstr "Játékos/szín név betűkészlete" # (1) msgid "Pos: %s vs. %s" msgstr "Poz: %s vs. %s" # (1) msgid "Preferences" msgstr "Beállítások" # (1) msgid "Press the button to be used for going to the next tab." msgstr "" # (1) msgid "Press the button to be used for going to the previous tab." msgstr "" # (1) msgid "Press the button to be used for selecting a square." msgstr "" # (1) msgid "Private Tell" msgstr "Magán mondás" # (1) msgid "Private Tells" msgstr "Magán mondások" # (1) msgid "Program exited too soon" msgstr "A program túl gyakran kilépett" # (1) msgid "Progress" msgstr "Haladás" # (1) msgid "Promotion Piece " msgstr "Figurák gyalogátváltozáshoz " # (1) msgid "Propose" msgstr "Ajánlat" # (1) msgid "Propose Game" msgstr "Játszma ajánlat" # (1) msgid "Protocol" msgstr "Protokoll" # (2) msgid "Protocol mismatch, disconnecting." msgstr "Nem egyezÅ‘ protokoll, kapcsolat vége." # (1) msgid "Queen %d" msgstr "Vezér %d" # (1) msgid "Rated" msgstr "Értékelt" # (1) msgid "Rating" msgstr "Értékszám" # (1) msgid "Rating Range" msgstr "Értékszám tartomány" # (1) msgid "Read error from program." msgstr "Olvasási hiba a programtól." # (1) msgid "Received a game proposal from %s." msgstr "Játszma javaslat érkezett innen: %s." # (1) msgid "Recent Hosts" msgstr "ElÅ‘zÅ‘ gépnév" # (4) msgid "Refresh List" msgstr "Lista frissítése" # (1) msgid "Replied to seek #%d" msgstr "#%d keresés visszajátszása" # (2) msgid "Resigned." msgstr "Feladva." # (1) msgid "Result" msgstr "Eredmény" # (1) msgid "Retracted last move." msgstr "Utolsó lépés visszavonása." # (1) msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "ICS csatornák listájának letöltése az eboard.sf.net címrÅ‘l" # (1) msgid "Revert to Defaults" msgstr "Kiinduló állás visszaállítása" # (1) msgid "Revert to defaults" msgstr "Kiinduló állás visszaállítása" # (1) msgid "Right" msgstr "Jobb" # (1) msgid "Rook %d" msgstr "Bástya %d" # (1) msgid "Run" msgstr "Futtat" # (1) msgid "Run Engine..." msgstr "Gép futtatása..." # (1) msgid "Run Program (need Filename)" msgstr "Program futtatása (fájlév szükséges)" # (1) msgid "Run autofics.pl script after connecting to FICS" msgstr "Az autofics.pl szkript futtatása miután kapcsolódott a FICS-hez" # (1) msgid "Save Buffer As..." msgstr "Puffer mentése mint..." # (1) msgid "Save Game..." msgstr "Játszma mentése..." # (1) msgid "Save as PGN" msgstr "Mentés PNG-be" # (2) msgid "Scratch %d" msgstr "Felállít %d" # (1) msgid "Script" msgstr "Szkript" # (1) msgid "Script List" msgstr "Szkript lista" # (1) msgid "Scrollback limit (0 = unlimited) :" msgstr "Visszagörgetési korlát (0=végtelen)" # (1) msgid "Search Text" msgstr "Szöveg keresése" # (1) msgid "Search for: " msgstr "Keresett szöveg: " # (1) msgid "Search text not found." msgstr "A keresett szöveg nem található." # (1) msgid "Seek Ads" msgstr "Hirdetések keresése" # (2) msgid "Seek Table" msgstr "Ãllás keresése" # (1) msgid "Seek Table Font" msgstr "KeresÅ‘tábla betűkészlete" # (1) msgid "Serial :%s" msgstr "Soros :%s" # (1) msgid "Set Filter" msgstr "SzűrÅ‘ beállítása" # (1) msgid "Set Filter..." msgstr "SzűrÅ‘ beállítása..." # (1) msgid "Set depth limit to 0 to use the engine's default." msgstr "Ãllítsd a számítási mélység korlátját 0-ra a gép alapbeállításaihoz." # (1) msgid "Setup Buttons" msgstr "Nyomógombok beállítása" # (1) msgid "Shortcut Button Setup" msgstr "Nyomógombok beállítása" # (1) msgid "Shouts" msgstr "Bekiabálások" # (1) msgid "Show channel tells in one pane per channel" msgstr "Csatorna mondások mutatása csatornánként külön panelen" # (1) msgid "Show channel tells on console too (when above option is active)" msgstr "Csatorna mondások mutatása a konzolon is (amikor a fenti opció aktív)" # (1) msgid "Show rating next to player name" msgstr "Értékszám mutatása a játékos neve mellett" # (1) msgid "Show shortcut buttons below board" msgstr "Nyomógombok mutatása a tábla alatt" # (1) msgid "Side & Time" msgstr "Szín és idÅ‘" # (1) msgid "Side Selection" msgstr "Szín választása" # (2) msgid "Side to move: " msgstr "Lépésre következik: " # (1) msgid "Smooth joystick cursor" msgstr "Sima joystick kurzor" # (1) msgid "Smooth joystick cursor speed:" msgstr "Sima joystick kurzor sebesség:" # (1) msgid "Smoother animation (eats more CPU)" msgstr "Simább animáció (több CPU használat)" # (1) msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Sajnálom, de ez a protokoll nem teszi lehetÅ‘vé a lépések visszavonását." # (1) msgid "Sound Event" msgstr "Hang esemény" # (1) msgid "Sound Events" msgstr "Hang események" # (1) msgid "Sounds" msgstr "Hangok" # (1) msgid "Source code available at http://eboard.sourceforge.net" msgstr "A forráskód elérhetÅ‘ itt: http://eboard.sourceforge.net" # (2) msgid "Stalemate" msgstr "Patt" # (1) msgid "Start a connection" msgstr "Kapcsolat kezdeményezése" # (1) msgid "Starting Time:" msgstr "KezdÅ‘ idÅ‘:" # (1) msgid "Suicide" msgstr "Franciasakk" # (1) msgid "TCP Port" msgstr "TCP port" # (2) msgid "TCP Port:" msgstr "TCP Port:" # (1) msgid "Tab Position" msgstr "Fülek pozíciója" # (1) msgid "Test" msgstr "Teszt" # (1) msgid "The checkbox on the left enables/disables the sound." msgstr "A baloldali jelölÅ‘négyzet engedélyezi/tiltja a hangokat." # (1) msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "" # (1) msgid "Think Always" msgstr "Ãllandó gondolkodás" # (1) msgid "Think on opponent's time" msgstr "Gondolkodás az ellenfél gondolkodási ideje alatt" # (1) msgid "Time" msgstr "IdÅ‘" # (1) msgid "Time Control" msgstr "IdÅ‘ kontrol" # (1) msgid "Time Control..." msgstr "IdÅ‘ kontrol..." # (1) msgid "Time Control:" msgstr "IdÅ‘ kontrol:" # (1) msgid "Time Running Out" msgstr "IdÅ‘túllépés" # (1) msgid "Timeout" msgstr "IdÅ‘túllépés" # (1) msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "IdÅ‘t megadni a következÅ‘képpen lehet óó:pp:mm vagy mm" # (1) msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Ha egy nyomógombbal több parancsot akarsz futtatni, akkor a parancsokat válszd el ; -vel.\n" "Ha egy szkriptet akarsz futatni egy nyomógombbal, akkor írd be a szkript nevét pl.: script.myscript.pl ." # (1) msgid "Top" msgstr "Fönt" # (1) msgid "Trademark :%s" msgstr "Védjegy :%s" # (1) msgid "Type: Fischer Clock (ICS-like)" msgstr "Típus: Fischer óra (ICS-szerű)" # (1) msgid "Type: Fixed Time per Move" msgstr "Típus: lépésenként azonos idÅ‘" # (1) msgid "Type: Use engine's default setting" msgstr "Típus: a gép alapbeállításainak használata" # (1) msgid "Type: X Moves per Time Period" msgstr "Típus: X lépés adott idÅ‘ alatt" # (1) msgid "Unable to bind on port %d." msgstr "Nem lehet kapcsolódni a %d porton." # (1) msgid "Unable to create socket." msgstr "Nem lehet létrehozni socket-et." # (1) msgid "Unable to find the DGT board on port %s: %s." msgstr "Nem található DGT tábla %s porton: %s" # (1) msgid "Unknown error" msgstr "Ismeretlen hiba" # (1) msgid "Unknown result" msgstr "Ismeretlen eredmény" # (1) msgid "Use plain color squares" msgstr "Egyszerű színes mezÅ‘k használata" # (1) msgid "Value" msgstr "Érték" # (1) msgid "Value:" msgstr "Érték:" # (4) msgid "Variant" msgstr "Változat" # (2) msgid "Variant:" msgstr "Változat:" # (1) msgid "Variant: %s (uneditable)" msgstr "Változat: %s (nem szerkeszthetÅ‘)" # (1) msgid "Wait" msgstr "Várakozás" # (1) msgid "Wait for a connection" msgstr "Várakozás a kapcsolódásra" # (1) msgid "Waiting for connection on port %d." msgstr "Várakozás a kapcsolódásra a %d porton." # (1) msgid "Warn when own clock is below: " msgstr "Figyelmeztetés, ha saját idÅ‘ kevesebb mint:" # (1) msgid "Welcome to eboard." msgstr "Üdvözöllek az eboard-ban!" # (5) msgid "White" msgstr "Világos" # (1) msgid "White: %s - %s" msgstr "Világos: %s - %s" # (1) msgid "Working..." msgstr "Dolgozom..." # (1) msgid "Write to Console" msgstr "Ãrás a konzolra" # (1) msgid "Wrong address space" msgstr "Hibás címtartomány" # (1) msgid "Wrote" msgstr "Ãrt" # (1) msgid "Yes" msgstr "Igen" # (1) msgid "You can only retract when it's your turn to move." msgstr "Csak akkor vonhatod vissza a lépést, amikor te következel." # (1) msgid "Your color:" msgstr "Szín:" # (1) msgid "Your name:" msgstr "Név:" # (1) msgid "[chat]" msgstr "[cset]" # (2) msgid "[cmd]" msgstr "[parancs]" # (1) msgid "[eboard] ** $HOME is too long" msgstr "[eboard] ** a $HOME túl hosszú" # (1) msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** nem sikerült a könyvtárat létrehozni " # (1) msgid "[eboard] ** no $HOME" msgstr "[eboard] ** nincs beállítva a $HOME" # (1) msgid "[eboard] bad RC line\n" msgstr "[eboard] hibás RC sor\n" # (1) msgid "beep" msgstr "csipogás" # (1) msgid "beeps" msgstr "csipogások" # (1) msgid "black" msgstr "sötét" # (1) msgid "can't load PGN move text from %s (error opening file)" msgstr "nem sikerült betölteni a lépést a %s PGN-bÅ‘l (fájl megnyitási hiba)" # (1) msgid "can't seek to offset %lu of %s" msgstr "" # (1) msgid "dgtnix driver version %.1f" msgstr "dgtnix meghajtó verzió %.1f" # (1) msgid "discards board" msgstr "tábla bezárása" # (1) msgid "eboard Direct Connection Manager" msgstr "eboard direkt kapcsolat kezelÅ‘" # (1) msgid "eboard version %s (%s)" msgstr "eboard verzió %s (%s)" # (1) msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" # (1) msgid "eboard: Console #%d" msgstr "eboard: Konzol #%d" # (1) msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "a gép szabálytalan lépést jelzett, de mi nem léptünk, no problem." # (1) msgid "error parsing PGN data" msgstr "hiba a PNG olvasása közben" # (1) msgid "flips board" msgstr "fordított tábla" # (5) msgid "game" msgstr "játszma" # (5) msgid "games" msgstr "játszma" # (1) msgid "generic xboard v2" msgstr "általános xboard v2" # (1) msgid "goes back 1 halfmove" msgstr "egy lépés vissza" # (1) msgid "goes back to start of game" msgstr "játszma elejére" # (1) msgid "goes forward 1 halfmove" msgstr "egy lépés elÅ‘re" # (1) msgid "goes forward to end of game" msgstr "játszma végére" # (1) msgid "illegal move!" msgstr "szabálytalan lépés!" # (1) msgid "in progress" msgstr "folyamatban" # (1) msgid "initial time %s, increment %s" msgstr "kezdeti idÅ‘ %s, növekmény %s" # (1) msgid "moves in" msgstr "lépés" # (1) msgid "no" msgstr "nem" # (2) msgid "no such game: " msgstr "nincs ilyen játszma:" # (1) msgid "no time control set" msgstr "nincs beállítva idÅ‘kontrol" # (2) msgid "none" msgstr "üres" # (1) msgid "nothing" msgstr "semmi" # (1) msgid "opens new scratch board with position" msgstr "új " # (1) msgid "per move" msgstr "lépésenként" # (1) msgid "plain console beep" msgstr "egyszerű konzol csipogás" # (1) msgid "play file %s" msgstr "%s fájl lejátszása" # (1) msgid "pops up the move list" msgstr "elÅ‘hozza a lépéslistát" # (1) msgid "process creation failed." msgstr "sikertelen processz létrehozás." # (2) msgid "rated" msgstr "értékelt" # (1) msgid "run %s" msgstr "%s futtatása" # (1) msgid "running %s" msgstr "%s futtatása" # (1) msgid "savePGN failed: %s" msgstr "%s PGN fájl mentése sikertelen" # (1) msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "PGN fájl mentése sikertelen: nem lehet 2-nél kevesebb lépést menteni" # (1) msgid "seconds." msgstr "másodperc." # (2) msgid "unrated" msgstr "nem értékelt" # (1) msgid "untimed" msgstr "idÅ‘kontrol nélkül" # (1) msgid "white" msgstr "világos" # (1) msgid "yes" msgstr "igen" eboard-1.1.1.orig/multilang/eboard.ja.po0000644000175000017500000017622510757567572017476 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** PNG ã®èª­è¾¼ã«å¤±æ•—: 内蔵ã®ä½Žè§£åƒåº¦ã®é§’セットを使ã„ã¾ã™ã€‚見ãŸã‚悪ã„ã‘ã©ã­ã€‚" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " 閲覧... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " ãƒ—ãƒ¬ã‚¤é¸æŠž " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " æ›´æ–° " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " フィールド削除 " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " 設定 " # state: untranslated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s ã‚’ %s ã¸, %d Hz ã‚’ %d msec" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d ã®ã‚²ãƒ¼ãƒ ã‚’読ã¿ã¾ã—ãŸ" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d 㯠%s ã«ç§»å‹•ã—ã¾ã—ãŸ" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. %s:%d (%s) ã«ç¹‹ãŽã¾ã™" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (白) 対 %s (é»’)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s ã¯ã‚²ãƒ¼ãƒ ã®ç”³è¾¼ã‚’断りã¾ã—ãŸã€‚" # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "%s エンジンを起動ã—ã¾ã—ãŸã€‚" # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s ã¯å¼•ã分ã‘ã‚’ææ¡ˆã—ã¦ãã¾ã—ãŸã€‚" # state: untranslated # (1) clock.cc:337 msgid "%s per move" msgstr "" # state: untranslated # (1) clock.cc:317 msgid "%s/move" msgstr "" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "(Wrapped) %d 行ã«ä¸€è‡´ã™ã‚‹æ–‡å­—列を見ã¤ã‘ã¾ã—ãŸã€‚ " # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(メッセージãŒä¸æ˜Žçž­ã§ã™ -- パスワードモード ?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(ブックマークãªã—)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(ãªã—)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(時間区切り)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* ゲームãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] 䏿­£ãªã‚¨ãƒ³ã‚¸ãƒ³ã®ãƒ—ロトコル # in ブックマーク: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** 警告: 環境変数 HOME ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- ゲーム %s ã‚’ PGN ファイル %s ã¸" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- 接続を切りã¾ã—ãŸ" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/ゲーム/延期(_d)" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/ゲーム/å¾…ã£ãŸ(_M)" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/ゲーム/中断(_A)" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/ゲーム/引ãåˆ†ã‘ææ¡ˆ(_O)" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/ゲーム/投了(_R)" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/ヘルプ/eboard ã«ã¤ã„ã¦(_A)..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/ヘルプ/デãƒãƒƒã‚°æƒ…å ±(_D)" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/ヘルプ/ã¯ã˜ã‚ã«(_G)" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/ヘルプ/キー入力(_K)" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Help/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/接続/FICSã«æŽ¥ç¶š(_F)" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/接続/別ã®eboardã«ç›´æŽ¥æŽ¥ç¶š(_R)" # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/接続/エンジンã®ãƒ–ックマーク(_o)" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/接続/ICSã®ãƒ–ックマーク(_B)" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/接続/コンピュータã¨å¯¾æˆ¦/Cr_afty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/接続/コンピュータã¨å¯¾æˆ¦/GNU CHess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/接続/コンピュータã¨å¯¾æˆ¦/_Generic Engine..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/接続/コンピュータã¨å¯¾æˆ¦/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/接続/コンピュータã¨å¯¾æˆ¦/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/接続/コンピュータã¨å¯¾æˆ¦" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/接続/ä»–ã®ã‚µãƒ¼ãƒã«æŽ¥ç¶š(_C)" # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/接続/接続を切る(_D)" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/接続/空ã®ç·¨é›†ç”¨ãƒœãƒ¼ãƒ‰(_E)" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/接続/終了(_Q)" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/接続/é§’ãŒåˆæœŸä½ç½®ã«ä¸¦ã‚“ã ç·¨é›†ç”¨ãƒœãƒ¼ãƒ‰(_S)" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/接続/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/接続/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/接続/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/設定/ビットマップ駒セット/é§’ã ã‘読ã¿è¾¼ã‚€(_P)" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/設定/ビットマップ駒セット/ボードã ã‘読ã¿è¾¼ã‚€(_S)" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/設定/ビットマップ駒セット/テーマを読ã¿è¾¼ã‚€(_T)" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/設定/ビットマップ駒セット" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/設定/正当性ã®ãƒã‚§ãƒƒã‚¯ã‚’有効ã«(_C)" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/設定/ICS ã®æŒ¯èˆž/ボードを他よりも手å‰ã«ãƒãƒƒãƒ—アップ" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/設定/ICS ã®æŒ¯èˆž/ゲーム終了後ã«è¦³å¯Ÿã—ã¦ã„ãŸãƒœãƒ¼ãƒ‰ã‚’ã™ãã«ç ´æ£„(_D)" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/設定/プレムーブ(_m)" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/設定/座標を表示(_w)" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/設定/移動をアニメーション(_A)" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/設定/相手ã®ç§»å‹•ã§ãƒ“ープ音(_B)" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/設定/ä»–ã®åŠ¹æžœéŸ³ã‚’æœ‰åŠ¹ã«(_E)" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/設定/最後ã®ç§»å‹•ã‚’ãƒã‚¤ãƒ©ã‚¤ãƒˆ(_H)" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/設定/_ICS ã®æŒ¯èˆž" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/設定/設定(_P)..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/設定/_é§’ã®ãƒ™ã‚¯ã‚¿ãƒ¼åŒ–(レンダリングãŒé€Ÿã„)(_V)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/設定/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/ウィンドウ/å‰ã‚’探ã™(_P)" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/ウィンドウ/クライアントã®ã‚²ãƒ¼ãƒ è¡¨ç¤º(_C)..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/ウィンドウ/デスクップã®ä½ç½®ã‚’ä¿å­˜(_G)" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/ウィンドウ/テキストãƒãƒƒãƒ•ã‚¡ã‚’ä¿å­˜ã™ã‚‹(_T)..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/ウィンドウ/_サーãƒã® ad 表示..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/ウィンドウ/コンソールを切断(_D)" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/ウィンドウ/テキスト検索(上方å‘ã«)(_F)..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/ウィンドウ/サーãƒã®ã‚²ãƒ¼ãƒ è¡¨ç¤º(_G)..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/ウィンドウ/スクリプトを実行(_R)..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/ウィンドウ/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/ウィンドウ/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/ウィンドウ/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/ゲーム(_G)" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/ヘルプ(_H)" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/接続(_P)" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/設定(_S)" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/ウィンドウ(_W)" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " フォントをロードã§ãã¾ã›ã‚“ã§ã—ãŸã€‚.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** ボードã®ãƒ•ォント読ã¿è¾¼ã¿ã«å¤±æ•— - X11 ã® 75dip 㨠100 dip ã®ãƒ•ォントをインストールã—ã¦ã€X ã‚’å†èµ·å‹•ã—ã€ã¾ãŸæŒ‘戦ã—ã¦ä¸‹ã•ã„。\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** ボードã®ãƒ•ォント読ã¿è¾¼ã¿ã«å¤±æ•—\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " 中断リクエストé€ä¿¡" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " 延期リクエストé€ä¿¡" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " 引ã分ã‘リクエストé€ä¿¡" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** æ­£ã—ããªã„パターン文字列:" # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** ファイルãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " 読ã¿è¾¼ã¿ã«å¤±æ•— " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " 警告: 固定幅フォントを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®å†…容も汚ã見ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " 読ã¿è¾¼ã¿ã«å¤±æ•— " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr "" # state: untranslated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr "" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " セッションを中断" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " 引ã分ã‘リクエストé€ä¿¡" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (パスワードé€ä¿¡)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [メニューã‹ã‚‰ã®ç™ºè¡Œ] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "[ショートカットã‹ã‚‰ã®ç™ºè¡Œ]" # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [ショートカットã‹ã‚‰å®Ÿè¡Œã®ã‚¹ã‚¯ãƒªãƒ—ト] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "eboard を中断" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "å—ã‘入れる" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "%s ã‹ã‚‰ã®æ¬¡ã®æŽ¥ç¶šã‚’å—ã‘入れã¾ã—ãŸ" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Ad ã®è©³ç´°" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Ad ã®ä¸€è¦§" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Ad ã®ä¸€è¦§ (更新中...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "接続/エンジンをブックマークメニューã«è¿½åŠ " # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "アドレスã¯ã™ã§ã«ä½¿ç”¨ã—ã¦ã„ã¾ã™" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Ad" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "ã™ã§ã«æŽ¥ç¶šã—ã¦ã„ã¾ã™ ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "ã™ã¹ã¦ã®å ´æ‰€:\n" "F3: å‰ã®ãƒšãƒ¼ã‚¸ã«ç§»å‹•。\n" "F4: 次ã®ãƒšãƒ¼ã‚¸ã«ç§»å‹•。\n" "F5: メインボードã«ç§»å‹•。\n" "F6: コンソールã«ç§»å‹•。\n" "F7: (ã‚‚ã—å¯èƒ½ãªã‚‰) 探索グラフã«ç§»å‹•。\n" "F8: ショートカットãƒãƒ¼ã®è¡¨ç¤º/éžè¡¨ç¤ºã®åˆ‡æ›¿ãˆã€‚\n" "Page Up/Page Down: (表示ã—ã¦ã„ã‚‹)テキストコンソールã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã€‚\n" "Ctrl+(Left Arrow): åŠç”»é¢ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«åˆ†æˆ»ã‚‹ã€‚\n" "Ctrl+(Right Arrow): åŠç”»é¢åˆ†ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«é€²ã‚€ã€‚\n" "Ctrl+F: 上方å‘ã«æ¤œç´¢ (main console buffer)\n" "Ctrl+G: å‰ã‚’検索\n" "\n入力ボックス:\n" "Up/下矢å°: 入力履歴ã«ç§»å‹•\n" "Enter: 一行入力をé€ã‚‹\n" "Esc: ãƒãƒ£ãƒƒãƒˆ/コマンド モードã®åˆ‡æ›¿ãˆ\n" "\nシンタックス:\n" "メインウィンドウã®å…¥åŠ›ãƒœãƒƒã‚¯ã‚¹ã§ã¯:\n" ".. 「%prefix〠ã®å…¥åŠ›ã¯ãƒãƒ£ãƒƒãƒˆã®ã€Œprefixã€ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚\n" ".. 「%do スクリプトåã€ã®å…¥åŠ›ã¯ã€Œã‚¹ã‚¯ãƒªãƒ—トåã€ã‚’実行ã—ã¾ã™ã€‚" # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "外観" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "追加" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "é©ç”¨" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "変更をé©ç”¨" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "観察ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ ã‚’自動ä¿å­˜" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "プレイã—ãŸã‚²ãƒ¼ãƒ ã‚’自動ä¿å­˜" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "自動ä¿å­˜" # state: untranslated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "" # state: untranslated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "䏿­£ãªè¨˜è¿°" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "ビープ (ピッãƒã€ç¶™ç¶šæ™‚é–“ã€ã‚«ã‚¦ãƒ³ãƒˆã€ãƒ‡ãƒã‚¤ã‚¹ãŒå¿…è¦)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "ビショップ %d" # state: untranslated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "é»’: %s - %s" # state: untranslated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" # state: untranslated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "ブックマークã®è¦‹å‡ºã—" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "下" # state: untranslated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "閲覧" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "ãƒãƒƒãƒ•ã‚¡ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "ãƒã‚°ãƒã‚¦ã‚¹" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "ãƒã‚°ãƒã‚¦ã‚¹: パートナーã®ã‚²ãƒ¼ãƒ " # state: untranslated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "ボタンã®è¦‹å‡ºã—" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "ボタンã®ã‚¢ã‚¤ã‚³ãƒ³" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "å–æ¶ˆ" # state: untranslated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "接続待ã¡ã‚’å–æ¶ˆã—ã¾ã—ãŸã€‚" # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "変更..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ã®è¡¨ç¤º" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "ãƒã‚§ãƒƒã‚¯ãƒ¡ã‚¤ãƒˆ" # state: untranslated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠž" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "é¸æŠž..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "クロックã®ãƒ•ォント" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "é–‰ã˜ã‚‹" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "色" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "色ã®é¸æŠž" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "色" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "コマンド" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "コマンドライン":" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "コンピュータ" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "コンピュータ 白 対 人間 é»’" # state: untranslated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "サウンドファイル編集:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "接続" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "ICS サーãƒã«æŽ¥ç¶š" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "%s (%s) ã«æŽ¥ç¶š" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "%s ã«æŽ¥ç¶šä¸­..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "接続を拒å¦ã•れã¾ã—ãŸ" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "%s:%d ã¸ã®æŽ¥ç¶šã‚’失敗: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "コンソール" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "コンソール ブザー" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "コンソールã®ãƒ•ォント" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "コンソールãƒãƒƒãƒ•ã‚¡ä¿å­˜" # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "カウント:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "クレージーãƒã‚¦ã‚¹" # state: untranslated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "" # state: untranslated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "" # state: untranslated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "" # state: untranslated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "" # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’削除" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "ã“ã®é …目を削除" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "æ€è€ƒã®æ·±ã•ã®åˆ¶é™:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "詳細" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "デãƒã‚¤ã‚¹:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "実行ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª (例ãˆã°ã€ãƒ–ックファイルã®ã‚る所)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "ディレクトリ:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "ã™ã¹ã¦ç ´æ£„" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "ゲームを破棄" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "ã‚„ã‚ã‚‹" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "ゲームを表示" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "表示" # state: untranslated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "引ã分ã‘ã‚’ææ¡ˆ" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "引ã分ã‘ã®ææ¡ˆã‚’é€ä¿¡ã€‚" # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "åˆæ„ã«ã‚ˆã‚Šå¼•ã分ã‘" # state: untranslated # (1) board.cc:993 msgid "Drop Piece:" msgstr "" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "継続時間 (msec):" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "動的探索表" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "ブックマークを編集..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "エンジンã®ãƒ–ックマークを編集" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "ゲーム情報を編集" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "時間制御を編集" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "空" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "エンジンã®ãƒ–ックマーク" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "エンジンã®ã‚³ãƒžãƒ³ãƒ‰" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "エンジンã®ç¨®é¡ž:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "エンジンã®ç¨®é¡ž: %s (編集ä¸å¯)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "エンジンã®èµ·å‹•ã«ã‚‚ã†å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™ã€ãŠå¾…ã¡ä¸‹ã•ã„。" # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "エンジンã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "エンジンを読ã¿è¾¼ã¿ã€‚" # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "エンジン実行中" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "エンジン開始ã—ã¾ã—㟠(2 秒タイムアウト)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "FEN ã®å ´æ‰€ã‚’入力ã—ã¦ä¸‹ã•ã„" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "イベント種類" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "ゲーム検証 #%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "エンジンã®å®Ÿè¡Œã«å¤±æ•—。" # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "補助プログラムã®å®Ÿè¡Œã«å¤±æ•—" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "プレイã™ã‚‹ãƒ•ァイル / 実行ã™ã‚‹ãƒ—ログラム" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "フィルタ: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "フィルタ: (ãªã—)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "ã¾ãšç¾åœ¨ã®æŽ¥ç¶šã‚’終了ã•ã›ã¦ãã ã•ã„。" # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "ã¾ãšç¾åœ¨ã®ã‚²ãƒ¼ãƒ ã‚’終了ã•ã›ã¦ä¸‹ã•ã„。" # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "フラグ" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "フォント" # state: untranslated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "" # state: untranslated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "FEN ã‹ã‚‰" # state: untranslated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "" # state: untranslated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "ゲーム #" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "ゲーム #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "ゲーム #%d - %d %d %s" # state: untranslated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "" # state: untranslated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "ゲーム #%d - %s 対 %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "ゲーム" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "ゲーム #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "ゲーム中断" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "ゲームã®è©³ç´°" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "ゲーム情報フォント" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "ゲームリスト" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "ゲームã®ãƒªã‚¹ãƒˆ (更新中...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "ゲーム敗退" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "ゲーム開始" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "ゲームå‹åˆ©" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "%s ã«ã‚²ãƒ¼ãƒ ã‚’追加" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "ゲーム中。" # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "ゲームオーãƒãƒ¼: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "ゲーム申込をé€ã‚Šã¾ã—ãŸã€‚" # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "ゲーム開始!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "ゲーム/ボード: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "ゲーム" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "汎用 XBoard エンジン..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "ギブアウェイ" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "クレージー/ãƒã‚°ãƒã‚¦ã‚¹ã®ç”»é¢ç”»åƒ" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "ヘルプ: デãƒãƒƒã‚°æƒ…å ±" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "ヘルプ: ã¯ã˜ã‚ã« " # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "ヘルプ: キー入力" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "éš ã™!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "ホストãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "ホストå" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "ホストåã¾ãŸã¯ IP アドレス:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "人間" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "人間 白 対 コンピュータ é»’" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "人間ãŒç™½ã§ãƒ—レイ" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "ICS ãƒãƒ£ãƒ¬ãƒ³ã‚¸" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "IPC パイプ生æˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚" # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Id" # state: untranslated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" # state: untranslated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "" # state: untranslated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "" # state: untranslated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "" # state: untranslated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "" # state: untranslated # (1) clock.cc:490 msgid "Increment:" msgstr "" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "æŽ¢ç´¢è¡¨ãŒæœ‰åŠ¹ãªæ™‚ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®æŽ¢ç´¢è¡Œã‚’抑制" # state: untranslated # (1) board.cc:2459 msgid "Initial Position" msgstr "" # state: untranslated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "" # state: untranslated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "" # state: untranslated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "" # state: untranslated # (1) chess.cc:1478 msgid "Key" msgstr "" # state: untranslated # (1) chess.cc:1495 msgid "Key:" msgstr "" # state: untranslated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "中断" # state: untranslated # (1) board.cc:1005 msgid "Knight %d" msgstr "" # state: untranslated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "å·¦" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: untranslated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "" # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "PGN 読ã¿è¾¼ã¿" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "PGN 読ã¿è¾¼ã¿..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "ローカル" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "ローカルã®ã‚²ãƒ¼ãƒ ä¸€è¦§" # state: untranslated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "" # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "ルーザーズ" # state: untranslated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "" # state: untranslated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "%d 行ã«ä¸€è‡´ã—ã¾ã—ãŸã€‚" # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "一致パターン" # state: untranslated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "最大プライ" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "手番ãŒç§»å‹• (観察/検査ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ )" # state: untranslated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # state: untranslated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "" # state: untranslated # (1) movelist.cc:81 msgid "Moves" msgstr "" # state: untranslated # (1) network.cc:372 msgid "Network is unreachable" msgstr "" # state: untranslated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "" # state: untranslated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "" # state: untranslated # (3) network.cc:314,438,503 msgid "No error." msgstr "" # state: untranslated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "" # state: untranslated # (1) network.cc:781 msgid "No output from program." msgstr "" # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "接続ãªã—。" # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "剿–¹ã«ã¯ã‚りã¾ã›ã‚“。" # state: untranslated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "" # state: untranslated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "" # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: untranslated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "通常ã®ãƒã‚§ã‚¹" # state: untranslated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "" # state: untranslated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "実行" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "観察ã—ã¦ã„ãŸã‚²ãƒ¼ãƒ ãŒçµ‚了" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "観察" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "実行" # state: untranslated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "上ã®ãƒ‘ターンã«ä¸€è‡´ã™ã‚‹è¡Œã®ã¿ãŒã€ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã«è¿½åŠ ã•れã¾ã™ã€‚\n" "パターンã¯ã€| (パイプ) 文字㧠「ã¾ãŸã¯ã€ã‚’表ã›ã¾ã™ã€‚\n" "* (アスタリスク) ã¯ã™ã¹ã¦ã«ä¸€è‡´ã—ã¾ã™ã€‚\n" "例:\n" "'(20)|(22)' ã¯ã€ãƒãƒ£ãƒ³ãƒãƒ« 20 㨠22 ã®è¡Œã®ã¿ã‚’表示ã—ã¾ã™ã€‚\n" "'blk * bored' ã¯ã€'blk '(...)' bored' ã‚’å«ã‚€è¡Œã‚’表示ã—ã¾ã™ã€‚" # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "相手ã®ç§»å‹•" # state: untranslated # (1) p2p.cc:149 msgid "Options" msgstr "" # state: untranslated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "PGN ファイルå" # state: untranslated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "" # state: untranslated # (1) board.cc:997 msgid "Pawn %d" msgstr "" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "ピッム(Hz)" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "プレイ" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "プレイ %s, %s 対 %s (%s, 最高深度 %d, 常時æ€è€ƒ: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "WAV ã‚’å†ç”Ÿ (デãƒã‚¤ã‚¹ã¨ãƒ•ァイルåãŒå¿…è¦ã§ã™ã€‚sox ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Crafty ã¨ãƒ—レイ" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "エンジンã¨ãƒ—レイ" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "GNU Chess 4 ã¨ãƒ—レイ" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Sjeng ã¨ãƒ—レイ" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "プレイヤー" # state: untranslated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "プレイヤーã®åå‰ã®ãƒ•ォント " # state: untranslated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "設定" # state: untranslated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "" # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "電話番å·" # state: untranslated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "プログラムã¯ã™ãã«çµ‚了ã—ã¾ã™" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "進æ—" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "昇進ã™ã‚‹é§’" # state: untranslated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "" # state: untranslated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "プロトコル" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "プロトコルã®ä¸ä¸€è‡´ã€åˆ‡æ–­ã—ã¾ã™ã€‚" # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "クイーン %d" # state: untranslated # (1) network.cc:788 msgid "Read error from program." msgstr "" # state: untranslated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "" # state: untranslated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "一覧を更新" # state: untranslated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "" # state: untranslated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "" # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "çµæžœ" # state: untranslated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "" # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "ICS ãƒãƒ£ãƒ³ãƒãƒ«ä¸€è¦§ã‚’ eboard.sf.net ã‹ã‚‰å¼•ã出ã™" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "å³" # state: untranslated # (1) board.cc:1001 msgid "Rook %d" msgstr "" # state: translated # (1) script.cc:80 msgid "Run" msgstr "実行" # state: untranslated # (1) board.cc:2471 msgid "Run Engine..." msgstr "" # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "プログラムを実行 (ファイルåãŒå¿…è¦)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "FICS ã«æŽ¥ç¶šã—ãŸå¾Œã€autofics.pl スクリプトを実行" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "ゲームをåå‰ã‚’ã¤ã‘ã¦ä¿å­˜..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "ゲームをä¿å­˜..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "PGN ã¨ã—ã¦ä¿å­˜" # state: untranslated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "" # state: translated # (1) script.cc:62 msgid "Script" msgstr "スクリプト" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "スクリプト一覧" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "スクロールãƒãƒƒã‚¯ç¯„囲 (0 = 無制é™) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "テキスト検索" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "検索ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆ: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "検索テキストã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚" # state: untranslated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "探索表" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "探索表フォントを探ã™" # state: untranslated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "フィルタを設定" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "フィルタを設定..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "æ€è€ƒã®æ·±ã•ã®åˆ¶é™ã‚’ 0 ã«ã™ã‚‹ã¨ã€ã‚¨ãƒ³ã‚¸ãƒ³ã®ãƒ‡ãƒ•ォルトãŒä½¿ç”¨ã•れã¾ã™ã€‚" # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "ボタンを設定" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "ショートカットボタンを設定" # state: untranslated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "表示ãƒãƒ£ãƒ³ãƒãƒ«ã¯ãƒãƒ£ãƒ³ãƒãƒ«æ¯Žã«ä¸€ã¤ãšã¤è¡¨ç¤º" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "表示ãƒãƒ£ãƒ³ãƒãƒ«ã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«ã‚‚表示 (上ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åŠ¹ãªæ™‚)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "プレイヤーåã®éš£ã«ãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚’表示" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "ショートカットボタンをボードã®ä¸‹ã«è¡¨ç¤º" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "æ‰‹ç•ªã¨æ™‚é–“" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "手番ã®é¸æŠž" # state: untranslated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "" # state: untranslated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "" # state: untranslated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "滑らã‹ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ (多ãã® CPU パワーを消費)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: untranslated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" # state: untranslated # (1) sound.cc:337 msgid "Sound Event" msgstr "" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "サウンドイベント" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "サウンド" # state: untranslated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "" # state: untranslated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "" # state: untranslated # (1) p2p.cc:147 msgid "Start a connection" msgstr "" # state: untranslated # (1) clock.cc:488 msgid "Starting Time:" msgstr "" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "スーサイド" # state: untranslated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "" # state: untranslated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "タブä½ç½®" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "テスト" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "å·¦ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã§ã‚µã‚¦ãƒ³ãƒ‰ã®æœ‰åй/無効を設定" # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "エンジン㯠/bin/sh -c 'cd directory ; command line'\nã§å®Ÿè¡Œã•れã¾ã™ã€‚" # state: untranslated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "ç›¸æ‰‹ã®æ™‚é–“ã®ã¨ãも考ãˆã‚‹" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "時間設定" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "時間設定..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "時間設定:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "時間切れ" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "時間切れ" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "時間㯠hh:mm:ssã€mm:ssã€ss ã®ã„ãšã‚Œã‹ã§è¨­å®šã§ãã¾ã™ã€‚" # state: untranslated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "上" # state: untranslated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "タイプ: フィッシャークロック (ICS ã®ã‚ˆã†ãªã‚‚ã®)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "タイプ: 固定時間ã§å‹•ã" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "タイプ: エンジンã®ãƒ‡ãƒ•ォルトã®è¨­å®šã‚’使ã†" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "タイプ: X ã¯æ™‚間区切りã”ã¨ã«å‹•ã" # state: untranslated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "" # state: untranslated # (1) network.cc:457 msgid "Unable to create socket." msgstr "" # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: untranslated # (1) network.cc:376 msgid "Unknown error" msgstr "" # state: untranslated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "装飾ã®ãªã„色ã®ç›®ã‚’使用" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: untranslated # (1) chess.cc:1479 msgid "Value" msgstr "" # state: untranslated # (1) chess.cc:1496 msgid "Value:" msgstr "" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "変種" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "変種:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "変種: %s (編集ä¸å¯)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "å¾…ã¤" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "接続を待ã£ã¦ã„ã¾ã™" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "ãƒãƒ¼ãƒˆ %d ã®æŽ¥ç¶šã‚’å¾…ã£ã¦ã„ã¾ã™ã€‚" # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "自分ã®ã‚¯ãƒ­ãƒƒã‚¯ãŒæ¬¡ã®ç§’数未満ã«ãªã£ãŸã‚‰è­¦å‘Š: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "eboard ã¸ã‚ˆã†ã“ã" # state: untranslated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "白: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "æ€è€ƒä¸­..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«æ›¸ã出ã™" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "é–“é•ã£ãŸã‚¢ãƒ‰ãƒ¬ã‚¹ç©ºé–“" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "書ã„ãŸ" # state: untranslated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "" # state: untranslated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "" # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "ã‚ãªãŸã®è‰²:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "ã‚ãªãŸã®åå‰:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[ãƒãƒ£ãƒƒãƒˆ]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[コマンド]" # state: untranslated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** ディレクトリã®ä½œæˆã«å¤±æ•—ã—ã¾ã—㟠" # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard} ** $HOME ã¯å­˜åœ¨ã—ã¾ã›ã‚“" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] é–“é•ã£ãŸ RC ラインã§ã™\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "ブザー" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "ブザー" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "é»’" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "%s ã‹ã‚‰ PGN 移動テキストを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—㟠(ファイルオープンエラー)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "オフセット %lu ã‚’ %s ã‹ã‚‰æŽ¢ã›ã¾ã›ã‚“ã§ã—ãŸ" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: untranslated # (1) mainwindow.cc:525 msgid "discards board" msgstr "" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "eboard ダイレクト接続マãƒãƒ¼ã‚¸ãƒ£ãƒ¼" # state: untranslated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" "\n[å‚考日本語訳]\n" "ã“ã®ãƒ—ログラムã¯ãƒ•リーソフトウェアã§ã™; Free Software\n" "Foundation ã® GNU General Public License ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã¾ãŸã¯\n" "ãれ以é™ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®ã‚‚ã¨ã§ã€è‡ªç”±ã«æ”¹å¤‰ãƒ»å†é…布ã§ãã¾ã™ã€‚\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: コンソール #%d" # state: untranslated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "" # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "PGN データã®è§£æžã‚¨ãƒ©ãƒ¼" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "ボードをã²ã£ãり返ã™" # state: untranslated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "" # state: untranslated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "" # state: untranslated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "一手戻る" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "ã‚²ãƒ¼ãƒ é–‹å§‹ã«æˆ»ã‚‹" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "一手進む" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "ゲーム終了ã«é€²ã‚€" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "æ­£ã—ããªã„å‹•ã!" # state: untranslated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "" # state: untranslated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "" # state: untranslated # (1) clock.cc:479 msgid "moves in" msgstr "" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "ã„ã„ãˆ" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "ãã‚“ãªã‚²ãƒ¼ãƒ ã¯ã‚りã¾ã›ã‚“" # state: untranslated # (1) clock.cc:333 msgid "no time control set" msgstr "" # state: untranslated # (2) movelist.cc:127,128 msgid "none" msgstr "" # state: untranslated # (1) sound.cc:326 msgid "nothing" msgstr "" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "ç¾åœ¨ã®é§’ä½ç½®ã§ç·¨é›†ç”¨ã®ãƒœãƒ¼ãƒ‰ã‚’作る" # state: untranslated # (1) clock.cc:473 msgid "per move" msgstr "" # state: untranslated # (1) sound.cc:323 msgid "plain console beep" msgstr "" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "ファイル %s を実行" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "棋譜を表示" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "プロセス生æˆã«å¤±æ•—。" # state: untranslated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "実行 %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "実行中 %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "PGN ã®ä¿å­˜ã«å¤±æ•—: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "PGN ã®ä¿å­˜ã«å¤±æ•—: Won't save game with less than 2 moves" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "秒。" # state: untranslated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "" # state: untranslated # (1) clock.cc:313 msgid "untimed" msgstr "" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "白" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "ã¯ã„" eboard-1.1.1.orig/multilang/eboard.fr.po0000644000175000017500000021104210757567572017476 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** PNG NON CHARGÉ: utilisation du jeu de pièce interne. Ça va pas être beau.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " Parcourir... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Jouer cette partie " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " Actualiser " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " Supprimer le champ " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Appliquer " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Premiers pas\n" "#M#Tâches courantes\n" "\nJouer contre l'ordinateur\n" "#S#eboard ne \"joue\" pas a proprement parlé aux échecs mais est une interface pour des \"moteurs\" tels que GNU Chess, Crafty ou Sjeng (qui sont disponibles gratuitement). Une fois un moteur installé, ouvrez le menu #B#Jeu#K#, puis le sous-menu #B#Jouer contre un moteur#K# et sélectionnez les options appropriées pour ce moteur.\n" "\n#M#Jouer sur Internet\n" "#S#eboard supporte le protocole FICS utilisé sur freechess.org. D'autres serveurs, comme US Chess Live, utilisent FICS et devraient fonctionner avec eboard. Pour se connecter au FICS, dans le menu #B#Jeu#K#, cliquez sur #B#Se connecter au FICS#K#. Pour se connecter à d'autres serveurs, dans le menu #B#Jeu#K#, cliquez sur #B#Se connecter à d'autres serveurs#K#. Vous pouvez jouer en tant qu'invité sur FICS mais il est plus plaisant d'être inscrit. L'inscription est gratuite sur le site #B#http://www.freechess.org#K#.\n" "Le protocole ICC n'est pas supporté\n" "\n#M#Parcourir des parties PGN\n" "#S#PGN (Portable Game Notation) est le format le plus répandu pour sauvegarder des parties d'échecs. Les coups et des commentaires peuvent être enregistrés. Pour ouvrir un fichier PGN, dans le menu #B#Fenêtres#K#, choisissez #B#Parties sur le client#K#. Dans la boîte de dialogue, cliquez sur #B#Charger un fichier PGN#K#. Pour afficher une partie, sélectionnez-la et cliquez sur #B#Afficher cette partie#K#. Un nouvel onglet est alors ajouté contenant la partie qui vient d'être chargée.#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s vers %s, %d Hz pendant %d ms" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d parties lues" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d coups en %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Connection à %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (Blancs) contre %s (Noirs)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s a accepté votre demande de jeu." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "%s démarré." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s propose le nul." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s par coup" # state: translated # (1) clock.cc:317 msgid "%s/move" msgstr "%s/coup" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "(Wrapped) Trouvé à la ligne %d " # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (pseudo FICS: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(message refusé -- mode mot de passe ?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(pas de signets)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(aucun)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(temps)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* partie non trouvée: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] mauvais protocole # dans le signet: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** attention: variable HOME non assignée\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- partie %s enregistrée dans le fichier PGN %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Déconnecté" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partie/Ajourner" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Partie/Annuler le dernier _Coup" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partie/Arrêter la partie" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Partie/Proposer le _Nul" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partie/A_bandonner" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Hilfe/À propos d'eboard..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Aide/Informations de débogage" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Aide/Premiers pas" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Aides/Raccourcis clavier" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Aide/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Jeu/Se _Connecter au FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Jeu/Se connecter à un eboard distant..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Jeu/Signets de moteurs" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Jeu/Signets ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Jeu/Jouer contre un moteur/_Crafty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Jeu/Jouer contre un moteur/GNUChess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Jeu/Jouer contre un moteur/Moteur générique..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Jeu/Jouer contre un moteur/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Jeu/Jouer contre un moteur/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Jeu/Jouer contre un moteur" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Jeu/Se connecter à d'autres serveur..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Jeu/_Déconnexion" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Jeu/Échiquier vide" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Jeu/Quitter eboard" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Jeu/Échiquier avec positions initiales" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Jeu/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Jeu/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Jeu/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Paramètres/Jeu de pièce bitmap/Charger les pièces seulement" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Paramètres/Jeu de pièce bitmap/Charger les cases seulement" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Paramètres/Jeu de pièce bitmap/Charger un thème" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Paramètres/Jeu de pièce bitmap" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Paramètres/Vérifier la légalité des coups" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Paramètres/Paramètres ICS/Popup Board Panes _Upon Creation" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Paramètres/Paramètres ICS/Supprimer l'échiquier d'une partie finie" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Paramètres/Coup joué en avance" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Paramètres/Montrer les coordonnées" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Paramètres/Animer les coups" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Paramètres/Bipper après coup de l'adversaire" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Paramètres/Jouer les autres sons" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Paramètres/Surligner le dernier coup" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Paramètres/Paramètres ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Paramètres/Préférences..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Paramètres/Pièces vectorielles (Affichage rapide)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Paramètres/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Fenêtres/Rechercher précédent" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Fenêtres/Parties sur le client..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Fenêtres/Sauvegarder position et taille de la fenêtre" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Fenêtres/Sauvegarder le buffer texte..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Fenêtres/Annonces sur le serveur..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Fenêtres/Détacher la console" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Fenêtres/Rechercher texte suivant..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Fenêtres/Parties sur le serveur..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Fenêtres/Lancer un script..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Fenêtres/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Fenêtres/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Fenêtres/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Partie" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_Aide" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Jeu" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/Pa_ramètres" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/_Fenêtres" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n" "\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " ne peut charger la police.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** ne peut charger une ou plusieurs polices - installez les polices 75 et 100 dpi pour X11, redémarrez X, et réessayez.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** ne peut charger une ou plusieurs polices\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " requête d'arrêt de partie envoyée" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " requête d'ajournement de partie envoyée" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " proposition de partie nulle envoyée" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n" "\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** mauvais motif: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** fichier non trouvé: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " chargement impossible " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Attention: ne peut charger la police à chasse fixe, cette boîte de dialogue va être moche.\n" "\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " chargement impossible " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " Ajournement non supporté" # state: translated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr " Moteur incompatible avec ce protocole" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Session Arrêtée" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " Proposition de partie nulle envoyée" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "<édition>" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (mot de passe envoyé)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [depuis le menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [depuis un raccourci]" # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [script lancé par un raccourci] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "À propos d'eboard" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Accepter" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "Connexion entrante de %s acceptée" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Description de l'annonce" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Liste des annonces" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Liste des annonces (lise à jour...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Ajouter aux signets de moteurs" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Adresse déjà utilisée" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Annonces" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Déjà connecté ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "* Partout:\n" "F3: Aller au panneau précédent.\n" "F4: Aller au panneau suivant.\n" "F5: Aller au panneau principal (Échiquier).\n" "F6: Aller à la console.\n" "F7: Aller au panneau de recherche de parties (si disponible).\n" "F8: Affiche/Enlève la barre des raccourcis.\n" "Page up/Page down: défile le texte de la console (si celle-ci est affichée)\n" "Ctrl+Gauche: 1 demi-coup en arrière\n" "Ctrl+Droite: 1 demi-coup en avant\n" "Ctrl+F: Rechercher texte suivant (dans la console)\n" "Ctrl+G: Rechercher précédent\n" "\n* Ligne de commande:\n" "Haut/Bas: Naviguer dans l'historique des commandes entrées\n" "Entrée: Envoyer la commande\n" "Echap: Mode commande / mode bavardage\n" "\n* Syntaxe:\n" "Sur la ligne de commande de la fenêtre principale:\n" ".. entrer %prefix assigne le préfixe pour le bavardarge à prefix.\n" ".. entrer %do lance le script nommé do" # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Apparence" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "Ajoutée" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Appliquer" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Appliquer les changements" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Sauvegarde automatique des parties observées" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Sauvegarde automatique des parties jouées" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Sauvegarde automatique" # state: translated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "Axes & Boutons" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Fond" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Mauvais descriptor" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Bip (fréquence, durée, répétition et périphérique)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Fou %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Noirs" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Noirs: %s - %s" # state: translated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "1Axe du curseur de l'échiquier: %d\n" "Bouton de sélection d'échiquier: %d\n" "Axe de navigation d'échiquier: %d\n" "Bouton onglet précédent: %d\n" "Bouton ongle suivant: %d\n" # state: translated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "Version de l'échiquier :%s" # state: lost (deprecated key) # (1) dgtboard.cc:263 msgid "Board version :%s\n" msgstr "Version de l'échiquier :%s\n" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Nom du signet:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Bas" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Texte surligné" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Parcourir" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Sauvegarde du buffer échouée." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Partner Game" # state: translated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "Adresse de bus:%s" # state: lost (deprecated key) # (1) dgtboard.cc:260 msgid "Bus adress :%s\n" msgstr "Adresse de bus %s\n" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Texte du bouton" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Icone" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Annuler" # state: translated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "Annuler la configuration du joystick" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Attente de l'annulation de la connection" # state: lost (deprecated key) # (3) dlg_prefs.cc:481,884,905 msgid "Change Settings" msgstr "Changer les réglages" # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "Changement..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Annonce du canal" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Mat" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Programmes d'échec" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Choisir la police" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Choisir..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Police de l'horloge" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "Fermer" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Couleur" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Sélection couleur" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Couleurs" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Commande" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Ligne de commande:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Ordinateur" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Ordinateur (blancs) contre Humain (noirs)" # state: translated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "Configurer axes & boutons" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Fichiers son configurés:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Connexion" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Connexion à ICS" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Connecté à %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "Connexion à %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Connexion refusée" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Connexion à %s:%d échouée: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Console" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Bip de console" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Police de la console" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Buffer de la console sauvegardé." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Nombre:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: translated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "Échiquier DGT trouvé sur le port %s." # state: lost (deprecated key) # (1) dgtboard.cc:255 msgid "DGT board found on port %s.\n" msgstr "Échiquier DGT trouvé sur le port %s.\n" # state: lost (deprecated key) # (1) dgtboard.cc:235 msgid "DGT board found on port %s\n" msgstr "L'échiquier DGT a été trouvé sur le port %s\n" # state: translated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "Erreur du support DGT: mauvaise page" # state: translated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "Message DGT: erreur de position entre eboard et l'échiquier DGT" # state: translated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "DGT: code non reconnu: %c (%d)" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Cases foncées" # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Supprimer toutes les entrées" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Supprimer cette entrée" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Profondeur limite:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Description" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Périphérique:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Répertoire de démarrage (où se trouvent les fichiers des parties)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Répertoire:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Tout supprimer" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Supprimer la partie" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Annuler" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Afficher la partie" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Affiché" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distribué selon la GNU GPL, version 2 ou postérieure" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Nul proposé" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Proposition de nul envoyée" # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Nul accepté (NdT: ??)" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Prise de la pièce: " # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Durée (ms)" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Tableau de recherche de parties dynamique" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Édition des signets..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Édition des signets de moteurs" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Édition des infos de partie" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Édition des paramètres de temps" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Vide" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Signets de moteurs" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Commande du moteur" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Type du moteur" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Type du moteur: %s (non modifiable)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Le moteur a besoin de temps pour se lancer, veuillez attendre." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Commande de lancement du moteur" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Moteur chargé" # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Moteur en marche" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Moteur démarré (2 s timeout)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Entrer Position FEN" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Type d'événement" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Analyse partie #%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Lancemement du moteur échoué." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Program d'aide impossible à lancer" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Fichier à jouer / programme à lancer:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtre: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtre: (aucun)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Terminer la connexion actuelle d'abord." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Terminer la partie actuelle d'abord." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Drapeaux" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Polices" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "Autres (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "Moteurs (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "Fichiers PGN (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Partie #" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partie #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partie #%d - %d %d %s" # state: translated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "Partie #%d - %s" # state: translated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "Partie #%d - %s - %s" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partie #%d - %s contre %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partie #%d - sans limite de temps %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Partie #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partie arrêtée" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Description de la partie" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Police des informations de partie" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Liste des parties" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Liste des parties (mise à jour...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Partie perdue" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "Partie commencée" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Partie gagnée" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Partie ajoutée à %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partie en cours." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Partie finie: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Proposition de partie envoyée." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Partie démarrée !" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partie/Échiquier: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Parties" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Moteur XBoard générique..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Représentation graphique de stock crazy/bughouse" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Aide: Infos de débogage" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Aide: Premiers pas " # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Aide: Raccourcis clavier" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Cacher !" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Hôte distant non trouvé: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Nom de l'hôte" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Nom de l'hôte ou adresse IP:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "Humain" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "Humain (blancs) contre Ordinateur (noirs)" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "Humain joue les blancs" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Challenge ICS" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "Creation de pipe IPC échouée" # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "n°" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Après le choix d'un signet, le moteur\n" "jouera le prochain coup, quelles que\n" "soient les paramètres du signet." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Prise illégale sur %c%d (Vérification de légalité des coups activée)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Coup illégal %c%d%c%d (Legality Checking On)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Coup illégal, non envoyé." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Incrément (s):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Incrément:" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Ne pas afficher les lignes de recherche sur la console quand le tableau de recherche de parties est actif" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Position initiale" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Temps initial ([mm:]ss): " # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Initialisation du moteur" # state: lost (deprecated key) # (1) dgtboard.cc:223 msgid "Invalid answer to DGT_SEND_BRD on port %s: %s " msgstr "Réponse invalide à DGT_SEND_BRD sur le port %s:%s" # state: translated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "Joystick" # state: lost (deprecated key) # (1) dlg_prefs.cc:860 msgid "" "Joystick Settings:\n" "\nBoard Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "Réglages du Joystick:\n" "\nAxe du curseur de l'échiquier: %d\n" "Boutton de séléction de l'échiquier: %d\n" "Axe de navigation d'échiquiers: %d\n" "Boutton onglet précédent: %d\n" "Boutton onglet suivant: %d\n" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Clé" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Clé:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibitzes/Whispers" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Tuer" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Cavalier %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Dernière proposition reçue" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Gauche" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "Cases claires..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "Charger un fichier PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Charger un fichier PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Local" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Liste des parties locales" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Cherche l'hôte distant %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Perdants" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Échiquier" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer and TDs" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manual/Formula" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Trouvé à la ligne %d " # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Motif:" # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Matériel: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Max Ply:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Coup joué (parties observées/examinées)" # state: translated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" "Déplacer l'axe à utiliser pour se déplacer en arrière et revenir\n" "au cours d'une partie." # state: translated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "Déplacer l'axe à utiliser pour séléctionner des pièces." # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Coups" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Réseau inaccessible" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "Nouvelles/notifications" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "Non" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Pas d'erreurs." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "No material to mate" # state: translated # (1) network.cc:781 msgid "No output from program." msgstr "Pas de sorties pour le programme." # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Pas de partenaire." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Pas de recherche précédente" # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Pas de propositions laissées." # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "Aucune proposition reçue." # state: lost (deprecated key) # (1) dgtboard.cc:231 msgid "No response to DGT_SEND_BRD on port %s" msgstr "Pas de réponse à DGT_SEND_BRD sur le port %s" # state: lost (deprecated key) # (1) dgtboard.cc:219 msgid "No response to DGT_SEND_BRD on port %s: %s." msgstr "Pas de réponse au message DGT_SEND_BRD sur le port %s: %s." # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Aucun" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Partie normale" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Texte normal" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "N'est pas une socket ?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Partie observée finie" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Observer cette partie" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "Ok" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Une fois connecté à un hôte distant via cette boîte de dialogue, \n" "il sera ajouté au menu des signets ICS. Editez le fichier\n" "~/.eboard/eboard.conf pour modifier ou supprimer ces entrées." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Seules les lignes correspondant au motif seront ajoutées\n" "à cet onglet. Les motifs peuvent subir le OU avec le \n" "caractère | (barre). Une * (étoile) correspond à tout.\n" "Exemples:\n" "'(20)|(22)' ne montre que les lignes des canaux 20 et 22\n" "'blik * bored' montre les lignes contenant 'blik '(...)' bored'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "L'adversaire a joué" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Options" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "En-têtes PGN" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "Nom du fichier PGN:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "L'adversaire dit:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Pion %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Fréquence (Hz)" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Jouer cette partie" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Jouer %s en tant que %s contre %s (%s, prfd max. %d, tjrs réfléchir: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Jouer un WAV (nom du fichier et périphérique, sox soit être installé)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Jouer contre Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Jouer contre un moteur" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Jouer contre GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Jouer contre Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Joueur" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "Abandon du joueur" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Police du nom du Joueur" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pos: %s contre %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Préférences" # state: translated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "Appuyer sur le boutton à utiliser pour aller à l'onglet suivant." # state: translated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "Appuyer sur le boutton à utiliser pour aller à l'onglet précédent." # state: translated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "Appuyer sur le boutton à utiliser pour séléctionner un carré." # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Message privé" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Messages privés" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Le programme s'est arrêté trop tôt" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Progression" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Pièce de promotion: " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Proposition" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Proposition de jeu" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protocole" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Mauvais protocole, déconnexion" # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Dame %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Classé" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Classement" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Intervalle de classement" # state: translated # (1) network.cc:788 msgid "Read error from program." msgstr "Erreur de lecture du programme." # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Proposition de partie reçue de %s." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Hôtes récents" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Actualiser la liste" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Réponse au seek #%d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "A abandonné." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Résultat" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Dernier coup annulé." # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Récupère la liste des cannaux ICS depuis eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr " Paramètres par défaut " # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr " Paramètres par défaut " # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Droite" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Tour %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Lancer ce script" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Lancer le moteur..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Lancer un programme (nom du programme)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Lancer le script autofics.pl après connexion au FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Enregistrer le buffer sous..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Enregistrer la partie..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Enregistrer en PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Échiquier %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Script" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Liste des scripts" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Taille du buffer (0 = illimité) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Rechercher le texte" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Texte à rechercher: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Texte non trouvé" # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Annonces de recherche" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Recherche de parties" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Police du tableau de recherche de parties" # state: translated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "Numéro de série :%s" # state: lost (deprecated key) # (1) dgtboard.cc:257 msgid "Serial :%s\n" msgstr "Numéro de série :%s\n" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Appliquer un filtre" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Appliquer un filtre..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr " Mettez la profondeur à 0 pour la profondeur par défaut du moteur. " # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Changer les boutons" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Changer les boutons de raccourcis" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Shouts" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Afficher les messages de canaux avec un onglet par canal" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Afficher les messages de canaux sur la console également (si l'option ci-dessus est activée)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Afficher le classement à côté du nom du joueur" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Afficher les boutons de raccourcis sous l'échiquier" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Côté & Temps" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Choix du côté" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "Vont jouer: " # state: translated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "Curseur du joystick fluide" # state: translated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "Vitesse du curseur du joystick fluide" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Animations fluides (fait travailler le processeur)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Désolé, ce protocole ne permet pas d'annuler votre coup par cette commande." # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Événement son" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Événements son" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Sons" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Code source disponible sur http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Pat" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Démarre une connexion" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "Temps initial:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "Port TCP" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "Port TCP" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "Position des onglets" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Test" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "La case sur la gauche (dés)active le son correspondant." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "le moteur sera lancé avec\n/bin/sh -c 'cd directory ; commande'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "Toujours réfléchir" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "Réfléchir pendant le tour de l'adversaire" # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Temps" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Paramètres de temps" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Paramètres de temps..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Temps imparti:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Temps imparti écoulé" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Plus de temps" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Les temps sont de la forme hh:mm:ss, mm:ss ou ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Pour lancer plusieurs commandes, séparez les commandes avec ; (point-virgule).\n" "Pour lancer un script, entrez script.nomduscript (par ex.: script.myscript.pl)." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Haut" # state: translated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "Marque :%s" # state: lost (deprecated key) # (1) dgtboard.cc:266 msgid "Trademark :%s\n" msgstr "Marque :%s\n" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Type: Horloge Fischer (ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Type: Temps fixe par coup" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Type: Utiliser les paramètres par défaut du moteur" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Type: X coups par période de temps" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "Impossible de lier le port %d" # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Impossible de créer une socket" # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: lost (deprecated key) # (1) dgtboard.cc:220 msgid "Unable to find the DGT board on port %s.\n%s" msgstr "Impossible de se connecter à l'échiquier DGT sur le port %s.\n%s" # state: lost (deprecated key) # (1) dgtboard.cc:223 msgid "Unable to find the DGT board on port %s.\n%s." msgstr "Impossible de se connecter à l'échiquier DGT sur le port %s.\n%s." # state: lost (deprecated key) # (1) dgtboard.cc:215 msgid "Unable to find the DGT board on port %s: %s." msgstr "Impossible de se connecter à l'échiquier DGT sur le port %s: %s." # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Erreur inconnue" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Résultat inconnu" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Utiliser des cases unies" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Valeur" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Valeur:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Variante" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Variante:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Variante: %s (non modifiable)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Attente" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Attente d'une connexion" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Attente d'un connexion dur le port %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Prévenir quand mon horloge est en dessous du seuil: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Bienvenue sur eboard" # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Blancs" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Blancs: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "Travaille..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Écrit sur la console" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Mauvaise plage d'adresse" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "Écrite" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Oui" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Vous pouvez seulement annuler votre dernier coup quand c'est votre tour" # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Votre couleur:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Votre nom:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "Bavardage:" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "Commande:" # state: translated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "[eboard] ** $HOME est trop long" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** Création du répertoire échouée" # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** pas de $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] mauvaise ligne RC\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "bip" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "bips" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "Noirs" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "Ne peut charger le fichier PGN %s (impossible d'ouvrir le fichier)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "Ne peut se déplacer à %lu de %s" # state: lost (deprecated key) # (1) dgtboard.cc:208 msgid "dgtnix driver version %.1f" msgstr "Driver dgtnix version %.1f" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "Supprimer cet échiquier" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "Gestionnaire de connexion directe" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "eboard version %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nCe logiciel est libre ; vous pouvez le distribuer et/ou\n" "le modifier selon les termes de la GNU General Public\n" "License publiée par la Free Software Foundation ; que\n" "ce soit avec la version 2 de la license, ou (au choix)\n" "une version postérieure.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: console #%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "le moteur annonce un coup illégal alors que nous n'avons pas joué, on l'ignore." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "Erreur de lecture des données PGN" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "Inverse l'échiquier" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "partie" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "parties" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "generic xboard v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "Reculer d'1 demi-coup" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "Retourner en début de partie" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "Avancer d'1 demi-coup" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "Aller en fin de partie" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "Coup illégal !" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "en cours" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "temps initial %s, incrément %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "coups en" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "non" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "pas de telles parties: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "Pas de réglage de temps" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "aucun" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "rien" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "Ouvre un nouvel échiquier avec les positions" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "par coup" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "bip de console" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "joue le fichier %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "Afficher la liste des coups" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "création du processus échouée" # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "classé" # state: lost (deprecated key) # (1) chess.cc:192 msgid "rated"):_("unrated" msgstr "classé"):_("non classé" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "lance %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "lancement de %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "enregistrement du PGN échoué: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "enregistrement du PGN échoué: ne peut enregistrer de partie avec moins de 2 coups" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "secondes." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "non classé" # state: translated # (1) clock.cc:313 msgid "untimed" msgstr "non chronométré" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "blancs" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "oui" eboard-1.1.1.orig/multilang/eboard.cs.dict0000644000175000017500000007661110757567572020014 0ustar patrikpatrikL72 108 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** NPODAŘILO SE NAHRÃT PNG: použity interní figury s nízkým rozliÅ¡ením. Výsledek bude oÅ¡klivý.\n L11 15 Browse... Procházet... L15 15 Play Selected Hraj zvolenou L9 9 Refresh Obnovit L14 20 Remove Field Odstranit položku L5 10 Set Nastavit L1543 1788 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#StruÄný úvod\n#M#Běžné Äinnosti s eboard\n\nHra proti poÄítaÄi\n#S#eboard neumí "hrát Å¡achy", ale funguje jako rozhraní k programům, které to dokáží.\nTyto programy, Å¡achové "motory", sice dokáží hrát Å¡achy, ale postrádají grafické rozhraní.\nAbyjste mohl(a) hrát proti poÄítaÄi potÅ™ebujete motor. GNU Chess, Crafty a Sjeng jsou\nzdarma dostupné motory.\nPokud máte nÄ›který z tÄ›chto motorů nainstalován, otevÅ™ete menu #B#Oponent#K#, v nÄ›m\nzvolte položku #B#Hrát proti motoru#K# a vyberte motor instalovaný na vaÅ¡em poÄítaÄi.\n\n#M#Hra pÅ™es Internet\n#S#Eboard podporuje FICS protokol, používaný serverem freechess.org. Tento protokol používají\ni jiné servery jako US Chess Live. Eboard nepodporuje protokol ICC.\nPokud se chcete pÅ™ipojit k FICS, otevÅ™ete menu #B#Oponent#K# a kliknÄ›te na #B#PÅ™ipojit k FICS#K#.\nJestliže se chcete pÅ™ipojit k jinému serveru otevÅ™ete menu #B#Oponent#K# a kliknÄ›te na\n#B#PÅ™ipojit k jinému serveru...#K#.\nK FICS se můžete pÅ™ipojit jak host, ale mnohem lepší je stát se registrovaným uživatelem.\nRegistrovat se můžete bezplatnÄ› na domácí stránce FICS #B#http://www.freechess.org#K#.\n\n#M#Prohlížení partií ve formátu PGN\n#S#PGN je nejrozšířenÄ›jším formátem pro ukládání Å¡achových partií. Spolu s tahy v nÄ›m lze\nukládat i komentáře a varianty. Pokud chcete otevřít soubor v tomto formátu pomocí eboardu,\notevÅ™ete menu #B#Windows#K# a kliknÄ›te na #B#Partie na klientovi#K#. V následnujícím\ndialogu kliknÄ›te na #B#Nahrát PGN...#K#. Pokud si chcete prohlédnout nÄ›kterou z partií,\n#B#vyberte ji#K# a kliknÄ›te na #B#Zobrazit partii#K#. Zvolená partie bude zobrazena na\nnovÄ› vytvoÅ™ené Å¡achovnici v hlavním oknÄ› aplikace.#L# L30 27 %d %s to %s, %d Hz for %d msec %d %s na %s, %d Hz na %d ms L13 21 %d games read PÅ™eÄteno %d partií L14 14 %d moves in %s %d tahů za %s L25 26 %d. Connect to %s:%d (%s) %d. PÅ™ipojit k %s:%d (%s) L41 42 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (bílý) x %s (Äerný)\n%s\n%d:%.2d %d L31 36 %s accepted your game proposal. %s pÅ™ijal vaÅ¡i nabídku na partii. L18 19 %s engine started. Motor %s spuÅ¡tÄ›n. L17 20 %s offers a draw. %s nabízí remízu. L11 9 %s per move %s na tah L33 55 (Wrapped) Match Found at Line %d. Shoda nalezena na řádku %d. (hledáno znovu od konce) L64 69 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (FICS pÅ™ezdívka: Pulga) L39 39 (message obfuscated -- password mode ?) (zpráva nezobrazena -- režim hesla ?) L14 11 (no bookmarks) (prázdné) L6 5 (none) (nic) L13 16 (time period) (Äasový úsek) L18 21 * game not found: * partie nenalezena: L47 59 ** [eboard] bad engine protocol # in bookmark: ** [eboard] Å¡patné Äíslo protokolu motoru v záložce: L57 69 ** eboard ** warning: HOME environment variable not set\n ** eboard ** varování: PromÄ›nná prstÅ™edí HOME není nastavena\n L26 36 --- %s game to PGN file %s --- Partie byla %s do PGN souboru %s L16 12 --- Disconnected --- Odpojeno L14 19 /Game/Ad_journ /Partie/_PÅ™eruÅ¡it L19 20 /Game/Retract _Move /Partie/Vrátit _tah L12 16 /Game/_Abort /Partie/_Opustit L17 25 /Game/_Offer Draw /Game/Nabídnout _remízu L13 15 /Game/_Resign /Partie/_Vzdát L22 26 /Help/_About eboard... /NápovÄ›da/_O programu... L17 30 /Help/_Debug Info /NápovÄ›da/_Ladicí informace L22 28 /Help/_Getting Started /NápovÄ›da/_StruÄný úvod L11 21 /Help/_Keys /NápovÄ›da/_Klávesy L10 16 /Help/sep4 /NápovÄ›da/sep4 L22 26 /Peer/Connect to _FICS /Oponent/PÅ™ipojit k _FICS L43 51 /Peer/Direct connect with _Remote eboard... /Oponent/Přímé spojení na vzdálený _eboard... L23 27 /Peer/Engine B_ookmarks /Oponent/Záložky _motorů L20 23 /Peer/ICS _Bookmarks /Oponent/Záložky _ICS L36 38 /Peer/Play against Engine/Cr_afty... /Oponent/Hrát proti motoru/_Crafty... L41 43 /Peer/Play against Engine/GNU Chess _4... /Oponent/Hrát proti motoru/_GNU Chess 4... L44 45 /Peer/Play against Engine/_Generic Engine... /Oponent/Hrát proti motoru/_Obecný motor... L35 37 /Peer/Play against Engine/_Sjeng... /Oponent/Hrát proti motoru/_Sjeng... L30 32 /Peer/Play against Engine/sep1 /Oponent/Hrát proti motoru/sep1 L26 28 /Peer/Play against _Engine /Oponent/Hrát proti _motoru L33 40 /Peer/_Connect to Other Server... /Oponent/_PÅ™ipojit k jinému serveru... L17 17 /Peer/_Disconnect /Oponent/_Odpojit L26 31 /Peer/_Empty Scratch Board /Oponent/_Prázdná Å¡achovnice L11 15 /Peer/_Quit /Oponent/_Konec L42 45 /Peer/_Scratch Board with Initial Position /Oponent/Å achovnice s _výchozím postavním L10 13 /Peer/sep2 /Oponent/sep2 L10 13 /Peer/sep3 /Oponent/sep3 L10 13 /Peer/sep4 /Oponent/sep4 L48 59 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Nastavení/Obrázkové sady figurek/Nahrát pouze _figurky L49 63 /Settings/Bitmapped Piece Sets/Load _Squares Only /Nastavení/Obrázkové sady figurek/Nahrát pouze _Å¡achovnici L42 51 /Settings/Bitmapped Piece Sets/Load _Theme /Nastavení/Obrázkové sady figurek/Nahrát _téma L31 37 /Settings/Bitmapped Piece _Sets /Nastavení/_Obrázkové sady figurek L35 45 /Settings/Enable Legality _Checking /Nastavení/Povolit _kontrolu platnosti tahů L55 82 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Nastavení/Chování ICS/PÅ™i _zahájení sledování partie zobrazit Å¡achovnici L69 81 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Nastavení/Chování ICS/PÅ™i _ukonÄení sledováné partie zruÅ¡it Å¡achovnici L18 28 /Settings/Pre_move /Nastavení/_PÅ™edvolba tahu L27 33 /Settings/Sho_w Coordinates /Nastavení/Zobrazit _souÅ™adnice L24 26 /Settings/_Animate Moves /Nastavení/_Animovat tahy L33 42 /Settings/_Beep on Opponent Moves /Nastavení/Pípnout po _tahu protihráÄe L30 35 /Settings/_Enable Other Sounds /Nastavení/_Zapnout ostatní zvuky L30 37 /Settings/_Highlight Last Move /Nastavení/_Zvýraznit poslední tah L23 26 /Settings/_ICS Behavior /Nastavení/Chování _ICS L25 25 /Settings/_Preferences... /Nastavení/_Možnosti... L47 60 /Settings/_Vectorized Pieces (Faster Rendering) /Nastavení/_Vektorové figurky (Rychlejší vykreslování) L14 16 /Settings/sep3 /Nastavení/sep3 L23 26 /Windows/Find _Previous /Okna/Zopakovat h_ledání L28 29 /Windows/Games on _Client... /Okna/Partie na _klientovi... L31 32 /Windows/Save Desktop _Geometry /Okna/Uložit nastavení _plochy L29 22 /Windows/Save _Text Buffer... /Okna/_Uložit text... L26 30 /Windows/_Ads on Server... /Okna/_Nabídky na serveru ... L26 26 /Windows/_Detached Console /Okna/Samostatná kon_zole L32 30 /Windows/_Find Text (upwards)... /Okna/_Hledat text (odzadu)... L28 27 /Windows/_Games on Server... /Okna/_Partie na serveru... L23 24 /Windows/_Run Script... /Okna/_Spustit skript... L13 10 /Windows/sep1 /Okna/sep1 L13 10 /Windows/sep2 /Okna/sep2 L13 10 /Windows/sep3 /Okna/sep3 L6 8 /_Game /_Partie L6 12 /_Help /_NápovÄ›da L6 9 /_Peer /_Oponent L10 12 /_Settings /_Nastavení L9 6 /_Windows /_Okna L106 137 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n\n L41 45 can't load font.\n nemohu nahrát font.\n L124 135 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** nepodaÅ™ilo se nahrát jeden Äi více fontů - nainstalujte 75 dpi a 100 dpi fonty, restartujete X a zkuste znovu.\n L58 65 ** failed to load one or more board fonts\n ** nepodaÅ™ilo se nahrát jeden Äi více fontů\n L34 44 abort request sent návrh na zruÅ¡ení odeslán L36 45 adjourn request sent návrh na odložení odeslán L33 42 draw request sent návrh na remízu odeslán L110 141 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n\n L45 46 ** bad pattern string: ** Å¡patný text vzoru: L40 42 ** file not found: ** soubor nenalezen: L39 47 failed to load nepodaÅ™ilo se nahrát L112 143 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n\n L34 42 failed to load nepodaÅ™ilo se nahrát L42 47 Adjourning not supported Odložení není podporováno L33 26 Session Aborted ZruÅ¡eno L35 44 draw request sent návrh na remízu odeslán L9 10 L17 19 > (password sent) > (heslo odesláno) L23 21 > [issued from menu] %s > [zvoleno z menu] %s L25 28 > [issued from shortcut] > [zadáno pomocí zkratky] L31 41 > [script run from shortcut] %s > [skript spuÅ¡tÄ›ný pomocí zkratky] %s L12 10 About eboard O programu L6 9 Accept PÅ™ijmout L36 38 Accepted incoming connection from %s PÅ™ijímám příchozí spojení od %s L14 26 Ad Description Detaily o nabízené parii L7 16 Ad List Nabídky partií L23 30 Ad List (refreshing...) Nabídky partií (obnovuji...) L33 41 Add to Peer/Engine Bookmarks menu PÅ™idat do menu Oponent/Záložky motorů L22 27 Address already in use Adresa je již používána L3 8 Ads Nabídky L21 16 Already connected ?!? Již spojeno ?!? L675 754 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. Kdekoliv:\nF3: PÅ™edchozí okno\nF4: Následující okno\nF5: Hlavní Å¡achovnice\nF6: Konzole\nF7: Okno nabídek (pokud je dostupné)\nF8: PÅ™epne zobrazení liÅ¡ty s tlaÄítky\nPage Up/Page Down: posouvá text v konzoli (musí být vidÄ›t)\nCtrl+(Å¡ipka vlevo): Jeden půltah zpÄ›t\nCtrl+(Å¡ipka vpravo): Jeden půltah vpÅ™ed\nCtrl+F: Hledá v pÅ™edchozím textu (buffer hlavní konzole)\nCtrl+G: Zopakuje hledání\n\nVstupní řádka:\nNahoru/Dolů (Å¡ipky): prochází historii zadaných příkazů\nEnter: OdeÅ¡le zadaný řádek\nEsc: pÅ™epíná KomunikaÄní/Příkazový režim\n\nSyntaxe:\nVstupní řádka hlavního okna:\n.. zadání "%prefix text" nastaví komunikaÄní prefix na "text".\n.. zadání "%do scriptname" spustí "scriptname". L10 6 Appearance Vzhled L8 9 Appended pÅ™idána L5 8 Apply Použít L13 8 Apply Changes Použít L24 38 Auto-save observed games Automaticky ukládat sledované partie L22 34 Auto-save played games Automaticky ukládat hrané partie L8 24 Autosave Automatické ukládání L10 7 Background Pozadí L14 18 Bad descriptor Chybný deskriptor L45 58 Beep (need Pitch, Duration, Count and Device) Pípnout (je tÅ™eba Výška, Délka, PoÄet a Zařízení) L10 11 Bishop %d StÅ™elec %d L5 7 Black ÄŒerný L14 16 Black: %s - %s ÄŒerný: %s - %s L17 16 Bookmark Caption: Název programu: L6 4 Bottom Dole L11 13 Bright Text SvÄ›tlý text L6 10 Browse Procházet L19 24 Buffer Save failed. Uložení textu selhalo. L8 8 Bughouse Bughouse L22 25 Bughouse: Partner Game Bughouse: Partie partnera L14 15 Button Caption Text tlaÄítka L11 16 Button Icon Ikona tlaÄítka L6 7 Cancel ZruÅ¡it L26 31 Cancelled connection wait. ÄŒekání na spojení zruÅ¡eno. L9 10 Change... ZmÄ›nit... L13 21 Channel Tells SdÄ›lení v kanálech L9 3 Checkmate Mat L14 18 Chess Programs Å achové programy L11 11 Choose Font Zvolte font L9 9 Choose... Vybrat... L10 10 Clock Font Font hodin L5 10 Close Zavřít L5 5 Color Barva L15 13 Color Selection VýbÄ›r barvy L6 5 Colors Barvy L7 8 Command Příkaz L13 21 Command Line: Příkazová řádky: L8 10 Computer PoÄítaÄ L30 40 Computer White vs. Human Black PoÄítaÄ bílými x ÄŒlovÄ›k Äernými L23 32 Configured Sound Files: Konfigurované zvukové soubory: L7 6 Connect Spojit L21 23 Connect to ICS Server PÅ™ipojit k ICS serveru L20 20 Connected to %s (%s) PÅ™ipojeno k %s (%s) L19 22 Connecting to %s... PÅ™ipojování k %s... L18 19 Connection refused Spojení odmítnuto L28 26 Connection to %s:%d failed: Spojení s %s:%d selhalo: L7 7 Console Konzole L12 19 Console Beep Pípnout na konzoli L12 12 Console Font Font konzole L21 23 Console buffer saved. Text v konzoli uložen. L6 7 Count: PoÄet: L10 10 Crazyhouse Crazyhouse L15 14 Dark Squares... Tmavá pole... L18 24 Delete All Entries Smazat vÅ¡echny položky L17 20 Delete This Entry Smazat tuto položku L12 20 Depth Limit: Maximální hloubka: L11 5 Description Popis L7 12 Device: Zařízení: L50 54 Directory to run from (e.g., where book files are) Adresář motoru (napÅ™. kde jsou knihovny zahájení) L10 10 Directory: Adresář: L11 14 Discard All Odstranit vÅ¡e L12 16 Discard Game Odstranit partii L7 8 Dismiss Zavřít L12 15 Display Game Zobrazit partii L9 10 Displayed Zobrazená L81 80 Distributed under the terms of the GNU General Public License, version 2 or later Distribuováno za podmínek GNU General Public License, verze 2 nebo pozdÄ›jší L12 16 Draw Offered Nabídka remízi L16 29 Draw offer sent. Nabídka na remízu odeslána L18 15 Drawn by agreement Remíza dohodou L11 16 Drop Piece: Umístit kámen: L16 12 Duration (msec): Délka (ms): L18 27 Dynamic Seek Table Dynamická tabulka nabídek L17 20 Edit Bookmarks... Upravit záložky... L21 22 Edit Engine Bookmarks Upravit seznam motorů L14 12 Edit Game Info Upravit Info L17 24 Edit Time Control Upravit nastavení hodin L5 9 Empty Prázdná L16 16 Engine Bookmarks Použité motory L14 18 Engine Command SpuÅ¡tÄ›ní motoru L12 11 Engine Type: Typ motoru: L28 26 Engine Type: %s (uneditable) Typ motoru: %s (nemÄ›nné) L43 55 Engine asked more time to startup, waiting. Motor požádal o více Äasu na spuÅ¡tÄ›ní, Äekáme. L19 31 Engine command line Příkaz pro spuÅ¡tÄ›ní motoru L14 17 Engine loaded. Motor pÅ™ipraven. L14 13 Engine running Motor běží L30 40 Engine started (2 sec timeout) Motor spuÅ¡tÄ›n (2 vteÅ™iny zpoždÄ›ní) L18 18 Enter FEN Position Zadejte FEN Pozice L10 13 Event Type Typ události L13 24 Exam.Game #%d Prohlížení partie #%d L21 29 Failed to run engine. NepodaÅ™ilo se spustit motor. L28 41 Failed to run helper program NepodaÅ™ilo se spustit podpůrný program L30 33 File to play / Program to run: Soubor k pÅ™ehrání/spuÅ¡tÄ›ní: L8 6 Filter: Filtr: L14 17 Filter: (none) Filtr: (žádný) L36 43 Finish the current connection first. Nejdříve ukonÄete stávající spojení. L30 40 Finish the current game first. Nejdříve ukonÄete stavající partii. L5 7 Flags ZnaÄky L5 5 Fonts Fonty L22 15 From Elsewhere (%d %s) Odjinud (%d %s) L20 17 From Engines (%d %s) Z motorů (%d %s) L8 9 From FEN Podle FEN L16 13 From ICS (%d %s) Z ICS (%d %s) L22 22 From PGN Files (%d %s) Z PGN souborů (%d %s) L6 8 Game # Partie # L8 10 Game #%d Partie #%d L19 21 Game #%d - %d %d %s Partie #%d - %d %d %s L20 22 Game #%d - %s vs. %s Partie #%d - %s vs. %s L21 25 Game #%d - untimed %s Partie #%d - bez hodin %s L12 11 Game #%d: %s Hra #%d: %s L12 15 Game Aborted Partie zruÅ¡ena L16 12 Game Description Popis partie L21 27 Game Information Font Font pro informace o partii L9 14 Game List Seznam partií L25 28 Game List (refreshing...) Seznam partií (obnovuji...) L9 16 Game Lost Prohraná partie L12 16 Game Started ZaÄátek partie L8 15 Game Won Vyhraná partie L19 22 Game appended to %s Partie pÅ™ipojena k %s L17 16 Game in progress. Partie se hraje. L13 20 Game over: %s Partie skonÄila: %s L19 29 Game proposal sent. Nabídka na partii odeslána. L13 15 Game started! Partie zaÄala! L12 20 Game/Board: Partie/Å achovnice: L5 6 Games Partie L24 27 Generic XBoard Engine... Obecný motor pro XBoard... L8 8 Giveaway Giveaway L46 54 Graphic representation of crazy/bughouse stock Grafické zobrazení záložních crazy/bughouse figur L16 29 Help: Debug Info NápovÄ›da: Ladicí informace L22 27 Help: Getting Started NápovÄ›da: StruÄný úvod L10 20 Help: Keys NápovÄ›da: Klávesy L5 7 Hide! Skrýt! L18 20 Host not found: %s Server nenalezen: %s L8 14 Hostname Jméno serveru L23 23 Hostname or IP address: Jméno nebo IP adressa: L5 8 Human ÄŒlovÄ›k L30 40 Human White vs. Computer Black ÄŒlovÄ›k bílými x PoÄítaÄ Äernými L17 23 Human plays white ÄŒlovÄ›k hraje bílými L13 21 ICS Challenge Výzva k partii (ICS) L25 47 IPC pipe creation failed. NepodaÅ™ilo se vytvoÅ™it spojení mezi procesy. L2 2 Id Id L104 120 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. Pokud vyberete záložku, motor zahraje\ndalší tah, bez ohledu na to, jaká\nstrana je uvedena v nastavení záložky. L43 57 Illegal Drop on %c%d (Legality Checking On) Nepovolené umístÄ›ní %c%d (Kontrola platnosti zapnuta) L44 53 Illegal Move %c%d%c%d (Legality Checking On) Nepovolený tah %c%d%c%d (Kontrola platnosti zapnuta) L23 28 Illegal move, not sent. Neplatný tah - neodesláno. L17 17 Increment (secs): Přírůstek (s): L10 13 Increment: Přírůstek: L55 67 Inhibit seek lines on console when Seek Table is active Nezobrazovat nabídky v konzoli, pokud je tabulka nabídek aktivní L16 9 Initial Position Výchozí L23 29 Initial time ([mm:]ss): PoÄáteÄní Äas ([mm:]ss): L19 18 Initializing engine Inicializuji motor L3 6 Key KlÃ­Ä L4 7 Key: KlíÄ: L17 23 Kibitzes/Whispers Kibicování/Å eptání L4 8 Kill UkonÄit L10 10 Knight %d Jezdec %d L22 28 Last Proposal Received Poslední pÅ™ijatá nabídka L4 5 Left Vlevo L16 16 Light Squares... SvÄ›tlá pole... L8 11 Load PGN Nahrát PGN L11 14 Load PGN... Nahrát PGN... L5 8 Local Místní L15 26 Local Game List Seznam lokálních partií L21 23 Looking up host %s... Hledání serveru %s... L6 6 Losers Losers L10 15 Main Board Hl. Å¡achovnice L13 10 Mamer and TDs Mamer a TD L14 17 Manual/Formula Manuální/Vzorec L23 29 Match Found at Line %d. Shoda nalezena na řádku %d. L15 15 Match Pattern: Hledaný vzor: L17 18 Material: %d - %d Materiál: %d - %d L8 13 Max Ply: Max. hloubka: L30 37 Move made (Obs'vd/Exm'd Games) Tah (Sledovaná/Prohlížená partie) L5 4 Moves Tahy L22 20 Network is unreachable Síť je nedostupná L18 18 News/Notifications Novinky/Oznámení L2 2 No Ne L9 10 No error. Bez chyby. L19 31 No material to mate Nedostatek materiálu k výhÅ™e L8 13 No peer. Bez oponenta. L19 32 No previous search. Neexistuje pÅ™edchozí hledání L18 28 No proposals left. Nezbývá žádná nabídka. L22 29 No proposals received. NepÅ™ijata žádná nabídka. L4 3 None Nic L12 17 Normal Chess Normální Å¡achy L11 15 Normal Text Normální text L16 16 Not a socket ?!? Není socket ?!? L2 2 OK OK L17 23 Obs'vd Game Ended Konec sledované partie L7 8 Observe Sledovat L2 2 Ok OK L160 205 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Servery ke kterým se pÅ™ihlásíte pomocí tohoto dialogu budou pÅ™idány\ndo menu Oponent/ICS Záložky. Pokud chcete zmÄ›nit nebo odstranit položky\nz tohoto menu, upravte soubor ~/.eboard/eboard.conf. L293 327 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Do konzole budou pÅ™idávány pouze řádky, které odpovídají\nvýše uvedenému vzoru. Vzory mohou být kombinovány pomocí\nznaku | (logické nebo). Znak * (hvÄ›zdiÄka) znamená cokoliv.\nPříklady:\n'(20)|(22)' ukáže pouze řádky z kanálů 20 a 22\n'blik * bored' ukáže řádky obsahující 'blik '(...)' bored'. L14 13 Opponent Moved Oponent táhl L7 5 Options Volby L11 13 PGN Headers PGN HlaviÄka L13 19 PGN filename: Jméno PNG souboru: L14 20 Partner Tells: Zprávy od partnera: L10 12 Pawn %d Pěšec %d L11 13 Pitch (Hz): Výška (Hz): L4 18 Play PÅ™ijmout nabídku L56 66 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Hrát %s jako %s x %s (%s, maxhloubka %d, stále pÅ™emýšlet: %s) L58 76 Play WAV (need Device and Filename, sox must be installed) PÅ™ehrát WAV (je tÅ™eba Zařízení a Soubor; musí být nainstalován sox) L19 18 Play against Crafty Hrát proti Crafty L19 18 Play against Engine Hrát proti motoru L24 23 Play against GNU Chess 4 Hrát proti GNU Chess 4 L18 17 Play against Sjeng Hrát proti Sjeng L6 6 Player HrÃ¡Ä L14 12 Player resigns HrÃ¡Ä vzdal L22 25 Player/Color Name Font Font jména hráÄe/barvy L14 16 Pos: %s vs. %s Pozice: %s vs %s L11 10 Preferences Nastavení L12 19 Private Tell Soukromé sdÄ›lení L13 19 Private Tells Soukromá sdÄ›lení L23 31 Program exited too soon Program skonÄil příliÅ¡ brzy L8 6 Progress Postup L17 21 Promotion Piece PromÄ›nit na figuru L7 10 Propose Nabídnout L12 17 Propose Game Nabídnout partii L8 8 Protocol Protokol L33 38 Protocol mismatch, disconnecting. Chybný protokol - ukonÄuji spojení. L10 11 Queen %d Dáma %d L5 10 Rated Hodnocení L6 6 Rating Rating L12 14 Rating Range Rozsah ratingu L33 23 Received a game proposal from %s. %s vám nabízí parii. L12 17 Recent Hosts Poslední servery L12 14 Refresh List Obnovit seznam L19 28 Replied to seek #%d OdpovÄ›Ä na nabídku Ä. %d L9 6 Resigned. Vzdal. L6 9 Result Výsledek L20 26 Retracted last move. Poslední tah byl vrácen. L45 45 Retrieve ICS Channel Lists from eboard.sf.net Stáhnout seznam ICS kanálů z eboard.sf.net L18 18 Revert to Defaults ZpÄ›t na výchozí L18 18 Revert to defaults ZpÄ›t na výchozí L5 6 Right Vpravo L10 12 Rook %d Věž %d L3 7 Run Spustit L13 16 Run Engine... Spustit motor... L27 34 Run Program (need Filename) Spustit program (je tÅ™eba Soubor) L47 51 Run autofics.pl script after connecting to FICS Spustit autofics.pl skript po pÅ™ihlášení k FICS L17 20 Save Buffer As... Uložit text jako... L12 17 Save Game... Uložit partii... L11 16 Save as PGN Uložit jako PGN L10 8 Scratch %d Nová %d L6 6 Script Skript L11 15 Script List Seznam skriptů L34 35 Scrollback limit (0 = unlimited) : Historie konzole (0 = neomezená) : L11 11 Search Text Hledat text L12 14 Search for: Hledaný text: L22 24 Search text not found. Hledaný text nenalezen. L8 16 Seek Ads Nabídky partií L10 16 Seek Table Tabulka nabídek L15 21 Seek Table Font Font tabulky nabídek L10 17 Set Filter Nastavení filtru L13 17 Set Filter... Nastavit filtr... L49 56 Set depth limit to 0 to use the engine's default. Hloubka 0 znamená použít výchozí nastavení motoru. L13 19 Setup Buttons Nastavit tlaÄítka L21 21 Shortcut Button Setup Nastavení tlaÄítek L6 9 Shouts VýkÅ™iky L42 40 Show channel tells in one pane per channel Samostatná okna pro jednotlivé kanály L63 83 Show channel tells on console too (when above option is active) Zobrazovat sdÄ›lení z kanálů také na konzoli (je-li pÅ™edchozí volba aktivní) L31 38 Show rating next to player name Zobrazovat rating vedle jména hráÄe L33 38 Show shortcut buttons below board Zobrazovat tlaÄítka pod Å¡achovnicí L11 13 Side & Time Strana a Äas L14 14 Side Selection VýbÄ›r strany L14 16 Side to move: HrÃ¡Ä na tahu: L34 46 Smoother animation (eats more CPU) Plynulá animace (vÄ›tší zátěž procesoru) L76 50 Sorry, this protocol does not allow to retract a move thru this menu option. Lituji, ale tento protokol nedovoluje vracet tahy. L11 17 Sound Event Zvuková událost L12 20 Sound Events OzvuÄené události L6 5 Sounds Zvuky L54 60 Source code available at http://eboard.sourceforge.net Zdrojový kód je dostupný na http://eboard.sourceforge.net L9 3 Stalemate Pat L18 17 Start a connection Navázat spojení L14 19 Starting Time: PoÄáteÄní Äas: L7 7 Suicide Suicide L8 8 TCP Port TCP port L9 9 TCP Port: TCP port: L12 21 Tab Position UmístÄ›ní záložek L4 4 Test Test L52 53 The checkbox on the left enables/disables the sound. ZaÅ¡krtnutí políÄka nalevo povoluje/zakazuje zvuk. L69 81 The engine will be run with\n/bin/sh -c 'cd directory ; command line' Motor bude spuÅ¡tÄ›n pomocí\n/bin/sh -c 'cd adresář; příkaz pro spuÅ¡tÄ›ní' L12 22 Think Always PÅ™emýšlí neustále L24 34 Think on opponent's time PÅ™emýšlet v Äase protihráÄe. L4 4 Time ÄŒas L12 16 Time Control Nastavení Äasu L15 20 Time Control... ÄŒasové kontroly... L13 18 Time Control: ÄŒasová kontrola: L16 16 Time Running Out ÄŒasová tíseň L7 13 Timeout VyprÅ¡el Äas L44 53 Times can be given as hh:mm:ss , mm:ss or ss ÄŒas může být uveden jako hh:mm:ss , mm:ss nebo ss L180 190 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Pokud chcete spustit více příkazů jedním tlaÄítkem oddÄ›lte je ; (stÅ™edníkem).\nPokud chcete spustit skript, nastavte příkaz na script.JménoSkriptu, napÅ™.: script.MujSkript.pl . L3 7 Top NahoÅ™e L30 33 Type: Fischer Clock (ICS-like) Typ: Fischerovi hodiny (styl ICS) L25 22 Type: Fixed Time per Move Typ: ÄŒas na jeden tah L34 41 Type: Use engine's default setting Typ: Použít výchozí nastavení motoru L29 29 Type: X Moves per Time Period Typ: X tahů v urÄité dobÄ› L26 23 Unable to bind on port %d. Nemohu obsadit port %d. L24 24 Unable to create socket. Nemohu vytvoÅ™it socket. L13 15 Unknown error Neznámá chyba L14 19 Unknown result Neznámý výsledek L23 18 Use plain color squares Jednobarevná pole L5 7 Value Hodnota L6 8 Value: Hodnota: L7 8 Variant Varianta L8 9 Variant: Varianta: L24 24 Variant: %s (uneditable) Varianta: %s (nemÄ›nné) L4 6 Wait ÄŒekej L21 18 Wait for a connection ÄŒekat na spojení L34 32 Waiting for connection on port %d. ÄŒekám na spojení na portu %d. L30 40 Warn when own clock is below: UpozornÄ›ní pokud zbývá ménÄ› než: L18 26 Welcome to eboard. Vítejte v programu eboard L5 6 White Bílý L14 15 White: %s - %s Bílý: %s - %s L10 10 Working... Pracuji... L16 17 Write to Console Zapsat do konzole L19 21 Wrong address space Chybný prostor adres L5 8 Wrote zapsána L3 3 Yes Ano L49 46 You can only retract when it's your turn to move. Vracet tahy můžete pouze pokud jste na tahu. L11 12 Your color: VaÅ¡e barva: L10 13 Your name: VaÅ¡e jméno: L6 5 [chat] [kom] L5 8 [cmd] [přík] L39 46 [eboard] ** failed to create directory [eboard] ** nepodaÅ™ilo se vytvoÅ™it adresář L20 29 [eboard] ** no $HOME [eboard] ** nenastaveno $HOME L22 52 [eboard] bad RC line\n [eboard] chybná řádka v konfiguraÄním souboru\n L4 9 beep pípnutí L5 9 beeps pípnutí L5 7 black Äerný L53 57 can't load PGN move text from %s (error opening file) nemohu nahrát PGN z %s (chyba pÅ™i otevírání souboru) L30 34 can't seek to offset %lu of %s nemohu pÅ™ejít na offset %lu v %s L14 19 discards board zruší Å¡achovnici L32 37 eboard Direct Connection Manager eboard - Správce přímého spojení L22 20 eboard version %s (%s) eboard verze %s (%s) L343 329 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard verze %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nTento program je free software; můžete jej\nšířit a/nebo mÄ›nit za podmínek uvedených v\nGNU General Public Licence publikované Free\nSoftware Foundation; a to verze 2 nebo (dle\nvaÅ¡eho uvážení) kterékoliv pozdÄ›jší.\n L19 19 eboard: Console #%d eboard: Konzole #%d L60 66 engine claimed illegal move but we didn't move, ignoring it. motor hlásí neplatný tah, ale my jsme netáhli - ignorujeme ho. L22 27 error parsing PGN data chyba pÅ™i rozkladu PGN dat L11 20 flips board obrátí Å¡achovnici L4 6 game partie L5 7 games partií L17 17 generic xboard v2 obecný xboard v2 L20 19 goes back 1 halfmove jde zpÄ›t 1 půltah L26 29 goes back to start of game jde zpÄ›t na zaÄátek partie L23 20 goes forward 1 halfmove jde vpÅ™ed 1 půltah L27 26 goes forward to end of game jde vpÅ™ed na konec partie L13 14 illegal move! neplatný tah! L11 8 in progress hraje se L29 34 initial time %s, increment %s výchozí Äas %s, přírůstek %s L8 8 moves in tahů za L2 2 no ne L14 23 no such game: neexistující partie: L19 21 no time control set bez Äasové kontroly L4 5 none není L7 3 nothing nic L37 47 opens new scratch board with position vytvoří novou Å¡achovnici s výchozí pozicí L8 6 per move na tah L18 25 plain console beep prosté pípnutí konzole L12 19 play file %s pÅ™ehrát soubor %s L21 21 pops up the move list zobrazí seznam tahů L24 32 process creation failed. NepodaÅ™ilo se vytvoÅ™it proces. L5 10 rated hodnocená L6 10 run %s spustit %s L10 13 running %s provádím %s L18 21 savePGN failed: %s savePGN neuspÄ›lo: %s L54 65 savePGN failed: Won't save game with less than 2 moves savePGN neuspÄ›lo: Nelze uložit partii s ménÄ› než dvÄ›ma tahy L8 7 seconds. sekund. L7 6 unrated volná L5 6 white bílý L3 3 yes ano E 492 eboard-1.1.1.orig/multilang/eboard.cs.po0000644000175000017500000020123610757567572017500 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** NPODAŘILO SE NAHRÃT PNG: použity interní figury s nízkým rozliÅ¡ením. Výsledek bude oÅ¡klivý.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " Procházet... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Hraj zvolenou " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " Obnovit " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " Odstranit položku " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Nastavit " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#StruÄný úvod\n" "#M#Běžné Äinnosti s eboard\n" "\nHra proti poÄítaÄi\n" "#S#eboard neumí \"hrát Å¡achy\", ale funguje jako rozhraní k programům, které to dokáží.\n" "Tyto programy, Å¡achové \"motory\", sice dokáží hrát Å¡achy, ale postrádají grafické rozhraní.\n" "Abyjste mohl(a) hrát proti poÄítaÄi potÅ™ebujete motor. GNU Chess, Crafty a Sjeng jsou\n" "zdarma dostupné motory.\n" "Pokud máte nÄ›který z tÄ›chto motorů nainstalován, otevÅ™ete menu #B#Oponent#K#, v nÄ›m\n" "zvolte položku #B#Hrát proti motoru#K# a vyberte motor instalovaný na vaÅ¡em poÄítaÄi.\n" "\n#M#Hra pÅ™es Internet\n" "#S#Eboard podporuje FICS protokol, používaný serverem freechess.org. Tento protokol používají\n" "i jiné servery jako US Chess Live. Eboard nepodporuje protokol ICC.\n" "Pokud se chcete pÅ™ipojit k FICS, otevÅ™ete menu #B#Oponent#K# a kliknÄ›te na #B#PÅ™ipojit k FICS#K#.\n" "Jestliže se chcete pÅ™ipojit k jinému serveru otevÅ™ete menu #B#Oponent#K# a kliknÄ›te na\n" "#B#PÅ™ipojit k jinému serveru...#K#.\n" "K FICS se můžete pÅ™ipojit jak host, ale mnohem lepší je stát se registrovaným uživatelem.\n" "Registrovat se můžete bezplatnÄ› na domácí stránce FICS #B#http://www.freechess.org#K#.\n" "\n#M#Prohlížení partií ve formátu PGN\n" "#S#PGN je nejrozšířenÄ›jším formátem pro ukládání Å¡achových partií. Spolu s tahy v nÄ›m lze\n" "ukládat i komentáře a varianty. Pokud chcete otevřít soubor v tomto formátu pomocí eboardu,\n" "otevÅ™ete menu #B#Windows#K# a kliknÄ›te na #B#Partie na klientovi#K#. V následnujícím\n" "dialogu kliknÄ›te na #B#Nahrát PGN...#K#. Pokud si chcete prohlédnout nÄ›kterou z partií,\n" "#B#vyberte ji#K# a kliknÄ›te na #B#Zobrazit partii#K#. Zvolená partie bude zobrazena na\n" "novÄ› vytvoÅ™ené Å¡achovnici v hlavním oknÄ› aplikace.#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s na %s, %d Hz na %d ms" # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "PÅ™eÄteno %d partií" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d tahů za %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. PÅ™ipojit k %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (bílý) x %s (Äerný)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s pÅ™ijal vaÅ¡i nabídku na partii." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "Motor %s spuÅ¡tÄ›n." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s nabízí remízu." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s na tah" # state: untranslated # (1) clock.cc:317 msgid "%s/move" msgstr "" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "Shoda nalezena na řádku %d. (hledáno znovu od konce)" # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (FICS pÅ™ezdívka: Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(zpráva nezobrazena -- režim hesla ?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(prázdné)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(nic)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(Äasový úsek)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* partie nenalezena: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] Å¡patné Äíslo protokolu motoru v záložce: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** varování: PromÄ›nná prstÅ™edí HOME není nastavena\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- Partie byla %s do PGN souboru %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Odpojeno" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partie/_PÅ™eruÅ¡it" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Partie/Vrátit _tah" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partie/_Opustit" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Game/Nabídnout _remízu" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partie/_Vzdát" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/NápovÄ›da/_O programu..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/NápovÄ›da/_Ladicí informace" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/NápovÄ›da/_StruÄný úvod" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/NápovÄ›da/_Klávesy" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/NápovÄ›da/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Oponent/PÅ™ipojit k _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Oponent/Přímé spojení na vzdálený _eboard..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Oponent/Záložky _motorů" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Oponent/Záložky _ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Oponent/Hrát proti motoru/_Crafty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Oponent/Hrát proti motoru/_GNU Chess 4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Oponent/Hrát proti motoru/_Obecný motor..." # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Oponent/Hrát proti motoru/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Oponent/Hrát proti motoru/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Oponent/Hrát proti _motoru" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Oponent/_PÅ™ipojit k jinému serveru..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Oponent/_Odpojit" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Oponent/_Prázdná Å¡achovnice" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Oponent/_Konec" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Oponent/Å achovnice s _výchozím postavním" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Oponent/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Oponent/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Oponent/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Nastavení/Obrázkové sady figurek/Nahrát pouze _figurky" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Nastavení/Obrázkové sady figurek/Nahrát pouze _Å¡achovnici" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Nastavení/Obrázkové sady figurek/Nahrát _téma" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Nastavení/_Obrázkové sady figurek" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Nastavení/Povolit _kontrolu platnosti tahů" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Nastavení/Chování ICS/PÅ™i _zahájení sledování partie zobrazit Å¡achovnici" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Nastavení/Chování ICS/PÅ™i _ukonÄení sledováné partie zruÅ¡it Å¡achovnici" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Nastavení/_PÅ™edvolba tahu" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Nastavení/Zobrazit _souÅ™adnice" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Nastavení/_Animovat tahy" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Nastavení/Pípnout po _tahu protihráÄe" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Nastavení/_Zapnout ostatní zvuky" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Nastavení/_Zvýraznit poslední tah" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Nastavení/Chování _ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Nastavení/_Možnosti..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Nastavení/_Vektorové figurky (Rychlejší vykreslování)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Nastavení/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Okna/Zopakovat h_ledání" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Okna/Partie na _klientovi..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Okna/Uložit nastavení _plochy" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Okna/_Uložit text..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Okna/_Nabídky na serveru ..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Okna/Samostatná kon_zole" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Okna/_Hledat text (odzadu)..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Okna/_Partie na serveru..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Okna/_Spustit skript..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Okna/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Okna/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Okna/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Partie" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_NápovÄ›da" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Oponent" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "/_Nastavení" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/_Okna" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n" "\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " nemohu nahrát font.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** nepodaÅ™ilo se nahrát jeden Äi více fontů - nainstalujte 75 dpi a 100 dpi fonty, restartujete X a zkuste znovu.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** nepodaÅ™ilo se nahrát jeden Äi více fontů\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " návrh na zruÅ¡ení odeslán" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " návrh na odložení odeslán" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " návrh na remízu odeslán" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n" "\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** Å¡patný text vzoru: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** soubor nenalezen: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " nepodaÅ™ilo se nahrát " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Varování: nepodaÅ™ilo se nahrát neproporcionální font, obsah tohoto dialogu bude vypadat Å¡karedÄ›.\n" "\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " nepodaÅ™ilo se nahrát " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " Odložení není podporováno" # state: untranslated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr "" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " ZruÅ¡eno" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " návrh na remízu odeslán" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (heslo odesláno)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [zvoleno z menu] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [zadáno pomocí zkratky] " # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [skript spuÅ¡tÄ›ný pomocí zkratky] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "O programu" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "PÅ™ijmout" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "PÅ™ijímám příchozí spojení od %s" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Detaily o nabízené parii" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Nabídky partií" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Nabídky partií (obnovuji...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "PÅ™idat do menu Oponent/Záložky motorů" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "Adresa je již používána" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Nabídky" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "Již spojeno ?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "Kdekoliv:\n" "F3: PÅ™edchozí okno\n" "F4: Následující okno\n" "F5: Hlavní Å¡achovnice\n" "F6: Konzole\n" "F7: Okno nabídek (pokud je dostupné)\n" "F8: PÅ™epne zobrazení liÅ¡ty s tlaÄítky\n" "Page Up/Page Down: posouvá text v konzoli (musí být vidÄ›t)\n" "Ctrl+(Å¡ipka vlevo): Jeden půltah zpÄ›t\n" "Ctrl+(Å¡ipka vpravo): Jeden půltah vpÅ™ed\n" "Ctrl+F: Hledá v pÅ™edchozím textu (buffer hlavní konzole)\n" "Ctrl+G: Zopakuje hledání\n" "\nVstupní řádka:\n" "Nahoru/Dolů (Å¡ipky): prochází historii zadaných příkazů\n" "Enter: OdeÅ¡le zadaný řádek\n" "Esc: pÅ™epíná KomunikaÄní/Příkazový režim\n" "\nSyntaxe:\n" "Vstupní řádka hlavního okna:\n" ".. zadání \"%prefix text\" nastaví komunikaÄní prefix na \"text\".\n" ".. zadání \"%do scriptname\" spustí \"scriptname\"." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Vzhled" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "pÅ™idána" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Použít" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Použít" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Automaticky ukládat sledované partie" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Automaticky ukládat hrané partie" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Automatické ukládání" # state: untranslated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Pozadí" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Chybný deskriptor" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Pípnout (je tÅ™eba Výška, Délka, PoÄet a Zařízení)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "StÅ™elec %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "ÄŒerný" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "ÄŒerný: %s - %s" # state: untranslated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" # state: untranslated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Název programu:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Dole" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "SvÄ›tlý text" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Procházet" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Uložení textu selhalo." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Partie partnera" # state: untranslated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Text tlaÄítka" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Ikona tlaÄítka" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "ZruÅ¡it" # state: untranslated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "ÄŒekání na spojení zruÅ¡eno." # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "ZmÄ›nit..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "SdÄ›lení v kanálech" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Mat" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Å achové programy" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Zvolte font" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Vybrat..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Font hodin" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr " Zavřít " # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Barva" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "VýbÄ›r barvy" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Barvy" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Příkaz" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Příkazová řádky:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "PoÄítaÄ" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "PoÄítaÄ bílými x ÄŒlovÄ›k Äernými" # state: untranslated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Konfigurované zvukové soubory:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Spojit" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "PÅ™ipojit k ICS serveru" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "PÅ™ipojeno k %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "PÅ™ipojování k %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Spojení odmítnuto" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Spojení s %s:%d selhalo: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Konzole" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Pípnout na konzoli" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Font konzole" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Text v konzoli uložen." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "PoÄet:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: untranslated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "" # state: untranslated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "" # state: untranslated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Tmavá pole..." # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Smazat vÅ¡echny položky" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Smazat tuto položku" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Maximální hloubka:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Popis" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Zařízení:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Adresář motoru (napÅ™. kde jsou knihovny zahájení)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Adresář:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Odstranit vÅ¡e" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Odstranit partii" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Zavřít" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Zobrazit partii" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Zobrazená" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distribuováno za podmínek GNU General Public License, verze 2 nebo pozdÄ›jší" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Nabídka remízi" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Nabídka na remízu odeslána" # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Remíza dohodou" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Umístit kámen:" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Délka (ms):" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Dynamická tabulka nabídek" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Upravit záložky..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Upravit seznam motorů" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Upravit Info" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Upravit nastavení hodin" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Prázdná" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Použité motory" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "SpuÅ¡tÄ›ní motoru" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Typ motoru:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Typ motoru: %s (nemÄ›nné)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "Motor požádal o více Äasu na spuÅ¡tÄ›ní, Äekáme." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Příkaz pro spuÅ¡tÄ›ní motoru" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Motor pÅ™ipraven." # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Motor běží" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Motor spuÅ¡tÄ›n (2 vteÅ™iny zpoždÄ›ní)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Zadejte FEN Pozice" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Typ události" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Prohlížení partie #%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "NepodaÅ™ilo se spustit motor." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "NepodaÅ™ilo se spustit podpůrný program" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Soubor k pÅ™ehrání/spuÅ¡tÄ›ní:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtr:" # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtr: (žádný)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Nejdříve ukonÄete stávající spojení." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Nejdříve ukonÄete stavající partii." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "ZnaÄky" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Fonty" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "Odjinud (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "Z motorů (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "Podle FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "Z ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "Z PGN souborů (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Partie #" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partie #%d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partie #%d - %d %d %s" # state: untranslated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "" # state: untranslated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partie #%d - %s vs. %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partie #%d - bez hodin %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Hra #%d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partie zruÅ¡ena" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Popis partie" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Font pro informace o partii" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Seznam partií" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Seznam partií (obnovuji...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Prohraná partie" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "ZaÄátek partie" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Vyhraná partie" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Partie pÅ™ipojena k %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partie se hraje." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Partie skonÄila: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Nabídka na partii odeslána." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "Partie zaÄala!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partie/Å achovnice: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Partie" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Obecný motor pro XBoard..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Grafické zobrazení záložních crazy/bughouse figur" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "NápovÄ›da: Ladicí informace" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "NápovÄ›da: StruÄný úvod" # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "NápovÄ›da: Klávesy" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "Skrýt!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Server nenalezen: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Jméno serveru" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Jméno nebo IP adressa:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "ÄŒlovÄ›k" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "ÄŒlovÄ›k bílými x PoÄítaÄ Äernými" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "ÄŒlovÄ›k hraje bílými" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Výzva k partii (ICS)" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "NepodaÅ™ilo se vytvoÅ™it spojení mezi procesy." # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Id" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Pokud vyberete záložku, motor zahraje\n" "další tah, bez ohledu na to, jaká\n" "strana je uvedena v nastavení záložky." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Nepovolené umístÄ›ní %c%d (Kontrola platnosti zapnuta)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Nepovolený tah %c%d%c%d (Kontrola platnosti zapnuta)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Neplatný tah - neodesláno." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Přírůstek (s):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Přírůstek:" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Nezobrazovat nabídky v konzoli, pokud je tabulka nabídek aktivní" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Výchozí" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "PoÄáteÄní Äas ([mm:]ss):" # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Inicializuji motor" # state: untranslated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "KlíÄ" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "KlíÄ:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibicování/Å eptání" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "UkonÄit" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Jezdec %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Poslední pÅ™ijatá nabídka" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Vlevo" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "SvÄ›tlá pole..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "Nahrát PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Nahrát PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Místní" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Seznam lokálních partií" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Hledání serveru %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Hl. Å¡achovnice" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer a TD" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manuální/Vzorec" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Shoda nalezena na řádku %d." # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Hledaný vzor: " # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Materiál: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Max. hloubka:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Tah (Sledovaná/Prohlížená partie)" # state: untranslated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" # state: untranslated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "" # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Tahy" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "Síť je nedostupná" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "Novinky/Oznámení" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "Ne" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Bez chyby." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "Nedostatek materiálu k výhÅ™e" # state: untranslated # (1) network.cc:781 msgid "No output from program." msgstr "" # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Bez oponenta." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "Neexistuje pÅ™edchozí hledání" # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "Nezbývá žádná nabídka." # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "NepÅ™ijata žádná nabídka." # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Nic" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Normální Å¡achy" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Normální text" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "Není socket ?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "OK" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Konec sledované partie" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Sledovat" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "OK" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Servery ke kterým se pÅ™ihlásíte pomocí tohoto dialogu budou pÅ™idány\n" "do menu Oponent/ICS Záložky. Pokud chcete zmÄ›nit nebo odstranit položky\n" "z tohoto menu, upravte soubor ~/.eboard/eboard.conf." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Do konzole budou pÅ™idávány pouze řádky, které odpovídají\n" "výše uvedenému vzoru. Vzory mohou být kombinovány pomocí\n" "znaku | (logické nebo). Znak * (hvÄ›zdiÄka) znamená cokoliv.\n" "Příklady:\n" "'(20)|(22)' ukáže pouze řádky z kanálů 20 a 22\n" "'blik * bored' ukáže řádky obsahující 'blik '(...)' bored'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "Oponent táhl" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Volby" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "PGN HlaviÄka" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "Jméno PNG souboru:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Zprávy od partnera:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Pěšec %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Výška (Hz):" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "PÅ™ijmout nabídku" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Hrát %s jako %s x %s (%s, maxhloubka %d, stále pÅ™emýšlet: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "PÅ™ehrát WAV (je tÅ™eba Zařízení a Soubor; musí být nainstalován sox)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Hrát proti Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Hrát proti motoru" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Hrát proti GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Hrát proti Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "HráÄ" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "HrÃ¡Ä vzdal" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Font jména hráÄe/barvy" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pozice: %s vs %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Nastavení" # state: untranslated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "" # state: untranslated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "" # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Soukromé sdÄ›lení" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Soukromá sdÄ›lení" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "Program skonÄil příliÅ¡ brzy" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Postup" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "PromÄ›nit na figuru " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Nabídnout" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Nabídnout partii" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protokol" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Chybný protokol - ukonÄuji spojení." # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Dáma %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Hodnocení" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Rating" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Rozsah ratingu" # state: untranslated # (1) network.cc:788 msgid "Read error from program." msgstr "" # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "%s vám nabízí parii." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Poslední servery" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Obnovit seznam" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "OdpovÄ›Ä na nabídku Ä. %d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Vzdal." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Výsledek" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Poslední tah byl vrácen." # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Stáhnout seznam ICS kanálů z eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "ZpÄ›t na výchozí" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "ZpÄ›t na výchozí" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Vpravo" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Věž %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Spustit" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Spustit motor..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Spustit program (je tÅ™eba Soubor)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Spustit autofics.pl skript po pÅ™ihlášení k FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Uložit text jako..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Uložit partii..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Uložit jako PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Nová %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Skript" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Seznam skriptů" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Historie konzole (0 = neomezená) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Hledat text" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Hledaný text:" # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Hledaný text nenalezen." # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Nabídky partií" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Tabulka nabídek" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Font tabulky nabídek" # state: untranslated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Nastavení filtru" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Nastavit filtr..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Hloubka 0 znamená použít výchozí nastavení motoru." # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Nastavit tlaÄítka" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Nastavení tlaÄítek" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "VýkÅ™iky" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Samostatná okna pro jednotlivé kanály" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Zobrazovat sdÄ›lení z kanálů také na konzoli (je-li pÅ™edchozí volba aktivní)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Zobrazovat rating vedle jména hráÄe" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Zobrazovat tlaÄítka pod Å¡achovnicí" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Strana a Äas" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "VýbÄ›r strany" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "HrÃ¡Ä na tahu: " # state: untranslated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "" # state: untranslated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Plynulá animace (vÄ›tší zátěž procesoru)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Lituji, ale tento protokol nedovoluje vracet tahy." # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Zvuková událost" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "OzvuÄené události" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Zvuky" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Zdrojový kód je dostupný na http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Pat" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Navázat spojení" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "PoÄáteÄní Äas:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicide" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "TCP port" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "TCP port:" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "UmístÄ›ní záložek" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Test" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "ZaÅ¡krtnutí políÄka nalevo povoluje/zakazuje zvuk." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "Motor bude spuÅ¡tÄ›n pomocí\n/bin/sh -c 'cd adresář; příkaz pro spuÅ¡tÄ›ní'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "PÅ™emýšlí neustále" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "PÅ™emýšlet v Äase protihráÄe." # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "ÄŒas" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Nastavení Äasu" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "ÄŒasové kontroly..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "ÄŒasová kontrola:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "ÄŒasová tíseň" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "VyprÅ¡el Äas" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "ÄŒas může být uveden jako hh:mm:ss , mm:ss nebo ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Pokud chcete spustit více příkazů jedním tlaÄítkem oddÄ›lte je ; (stÅ™edníkem).\n" "Pokud chcete spustit skript, nastavte příkaz na script.JménoSkriptu, napÅ™.: script.MujSkript.pl ." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "NahoÅ™e" # state: untranslated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Typ: Fischerovi hodiny (styl ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Typ: ÄŒas na jeden tah" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Typ: Použít výchozí nastavení motoru" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Typ: X tahů v urÄité dobÄ›" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "Nemohu obsadit port %d." # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "Nemohu vytvoÅ™it socket." # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Neznámá chyba" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Neznámý výsledek" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Jednobarevná pole" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Hodnota" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Hodnota:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Varianta" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Varianta:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Varianta: %s (nemÄ›nné)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "ÄŒekej" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "ÄŒekat na spojení" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "ÄŒekám na spojení na portu %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "UpozornÄ›ní pokud zbývá ménÄ› než: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Vítejte v programu eboard" # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Bílý" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Bílý: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "Pracuji..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Zapsat do konzole" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Chybný prostor adres" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "zapsána" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Ano" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Vracet tahy můžete pouze pokud jste na tahu." # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "VaÅ¡e barva:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "VaÅ¡e jméno:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[kom]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[přík]" # state: untranslated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** nepodaÅ™ilo se vytvoÅ™it adresář" # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** nenastaveno $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] chybná řádka v konfiguraÄním souboru\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "pípnutí" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "pípnutí" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "Äerný" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "nemohu nahrát PGN z %s (chyba pÅ™i otevírání souboru)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "nemohu pÅ™ejít na offset %lu v %s" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "zruší Å¡achovnici" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "eboard - Správce přímého spojení" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "eboard verze %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard verze %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nTento program je free software; můžete jej\n" "šířit a/nebo mÄ›nit za podmínek uvedených v\n" "GNU General Public Licence publikované Free\n" "Software Foundation; a to verze 2 nebo (dle\n" "vaÅ¡eho uvážení) kterékoliv pozdÄ›jší.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: Konzole #%d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "motor hlásí neplatný tah, ale my jsme netáhli - ignorujeme ho." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "chyba pÅ™i rozkladu PGN dat" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "obrátí Å¡achovnici" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "partie" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "partií" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "obecný xboard v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "jde zpÄ›t 1 půltah" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "jde zpÄ›t na zaÄátek partie" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "jde vpÅ™ed 1 půltah" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "jde vpÅ™ed na konec partie" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "neplatný tah!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "hraje se" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "výchozí Äas %s, přírůstek %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "tahů za" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "ne" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "neexistující partie: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "bez Äasové kontroly" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "není" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "nic" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "vytvoří novou Å¡achovnici s výchozí pozicí" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "na tah" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "prosté pípnutí konzole" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "pÅ™ehrát soubor %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "zobrazí seznam tahů" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "NepodaÅ™ilo se vytvoÅ™it proces." # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "hodnocená" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "spustit %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "provádím %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "savePGN neuspÄ›lo: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "savePGN neuspÄ›lo: Nelze uložit partii s ménÄ› než dvÄ›ma tahy" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "sekund." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "volná" # state: untranslated # (1) clock.cc:313 msgid "untimed" msgstr "" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "bílý" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "ano" eboard-1.1.1.orig/multilang/eboard.es.po0000644000175000017500000020542210757567572017503 0ustar patrikpatrik# state: translated # (2) pieces.cc:70,157 msgid " ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n" msgstr " ** FALLO AL CARGAR PNG: usando las piezas internas de baja resolución.\n" # state: translated # (1) sound.cc:383 msgid " Browse... " msgstr " Buscar... " # state: lost (deprecated key) # (1) seekgraph.cc:191 msgid " Play Selected " msgstr " Jugar seleccionada " # state: lost (deprecated key) # (1) seekgraph.cc:192 msgid " Refresh " msgstr " Refrescar " # state: translated # (1) chess.cc:1490 msgid " Remove Field " msgstr " Eliminar campo " # state: translated # (1) chess.cc:1500 msgid " Set " msgstr " Aplicar " # state: translated # (1) help.cc:343 msgid "" "#L#Getting Started\n" "#M#Common Tasks in eboard\n" "\nPlaying against the computer\n" "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n" "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n" "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n" "no cost.\n" "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n" "engine#K# submenu, and select the appropriate option depending on which engine you have\n" "installed.\n" "\n#M#Playing Chess on the Internet\n" "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n" "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n" "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n" "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n" "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n" "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n" "\n#M#Browsing PGN Games\n" "#S#PGN is the most common file format to store chess games. It can store moves and comments\n" "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n" "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n" "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n" "with the game.#L#" msgstr "" "#L#Comenzando\n" "#M#Tareas comunes en eboard\n" "\nJugar contra el ordenador\n" "#S#eboard no \"juega al ajedrez\" por si mismo, sino que funciona como interfaz para programas que lo hacen,\n" "llamados \"motores\", y que no tienen interfaz gráfica propia. Necesita un motor para \n" "jugar contra el ordenador. GNU Chess, Crafty y Sjeng son motores de ajedrez que están disponibles\n" "gratuitamente.\n" "Una vez tenga uno de ellos instalado, abre el menú #B#Oponente#K#, y luego el submenú#B#Jugar contra\n" "un motor#K#, y seleccione la opción apropiada en función del motor que haya instalado.\n" "\n\n#M#Jugar al ajedrez en Internet\n" "#S#Eboard soporta el protocolo FICS. FICS se usa en freechess.org, pero otros servidores, como\n" "US Chess Live, utilizan software de FICS y deberían funcionar con eboard. ICC no está soportado.\n" "Para conectar a FICS, abra el menú #B#Oponente#K#, y pulse #B#Conectar a FICS#K#. Para conectar a\n" "otros servidores, abra el menú #B#Peer#K#, y pulse #B#Conectar a otro servidor...#K#.\n" "Aunque se puede entrar en FICS como invitado, disfrutará más de él como usuario registrado. El registro\n" "se realiza en el sitio web de FICS's en #B#http://www.freechess.org#K#, y es gratuito.\n" "\n#M#Ver partidas PGN\n" "#S#PGN es el formato de fichero más usado para guardar partidas de ajedrez. Puede almacenar movimientos y comentarios\n" "(anotaciones). Para abrir estos ficheros con eboard, abra el menú #B#Ventanas#K# , y pulse\n" "#B#Partidas en el cliente#K#. En la lista de partidas locales, pulse #B#Cargar PGN...#K#. Para revisar una\n" "partida, #B#seleciónela#K# y pulse #B#Mostrar#K#. Una nueva pestaña se creará en la ventana principal\n" "con la partida.#L#" # state: translated # (1) sound.cc:312 msgid "%d %s to %s, %d Hz for %d msec" msgstr "%d %s a %s, %d Hz para %d mseg." # state: translated # (1) chess.cc:1292 msgid "%d games read" msgstr "%d partidas leídas" # state: translated # (2) clock.cc:324,346 msgid "%d moves in %s" msgstr "%d mueve en %s" # state: translated # (1) mainwindow.cc:647 msgid "%d. Connect to %s:%d (%s)" msgstr "%d. Conectar a %s:%d (%s)" # state: translated # (1) proto_p2p.cc:619 msgid "%s (white) vs. %s (black)\n%s\n%d:%.2d %d" msgstr "%s (blancas) vs. %s (negras)\n%s\n%d:%.2d %d" # state: translated # (1) proto_p2p.cc:248 msgid "%s accepted your game proposal." msgstr "%s aceptó su proposición de partida." # state: translated # (1) proto_xboard.cc:548 msgid "%s engine started." msgstr "Motor %s iniciado." # state: translated # (2) proto_p2p.cc:261,635 msgid "%s offers a draw." msgstr "%s ofrece tablas." # state: translated # (1) clock.cc:337 msgid "%s per move" msgstr "%s por movimiento" # state: translated # (1) clock.cc:317 msgid "%s/move" msgstr "%s/movimiento" # state: translated # (1) text.cc:90 msgid "(Wrapped) Match Found at Line %d." msgstr "Coincidencia (parcial) encontrada en la línea %d." # state: translated # (1) mainwindow.cc:792 msgid "(c) 2000-%d Felipe Bergo (FICS handle: Pulga)" msgstr "(c) 2000-%d Felipe Bergo (Apodo en FICS : Pulga)" # state: translated # (1) global.cc:826 msgid "(message obfuscated -- password mode ?)" msgstr "(mensaje ofuscado -- ¿en modo contraseña?)" # state: translated # (2) mainwindow.cc:659,704 msgid "(no bookmarks)" msgstr "(no hay marcadores)" # state: translated # (2) text.cc:362,506 msgid "(none)" msgstr "(ninguno)" # state: translated # (1) clock.cc:481 msgid "(time period)" msgstr "(periodo de tiempo)" # state: translated # (1) proto_xboard.cc:436 msgid "* game not found: " msgstr "* partida no encontrada: " # state: translated # (1) mainwindow.cc:1031 msgid "** [eboard] bad engine protocol # in bookmark: " msgstr "** [eboard] nº de protocolo del motor erróneo en el marcador: " # state: translated # (1) global.cc:1479 msgid "** eboard ** warning: HOME environment variable not set\n" msgstr "** eboard ** aviso: la variable de entorno HOME no esta establecida\n" # state: translated # (1) chess.cc:888 msgid "--- %s game to PGN file %s" msgstr "--- %s partida a fichero PGN %s" # state: translated # (1) mainwindow.cc:1124 msgid "--- Disconnected" msgstr "--- Desconectado" # state: translated # (1) mainwindow.cc:86 msgid "/Game/Ad_journ" msgstr "/Partida/Apla_zar" # state: translated # (1) mainwindow.cc:87 msgid "/Game/Retract _Move" msgstr "/Partida/Retractar _movimiento" # state: translated # (1) mainwindow.cc:85 msgid "/Game/_Abort" msgstr "/Partida/_Abortar" # state: translated # (1) mainwindow.cc:84 msgid "/Game/_Offer Draw" msgstr "/Partida/_Ofrecer tablas" # state: translated # (1) mainwindow.cc:83 msgid "/Game/_Resign" msgstr "/Partida/_Abandonar" # state: translated # (1) mainwindow.cc:130 msgid "/Help/_About eboard..." msgstr "/Ayuda/_Acerca de eboard..." # state: translated # (1) mainwindow.cc:128 msgid "/Help/_Debug Info" msgstr "/Ayuda/_Información de depuración" # state: translated # (1) mainwindow.cc:126 msgid "/Help/_Getting Started" msgstr "/Ayuda/_Comenzando" # state: translated # (1) mainwindow.cc:127 msgid "/Help/_Keys" msgstr "/Ayuda/_Teclas" # state: translated # (1) mainwindow.cc:129 msgid "/Help/sep4" msgstr "/Ayuda/sep4" # state: translated # (1) mainwindow.cc:63 msgid "/Peer/Connect to _FICS" msgstr "/Oponente/Conectar a _FICS" # state: translated # (1) mainwindow.cc:66 msgid "/Peer/Direct connect with _Remote eboard..." msgstr "/Oponente/Conectar a _Otro eboard..." # state: translated # (1) mainwindow.cc:74 msgid "/Peer/Engine B_ookmarks" msgstr "/Oponente/Marcadores de m_otores" # state: translated # (1) mainwindow.cc:64 msgid "/Peer/ICS _Bookmarks" msgstr "/Oponente/M_arcadores ICS" # state: translated # (1) mainwindow.cc:71 msgid "/Peer/Play against Engine/Cr_afty..." msgstr "/Oponente/Jugar contra un motor/Cr_afty..." # state: translated # (1) mainwindow.cc:69 msgid "/Peer/Play against Engine/GNU Chess _4..." msgstr "/Oponente/Jugar contra un motor/GNU Chess _4..." # state: translated # (1) mainwindow.cc:73 msgid "/Peer/Play against Engine/_Generic Engine..." msgstr "/Oponente/Jugar contra un motor/_Motor genérico" # state: translated # (1) mainwindow.cc:70 msgid "/Peer/Play against Engine/_Sjeng..." msgstr "/Oponente/Jugar contra un motor/_Sjeng..." # state: translated # (1) mainwindow.cc:72 msgid "/Peer/Play against Engine/sep1" msgstr "/Oponente/Jugar contra un motor/sep1" # state: translated # (1) mainwindow.cc:68 msgid "/Peer/Play against _Engine" msgstr "/Oponente/Jugar contra un _motor" # state: translated # (1) mainwindow.cc:65 msgid "/Peer/_Connect to Other Server..." msgstr "/Oponente/_Conectar a otro servidor..." # state: translated # (1) mainwindow.cc:79 msgid "/Peer/_Disconnect" msgstr "/Oponente/_Desconectar" # state: translated # (1) mainwindow.cc:76 msgid "/Peer/_Empty Scratch Board" msgstr "/Oponente/_Vaciar tablero" # state: translated # (1) mainwindow.cc:81 msgid "/Peer/_Quit" msgstr "/Oponente/_Salir" # state: translated # (1) mainwindow.cc:77 msgid "/Peer/_Scratch Board with Initial Position" msgstr "/Oponente/_Tablero con posición inicial" # state: translated # (1) mainwindow.cc:80 msgid "/Peer/sep2" msgstr "/Oponente/sep2" # state: translated # (2) mainwindow.cc:75,78 msgid "/Peer/sep3" msgstr "/Oponente/sep3" # state: translated # (1) mainwindow.cc:67 msgid "/Peer/sep4" msgstr "/Oponente/sep4" # state: translated # (1) mainwindow.cc:106 msgid "/Settings/Bitmapped Piece Sets/Load _Pieces Only" msgstr "/Configuración/Piezas dibujadas/Cargar sólo piezas" # state: translated # (1) mainwindow.cc:107 msgid "/Settings/Bitmapped Piece Sets/Load _Squares Only" msgstr "/Configuración/Piezas dibujadas/Cargar sólo escaques" # state: translated # (1) mainwindow.cc:105 msgid "/Settings/Bitmapped Piece Sets/Load _Theme" msgstr "/Configuración/Piezas dibujadas/Cargar _tema" # state: translated # (1) mainwindow.cc:104 msgid "/Settings/Bitmapped Piece _Sets" msgstr "/Configuración/_Piezas dibujadas" # state: translated # (1) mainwindow.cc:101 msgid "/Settings/Enable Legality _Checking" msgstr "/Configuración/Habilitar _comprobación de legalidad" # state: translated # (1) mainwindow.cc:98 msgid "/Settings/ICS Behavior/Popup Board Panes _Upon Creation" msgstr "/Configuración/Comportamiento ICS/Mostrar paneles de tablero al crearlos" # state: translated # (1) mainwindow.cc:99 msgid "/Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends" msgstr "/Configuración/Comportamiento ICS/_Descartar tableros observados inteligentemente" # state: translated # (1) mainwindow.cc:91 msgid "/Settings/Pre_move" msgstr "/Configuración/Pre_mover" # state: translated # (1) mainwindow.cc:92 msgid "/Settings/Sho_w Coordinates" msgstr "/Configuración/_Mostrar coordenadas" # state: translated # (1) mainwindow.cc:90 msgid "/Settings/_Animate Moves" msgstr "/Configuración/_Animar movimientos" # state: translated # (1) mainwindow.cc:94 msgid "/Settings/_Beep on Opponent Moves" msgstr "/Configuración/_Pitar cuando mueva el oponente" # state: translated # (1) mainwindow.cc:95 msgid "/Settings/_Enable Other Sounds" msgstr "/Configuración/_Habilitar otros sonidos" # state: translated # (1) mainwindow.cc:89 msgid "/Settings/_Highlight Last Move" msgstr "/Configuración/_Resaltar el último movimiento" # state: translated # (1) mainwindow.cc:97 msgid "/Settings/_ICS Behavior" msgstr "/Configuración/Comportamiento _ICS" # state: translated # (1) mainwindow.cc:109 msgid "/Settings/_Preferences..." msgstr "/Configuración/_Preferencias..." # state: translated # (1) mainwindow.cc:103 msgid "/Settings/_Vectorized Pieces (Faster Rendering)" msgstr "/Configuración/Piezas _vectoriales (dibujo más rápido)" # state: translated # (5) mainwindow.cc:93,96,100,102,108 msgid "/Settings/sep3" msgstr "/Configuración/sep3" # state: translated # (1) mainwindow.cc:121 msgid "/Windows/Find _Previous" msgstr "/Ventanas/Buscar _anterior" # state: translated # (1) mainwindow.cc:114 msgid "/Windows/Games on _Client..." msgstr "/Ventanas/Partidas en el _cliente..." # state: translated # (1) mainwindow.cc:124 msgid "/Windows/Save Desktop _Geometry" msgstr "/Ventanas/Guardar la geometría actual" # state: translated # (1) mainwindow.cc:122 msgid "/Windows/Save _Text Buffer..." msgstr "/Ventanas/Guardar texto del búfer..." # state: translated # (1) mainwindow.cc:112 msgid "/Windows/_Ads on Server..." msgstr "/Ventanas/_Anuncios en el servidor..." # state: translated # (1) mainwindow.cc:118 msgid "/Windows/_Detached Console" msgstr "/Ventanas/Consola in_dependiente" # state: translated # (1) mainwindow.cc:120 msgid "/Windows/_Find Text (upwards)..." msgstr "/Ventanas/_Buscar texto (hacia arriba)..." # state: translated # (1) mainwindow.cc:111 msgid "/Windows/_Games on Server..." msgstr "/Ventanas/_Partidas en el servidor..." # state: translated # (1) mainwindow.cc:116 msgid "/Windows/_Run Script..." msgstr "/Ventanas/_Ejecutar..." # state: translated # (1) mainwindow.cc:113 msgid "/Windows/sep1" msgstr "/Ventanas/sep1" # state: translated # (1) mainwindow.cc:115 msgid "/Windows/sep2" msgstr "/Ventanas/sep2" # state: translated # (3) mainwindow.cc:117,119,123 msgid "/Windows/sep3" msgstr "/Ventanas/sep3" # state: translated # (1) mainwindow.cc:82 msgid "/_Game" msgstr "/_Partida" # state: translated # (1) mainwindow.cc:125 msgid "/_Help" msgstr "/_Ayuda" # state: translated # (1) mainwindow.cc:62 msgid "/_Peer" msgstr "/_Oponente" # state: translated # (1) mainwindow.cc:88 msgid "/_Settings" msgstr "_Configuración" # state: translated # (1) mainwindow.cc:110 msgid "/_Windows" msgstr "/_Ventanas" # state: translated # (1) dlg_gamelist.cc:820 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n" # state: lost (deprecated key) # (1) bugpane.cc:40 msgid " can't load font.\n" msgstr " no puedo cargar fuente.\n" # state: lost (deprecated key) # (1) board.cc:84 msgid "" " ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n" msgstr "" " ** falló al carcar una o más fuentes de tablero - instale lasfuentes de X11 de 75 y 100 dpi, reinicie X e inténtelo de nuevo.\n" # state: lost (deprecated key) # (1) board.cc:169 msgid " ** failed to load one or more board fonts\n" msgstr " ** falló al carcar una o más fuentes de tablero\n" # state: translated # (1) proto_fics.cc:1623 msgid " abort request sent" msgstr " petición de aborto enviada" # state: translated # (1) proto_fics.cc:1618 msgid " adjourn request sent" msgstr " petición de aplazamiento enviada" # state: translated # (1) proto_fics.cc:1613 msgid " draw request sent" msgstr " petición de tablas enviada" # state: translated # (1) dlg_gamelist.cc:86 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n" # state: translated # (2) util.cc:575,627 msgid " ** bad pattern string: " msgstr " ** cadena de patrón erróneo: " # state: translated # (2) pieces.cc:60,77 msgid " ** file not found: " msgstr " ** fichero no encontrado: " # state: lost (deprecated key) # (1) seekgraph.cc:264 msgid " failed to load " msgstr " falló al cargar " # state: translated # (1) dlg_gamelist.cc:310 msgid "" " Warning: couldn't load fixed font, this dialog's content will look awful.\n" "\n" msgstr "" " Aviso: no se pudo cargar la fuente fixed, el contenido de este diálogo será horrible.\n" # state: lost (deprecated key) # (1) text.cc:139 msgid " failed to load " msgstr " falló al cargar " # state: translated # (1) proto_xboard.cc:400 msgid " Adjourning not supported" msgstr " El aplazamiento no está soportado" # state: translated # (1) proto_xboard.cc:151 msgid " Incompatible Engine Protocol" msgstr " Protocolo del motor incompatible" # state: translated # (1) proto_xboard.cc:405 msgid " Session Aborted" msgstr " Sesión abortada" # state: translated # (1) proto_xboard.cc:396 msgid " draw request sent" msgstr " petición de tablas enviada" # state: translated # (1) mainwindow.cc:1186 msgid "" msgstr "" # state: translated # (1) mainwindow.cc:890 msgid "> (password sent)" msgstr "> (contraseña enviada)" # state: translated # (2) proto_fics.cc:1969,1986 msgid "> [issued from menu] %s" msgstr "> [desde el menú] %s" # state: translated # (1) quickbar.cc:127 msgid "> [issued from shortcut] " msgstr "> [desde un atajo] " # state: translated # (1) quickbar.cc:117 msgid "> [script run from shortcut] %s" msgstr "> [ejecutado desde atajo] %s" # state: translated # (1) help.cc:54 msgid "About eboard" msgstr "Acerca de eboard" # state: translated # (1) proto_p2p.cc:598 msgid "Accept" msgstr "Aceptar" # state: translated # (1) network.cc:507 msgid "Accepted incoming connection from %s" msgstr "Aceptada la conexión entrante desde %s" # state: translated # (1) dlg_gamelist.cc:827 msgid "Ad Description" msgstr "Descripción de anuncio" # state: translated # (2) dlg_gamelist.cc:801,884 msgid "Ad List" msgstr "Lista de anuncios" # state: translated # (1) dlg_gamelist.cc:897 msgid "Ad List (refreshing...)" msgstr "Lista de anuncios (refrescándose...)" # state: translated # (1) proto_xboard.cc:851 msgid "Add to Peer/Engine Bookmarks menu" msgstr "Añadir a marcadores de Oponente/Motor" # state: translated # (1) network.cc:373 msgid "Address already in use" msgstr "La dirección está en uso" # state: translated # (1) dlg_gamelist.cc:854 msgid "Ads" msgstr "Anuncios" # state: translated # (1) network.cc:369 msgid "Already connected ?!?" msgstr "¿Ya está conectado?!?" # state: translated # (1) help.cc:117 msgid "" "Anywhere:\n" "F3: Go to previous pane.\n" "F4: Go to next pane.\n" "F5: Go to the main board pane.\n" "F6: Go to the console pane.\n" "F7: Go to the seek graph pane (if available).\n" "F8: Toggle Shortcut Bar visilibity.\n" "Page Up/Page Down: scrolls the text console (must be visible)\n" "Ctrl+(Left Arrow): Backward 1 halfmove\n" "Ctrl+(Right Arrow): Forward 1 halfmove\n" "Ctrl+F: Find Upwards(main console buffer)\n" "Ctrl+G: Find Previous\n" "\nInput box:\n" "Up/Down (arrows): move thru input history\n" "Enter: send text line\n" "Esc: switch Chat/Command Mode\n" "\nSyntaxisms:\n" "In main window's input box:\n" ".. entering %prefix text will set the chat prefix to text.\n" ".. entering %do scriptname will run scriptname." msgstr "" "En cualquier sitio:\n" "F3: Ir al panel anterior.\n" "F4: Ir al siguiente panel.\n" "F5: Ir al panel del tablero principal.\n" "F6: Ir al panel de la consola.\n" "F7: Ir al panel de búsqueda gráfica (si está disponible).\n" "F8: Conmutar la visibilidad de la barra de atajos.\n" "RePag./AvPag.: desplaza el texto de la consola (debe ser visible)\n" "Ctrl+(Flecha Izda.): Atrás 1 medio movimiento\n" "Ctrl+(Flecha Dcha.): Adelante 1 medio movimiento\n" "Ctrl+F: Buscar hacia arriba (en el búfer de la consola principal)\n" "Ctrl+G: Busca el anterior\n" "\nEn la línea de entrada:\n" "Arriba/Abajo (flechas): moverse a través del histórico de entradas\n" "Intro: enviar línea de texto\n" "Escape: cambiar de conversación/modo comando\n" "\nDetalles sintácticos:\n" "En la línea de entrada de la ventana principal\n" ".. introduciendo %prefix texto pondra el prefijo de chat a texto.\n" ".. introduciendo %do nombre ejecutara el script nombre." # state: translated # (1) dlg_prefs.cc:120 msgid "Appearance" msgstr "Apariencia" # state: translated # (1) chess.cc:889 msgid "Appended" msgstr "Añadido" # state: translated # (1) dlg_prefs.cc:570 msgid "Apply" msgstr "Aplicar" # state: translated # (1) dlg_connect.cc:329 msgid "Apply Changes" msgstr "Aplicar cambios" # state: translated # (1) dlg_prefs.cc:495 msgid "Auto-save observed games" msgstr "Autoguardar las partidas observadas" # state: translated # (1) dlg_prefs.cc:494 msgid "Auto-save played games" msgstr "Autoguardar las partidas jugadas" # state: translated # (1) dlg_prefs.cc:488 msgid "Autosave" msgstr "Autoguardar" # state: translated # (1) dlg_prefs.cc:525 msgid "Axis & Buttons" msgstr "Ejes y botones" # state: translated # (1) dlg_prefs.cc:321 msgid "Background" msgstr "Fondo" # state: translated # (1) network.cc:366 msgid "Bad descriptor" msgstr "Descriptor erróneo" # state: translated # (1) sound.cc:359 msgid "Beep (need Pitch, Duration, Count and Device)" msgstr "Pitido (necesita tono, duración, veces y dispositivo)" # state: translated # (1) board.cc:1009 msgid "Bishop %d" msgstr "Alfil %d" # state: translated # (5) board.cc:418; dlg_gamelist.cc:321; movelist.cc:66; proto_p2p.cc:551; proto_xboard.cc:1004 msgid "Black" msgstr "Negro" # state: translated # (1) bugpane.cc:241 msgid "Black: %s - %s" msgstr "Negro: %s - %s" # state: translated # (1) dlg_prefs.cc:947 msgid "" "Board Cursor Axis: %d\n" "Board Select Button: %d\n" "Board Browsing Axis: %d\n" "Previous Tab Button: %d\n" "Next Tab Button: %d\n" msgstr "" "Eje del cursor del tablero: %d\n" "Botón de selección de tablero: %d\n" "Eje de navegación del tablero: %d\n" "Botón de tabulación atrás: %d\n" "Botón de tabulación adelante: %d\n" # state: translated # (1) dgtboard.cc:417 msgid "Board version :%s" msgstr "Versión del tablero: %s" # state: translated # (1) dlg_connect.cc:288 msgid "Bookmark Caption:" msgstr "Título del marcador:" # state: translated # (1) dlg_prefs.cc:134 msgid "Bottom" msgstr "Abajo" # state: translated # (1) dlg_prefs.cc:311 msgid "Bright Text" msgstr "Texto resaltado" # state: translated # (1) sound.cc:529 msgid "Browse" msgstr "Buscar" # state: translated # (1) text.cc:110 msgid "Buffer Save failed." msgstr "Falló al guardar el búfer." # state: translated # (1) mainwindow.cc:265 msgid "Bughouse" msgstr "Bughouse" # state: translated # (2) bugpane.cc:217,218 msgid "Bughouse: Partner Game" msgstr "Bughouse: Partida del compañero" # state: translated # (1) dgtboard.cc:415 msgid "Bus address :%s" msgstr "Dirección del bus: %s" # state: translated # (1) quickbar.cc:220 msgid "Button Caption" msgstr "Texto del botón" # state: translated # (1) quickbar.cc:219 msgid "Button Icon" msgstr "Icono del botón" # state: translated # (9) board.cc:2541; clock.cc:507; dlg_connect.cc:145; dlg_prefs.cc:572; p2p.cc:110; proto_xboard.cc:904; quickbar.cc:268; sound.cc:464; text.cc:479 msgid "Cancel" msgstr "Cancelar" # state: translated # (1) dlg_prefs.cc:987 msgid "Cancel Joystick Configuration" msgstr "Cancelar la configuración del joystick" # state: translated # (1) p2p.cc:262 msgid "Cancelled connection wait." msgstr "Espera por conexión cancelada." # state: translated # (1) dlg_connect.cc:302 msgid "Change..." msgstr "Cambiar..." # state: translated # (2) dlg_prefs.cc:195,319 msgid "Channel Tells" msgstr "Conversación del canal" # state: translated # (2) proto_p2p.cc:283,448 msgid "Checkmate" msgstr "Jaque mate" # state: translated # (1) dlg_prefs.cc:320 msgid "Chess Programs" msgstr "Programas de ajedrez" # state: translated # (1) dlg_prefs.cc:870 msgid "Choose Font" msgstr "Elejir fuente" # state: translated # (5) dlg_prefs.cc:368,372,376,380,384 msgid "Choose..." msgstr "Elejir..." # state: translated # (1) dlg_prefs.cc:366 msgid "Clock Font" msgstr "Fuente del reloj" # state: translated # (7) chess.cc:1517; dlg_connect.cc:349; help.cc:100,152,244,322; p2p.cc:159 msgid "Close" msgstr "Cerrar" # state: lost (deprecated key) # (1) seekgraph.cc:145 msgid "Color" msgstr "Color" # state: translated # (1) widgetproxy.cc:343 msgid "Color Selection" msgstr "Selección de color" # state: translated # (1) dlg_prefs.cc:304 msgid "Colors" msgstr "Colores" # state: translated # (1) quickbar.cc:221 msgid "Command" msgstr "Comando" # state: translated # (1) dlg_connect.cc:290 msgid "Command Line:" msgstr "Línea de comando:" # state: translated # (1) proto_xboard.cc:66 msgid "Computer" msgstr "Ordenador" # state: translated # (1) proto_xboard.cc:811 msgid "Computer White vs. Human Black" msgstr "Ordenador blancas vs. Humano negras" # state: translated # (3) dlg_prefs.cc:530,971,992 msgid "Configure Axis & Buttons" msgstr "Configurar ejes y botones" # state: translated # (1) sound.cc:413 msgid "Configured Sound Files:" msgstr "Ficheros de sonido configurados:" # state: translated # (2) dlg_connect.cc:143; p2p.cc:85 msgid "Connect" msgstr "Conectar" # state: translated # (1) dlg_connect.cc:60 msgid "Connect to ICS Server" msgstr "Conectar al servidor ICS" # state: translated # (2) network.cc:383,824 msgid "Connected to %s (%s)" msgstr "Conectado a %s (%s)" # state: translated # (2) network.cc:358,695 msgid "Connecting to %s..." msgstr "Conectando a %s..." # state: translated # (1) network.cc:370 msgid "Connection refused" msgstr "Conexión rechazada" # state: translated # (1) network.cc:364 msgid "Connection to %s:%d failed: " msgstr "Conexión a %s:%d fallida: " # state: translated # (3) mainwindow.cc:250,288; text.cc:290 msgid "Console" msgstr "Consola" # state: translated # (1) sound.cc:365 msgid "Console Beep" msgstr "Pitido de consola" # state: translated # (1) dlg_prefs.cc:378 msgid "Console Font" msgstr "Fuente de consola" # state: translated # (1) text.cc:108 msgid "Console buffer saved." msgstr "Búfer de consola guardado." # state: translated # (1) sound.cc:381 msgid "Count:" msgstr "Veces:" # state: translated # (1) proto_xboard.cc:1196 msgid "Crazyhouse" msgstr "Crazyhouse" # state: translated # (1) dgtboard.cc:411 msgid "DGT board found on port %s." msgstr "Tablero DGT encontrado en el puerto %s." # state: translated # (1) dgtboard.cc:250 msgid "DGT support error: wrong page" msgstr "Error de soporte DGT: página errónea" # state: translated # (1) dgtboard.cc:350 msgid "DGT warning: position mismatch between eboard and DGT board." msgstr "Aviso DGT: las posiciones de eboard y el tablero DGT no coinciden." # state: translated # (1) dgtboard.cc:383 msgid "DGT: unrecognized code: %c (%d)" msgstr "DGT: código no reconocido: %c (%d)" # state: translated # (1) dlg_prefs.cc:148 msgid "Dark Squares..." msgstr "Escaques oscuros..." # state: translated # (1) dlg_connect.cc:331 msgid "Delete All Entries" msgstr "Borrar todas las entradas" # state: translated # (1) dlg_connect.cc:330 msgid "Delete This Entry" msgstr "Borrar esta entrada" # state: translated # (1) proto_xboard.cc:838 msgid "Depth Limit:" msgstr "Profundidad límite:" # state: translated # (1) script.cc:63 msgid "Description" msgstr "Descripción" # state: translated # (1) sound.cc:379 msgid "Device:" msgstr "Dispositivo:" # state: translated # (1) proto_xboard.cc:875 msgid "Directory to run from (e.g., where book files are)" msgstr "Directorio inicial (p.ej., donde los ficheros de aperturas)" # state: translated # (1) dlg_connect.cc:289 msgid "Directory:" msgstr "Directorio:" # state: translated # (1) dlg_gamelist.cc:280 msgid "Discard All" msgstr "Descartar todo" # state: translated # (1) dlg_gamelist.cc:289 msgid "Discard Game" msgstr "Descartar partida" # state: translated # (1) script.cc:81 msgid "Dismiss" msgstr "Descartar" # state: translated # (1) dlg_gamelist.cc:283 msgid "Display Game" msgstr "Mostrar partida" # state: translated # (1) dlg_gamelist.cc:319 msgid "Displayed" msgstr "Mostrado" # state: translated # (1) mainwindow.cc:794 msgid "" "Distributed under the terms of the GNU General Public License, version 2 or later" msgstr "" "Distribuido bajo los términos de la GNU General Public License, versión 2 o posterior" # state: translated # (1) dlg_prefs.cc:71 msgid "Draw Offered" msgstr "Ofrecidas tablas" # state: translated # (1) proto_p2p.cc:501 msgid "Draw offer sent." msgstr "Oferta de tablas enviada." # state: translated # (2) proto_p2p.cc:292,496 msgid "Drawn by agreement" msgstr "Tablas por mutuo acuerdo" # state: translated # (1) board.cc:993 msgid "Drop Piece:" msgstr "Soltar pieza:" # state: translated # (1) sound.cc:378 msgid "Duration (msec):" msgstr "Duración (mseg.):" # state: untranslated # (1) dlg_prefs.cc:241 msgid "Dynamic Seek Graph" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:213 msgid "Dynamic Seek Table" msgstr "Buscar tabla dinámica" # state: translated # (1) mainwindow.cc:675 msgid "Edit Bookmarks..." msgstr "Editar marcadores..." # state: translated # (1) dlg_connect.cc:254 msgid "Edit Engine Bookmarks" msgstr "Editar marcadores de los motores" # state: translated # (1) dlg_gamelist.cc:292 msgid "Edit Game Info" msgstr "Editar información de la partida" # state: translated # (1) clock.cc:421 msgid "Edit Time Control" msgstr "Editar control de tiempo" # state: translated # (1) board.cc:2455 msgid "Empty" msgstr "Vacío" # state: translated # (1) dlg_connect.cc:276 msgid "Engine Bookmarks" msgstr "Marcadores de motores" # state: translated # (1) proto_xboard.cc:863 msgid "Engine Command" msgstr "Comando del motor" # state: translated # (2) dlg_connect.cc:308,473 msgid "Engine Type:" msgstr "Tipo de motor:" # state: translated # (1) dlg_connect.cc:456 msgid "Engine Type: %s (uneditable)" msgstr "Tipo de motor: %s (no editable)" # state: translated # (1) proto_xboard.cc:743 msgid "Engine asked more time to startup, waiting." msgstr "El motor pidió más tiempo para arrancar, esperando." # state: translated # (1) proto_xboard.cc:866 msgid "Engine command line" msgstr "Línea de comando del motor" # state: translated # (1) proto_xboard.cc:763 msgid "Engine loaded." msgstr "Motor cargado." # state: translated # (1) network.cc:822 msgid "Engine running" msgstr "Motor en ejecución" # state: translated # (1) proto_xboard.cc:494 msgid "Engine started (2 sec timeout)" msgstr "Motor inicializado (2 seg. tiempo de espera)" # state: translated # (1) board.cc:2516 msgid "Enter FEN Position" msgstr "Introducir posición FEN" # state: translated # (1) sound.cc:352 msgid "Event Type" msgstr "Tipo de evento" # state: translated # (1) proto_fics.cc:863 msgid "Exam.Game #%d" msgstr "Exam.Partida nº%d" # state: untranslated # (1) proto_xboard.cc:512 msgid "Failed command line:" msgstr "" # state: translated # (2) proto_xboard.cc:508,510 msgid "Failed to run engine." msgstr "Falló al ejecutar el motor." # state: translated # (1) network.cc:806 msgid "Failed to run helper program" msgstr "Falló la ejecución del programa de ayuda" # state: translated # (1) sound.cc:380 msgid "File to play / Program to run:" msgstr "Fichero a reproducir / programa a ejecutar:" # state: translated # (4) text.cc:359,361,503,505 msgid "Filter: " msgstr "Filtro: " # state: translated # (1) text.cc:267 msgid "Filter: (none)" msgstr "Filtro: (ninguno)" # state: translated # (1) p2p.cc:199 msgid "Finish the current connection first." msgstr "Finalizar la conexión actual primero." # state: translated # (1) proto_p2p.cc:123 msgid "Finish the current game first." msgstr "Finalize la partida actual primero." # state: lost (deprecated key) # (1) seekgraph.cc:141 msgid "Flags" msgstr "Características" # state: translated # (1) dlg_prefs.cc:354 msgid "Fonts" msgstr "Fuentes" # state: translated # (1) dlg_gamelist.cc:527 msgid "From Elsewhere (%d %s)" msgstr "De otra parte (%d %s)" # state: translated # (1) dlg_gamelist.cc:521 msgid "From Engines (%d %s)" msgstr "De motores (%d %s)" # state: translated # (1) board.cc:2464 msgid "From FEN" msgstr "Desde FEN" # state: translated # (1) dlg_gamelist.cc:509 msgid "From ICS (%d %s)" msgstr "De ICS (%d %s)" # state: translated # (1) dlg_gamelist.cc:515 msgid "From PGN Files (%d %s)" msgstr "De ficheros PGN (%d %s)" # state: translated # (1) dlg_gamelist.cc:318 msgid "Game #" msgstr "Nº partida" # state: translated # (2) dlg_gamelist.cc:559; proto_fics.cc:1037 msgid "Game #%d" msgstr "Partida nº %d" # state: lost (deprecated key) # (1) chess.cc:189 msgid "Game #%d - %d %d %s" msgstr "Partida #%d - %d %d %s" # state: translated # (1) chess.cc:186 msgid "Game #%d - %s" msgstr "Partida nº %d - %s" # state: translated # (1) chess.cc:190 msgid "Game #%d - %s - %s" msgstr "Partida nº %d - %s - %s" # state: translated # (1) movelist.cc:47 msgid "Game #%d - %s vs. %s" msgstr "Partida nº %d - %s vs. %s" # state: lost (deprecated key) # (1) chess.cc:195 msgid "Game #%d - untimed %s" msgstr "Partida nº %d - sin tiempo %s" # state: translated # (1) board.cc:1091 msgid "Game #%d: %s" msgstr "Partida nº %d: %s" # state: translated # (2) proto_p2p.cc:289,515 msgid "Game Aborted" msgstr "Partida cancelada" # state: translated # (1) dlg_gamelist.cc:93 msgid "Game Description" msgstr "Descripción de la partida" # state: translated # (1) dlg_prefs.cc:374 msgid "Game Information Font" msgstr "Fuente de información de la partida" # state: translated # (2) dlg_gamelist.cc:67,150 msgid "Game List" msgstr "Lista de partidas" # state: translated # (1) dlg_gamelist.cc:176 msgid "Game List (refreshing...)" msgstr "Lista de partidas (refrescando...)" # state: translated # (1) dlg_prefs.cc:76 msgid "Game Lost" msgstr "Partida perdida" # state: translated # (1) dlg_prefs.cc:77 msgid "Game Started" msgstr "Partida iniciada" # state: translated # (1) dlg_prefs.cc:75 msgid "Game Won" msgstr "Partida ganada" # state: translated # (4) proto_fics.cc:1573; proto_p2p.cc:467; proto_xboard.cc:362,386 msgid "Game appended to %s" msgstr "Partida añadida a %s" # state: translated # (1) movelist.cc:157 msgid "Game in progress." msgstr "Partida en curso." # state: translated # (1) proto_p2p.cc:461 msgid "Game over: %s" msgstr "Partida terminada: %s" # state: translated # (1) proto_p2p.cc:108 msgid "Game proposal sent." msgstr "Proposición de partida enviada." # state: translated # (2) proto_fics.cc:1003; proto_p2p.cc:357 msgid "Game started!" msgstr "¡Partida iniciada!" # state: translated # (1) mainwindow.cc:502 msgid "Game/Board: " msgstr "Partida/Tablero: " # state: translated # (1) dlg_gamelist.cc:120 msgid "Games" msgstr "Partidas" # state: translated # (1) board.cc:2376 msgid "Generic XBoard Engine..." msgstr "Motor XBoard genérico..." # state: translated # (1) proto_xboard.cc:1202 msgid "Giveaway" msgstr "Giveaway" # state: translated # (1) dlg_prefs.cc:165 msgid "Graphic representation of crazy/bughouse stock" msgstr "Representación gráfica del remanente en crazy/bughouse" # state: translated # (1) help.cc:162 msgid "Help: Debug Info" msgstr "Ayuda: Información de depuración" # state: translated # (1) help.cc:299 msgid "Help: Getting Started " msgstr "Ayuda: Comenzando " # state: translated # (1) help.cc:109 msgid "Help: Keys" msgstr "Ayuda: Teclas" # state: untranslated # (1) network.cc:670 msgid "Helper program not found" msgstr "" # state: translated # (1) quickbar.cc:68 msgid "Hide!" msgstr "¡Esconder!" # state: translated # (2) network.cc:332,685 msgid "Host not found: %s" msgstr "Servidor no encontrado: %s" # state: translated # (1) dlg_connect.cc:104 msgid "Hostname" msgstr "Nombre" # state: translated # (1) p2p.cc:71 msgid "Hostname or IP address:" msgstr "Máquina o dirección IP:" # state: translated # (1) global.cc:1486 msgid "Human" msgstr "Humano" # state: translated # (1) proto_xboard.cc:809 msgid "Human White vs. Computer Black" msgstr "Humano blancas vs. Ordenador negras" # state: translated # (1) dlg_connect.cc:304 msgid "Human plays white" msgstr "Humano juega con blancas" # state: translated # (1) dlg_prefs.cc:73 msgid "ICS Challenge" msgstr "Competición ICS" # state: translated # (1) network.cc:709 msgid "IPC pipe creation failed." msgstr "falló la creación de la tubería IPC." # state: lost (deprecated key) # (1) seekgraph.cc:138 msgid "Id" msgstr "Id" # state: translated # (1) board.cc:2385 msgid "" "If you pick a bookmark, the engine\n" "will play the next move, ignoring\n" "the side setting in the bookmark." msgstr "" "Si eliges un marcador, el motor jugará\n" "el siguiente movimiento, ignorando\n" "el color establecido en el marcador." # state: translated # (1) board.cc:956 msgid "Illegal Drop on %c%d (Legality Checking On)" msgstr "Posición ilegal en %c%d (Comprobación de legalidad activa)" # state: translated # (1) board.cc:762 msgid "Illegal Move %c%d%c%d (Legality Checking On)" msgstr "Movimiento ilegal %c%d%c%d (Comprobación de legalidad activa)" # state: translated # (1) proto_p2p.cc:382 msgid "Illegal move, not sent." msgstr "Movimiento ilegal, no enviado." # state: translated # (1) proto_p2p.cc:548 msgid "Increment (secs):" msgstr "Incremento (segs):" # state: translated # (1) clock.cc:490 msgid "Increment:" msgstr "Incremento:" # state: untranslated # (1) dlg_prefs.cc:244 msgid "Inhibit seek lines on console when Seek Graph is active" msgstr "" # state: lost (deprecated key) # (1) dlg_prefs.cc:216 msgid "Inhibit seek lines on console when Seek Table is active" msgstr "Inhibir buscar líneas en la consola si esta activo Buscar tabla" # state: translated # (1) board.cc:2459 msgid "Initial Position" msgstr "Posición inicial" # state: translated # (1) proto_p2p.cc:547 msgid "Initial time ([mm:]ss):" msgstr "Tiempo inicial ([mm:]ss):" # state: translated # (1) proto_xboard.cc:471 msgid "Initializing engine" msgstr "Inicializando motor" # state: lost (deprecated key) # (1) dgtboard.cc:223 msgid "Invalid answer to DGT_SEND_BRD on port %s: %s " msgstr "Respuesta inválida a DGT_SEND_BRD en el puerto %s: %s " # state: translated # (1) dlg_prefs.cc:515 msgid "Joystick" msgstr "Joystick" # state: translated # (1) chess.cc:1478 msgid "Key" msgstr "Clave" # state: translated # (1) chess.cc:1495 msgid "Key:" msgstr "Tecla:" # state: translated # (1) dlg_prefs.cc:315 msgid "Kibitzes/Whispers" msgstr "Kibitzes/Susurros" # state: translated # (1) script.cc:258 msgid "Kill" msgstr "Matar" # state: translated # (1) board.cc:1005 msgid "Knight %d" msgstr "Caballo %d" # state: translated # (1) proto_p2p.cc:581 msgid "Last Proposal Received" msgstr "Última propuesta recibida" # state: translated # (1) dlg_prefs.cc:130 msgid "Left" msgstr "Izquierda" # state: untranslated # (1) seekgraph.cc:493 msgid "Left click to play, right click to refresh." msgstr "" # state: translated # (1) dlg_prefs.cc:147 msgid "Light Squares..." msgstr "Escaques claros..." # state: translated # (1) dlg_gamelist.cc:700 msgid "Load PGN" msgstr "Cargar PGN" # state: translated # (1) dlg_gamelist.cc:274 msgid "Load PGN..." msgstr "Cargar PGN..." # state: translated # (1) dlg_gamelist.cc:355 msgid "Local" msgstr "Local" # state: translated # (1) dlg_gamelist.cc:237 msgid "Local Game List" msgstr "Lista de partidas locales" # state: translated # (2) network.cc:327,680 msgid "Looking up host %s..." msgstr "Buscando servidor %s..." # state: translated # (1) proto_xboard.cc:1200 msgid "Losers" msgstr "Losers" # state: translated # (1) mainwindow.cc:274 msgid "Main Board" msgstr "Tablero principal" # state: translated # (1) dlg_prefs.cc:314 msgid "Mamer and TDs" msgstr "Mamer y TDs" # state: lost (deprecated key) # (1) seekgraph.cc:147 msgid "Manual/Formula" msgstr "Manual/Fórmula" # state: translated # (1) text.cc:88 msgid "Match Found at Line %d." msgstr "Coincidencia encontrada en la línea %d." # state: translated # (1) text.cc:453 msgid "Match Pattern: " msgstr "Patrón: " # state: translated # (1) position.cc:1087 msgid "Material: %d - %d" msgstr "Material: %d - %d" # state: translated # (1) dlg_connect.cc:292 msgid "Max Ply:" msgstr "Ply máximo:" # state: translated # (1) dlg_prefs.cc:79 msgid "Move made (Obs'vd/Exm'd Games)" msgstr "Hecho movimiento (Part. Ob./Ex.)" # state: translated # (1) dlg_prefs.cc:938 msgid "" "Move the axis to be used for moving back and forth\n" "through moves of a game." msgstr "" "Mueva el eje a usar para moverse atrás y adelante\n" "a través de los movimientos de una partida." # state: translated # (1) dlg_prefs.cc:932 msgid "Move the axis to be used for selecting pieces." msgstr "Mueva el eje a usar para seleccionar las piezas." # state: translated # (1) movelist.cc:81 msgid "Moves" msgstr "Movimientos" # state: translated # (1) network.cc:372 msgid "Network is unreachable" msgstr "La red es inaccesible" # state: translated # (1) dlg_prefs.cc:313 msgid "News/Notifications" msgstr "Noticias/notificaciones" # state: translated # (1) dlg_gamelist.cc:428 msgid "No" msgstr "No" # state: translated # (3) network.cc:314,438,503 msgid "No error." msgstr "Sin errores." # state: translated # (2) proto_p2p.cc:280,442 msgid "No material to mate" msgstr "No hay material para dar mate" # state: translated # (1) network.cc:781 msgid "No output from program." msgstr "No hay salida desde el programa." # state: translated # (1) mainwindow.cc:1131 msgid "No peer." msgstr "Sin oponente." # state: translated # (1) text.cc:74 msgid "No previous search." msgstr "No hay búsqueda previas." # state: translated # (1) proto_p2p.cc:650 msgid "No proposals left." msgstr "No quedan propuestas." # state: translated # (1) proto_p2p.cc:589 msgid "No proposals received." msgstr "No se recibieron propuestas." # state: lost (deprecated key) # (1) dgtboard.cc:219 msgid "No response to DGT_SEND_BRD on port %s: %s." msgstr "No hay respuesta a DGT_SEND_BRD en el puerto %s: %s." # state: untranslated # (1) dlg_prefs.cc:197 msgid "Non-ASCII Character Filtering" msgstr "" # state: translated # (5) bugpane.cc:38,39,359,360; dlg_prefs.cc:224 msgid "None" msgstr "Ninguno" # state: translated # (1) proto_xboard.cc:1194 msgid "Normal Chess" msgstr "Ajedrez normal" # state: translated # (1) dlg_prefs.cc:310 msgid "Normal Text" msgstr "Texto normal" # state: translated # (1) network.cc:368 msgid "Not a socket ?!?" msgstr "¿No es un socket?!?" # state: translated # (2) clock.cc:505; proto_xboard.cc:902 msgid "OK" msgstr "Aceptar" # state: translated # (1) dlg_prefs.cc:78 msgid "Obs'vd Game Ended" msgstr "Part. Observ. acabó" # state: translated # (1) dlg_gamelist.cc:111 msgid "Observe" msgstr "Observar" # state: translated # (5) board.cc:2539; dlg_prefs.cc:568; quickbar.cc:266; sound.cc:460; text.cc:477 msgid "Ok" msgstr "Aceptar" # state: translated # (1) dlg_connect.cc:129 msgid "" "Once you connect to a host from this dialog, it will be added to\n" "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n" "to modify or remove entries." msgstr "" "Una vez conecte a una maáquina desde este diálogo, será añadida al\n" "menú Enlaces/Marcadores ICS. Edita el fichero ~/.eboard/eboard.conf\n" "para modificar o eliminar entradas." # state: translated # (1) text.cc:454 msgid "" "Only lines that match the above pattern will be added\n" "to this text pane. Patterns can be OR'ed with the | (pipe)\n" "character. A * (star) can be used to match anything.\n" "Examples:\n" "'(20)|(22)' shows only lines from channels 20 and 22\n" "'blik * bored' shows lines containing 'blik '(...)' bored'." msgstr "" "Sólo se añadirán las líneas que coincidan con el patrón anterior\n" "a este panel. Los patrones se pueden sumar (OR) con el carácter |\n" "(barra vertical). El asterisco (*) se puede usar como comodín.\n" "Ejemplos:\n" "'(20)|(22)' muestra solo líneas de los canales 20 y 22\n" "'blik * aburrido' muestra líneas con 'blik '(...)' aburrido'." # state: translated # (1) dlg_prefs.cc:70 msgid "Opponent Moved" msgstr "El oponente movió" # state: translated # (1) p2p.cc:149 msgid "Options" msgstr "Opciones" # state: translated # (1) chess.cc:1459 msgid "PGN Headers" msgstr "Cabeceras PGN" # state: translated # (1) dlg_prefs.cc:491 msgid "PGN filename:" msgstr "Fichero PGN:" # state: translated # (1) bugpane.cc:274 msgid "Partner Tells:" msgstr "Compañero te dice:" # state: translated # (1) board.cc:997 msgid "Pawn %d" msgstr "Peón %d" # state: translated # (1) sound.cc:377 msgid "Pitch (Hz):" msgstr "Tono (Hz):" # state: translated # (1) dlg_gamelist.cc:845 msgid "Play" msgstr "Jugar" # state: translated # (1) proto_xboard.cc:1001 msgid "Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)" msgstr "Jugar %s como %s vs. %s (%s, prof. %d, pensar siempre: %s)" # state: translated # (1) sound.cc:361 msgid "Play WAV (need Device and Filename, sox must be installed)" msgstr "Reproducir WAV (necesita dispositivo y fichero, y sox instalado)" # state: translated # (1) proto_xboard.cc:1078 msgid "Play against Crafty" msgstr "Jugar contra Crafty" # state: translated # (1) proto_xboard.cc:769 msgid "Play against Engine" msgstr "Jugar contra un motor" # state: translated # (1) proto_xboard.cc:1319 msgid "Play against GNU Chess 4" msgstr "Jugar contra GNU Chess 4" # state: translated # (1) proto_xboard.cc:1234 msgid "Play against Sjeng" msgstr "Jugar contra Sjeng" # state: lost (deprecated key) # (1) seekgraph.cc:139 msgid "Player" msgstr "Jugador" # state: translated # (2) proto_p2p.cc:286,489 msgid "Player resigns" msgstr "El jugador abandona" # state: translated # (1) dlg_prefs.cc:370 msgid "Player/Color Name Font" msgstr "Fuente de jugador/nombre de color" # state: translated # (1) proto_fics.cc:926 msgid "Pos: %s vs. %s" msgstr "Pos: %s vs. %s" # state: translated # (1) dlg_prefs.cc:51 msgid "Preferences" msgstr "Preferencias" # state: translated # (1) dlg_prefs.cc:944 msgid "Press the button to be used for going to the next tab." msgstr "Pulse el botón a usar para ir al siguiente tabulador." # state: translated # (1) dlg_prefs.cc:941 msgid "Press the button to be used for going to the previous tab." msgstr "Pulse el botón a usar para ir al tabulador anterior." # state: translated # (1) dlg_prefs.cc:935 msgid "Press the button to be used for selecting a square." msgstr "Pulse el botón a usar para seleccionar un escaque." # state: translated # (1) dlg_prefs.cc:72 msgid "Private Tell" msgstr "Decir en privado" # state: translated # (1) dlg_prefs.cc:312 msgid "Private Tells" msgstr "Conversaciones privadas" # state: translated # (1) network.cc:798 msgid "Program exited too soon" msgstr "El programa terminó demasiado pronto" # state: translated # (1) widgetproxy.cc:224 msgid "Progress" msgstr "Progreso" # state: translated # (1) promote.cc:57 msgid "Promotion Piece " msgstr "Promocionar a " # state: translated # (1) proto_p2p.cc:572 msgid "Propose" msgstr "Proponer" # state: translated # (1) proto_p2p.cc:539 msgid "Propose Game" msgstr "Proponer partida" # state: translated # (1) dlg_connect.cc:106 msgid "Protocol" msgstr "Protocolo" # state: translated # (2) proto_p2p.cc:189,199 msgid "Protocol mismatch, disconnecting." msgstr "Protocolo no coincide, desconectando." # state: translated # (1) board.cc:1013 msgid "Queen %d" msgstr "Reina %d" # state: lost (deprecated key) # (1) seekgraph.cc:144 msgid "Rated" msgstr "Puntua" # state: lost (deprecated key) # (1) seekgraph.cc:140 msgid "Rating" msgstr "Puntuación" # state: lost (deprecated key) # (1) seekgraph.cc:146 msgid "Rating Range" msgstr "Rango de puntuación" # state: translated # (1) network.cc:788 msgid "Read error from program." msgstr "Error de lectura desde el programa." # state: translated # (1) proto_p2p.cc:242 msgid "Received a game proposal from %s." msgstr "Recibida una proposición de partida de %s." # state: translated # (1) dlg_connect.cc:80 msgid "Recent Hosts" msgstr "Máquinas recientes" # state: translated # (4) dlg_gamelist.cc:110,277,844; script.cc:79 msgid "Refresh List" msgstr "Refrescar lista" # state: translated # (1) seekgraph.cc:260 msgid "Replied to seek #%d" msgstr "Contestó a la búsqueda nº %d" # state: translated # (2) proto_fics.cc:1608; proto_xboard.cc:382 msgid "Resigned." msgstr "Abandono." # state: translated # (1) dlg_gamelist.cc:323 msgid "Result" msgstr "Resultado" # state: translated # (1) proto_xboard.cc:426 msgid "Retracted last move." msgstr "Retractado el último movimiento." # state: translated # (1) dlg_prefs.cc:255 msgid "Retrieve ICS Channel Lists from eboard.sf.net" msgstr "Recuperar las listas de canales ICS desde eboard.sf.net" # state: translated # (1) dlg_prefs.cc:342 msgid "Revert to Defaults" msgstr "Configuración por defecto" # state: translated # (1) dlg_prefs.cc:393 msgid "Revert to defaults" msgstr "Configuración por defecto" # state: translated # (1) dlg_prefs.cc:128 msgid "Right" msgstr "Derecha" # state: translated # (1) board.cc:1001 msgid "Rook %d" msgstr "Torre %d" # state: translated # (1) script.cc:80 msgid "Run" msgstr "Ejecutar" # state: translated # (1) board.cc:2471 msgid "Run Engine..." msgstr "Ejecutar motor..." # state: translated # (1) sound.cc:363 msgid "Run Program (need Filename)" msgstr "Ejecutar programa (necesita nombre de fichero)" # state: translated # (1) dlg_prefs.cc:209 msgid "Run autofics.pl script after connecting to FICS" msgstr "Ejecutar autofics.pl despues de conectar a FICS" # state: translated # (1) text.cc:104 msgid "Save Buffer As..." msgstr "Guardar búfer como..." # state: translated # (1) dlg_gamelist.cc:286 msgid "Save Game..." msgstr "Guardar partida..." # state: translated # (1) dlg_gamelist.cc:682 msgid "Save as PGN" msgstr "Guardar como PGN" # state: translated # (2) mainwindow.cc:1151,1176 msgid "Scratch %d" msgstr "Esquema %d" # state: translated # (1) script.cc:62 msgid "Script" msgstr "Guión" # state: translated # (1) script.cc:44 msgid "Script List" msgstr "Lista de scripts" # state: translated # (1) dlg_prefs.cc:260 msgid "Scrollback limit (0 = unlimited) :" msgstr "Límite de scroll (0 = ilimitado) :" # state: lost (deprecated key) # (1) text.cc:605 msgid "Search Text" msgstr "Buscar texto" # state: lost (deprecated key) # (1) text.cc:615 msgid "Search for: " msgstr "Buscar por: " # state: translated # (1) text.cc:96 msgid "Search text not found." msgstr "Texto no encontrado." # state: translated # (1) dlg_prefs.cc:318 msgid "Seek Ads" msgstr "Anuncios de búsqueda" # state: untranslated # (2) dlg_prefs.cc:193; proto_fics.cc:1861 msgid "Seek Graph" msgstr "" # state: untranslated # (1) dlg_prefs.cc:382 msgid "Seek Graph Font" msgstr "" # state: lost (deprecated key) # (2) dlg_prefs.cc:187; proto_fics.cc:1848 msgid "Seek Table" msgstr "Buscar tabla" # state: lost (deprecated key) # (1) dlg_prefs.cc:348 msgid "Seek Table Font" msgstr "Fuente de buscar tabla" # state: translated # (1) dgtboard.cc:413 msgid "Serial :%s" msgstr "Nº serie: %s" # state: translated # (1) text.cc:442 msgid "Set Filter" msgstr "Establecer filtro" # state: translated # (1) text.cc:269 msgid "Set Filter..." msgstr "Establecer filtro..." # state: translated # (1) proto_xboard.cc:844 msgid "Set depth limit to 0 to use the engine's default." msgstr "Profundidad límite a 0 para usar el valor por defecto del motor." # state: translated # (1) quickbar.cc:67 msgid "Setup Buttons" msgstr "Configurar botones" # state: translated # (1) quickbar.cc:207 msgid "Shortcut Button Setup" msgstr "Configurar atajo del botón" # state: translated # (1) dlg_prefs.cc:317 msgid "Shouts" msgstr "Gritos" # state: translated # (1) dlg_prefs.cc:249 msgid "Show channel tells in one pane per channel" msgstr "Mostrar conversaciones de canal en un panel por canal" # state: translated # (1) dlg_prefs.cc:252 msgid "Show channel tells on console too (when above option is active)" msgstr "Mostrar conversaciones también en consola (si la anterior está activa)" # state: translated # (1) dlg_prefs.cc:206 msgid "Show rating next to player name" msgstr "Mostrar puntuación junto al nombre del jugador" # state: translated # (1) dlg_prefs.cc:168 msgid "Show shortcut buttons below board" msgstr "Mostrar botones aceleradores bajo el tablero" # state: untranslated # (1) dlg_prefs.cc:212 msgid "Show timestamps for text lines" msgstr "" # state: translated # (1) proto_xboard.cc:802 msgid "Side & Time" msgstr "Bando y tiempo" # state: translated # (1) proto_xboard.cc:804 msgid "Side Selection" msgstr "Selección de bando" # state: translated # (2) board.cc:2476,2481 msgid "Side to move: " msgstr "Lado que mueve: " # state: translated # (1) dlg_prefs.cc:532 msgid "Smooth joystick cursor" msgstr "Cursor del joystick suave" # state: translated # (1) dlg_prefs.cc:533 msgid "Smooth joystick cursor speed:" msgstr "Velocidad del cursor del joystick suave:" # state: translated # (1) dlg_prefs.cc:162 msgid "Smoother animation (eats more CPU)" msgstr "Animación suave (usa más CPU)" # state: untranslated # (1) dlg_prefs.cc:230 msgid "Soft translate" msgstr "" # state: translated # (1) protocol.cc:84 msgid "" "Sorry, this protocol does not allow to retract a move thru this menu option." msgstr "" "Lo siento, este protocolo no permite retractar un movimiento con esta opción." # state: translated # (1) sound.cc:337 msgid "Sound Event" msgstr "Evento sonoro" # state: translated # (1) dlg_prefs.cc:422 msgid "Sound Events" msgstr "Eventos de sonido" # state: translated # (1) dlg_prefs.cc:420 msgid "Sounds" msgstr "Sonidos" # state: translated # (1) mainwindow.cc:796 msgid "Source code available at http://eboard.sourceforge.net" msgstr "Código fuente disponible en http://eboard.sourceforge.net" # state: translated # (2) proto_p2p.cc:277,436 msgid "Stalemate" msgstr "Ahogado" # state: translated # (1) p2p.cc:147 msgid "Start a connection" msgstr "Iniciar una conexión" # state: translated # (1) clock.cc:488 msgid "Starting Time:" msgstr "Tiempo inicial:" # state: translated # (1) proto_xboard.cc:1198 msgid "Suicide" msgstr "Suicida" # state: translated # (1) dlg_connect.cc:105 msgid "TCP Port" msgstr "Puerto TCP" # state: translated # (2) p2p.cc:72,96 msgid "TCP Port:" msgstr "Puerto TCP:" # state: translated # (1) dlg_prefs.cc:123 msgid "Tab Position" msgstr "Posición de la pestaña" # state: translated # (1) sound.cc:462 msgid "Test" msgstr "Probar" # state: translated # (1) dlg_prefs.cc:436 msgid "The checkbox on the left enables/disables the sound." msgstr "La casilla de la izquierda (des)habilita el sonido." # state: translated # (1) proto_xboard.cc:884 msgid "The engine will be run with\n/bin/sh -c 'cd directory ; command line'" msgstr "El motor se ejecutará con\n/bin/sh -c 'cd directorio ; línea de comando'" # state: translated # (1) dlg_connect.cc:305 msgid "Think Always" msgstr "Pensar siempre" # state: translated # (1) proto_xboard.cc:847 msgid "Think on opponent's time" msgstr "Pensar en el tiempo del oponente" # state: lost (deprecated key) # (1) seekgraph.cc:142 msgid "Time" msgstr "Tiempo" # state: translated # (1) proto_xboard.cc:816 msgid "Time Control" msgstr "Control de tiempo" # state: translated # (1) proto_xboard.cc:829 msgid "Time Control..." msgstr "Control de tiempo..." # state: translated # (1) dlg_connect.cc:291 msgid "Time Control:" msgstr "Control de tiempo:" # state: translated # (1) dlg_prefs.cc:74 msgid "Time Running Out" msgstr "Tiempo agotándose" # state: translated # (1) network.cc:371 msgid "Timeout" msgstr "Fuera de tiempo" # state: translated # (1) clock.cc:498 msgid "Times can be given as hh:mm:ss , mm:ss or ss" msgstr "Los tiempos pueden ser hh:mm:ss , mm:ss o ss" # state: translated # (1) quickbar.cc:253 msgid "" "To run multiple commands with one shortcut, separate the commands with ; (semicolon).\n" "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl ." msgstr "" "Para ejecutar múltiples comandos con un atajo sepárelos con ; (punto y coma).\n" "Para ejecutar un script desde un atajo escriba script.NombreScript como comando, p.ej.: script.miguion.pl ." # state: translated # (1) dlg_prefs.cc:132 msgid "Top" msgstr "Arriba" # state: translated # (1) dgtboard.cc:419 msgid "Trademark :%s" msgstr "Marca registrada: %s" # state: untranslated # (1) dlg_prefs.cc:226 msgid "Truncate" msgstr "" # state: translated # (1) clock.cc:446 msgid "Type: Fischer Clock (ICS-like)" msgstr "Tipo: Cronómetro Fischer (como ICS)" # state: translated # (1) clock.cc:444 msgid "Type: Fixed Time per Move" msgstr "Tipo: Tiempo fijo por movimiento" # state: translated # (1) clock.cc:447 msgid "Type: Use engine's default setting" msgstr "Tipo: Usar la configuración por defecto del motor" # state: translated # (1) clock.cc:445 msgid "Type: X Moves per Time Period" msgstr "Tipo: X movimientos por periodo de tiempo" # state: translated # (1) network.cc:467 msgid "Unable to bind on port %d." msgstr "No se puede enlazar al puerto %d." # state: translated # (1) network.cc:457 msgid "Unable to create socket." msgstr "No se puede crear el socket." # state: untranslated # (1) dgtboard.cc:403 msgid "Unable to find the DGT board on port %s." msgstr "" # state: lost (deprecated key) # (1) dgtboard.cc:215 msgid "Unable to find the DGT board on port %s: %s." msgstr "No se encuentra el tablero DGT en el puerto %s: %s." # state: untranslated # (1) dgtboard.cc:119 msgid "Unable to load dgtnix library symbol.\n" msgstr "" # state: untranslated # (1) dgtboard.cc:114 msgid "Unable to load dgtnix library.\n" msgstr "" # state: translated # (1) network.cc:376 msgid "Unknown error" msgstr "Error desconocido" # state: translated # (1) proto_p2p.cc:295 msgid "Unknown result" msgstr "Resultado desconocido" # state: translated # (1) dlg_prefs.cc:144 msgid "Use plain color squares" msgstr "Usar escaques de colo plano" # state: untranslated # (1) dlg_prefs.cc:228 msgid "Use underscores" msgstr "" # state: translated # (1) chess.cc:1479 msgid "Value" msgstr "Valor" # state: translated # (1) chess.cc:1496 msgid "Value:" msgstr "Valor:" # state: translated # (3) dlg_gamelist.cc:322; proto_xboard.cc:1189,1211 msgid "Variant" msgstr "Variante" # state: translated # (2) dlg_connect.cc:307,472 msgid "Variant:" msgstr "Variante:" # state: translated # (1) dlg_connect.cc:445 msgid "Variant: %s (uneditable)" msgstr "Variante: %s (no editable)" # state: translated # (1) p2p.cc:109 msgid "Wait" msgstr "Esperar" # state: translated # (1) p2p.cc:148 msgid "Wait for a connection" msgstr "Esperar por una conexión" # state: translated # (1) p2p.cc:244 msgid "Waiting for connection on port %d." msgstr "Esperando conexión en el puerto %d." # state: translated # (1) dlg_prefs.cc:268 msgid "Warn when own clock is below: " msgstr "Avisar cuando el reloj propio esté por debajo de: " # state: translated # (1) status.cc:43 msgid "Welcome to eboard." msgstr "Bienvenido a eboard." # state: translated # (5) board.cc:430; dlg_gamelist.cc:320; movelist.cc:65; proto_p2p.cc:550; proto_xboard.cc:1003 msgid "White" msgstr "Blanco" # state: translated # (1) bugpane.cc:228 msgid "White: %s - %s" msgstr "Blanco: %s - %s" # state: translated # (1) widgetproxy.cc:238 msgid "Working..." msgstr "Trabajando..." # state: translated # (1) help.cc:245 msgid "Write to Console" msgstr "Escribir en consola" # state: translated # (1) network.cc:367 msgid "Wrong address space" msgstr "Espacio de direcciones erróneo" # state: translated # (1) chess.cc:890 msgid "Wrote" msgstr "Escrito" # state: translated # (1) dlg_gamelist.cc:427 msgid "Yes" msgstr "Si" # state: translated # (1) proto_xboard.cc:414 msgid "You can only retract when it's your turn to move." msgstr "Sólo se puede retractar cuando sea su turno de mover." # state: translated # (1) proto_p2p.cc:546 msgid "Your color:" msgstr "Su color:" # state: translated # (1) p2p.cc:135 msgid "Your name:" msgstr "Su nombre:" # state: translated # (1) mainwindow.cc:2015 msgid "[chat]" msgstr "[chat]" # state: translated # (2) mainwindow.cc:1973,2016 msgid "[cmd]" msgstr "[cmd]" # state: translated # (1) global.cc:385 msgid "[eboard] ** $HOME is too long" msgstr "[eboard] ** $HOME es demasiado largo" # state: translated # (1) global.cc:412 msgid "[eboard] ** failed to create directory " msgstr "[eboard] ** falló al crear directorio " # state: translated # (1) global.cc:382 msgid "[eboard] ** no $HOME" msgstr "[eboard] ** sin $HOME" # state: translated # (1) sound.cc:149 msgid "[eboard] bad RC line\n" msgstr "[eboard] línea RC errónea\n" # state: untranslated # (1) mainwindow.cc:2005 msgid "[find]" msgstr "" # state: translated # (1) sound.cc:314 msgid "beep" msgstr "pitido" # state: translated # (1) sound.cc:313 msgid "beeps" msgstr "pitidos" # state: translated # (1) proto_fics.cc:1914 msgid "black" msgstr "negras" # state: translated # (1) chess.cc:1254 msgid "can't load PGN move text from %s (error opening file)" msgstr "no puedo cargar de %s el texto del movimiento PGN (error al abrir)" # state: translated # (1) chess.cc:1260 msgid "can't seek to offset %lu of %s" msgstr "no puedo desplazarme a la posición %lu de %s" # state: lost (deprecated key) # (1) dgtboard.cc:208 msgid "dgtnix driver version %.1f" msgstr "versión del controlador dgtnix %.1f" # state: untranslated # (1) dgtboard.cc:397 msgid "dgtnix driver version: %s" msgstr "" # state: untranslated # (1) dgtboard.cc:146 msgid "dgtnix version too old: %f, must be >= %f" msgstr "" # state: translated # (1) mainwindow.cc:525 msgid "discards board" msgstr "descarta el tablero" # state: translated # (1) p2p.cc:33 msgid "eboard Direct Connection Manager" msgstr "Gestor de conexión directa de eboard" # state: translated # (1) mainwindow.cc:790 msgid "eboard version %s (%s)" msgstr "eboard versión %s (%s)" # state: translated # (1) help.cc:76 msgid "" "eboard version %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nThis program is free software; you can redistribute\n" "it and/or modify it under the terms of the GNU General\n" "Public License as published by the Free Software\n" "Foundation; either version 2 of the License, or\n" "(at your option) any later version.\n" msgstr "" "eboard versión %s\n" "(c) 2000-%d Felipe Bergo\n" "\n" "http://eboard.sourceforge.net\n" "\nEste programa es software libre; puedes redistribuirlo\n" "y/o modificarlo bajo los términos de la GNU General\n" "Public License, tal y como se publicó por la Free Software\n" "Foundation; tanto en la versión 2 de la licencia, u\n" "(opcionalmente) cualquier versión posterior.\n" # state: translated # (1) text.cc:239 msgid "eboard: Console #%d" msgstr "eboard: Consola nº %d" # state: translated # (1) proto_xboard.cc:161 msgid "engine claimed illegal move but we didn't move, ignoring it." msgstr "el motor reclamó un movimiento ilegal pero no hemos movido, ignorándolo." # state: translated # (1) chess.cc:1267 msgid "error parsing PGN data" msgstr "error interpretando los datos PGN" # state: translated # (1) mainwindow.cc:524 msgid "flips board" msgstr "invierte el tablero" # state: translated # (5) dlg_gamelist.cc:499,510,516,522,528 msgid "game" msgstr "partida" # state: translated # (5) dlg_gamelist.cc:500,511,517,523,529 msgid "games" msgstr "partidas" # state: translated # (1) dlg_connect.cc:450 msgid "generic xboard v2" msgstr "xboard genérico v2" # state: translated # (1) mainwindow.cc:520 msgid "goes back 1 halfmove" msgstr "retrocede 1 medio-movimiento" # state: translated # (1) mainwindow.cc:519 msgid "goes back to start of game" msgstr "vuelve al inicio de la partida" # state: translated # (1) mainwindow.cc:521 msgid "goes forward 1 halfmove" msgstr "avanza 1 medio-movimiento" # state: translated # (1) mainwindow.cc:522 msgid "goes forward to end of game" msgstr "avanza al fin de la partida" # state: translated # (1) proto_xboard.cc:177 msgid "illegal move!" msgstr "¡movimiento ilegal!" # state: translated # (1) dlg_gamelist.cc:436 msgid "in progress" msgstr "en ejecución" # state: translated # (1) clock.cc:342 msgid "initial time %s, increment %s" msgstr "tiempo inicial %s, incremento %s" # state: translated # (1) clock.cc:479 msgid "moves in" msgstr "mueve en" # state: translated # (1) proto_xboard.cc:1009 msgid "no" msgstr "no" # state: translated # (2) proto_fics.cc:1541,1728 msgid "no such game: " msgstr "no hay tal partida: " # state: translated # (1) clock.cc:333 msgid "no time control set" msgstr "Sin control de tiempo" # state: translated # (2) movelist.cc:127,128 msgid "none" msgstr "nada" # state: translated # (1) sound.cc:326 msgid "nothing" msgstr "ninguno" # state: translated # (1) mainwindow.cc:526 msgid "opens new scratch board with position" msgstr "abrir nuevo tablero con una posición" # state: translated # (1) clock.cc:473 msgid "per move" msgstr "por movimiento" # state: translated # (1) sound.cc:323 msgid "plain console beep" msgstr "pitido de consola" # state: translated # (1) sound.cc:317 msgid "play file %s" msgstr "reproducir fichero %s" # state: translated # (1) mainwindow.cc:523 msgid "pops up the move list" msgstr "muestra la lista de movimientos" # state: translated # (1) network.cc:716 msgid "process creation failed." msgstr "falló la creación del proceso." # state: translated # (2) chess.cc:192; seekgraph.cc:549 msgid "rated" msgstr "puntuada" # state: translated # (1) sound.cc:320 msgid "run %s" msgstr "ejecutar %s" # state: translated # (1) script.cc:256 msgid "running %s" msgstr "ejecutando %s" # state: translated # (1) chess.cc:834 msgid "savePGN failed: %s" msgstr "falló savePGN: %s" # state: translated # (1) chess.cc:819 msgid "savePGN failed: Won't save game with less than 2 moves" msgstr "falló savePGN: no salvará partidas con menos de 2 movimientos" # state: translated # (1) dlg_prefs.cc:272 msgid "seconds." msgstr "segundos." # state: translated # (2) chess.cc:193; seekgraph.cc:550 msgid "unrated" msgstr "sin puntos" # state: translated # (1) clock.cc:313 msgid "untimed" msgstr "sin tiempo" # state: translated # (1) proto_fics.cc:1913 msgid "white" msgstr "blancas" # state: translated # (1) proto_xboard.cc:1008 msgid "yes" msgstr "si" eboard-1.1.1.orig/multilang/harvest.pl0000755000175000017500000002053710757567572017317 0ustar patrikpatrik#!/usr/bin/perl ## harvest.pl: retrieve translatable messages from the input ## files listed in harvest.in ## and rewrite all .po files updating the translation ## status sub add_message; sub unescape_message; sub wrap_message; sub extract_messages; sub update_pos; sub update_po; ################ # # globals # ################ my $package = ''; my $outfile = ''; my $langs = ''; my @srcfiles = ( ); my @messages = ( ); my %locations = ( ); my %rcount = ( ); my @langs = ( ); extract_messages; update_pos; ############## # # SUBS # ############## sub update_pos { my $x; @langs = split(/,/,$langs); print "Updating po files...\n"; for (@langs) { $x = $package . '.' . $_ . ".po"; print " $x\n"; update_po($x); } return 0; } sub update_po { my $po = shift @_; my @pomsg = ( ); my %potrans = ( ); my %status = ( ); my %comment = ( ); my $id, $msg, $state, $idlen, $msglen, $lastcomment, $M, $N; my $t, $u, $l; my @W; if (!open(PO,"<$po")) { print "** unable to open $po.\n"; exit 2; } $state = 0; $id = ''; $msg = ''; $lastcomment = ''; while($_=) { chomp; if (/^\#/) { $lastcomment = $_ unless (/^\#,/); next; } if ($state == 0) { if (/^msgid\s+\"(.*)\"/) { $id = $1; $msg = ''; $state = 1; next; } next; } if ($state == 1) { if (/^\"(.*)\"/) { $id = $id . $1; next; } if (/^msgstr\s+\"(.*)\"/) { $msg = $1; $state = 2; next; } next; } if ($state == 2) { if (/^\"(.*)\"/) { $msg = $msg . $1; next; } $idlen = length($id); $msglen = length($msg); if ($idlen > 0 && $msglen > 0) { push @pomsg, $id; $potrans{$id} = $msg; $comment{$id} = $lastcomment; } $state = 0; next; } } if ($state != 0) { $idlen = length($id); $msglen = length($msg); if ($idlen > 0 && $msglen > 0) { push @pomsg, $id; $potrans{$id} = $msg; $comment{$id} = $lastcomment; } } close(PO); # now find state of each for $M (@messages) { $status{$M} = 'UNTRANSLATED'; } for $M (@pomsg) { $status{$M} = 'LOST'; } for $M (@pomsg) { for $N (@messages) { if ($M eq $N) { $status{$M} = 'TRANSLATED'; last; } } } for $M (@messages) { if ($status{$M} eq 'UNTRANSLATED') { push @pomsg, $M; $comment{$M} = "# ($rcount{$M}) $locations{$M}"; next; } if ($status{$M} eq 'TRANSLATED') { $comment{$M} = "# ($rcount{$M}) $locations{$M}"; } } @pomsg = sort @pomsg; $t = 0; $u = 0; $l = 0; if (!open(PO,">$po")) { print "** unable to write to $po.\n"; exit 2; } for $M (@pomsg) { if ($status{$M} eq 'TRANSLATED') { $t++; print PO "# state: translated\n"; print PO "$comment{$M}\n" if ($comment{$M}); if (length($M) < 74) { print PO "msgid \"$M\"\n"; print PO "msgstr \"$potrans{$M}\"\n\n"; } else { @W = wrap_message($M); print PO "msgid \"\"\n"; for (@W) { print PO "\"$_\"\n"; } @W = wrap_message($potrans{$M}); print PO "msgstr \"\"\n"; for (@W) { print PO "\"$_\"\n"; } print PO "\n"; } next; } if ($status{$M} eq 'LOST') { $l++; print PO "# state: lost (deprecated key)\n"; print PO "$comment{$M}\n" if ($comment{$M}); if (length($M) < 74) { print PO "msgid \"$M\"\n"; print PO "msgstr \"$potrans{$M}\"\n\n"; } else { @W = wrap_message($M); print PO "msgid \"\"\n"; for (@W) { print PO "\"$_\"\n"; } @W = wrap_message($potrans{$M}); print PO "msgstr \"\"\n"; for (@W) { print PO "\"$_\"\n"; } print PO "\n"; } next; } if ($status{$M} eq 'UNTRANSLATED') { $u++; print PO "# state: untranslated\n"; print PO "$comment{$M}\n" if ($comment{$M}); if (length($M) < 74) { print PO "msgid \"$M\"\n"; print PO "msgstr \"\"\n\n"; } else { @W = wrap_message($M); print PO "msgid \"\"\n"; for (@W) { print PO "\"$_\"\n"; } print PO "msgstr \"\"\n\n"; } next; } } # for M in pomsg close(PO); print "done, $t translated, $u untranslated, $l lost/deprecated.\n"; } # sub sub extract_messages { my $state = 0; my $line = 0; my $xline = 0; my $msgbuf = ''; my $warnings = 0; if (!open(HIN,") { chomp; next if (/^\#/); if (/^package=(\S+)/) { $package = $1; next; } if (/^langs=(\S+)/) { $langs = $1; next; } if (/\s*(\S+)\s*/) { push @srcfiles, $_; } } close(HIN); if ($package eq '') { print "** error: harvest.in did not specify an output file.\n"; exit 2; } $outfile = $package . ".hemp"; for my $src (@srcfiles) { print "reading $src...\n"; if (!open(SRC,"<$src")) { print "** unable to open file.\n"; exit 2; } $state = 0; $line = 0; $msgbuf = ''; while($_=) { chomp; ++$line; if (/_\(.*\).*_\(/) { print "** WARNING: I'm just a poor perl script, not a C compiler! Please don't start two translatables in the same line, $src:$line -- continuing anyway, result may be wrong.\n"; $warnings++; } if ($state == 0) { if (/_\(\s*\"(.*)\"\s*\)/) { $state = 0; $msgbuf = $1; add_message($msgbuf,$src,$line); next; } if (/_\(\s*\"(.*)\"\\/) { $state = 1; $msgbuf = $1; $xline = $line; next; } } else { if (/^\s*\"(.*)\"\s*\)/) { $state = 0; $msgbuf .= $1; add_message($msgbuf,$src,$xline); next; } if (/^\s*\"(.*)\"\\/) { $state = 1; $msgbuf .= $1; next; } print "** unparseable multi-line string at $src:$line\n"; print "** dump [$_]\n"; exit 2; } } close(SRC); } print "sorting messages...\n"; @messages = sort @messages; print "writing $outfile...\n"; if (!open(HEMP,">$outfile")) { print "** unable to open $outfile for writing.\n"; exit 2; } for my $m (@messages) { print HEMP "# ($rcount{$m}) $locations{m}\n"; if (length($m) < 74) { print HEMP "msgid \"$m\"\n"; } else { @M = wrap_message($m); print HEMP "msgid \"\"\n"; for (@M) { print HEMP "\"$_\"\n"; } } print HEMP "msgstr \"\"\n\n"; } close(HEMP); print "extraction done.\n"; $mcount = 1 + $#messages; print "summary: $warnings warnings, $mcount distinct messages.\n"; } sub add_message { my $msg = shift @_; my $loc = shift @_; my $lin = shift @_; my $emsg, $eloc, $m; # remove path components from locations $_ = $loc; while (/.*\/(.*)/) { $_ = $1; } $loc = $_; $emsg = unescape_message($msg); $eloc = "$loc:$lin"; # check for repeated messages for $m (@messages) { if ($m eq $emsg) { $rcount{$emsg}++; $_ = $locations{$emsg}; if (/(\S+):\S+$/) { if ($1 eq $loc) { $eloc = ",$lin"; } else { $eloc = "; $eloc"; } } else { $eloc = "; $eloc-HUH?!?"; } $locations{$emsg} .= $eloc; return 0; } } # new message, really add it push @messages, $emsg; $locations{$emsg} = $eloc; $rcount{$emsg} = 1; return 1; } # unescape all C backslash escapes, except \n sub unescape_message { my $x = shift @_; my $value, $tmp, $code; # octal trithings $_ = $x; while (/\\(\d{3})/) { $code = $1; $value = 0; $tmp = substr($code, 0, 1); $value = 64 * $tmp; $tmp = substr($code, 1, 1); $value += 8 * $tmp; $tmp = substr($code, 2, 1); $value += $tmp; $tmp = chr($value); $x =~ s/\\$code/$tmp/g; $_ = $x; } # \a \r \t \0 \b \v \f \\ # man 7 ascii has a nice list # \n is left escaped $tmp = chr(0); $x =~ s/\\0/$tmp/g; $tmp = chr(7); $x =~ s/\\a/$tmp/g; $tmp = chr(8); $x =~ s/\\b/$tmp/g; $tmp = chr(9); $x =~ s/\\t/$tmp/g; $tmp = chr(11); $x =~ s/\\v/$tmp/g; $tmp = chr(12); $x =~ s/\\f/$tmp/g; $tmp = chr(13); $x =~ s/\\r/$tmp/g; $tmp = chr(92); $x =~ s/\\\\/$tmp/g; return($x); } sub wrap_message { my $x = shift @_; my $y, $z; my @r = ( ); $_ = $x; if (/^(.{3,}?\\n)(.+)/) { $y = $1; $z = $2; @r = wrap_message($z); @r = ( $y, @r ); return @r; } else { @r = ( $x ); return @r; } } eboard-1.1.1.orig/multilang/eboard.pl.dict0000644000175000017500000010175610757567572020021 0ustar patrikpatrikL72 102 ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n ** Åadowanie PNG nieudane: używam wbudowanego zestawu bierek o niskiej rozdzielczoÅ›ci (brzydki).\n L11 16 Browse... PrzeglÄ…daj... L15 17 Play Selected Graj zaznaczone L9 11 Refresh OdÅ›wież L14 12 Remove Field UsuÅ„ pole L5 7 Set Ustaw L1543 1757 #L#Getting Started\n#M#Common Tasks in eboard\n\nPlaying against the computer\n#S#eboard does not "play chess" itself, but rather is works as interface to programs that do,\ncalled "engines", which don't have a graphical interface themselves. You need an engine to\nplay against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\nno cost.\nOnce you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\nengine#K# submenu, and select the appropriate option depending on which engine you have\ninstalled.\n\n#M#Playing Chess on the Internet\n#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\nUS Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\nTo connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\nother servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\nWhile you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\nis done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n#M#Browsing PGN Games\n#S#PGN is the most common file format to store chess games. It can store moves and comments\n(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\ngame, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\nwith the game.#L# #L#Szybki start\n#M#Typowe czynnoÅ›ci w programie eboard\n\nGra przeciw komputerowi\n#S#Sam eboard nie potrafi "grać w szachy", ale sÅ‚uży za interfejs graficzny dla programów\ngrajÄ…cych, które takiego interfejsu nie posiadajÄ…. Aby grać przeciw komputerowi\npotrzeba wÅ‚aÅ›nie takiego programu. GNU Chess, Crafty czy Sjeng sÄ… przykÅ‚adami programów\ndostÄ™pnych za darmo. Po zainstalowaniu jednego z nich, wejdź do menu #B#Partner#K#, a nastÄ™pnie\n #B#Graj przeciw programowi szchowemu#K# i wybierz opcjÄ™ w zależnoÅ›ci od posiadanego programu.\n\n#M#Gra przez Internet\n#S#Eboard obsÅ‚uguje protokół FICS obowiÄ…zujÄ…cy na serwerze freechess.org - inne serwery, \njak na przykÅ‚ad US Chess Live, używajÄ…ce opragramowania FICS powinny dziaÅ‚ać z eboard. \nICC nie jest obsÅ‚ugiwany. Aby połączyc siÄ™ z FICS, wejdź do menu #B#Partner#K# i \n kliknij na #B#Połącz z FICS#K#. Aby połączyć siÄ™ z innymi serwerami, wejdź do menu #B#Partner#K# \na nastÄ™pnie #B#Połącz z innym serwerem...#K#.\nNa FICS można zalogować siÄ™ jako gość, lecz wiÄ™cej zabawy daje gra jako zarejestrowany\nużytkownik. Darmowej rejestracji można dokonać na stronie FICS #B#http://www.freechess.org#K#.\n\n#M#PrzeglÄ…danie partii w formacie PGN\n#S#PGN jest najbardziej rozpowszechnionym formatem zapisu partii szachowych. Potrafi zapisywać\nzarówno posuniÄ™cia jak i komentarze (analizy). Aby otworzyć plik PGN w programie eboard,\nwejdź do menu #B#Okna#K# i kliknij na #B#Partie na kliencie#K#. NastÄ™pnie, w otwartym okienku\nkliknij na #B#Otwórz PGN...#K#. Aby obejrzeć partiÄ™,\n#B#zaznacz jÄ…#K# a nastÄ™pnie kliknij na #B#WyÅ›wietl partiÄ™#K#. Partia zostanie umieszczona \nw głównym oknie programu w nowej zakÅ‚adce szachownicy .#L# L30 27 %d %s to %s, %d Hz for %d msec %d %s na %s, %d Hz na %d ms L13 21 %d games read Przeczytano %d partii L14 25 %d moves in %s %d posunięć w ciÄ…gu %s L25 25 %d. Connect to %s:%d (%s) %d. Połącz z %s:%d (%s) L41 43 %s (white) vs. %s (black)\n%s\n%d:%.2d %d %s (biaÅ‚e) vs. %s (czarne)\n%s\n%d:%.2d %d L31 24 %s accepted your game proposal. %s przyjÄ…Å‚ ofertÄ™ gry L18 23 %s engine started. Program %s uruchomiony. L17 19 %s offers a draw. %s proponuje remis. L11 10 %s per move %s na ruch L33 47 (Wrapped) Match Found at Line %d. Trafienie w wierszu %d. (miniÄ™to koniec pliku) L64 65 (c) 2000-%d Felipe Bergo (FICS handle: Pulga) (c) 2000-%d Felipe Bergo (ksywka na FICS : Pulga) L66 67 (c) 2001-2002 Felipe Bergo (FICS Handle: Pulga) (c) 2001-2002 Felipe Bergo (ksywka na FICS : Pulga) L39 42 (message obfuscated -- password mode ?) (wiadomość nieczytelna -- tryb hasÅ‚a ?) L14 16 (no bookmarks) (brak zakÅ‚adek) L6 4 (none) brak L13 11 (time period) okres czasu L18 25 * game not found: * nie znaleziono partii: L47 72 ** [eboard] bad engine protocol # in bookmark: ** [eboard] nieprawidÅ‚owy protokół programu grajÄ…cego w zakÅ‚adce : L57 50 ** eboard ** warning: HOME environment variable not set\n ** eboard ** uwaga: Nie ustawiono zmiennej HOME \n L26 38 --- %s game to PGN file %s --- Partia zostaÅ‚a %s do pliku PGN %s L16 16 --- Disconnected --- Rozłączono L14 30 /Game/Ad_journ /Partie/_Odłóż na później L19 27 /Game/Retract _Move /Partie/_Cofnij posuniÄ™cie L12 25 /Game/_Abort /Partie/_Przerwij partiÄ™ L17 23 /Game/_Offer Draw /Game/Zaproponuj _remis L13 23 /Game/_Resign /Partie/_Poddaj partiÄ™ L22 22 /Help/_About eboard... /Pomoc/_O programie... L17 34 /Help/_Debug Info /Pomoc/_Informacje dla programisty L22 20 /Help/_Getting Started /Pomoc/_Szybki start L11 16 /Help/_Keys /Pomoc/_Klawisze L10 16 /Help/sep4 /NápovÄ›da/sep4 L22 25 /Peer/Connect to _FICS /Partner/Połącz z _FICS L43 54 /Peer/Direct connect with _Remote eboard... /Partner/_BezpoÅ›rednie połączenie z innym eboard... L23 40 /Peer/Engine B_ookmarks /Partner/ZakÅ‚adki programów grajÄ…cych L20 23 /Peer/ICS _Bookmarks /Partner/ZakÅ‚adki _ICS L36 43 /Peer/Play against Engine/Cr_afty... /Partner/Graj przeciw programowi/_Crafty... L41 48 /Peer/Play against Engine/GNU Chess _4... /Partner/Graj przeciw programowi/_GNU Chess 4... L44 49 /Peer/Play against Engine/_Generic Engine... /Partner/Graj przeciw programowi/_Inny program... L35 42 /Peer/Play against Engine/_Sjeng... /Partner/Graj przeciw programowi/_Sjeng... L30 37 /Peer/Play against Engine/sep1 /Partner/Graj przeciw programowi/sep1 L26 43 /Peer/Play against _Engine /Partner/Graj przeciw programowi szachowemu L33 38 /Peer/_Connect to Other Server... /Partner/_Połącz z innym serwerem... L17 19 /Peer/_Disconnect /Partner/_Rozłącz L26 27 /Peer/_Empty Scratch Board /Partner/_Pusta szachownica L11 18 /Peer/_Quit /Partner/_ZakoÅ„cz L42 44 /Peer/_Scratch Board with Initial Position /Partner/Szachownica z pozycjÄ… _wyjÅ›ciowÄ… L10 13 /Peer/sep2 /Partner/sep2 L10 13 /Peer/sep3 /Partner/sep3 L10 13 /Peer/sep4 /Partner/sep4 L48 54 /Settings/Bitmapped Piece Sets/Load _Pieces Only /Ustawienia/WyglÄ…d bierek/Åaduj tylko wyglÄ…d bierek L49 59 /Settings/Bitmapped Piece Sets/Load _Squares Only /Ustawienia/WyglÄ…d bierek/Åaduj tylko wyglÄ…d szachownicy L42 40 /Settings/Bitmapped Piece Sets/Load _Theme /Ustawienia/WyglÄ…d bierek/Åaduj zestaw L31 20 /Settings/Bitmapped Piece _Sets /Ustawienia/_WyglÄ…d L35 55 /Settings/Enable Legality _Checking /Ustawienia/Włącz sprawdzanie poprawnoÅ›ci posunięć L55 86 /Settings/ICS Behavior/Popup Board Panes _Upon Creation /Ustawienia/Ustawienia ICS/Pr_zełączaj na zakÅ‚adkÄ™ ostatnio utworzonej szachownicy L69 80 /Settings/ICS Behavior/Smart _Discard Observed Boards After Game Ends /Ustawienia/Ustawienia ICS/Usuwaj zakÅ‚adkÄ™ po zakoÅ„czeniu obserwowanej partii L18 48 /Settings/Pre_move /Ustawienia/_Antycypacja nastÄ™pnego posuniÄ™cia L27 34 /Settings/Sho_w Coordinates /Ustawienia/Pokaż _współrzÄ™dne L24 32 /Settings/_Animate Moves /Ustawienia/_Animacja posunięć L33 55 /Settings/_Beep on Opponent Moves /Ustawienia/Graj dźwiÄ™k, gdy przeciwnik wykonuje ruch L30 41 /Settings/_Enable Other Sounds /Ustawienia/_Włącz pozostaÅ‚e dźwiÄ™ki L30 46 /Settings/_Highlight Last Move /Ustawienia/_PodÅ›wietlaj ostatnie posuniÄ™cie L23 27 /Settings/_ICS Behavior /Ustawienia/Ustawienia _ICS L25 27 /Settings/_Preferences... /Ustawienia/_Preferencje... L47 49 /Settings/_Vectorized Pieces (Faster Rendering) /Ustawienia/_Wektorowe bierki (Szybsze rysowanie) L14 16 /Settings/sep3 /Ustawienia/sep3 L23 24 /Windows/Find _Previous /Okna/Znajdź p_oprzedni L28 28 /Windows/Games on _Client... /Okna/Partie na _kliencie... L31 32 /Windows/Save Desktop _Geometry /Okna/ZapamiÄ™taj _rozmiary okna L29 31 /Windows/Save _Text Buffer... /Okna/Zapisz tekst z _bufora... L26 32 /Windows/_Ads on Server... /Okna/_Oferty gry na serwerze... L26 26 /Windows/_Detached Console /Okna/Osobne okno kon_soli L32 34 /Windows/_Find Text (upwards)... /Okna/_Znajdź tekst (w górÄ™)... L28 28 /Windows/_Games on Server... /Okna/_Partie na serwerze... L23 24 /Windows/_Run Script... /Okna/_Uruchom skrypt... L13 10 /Windows/sep1 /Okna/sep1 L13 10 /Windows/sep2 /Okna/sep2 L13 10 /Windows/sep3 /Okna/sep3 L6 8 /_Game /_Partia L6 7 /_Help /Po_moc L6 9 /_Peer /_Partner L10 12 /_Settings /_Ustawienia L9 6 /_Windows /_Okna L106 157 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n\n L41 54 can't load font.\n nie można zaÅ‚adować fontu.\n L124 151 ** failed to load one or more board fonts - install X11 75 dpi and 100 dpi fonts, restart X, and try again.\n ** Å‚adowanie jednego lub wiÄ™ce fontów nieudane - zainstaluj fonty o rozdzielczoÅ›ci 75 i 100 dpi, zrestartuj X i spróbuj ponownie.\n L58 66 ** failed to load one or more board fonts\n ** Å‚adowanie jednego lub wiÄ™ce fontów nieudane\n L34 49 abort request sent oferta przerwania partii wysÅ‚ana L36 50 adjourn request sent oferta odÅ‚ożenia partii wysÅ‚ana L33 38 draw request sent oferta remisu wysÅ‚ana L110 161 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n\n L45 49 ** bad pattern string: ** nieprawidÅ‚owy wzorzec: L40 46 ** file not found: ** nie znaleziono pliku: L39 44 failed to load Å‚adowanie nieudane L112 163 Warning: couldn't load fixed font, this dialog's content will look awful.\n\n Uwaga: nie udaÅ‚o siÄ™ zaÅ‚adować czcionki o staÅ‚ej szerokoÅ›ci, zawartość tego menu bÄ™dziÄ™ wyglÄ…dać bardzo brzydko.\n\n L34 39 failed to load Å‚adowanie nieudane L42 52 Adjourning not supported Brak obsÅ‚ugi odkÅ‚adania partii L33 36 Session Aborted Przerwano sesjÄ™ L35 43 draw request sent wysÅ‚ano ofertÄ™ remisu L9 8 L17 19 > (password sent) > (hasÅ‚o wysÅ‚ane) L23 23 > [issued from menu] %s > [wywoÅ‚ano z menu] %s L25 40 > [issued from shortcut] > [polecenie wydane za pomocÄ… skrótu] L31 45 > [script run from shortcut] %s > [uruchomiono skrypt za pomocÄ… skrótu ] %s L12 11 About eboard O programie L6 8 Accept Przyjmij L36 41 Accepted incoming connection from %s PrzyjÄ™to połączenie nadchodzÄ…ce od %s L14 18 Ad Description Szczegóły oferty L7 15 Ad List Lista ofert gry L23 28 Ad List (refreshing...) Lista ofert (odÅ›wieżam...) L33 18 Add to Peer/Engine Bookmarks menu Dodaj do zakÅ‚adek L22 25 Address already in use Adresa jest już używany L3 6 Ads Oferty L21 30 Already connected ?!? Połączenie już istnieje ?!? L675 802 Anywhere:\nF3: Go to previous pane.\nF4: Go to next pane.\nF5: Go to the main board pane.\nF6: Go to the console pane.\nF7: Go to the seek graph pane (if available).\nF8: Toggle Shortcut Bar visilibity.\nPage Up/Page Down: scrolls the text console (must be visible)\nCtrl+(Left Arrow): Backward 1 halfmove\nCtrl+(Right Arrow): Forward 1 halfmove\nCtrl+F: Find Upwards(main console buffer)\nCtrl+G: Find Previous\n\nInput box:\nUp/Down (arrows): move thru input history\nEnter: send text line\nEsc: switch Chat/Command Mode\n\nSyntaxisms:\nIn main window's input box:\n.. entering %prefix text will set the chat prefix to text.\n.. entering %do scriptname will run scriptname. DziaÅ‚ajÄ… w dowolnym miejscu:\nF3: Przejdź do poprzedniej zakÅ‚adki\nF4: Przejdź do nastÄ™pnej zakÅ‚adki\nF5: Przejdź do głównej szachownicy\nF6: Przejdź do konsoli\nF7: Lista ofert gry (jeÅ›li dostÄ™pna)\nF8: Włącz/Wyłącz pasek skrótów\nPage Up/Page Down: przewija tekst na konsoli (jeÅ›li jest widoczna)\nCtrl+(strzaÅ‚ka w lewo): Wstecz o jeden półruch\nCtrl+(strzaÅ‚ka w prawo): Naprzód o jeden półruch\nCtrl+F: Wyszukaj w górÄ™ (bufor konsoli)\nCtrl+G: Znajdź poprzedni\n\nPasek komend:\nStrzaÅ‚ki Góra/Dół: przewija wczeÅ›niej wpisane komendy\nEnter: WyÅ›lij wpisany tekst\nEsc: Przełącza miÄ™dzy trybem Komend/Rozmowy\n\nSkÅ‚adnia:\nPasek komend w oknie głównym:\n.. wpisanie %prefix text przełączy prefiks rozmowy na tekst.\n.. wpisanie %do scriptname wykona skrypt. L10 7 Appearance WyglÄ…d L8 6 Appended dodana L5 8 Apply Zastosuj L13 8 Apply Changes Zastosuj L24 39 Auto-save observed games Automatyczny zapis obserwowanych partii L22 37 Auto-save played games Automatyczny zapis rozegranych partii L8 24 Autosave Automatyczne zapisywanie L10 4 Background TÅ‚o L14 25 Bad descriptor NieprawidÅ‚owy deskryptor L45 70 Beep (need Pitch, Duration, Count and Device) Graj SygnaÅ‚ (wymagane wysokość, czas trwania, liczba i urzÄ…dzenie) L10 9 Bishop %d Goniec %d L5 6 Black Czarne L14 15 Black: %s - %s Czarne: %s - %s L17 15 Bookmark Caption: Nazwa programu: L6 5 Bottom Dół L11 11 Bright Text Jasny tekst L6 11 Browse PrzeglÄ…daj L19 22 Buffer Save failed. Zapis bufora nieudany. L8 4 Bughouse Kloc L22 24 Bughouse: Partner Game Kloc: Partia z partnerem L14 18 Button Caption Napis na przycisku L11 15 Button Icon Ikona przycisku L6 6 Cancel Anuluj L26 37 Cancelled connection wait. Anulowano oczekiwanie na połączenie L9 9 Change... ZmieÅ„... L13 22 Channel Tells Wiadomość od kanaÅ‚u L9 3 Checkmate Mat L14 17 Chess Programs Programy szachowe L11 12 Choose Font Wybierz font L9 10 Choose... Wybierz... L10 11 Clock Font Font zegara L5 9 Close Zamknij L5 5 Color Kolor L15 13 Color Selection Wybór koloru L6 6 Colors Kolory L7 9 Command Polecenie L13 21 Command Line: Polecenie wywoÅ‚ania: L8 8 Computer Komputer L30 39 Computer White vs. Human Black Komputer (BiaÅ‚e) vs CzÅ‚owiek (Czarne) L23 29 Configured Sound Files: Włączone pliki dźwiÄ™kowe: L7 8 Connect Połącz L21 22 Connect to ICS Server Połącz z sewerem ICS L20 21 Connected to %s (%s) Połączono z %s (%s) L19 16 Connecting to %s... ÅÄ…czÄ™ z %s... L18 22 Connection refused Połączenie odrzucone L28 31 Connection to %s:%d failed: Połączenie z %s:%d nieudane: L7 7 Console Konsola L12 22 Console Beep SygnaÅ‚ z PC speaker'a L12 12 Console Font Font konsoli L21 23 Console buffer saved. Zapisano bufor konsoli. L6 7 Count: Liczba: L10 4 Crazyhouse Kloc L15 14 Dark Squares... Czarne pola... L18 21 Delete All Entries UsuÅ„ wszystkie wpisy L17 14 Delete This Entry UsuÅ„ ten wpis L12 37 Depth Limit: Ograniczenie głębokoÅ›ci obliczeÅ„: L11 4 Description Opis L7 12 Device: UrzÄ…dzenie: L50 58 Directory to run from (e.g., where book files are) PoczÄ…tkowy katalog (np. lokalizacja książki debiutowej) L10 8 Directory: Katalog: L11 17 Discard All Porzuć wszystkie L12 15 Discard Game Porzuć partiÄ™ L7 6 Dismiss Wyjdź L12 17 Display Game WyÅ›wietl partiÄ™ L9 12 Displayed WyÅ›wietlana L81 71 Distributed under the terms of the GNU General Public License, version 2 or later Rozprowadzany na zasadach licencji GNU GPL w wersji 2 lub późniejszej L12 19 Draw Offered Zaproponowano remis L16 22 Draw offer sent. Oferta remisu wysÅ‚ana L18 22 Drawn by agreement Zgodzono siÄ™ na remis L11 14 Drop Piece: Wstaw bierkÄ™: L16 18 Duration (msec): Czas trwania (ms): L18 23 Dynamic Seek Table Dynamiczna tabela ofert L17 19 Edit Bookmarks... Edytuj zakÅ‚adki... L21 38 Edit Engine Bookmarks Edytuj zakÅ‚adki programów grajÄ…cych L14 26 Edit Game Info Edytuj informacje o partii L17 16 Edit Time Control Edytuj tempo gry L5 5 Empty Pusta L16 31 Engine Bookmarks ZakÅ‚adki programów grajÄ…cych L14 29 Engine Command Polecenie wywoÅ‚ania programu L12 27 Engine Type: Rodzaj programu grajÄ…cego: L28 43 Engine Type: %s (uneditable) Typ programu: %s (brak możliwoÅ›ci edycji) L43 55 Engine asked more time to startup, waiting. Program prosi o wiÄ™cej czasu na wystartowanie, czekam. L19 29 Engine command line Parametry wywoÅ‚ania programu L14 20 Engine loaded. Program zaÅ‚adowany. L14 28 Engine running Program grajÄ…cy uruchomiony L30 43 Engine started (2 sec timeout) Program uruchomiony (2 sekundy oczekiwania) L18 32 Enter FEN Position Wprowadź pozycjÄ™ w zapisie FEN L10 13 Event Type Typ zdarzenia L13 20 Exam.Game #%d OglÄ…daj partiÄ™ #%d L21 41 Failed to run engine. Uruchomienie programu nie powiodÅ‚o siÄ™. L28 43 Failed to run helper program Uruchomienie programu pomocniczego nieudane L30 42 File to play / Program to run: Plik dźwiÄ™kowy / program do odtwarzania: L8 6 Filter: Filtr: L14 13 Filter: (none) Filtr: (brak) L36 39 Finish the current connection first. ZakoÅ„cz najpierw bieżące poÅ‚aczenie L30 36 Finish the current game first. ZakoÅ„cz najpierw bieżącÄ… partiÄ™ L5 10 Flags Oznaczenia L5 5 Fonts Fonty L15 26 From Elsewhere Z innych źródeÅ‚ (%d %s) L22 18 From Elsewhere (%d %s) Z innych źródeÅ‚ L20 31 From Engines (%d %s) Z programów grajÄ…cych (%d %s) L8 5 From FEN Z FEN L16 13 From ICS (%d %s) Z ICS (%d %s) L22 21 From PGN Files (%d %s) Z plików PGN (%d %s) L6 8 Game # Partia # L8 10 Game #%d Partia #%d L19 21 Game #%d - %d %d %s Partia #%d - %d %d %s L20 22 Game #%d - %s vs. %s Partia #%d - %s vs. %s L21 26 Game #%d - untimed %s Partia #%d - bez zegara %s L12 14 Game #%d: %s Partia #%d: %s L12 16 Game Aborted Partia przerwana L16 11 Game Description Opis partii L21 24 Game Information Font Font informacji o partii L9 12 Game List Lista partii L25 29 Game List (refreshing...) Lista partii (odÅ›wieżam...) L9 16 Game Lost Partia przegrana L12 19 Game Started RozpoczÄ™to partiÄ™ L8 14 Game Won Partia wygrana L19 22 Game appended to %s PartiÄ™ dopisano do %s L17 12 Game in progress. Partia trwa. L13 21 Game over: %s Koniec partii #%d: %s L19 20 Game proposal sent. Oferta gry wysÅ‚ana. L13 19 Game started! Partia rozpoczÄ™ta! L12 20 Game/Board: Partia/Szachownica: L5 6 Games Partie L24 43 Generic XBoard Engine... Dowolny program grajÄ…cy zgodny z XBoard... L8 8 Giveaway Giveaway L46 45 Graphic representation of crazy/bughouse stock Graficzna pula bierek w grze typu crazy/kloc L16 33 Help: Debug Info Pomoc: Informacje dla programisty L22 19 Help: Getting Started Pomoc: Szybki start L10 15 Help: Keys Pomoc: Klawisze L5 6 Hide! Ukryj! L18 26 Host not found: %s Nie znaleziono serwera: %s L8 13 Hostname Nazwa serwera L23 28 Hostname or IP address: Nazwa komputera lub adres IP L5 9 Human CzÅ‚owiek L30 39 Human White vs. Computer Black CzÅ‚owiek (BiaÅ‚e) vs Komputer (Czarne) L17 22 Human plays white CzÅ‚owiek gra biaÅ‚ymi L13 20 ICS Challenge Propozycja gry (ICS) L25 31 IPC pipe creation failed. Utworzenie potoku IPC nieudane. L2 2 Id Lp L104 123 If you pick a bookmark, the engine\nwill play the next move, ignoring\nthe side setting in the bookmark. JeÅ›li wybierzesz zakÅ‚adkÄ™, \nprogram szachowy wykona nastÄ™pny ruch,\nnie baczÄ…c na ustawienia kolejnoÅ›ci w zakÅ‚adce. L43 57 Illegal Drop on %c%d (Legality Checking On) NieprawidÅ‚owe wstawienie %c%d (sprawdzanie poprawnoÅ›ci) L44 62 Illegal Move %c%d%c%d (Legality Checking On) NieprawidÅ‚owe posuniÄ™cie %c%d%c%d (sprawdzanie poprawnoÅ›ci) L23 20 Illegal move, not sent. NieprawidÅ‚owy ruch. L17 20 Increment (secs): Inkrementacja (sek): L10 14 Increment: Inkrementacja: L55 68 Inhibit seek lines on console when Seek Table is active Nie wyÅ›wietlaj ofert gry na konsoli, gdy włączona jest ich tabela L16 18 Initial Position Pozycja wyjÅ›ciowa L23 27 Initial time ([mm:]ss): Czas poczÄ…tkowo ([mm:]ss): L19 32 Initializing engine Uruchamianie programu grajÄ…cego L3 5 Key Klucz L4 11 Key: Nagłówek: L17 16 Kibitzes/Whispers Kibicuje/Szepcze L4 5 Kill Zabij L10 11 Knight %d Skoczek %d L22 25 Last Proposal Received Ostatnio otrzymana oferta L4 4 Left Lewo L16 14 Light Squares... BiaÅ‚e pola... L8 12 Load PGN ZaÅ‚aduj PGN L11 14 Load PGN... Otwórz PGN... L5 8 Local Lokalnie L15 20 Local Game List Lokalna lista partii L21 20 Looking up host %s... Szukam serwera %s... L6 6 Losers Losers L10 11 Main Board Szachownica L13 10 Mamer and TDs Mamer i TD L14 16 Manual/Formula RÄ™cznie/Wzorzec L23 23 Match Found at Line %d. Trafienie w wierszu %d. L15 15 Match Pattern: Dopasuj wzorzec L17 18 Material: %d - %d MateriaÅ‚: %d - %d L8 35 Max Ply: Maks. głębokość w półruchach: L30 43 Move made (Obs'vd/Exm'd Games) Wykonano posuniÄ™cie (obserwane/oglÄ…dane) L5 11 Moves PosuniÄ™cia L22 18 Network is unreachable Sieć niedostÄ™pna L18 23 News/Notifications WiadomoÅ›ci/OgÅ‚oszenia L2 3 No Nie L9 15 No error. Nie ma błędu. L19 42 No material to mate NiewystarczajÄ…cy materiaÅ‚ do zamatowania L8 17 No peer. Brak przeciwnika. L19 32 No previous search. Brak wczeÅ›niejszych wyszukiwaÅ„ L18 20 No proposals left. Nie ma wiÄ™cej ofert L22 28 No proposals received. Nie otrzymano żadnych ofert L4 4 None Brak L12 14 Normal Chess ZwykÅ‚e szachy L11 13 Normal Text ZwykÅ‚y tekst L16 19 Not a socket ?!? To nie gniazdko ?!? L2 2 OK OK L17 30 Obs'vd Game Ended Obserwowana partia zakoÅ„czona L7 8 Observe Obserwuj L2 2 Ok OK L160 198 Once you connect to a host from this dialog, it will be added to\nthe Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\nto modify or remove entries. Po połączeniu z serwerem wpisanym w tym okienku, zostanie utworzony\nskrót w rozwijanym menu Partner/ZakÅ‚adki ICS. W celu modyfikacji lub \nusuniÄ™cia wpisów edytuj plik ~/.eboard/eboard.conf. L293 345 Only lines that match the above pattern will be added\nto this text pane. Patterns can be OR'ed with the | (pipe)\ncharacter. A * (star) can be used to match anything.\nExamples:\n'(20)|(22)' shows only lines from channels 20 and 22\n'blik * bored' shows lines containing 'blik '(...)' bored'. Tylko linie odpowiadajÄ…ce powyższemu wzorcowi zostanÄ… dodane\ndo tego pola tekstowego. Wzorce mogÄ… być łączone operacjÄ… OR przy pomocy\nznaku | (potok). Znak * (gwiazdka) dopasuje cokolwiek.\nPrzykÅ‚ady:\n'(20)|(22)' wyÅ›wietla wyłącznie linijki z kanałów 20 i 22\n'blik * bored' wyÅ›wietla linijki zawierajÄ…ce 'blik '(...)' bored'. L14 24 Opponent Moved Przeciwnik wykonaÅ‚ ruch L7 5 Options Opcje L11 14 PGN Headers Nagłówki PGN L13 16 PGN filename: Nazwa pliku PGN: L14 14 Partner Tells: Partner mówi: L10 9 Pawn %d Pion %d L11 16 Pitch (Hz): Wysokość (Hz): L4 4 Play Graj L56 77 Play %s as %s vs. %s (%s, maxdepth %d, think always: %s) Graj %s jako %s vs %s (%s, głębokość %d, myÅ›l na czasie przeciwnika: %s) L58 67 Play WAV (need Device and Filename, sox must be installed) Odtwarzaj WAV (wymagane urzÄ…dzenie i nazwa pliku oraz program sox) L19 30 Play against Crafty Graj przeciw programowi Crafty L19 23 Play against Engine Graj przeciw programowi L24 35 Play against GNU Chess 4 Graj przeciw programowi GNU Chess 4 L18 29 Play against Sjeng Graj przeciw programowi Sjeng L6 5 Player Gracz L14 18 Player resigns Gracz poddaje siÄ™ L22 28 Player/Color Name Font Font nazwy biaÅ‚ych/czarnych L14 17 Pos: %s vs. %s Pozycja: %s vs %s L11 11 Preferences Preferencje L12 19 Private Tell Rozmowa (prywatnie) L13 19 Private Tells Rozmowa (prywatnie) L23 41 Program exited too soon Program przedwczeÅ›nie zakoÅ„czyÅ‚ pracÄ™ L8 21 Progress W trakcie wykonywania L17 17 Promotion Piece Promuj pionka w L7 10 Propose Zaproponuj L12 19 Propose Game Złóż ofertÄ™ gry L8 10 Protocol Protokół L33 41 Protocol mismatch, disconnecting. Niekompatybilny protokół, rozłączanie L10 12 Queen %d Hetman %d L5 10 Rated Kalkulacje L6 7 Rating Ranking L12 18 Rating Range Różnica rankingu L33 28 Received a game proposal from %s. Otrzymano ofertÄ™ gry od %s. L12 18 Recent Hosts Odwiedzone serwery L12 16 Refresh List OdÅ›wież listÄ™ L19 28 Replied to seek #%d Odpowiedziano na ofertÄ™. %d L9 13 Resigned. Poddano siÄ™. L6 8 Result Rezultat L20 29 Retracted last move. Wycofano ostatnie posuniÄ™cie L45 44 Retrieve ICS Channel Lists from eboard.sf.net Pobierz listÄ™ kanałów ICS z eboard.sf.net L18 31 Revert to Defaults Przywróć ustawienia domyÅ›lne L18 31 Revert to defaults Przywróć ustawienia domyÅ›lne L5 5 Right Prawo L10 13 Rook %d Wieża %d L3 7 Run Uruchom L13 18 Run Engine... Uruchom program... L27 38 Run Program (need Filename) Uruchom program (potrzeba nazwy pliku) L47 52 Run autofics.pl script after connecting to FICS Uruchamiaj skrypt autofics.pl po połączeniu z FICS L17 29 Save Buffer As... Zapisz bufor tekstowy jako... L12 17 Save Game... Zapisz partiÄ™... L11 15 Save as PGN Zapisz jako PGN L10 7 Scratch %d Nowa %d L6 6 Script Skrypt L11 15 Script List Lista skryptów L34 49 Scrollback limit (0 = unlimited) : Limit przewijania konsoli (0 = bez ograniczeÅ„) : L11 13 Search Text Szukaj tekstu L12 10 Search for: Wyszukaj: L22 37 Search text not found. Nie odnaleziono poszukiwanego tekstu. L8 15 Seek Ads Lista ofert gry L10 16 Seek Table Tabela ofert gry L15 21 Seek Table Font Font tabeli ofert gry L10 11 Set Filter Ustaw filtr L13 14 Set Filter... Ustaw filtr... L49 68 Set depth limit to 0 to use the engine's default. Ustaw głębokość na 0, aby użyć domyÅ›lnych ustawieÅ„ programu. L13 22 Setup Buttons Ustawienia przycisków L21 30 Shortcut Button Setup Ustawienia przycisku skrótów L6 7 Shouts Krzyczy L42 63 Show channel tells in one pane per channel WiadomoÅ›ci od poszczególnych kanałów w osobnych zakÅ‚adkach L63 84 Show channel tells on console too (when above option is active) Pokazuj wiadomoÅ›ci od kanaÅ‚u również na konsoli (gdy włączona powyższa opcja) L31 33 Show rating next to player name Pokazuj ranking obok nazwy gracza L33 44 Show shortcut buttons below board Pokazuj przyciski skrótów pod szachownicÄ… L11 13 Side & Time Kolor i tempo L14 13 Side Selection Wybór koloru L14 13 Side to move: PosuniÄ™cie: L34 46 Smoother animation (eats more CPU) PÅ‚ynna animacja (bardziej obciąża procesor) L76 65 Sorry, this protocol does not allow to retract a move thru this menu option. Ten protokół nie pozwala na wycofanie posuniÄ™cia przez to menu L11 21 Sound Event Zdarzenie dźwiÄ™kowe L12 21 Sound Events Zdarzenia dźwiÄ™kowe L6 9 Sounds DźwiÄ™ki L54 58 Source code available at http://eboard.sourceforge.net Kod źródÅ‚owy dostÄ™pny na http://eboard.sourceforge.net L9 3 Stalemate Pat L18 21 Start a connection Nawiąż połączenie L14 18 Starting Time: PoczÄ…tkowo czasu: L7 7 Suicide Suicide L8 8 TCP Port Port TCP L9 8 TCP Port: Port TCP L12 21 Tab Position PoÅ‚ożenie zakÅ‚adek L4 4 Test Test L52 42 The checkbox on the left enables/disables the sound. Guzik po lewej włącza/wyÅ‚acza dźwiÄ™k. L69 79 The engine will be run with\n/bin/sh -c 'cd directory ; command line' Program zostanie uruchomiony jako\n/bin/sh -c 'cd katalog; wywoÅ‚anie programu' L12 27 Think Always MyÅ›l na czasie przeciwnika L24 27 Think on opponent's time MyÅ›l na czasie przecwnika. L4 5 Time Tempo L12 9 Time Control Tempo gry L15 12 Time Control... Tempo gry... L13 10 Time Control: Tempo gry: L16 17 Time Running Out Czas siÄ™ koÅ„czy L7 29 Timeout Przekroczono czas oczekiwania L44 39 Times can be given as hh:mm:ss , mm:ss or ss Czas w formacie hh:mm:ss , mm:ss lub ss L180 180 To run multiple commands with one shortcut, separate the commands with ; (semicolon).\nTo run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl . Aby wykonać kilka poleceÅ„ na raz, oddziel je znakiem ; (Å›rednik). \nAby uruchomić skrypt użyj nast. formatu w polu polecenia: script.NazwaSkryptu , np.: script.mójskrypt.pl . L3 5 Top Góra L30 32 Type: Fischer Clock (ICS-like) Tempo: Zegar Fischera (styl ICS) L25 41 Type: Fixed Time per Move Tempo: Ustalony czas na jedno posuniÄ™cie L34 47 Type: Use engine's default setting Tempo: DomyÅ›lne ustawienia programu grajÄ…cego L29 36 Type: X Moves per Time Period Tempo: Ustalony czas na X posunięć L26 35 Unable to bind on port %d. PrzywiÄ…zanie do portu nieudane %d. L24 28 Unable to create socket. Stworzenie gniazdka nieudane L13 15 Unknown error Nieznany błąd L14 16 Unknown result Neznany rezultat L23 25 Use plain color squares Pola w jednolitym kolorze L5 9 Value Wartość L6 10 Value: Wartość: L7 3 Variant Typ L8 4 Variant: Typ: L24 34 Variant: %s (uneditable) Typ: %s (brak możliwoÅ›ci edycji) L4 6 Wait Czekaj L21 23 Wait for a connection Oczekuj na połączenie L34 41 Waiting for connection on port %d. Oczekiwanie na połączenia na porcie %d. L30 41 Warn when own clock is below: Ostrzegaj gdy na zegarze jest mniej niż L18 24 Welcome to eboard. Witaj w programie eboard L5 6 White BiaÅ‚e L14 15 White: %s - %s BiaÅ‚e: %s - %s L10 18 Working... ProszÄ™ czekać... L16 20 Write to Console WyÅ›wietl na konsoli L19 35 Wrong address space NieprawidÅ‚owa przestrzeÅ„ adresowa L5 8 Wrote Zapisano L3 3 Yes Tak L49 57 You can only retract when it's your turn to move. Wycofywanie dozwolone wyłącznie na wÅ‚asnym posuniÄ™ciu L11 12 Your color: Twój kolor: L10 11 Your name: Twoja nazwa L6 9 [chat] [rozmowa] L5 9 [cmd] [komenda] L39 50 [eboard] ** failed to create directory [eboard] ** utworzenie katalagu nie powiodÅ‚o siÄ™ L20 31 [eboard] ** no $HOME [eboard] ** brak zmiennej $HOME L22 55 [eboard] bad RC line\n [eboard] nieprawidÅ‚owa linia w pliku konfiguracyjnym\n L4 7 beep sygnaÅ‚ L5 7 beeps sygnaÅ‚ L5 6 black czarne L53 68 can't load PGN move text from %s (error opening file) nie można zaÅ‚adować zapisu PGN z pliku %s (bÅ‚ad przy otwieraniu) L30 44 can't seek to offset %lu of %s nie można przejść do poÅ‚ożenia %lu w %s L14 30 discards board Zamknij zakÅ‚adkÄ™ szachownicy L32 36 eboard Direct Connection Manager Menadżer połączeÅ„ bezpoÅ›rednich L22 21 eboard version %s (%s) wersja eboard %s (%s) L343 321 eboard version %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard w wersji %s\n(c) 2000-%d Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nNiniejszy program jest wolnym oprogramowaniem; możesz go\nrozprowadzać i/lub modyfikować na warunkach Powszechnej\nLicencji Publicznej GNU, wydanej przez Free Software Foundation,\nw wersji 2-giej lub późniejszych. \n L345 323 eboard version %s\n(c) 2000-2002 Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nThis program is free software; you can redistribute\nit and/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.\n eboard w wersji %s\n(c) 2000-2002 Felipe Bergo\n\nhttp://eboard.sourceforge.net\n\nNiniejszy program jest wolnym oprogramowaniem; możesz go\nrozprowadzać i/lub modyfikować na warunkach Powszechnej\nLicencji Publicznej GNU, wydanej przez Free Software Foundation,\nw wersji 2-giej lub późniejszych. \n L19 19 eboard: Console #%d eboard: Konsola #%d L60 74 engine claimed illegal move but we didn't move, ignoring it. program grajÄ…cy reklamuje nieprawidÅ‚owe posuniÄ™cie, którego nie byÅ‚o. L22 19 error parsing PGN data błędy w pliku PGN L11 20 flips board Obróć szachownicÄ™ L4 6 game partia L7 9 game %d partia %d L5 6 games partie L17 18 generic xboard v2 zgodny z xboard v2 L20 24 goes back 1 halfmove Cofnij o jeden półruch L26 24 goes back to start of game Idź na poczÄ…tek partii L23 26 goes forward 1 halfmove Naprzód o jeden półruch L27 21 goes forward to end of game Idź na koniec partii L13 27 illegal move! nieprawidÅ‚owe posuniÄ™cie! L11 11 in progress partia trwa L29 32 initial time %s, increment %s poczÄ…tkowo %s, inkrementacja %s L8 19 moves in posunięć w ciÄ…gu L2 3 no Nie L14 21 no such game: partia nie istnieje: L19 23 no time control set Nie ustawiono tempa gry L4 4 none brak L7 4 nothing brak L37 37 opens new scratch board with position otwórz nowÄ… szachownicÄ™ z pozycjÄ… L8 7 per move na ruch L18 23 plain console beep dźwiÄ™k z PC speaker'a L12 17 play file %s odtwarzaj plik %s L21 27 pops up the move list WyÅ›wietl listÄ™ posunięć L24 28 process creation failed. stworzenie procesu nieudane. L5 11 rated do rankingu L6 10 run %s uruchom %s L10 24 running %s w trakcie wykonywania %s L18 25 savePGN failed: %s Zapis do PGN nieudany: %s L54 57 savePGN failed: Won't save game with less than 2 moves Zapis do PGN nieudany: Partia ma mniej niż 2 posuniÄ™cia L8 7 seconds. sekund. L7 15 unrated poza rankingiem L5 6 white biaÅ‚e L3 3 yes Tak E 496 eboard-1.1.1.orig/tstring.cc0000644000175000017500000000375210757567572015310 0ustar patrikpatrik/* $Id: tstring.cc,v 1.8 2003/02/05 19:57:52 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2002 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "tstring.h" tstring::tstring() { chomp=false; fail=0; } void tstring::set(string &s) { pos=0; src=s; ptoken.erase(); } void tstring::set(const char *s) { pos=0; src=s; ptoken.erase(); } string * tstring::token(char *t) { int j; j=src.length(); if (pos>=j) return 0; ptoken.erase(); // skip to first position of token while ( strchr(t, src[pos]) ) { pos++; if (pos>=j) return 0; } while ( ! strchr(t, src[pos]) ) { ptoken+=src[pos]; pos++; if (pos>=j) break; } if ( chomp && posc_str(),0,base); return n; } bool tstring::tokenbool(char *t, bool defval) { string *v; int n; v=token(t); if (!v) return defval; n=(int) atoi(v->c_str()); return(n!=0); } void tstring::setChomp(bool v) { chomp=v; } void tstring::setFail(int v) { fail=v; } void tstring::reset() { pos=0; ptoken.erase(); } eboard-1.1.1.orig/proto_p2p.h0000644000175000017500000000540110757567572015375 0ustar patrikpatrik/* $Id: proto_p2p.h,v 1.7 2007/01/08 21:46:13 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_PROTO_P2P_H #define EBOARD_PROTO_P2P_H 1 #include "eboard.h" #include "widgetproxy.h" #include "util.h" #include "chess.h" #define P2P_GAME 8888 class P2PProtocol; class GameProposal { public: GameProposal(); GameProposal operator=(GameProposal &g); bool AmWhite; TimeControl timecontrol; variant Variant; }; class P2PPad : public NonModalDialog { public: P2PPad(P2PProtocol *_proto); virtual ~P2PPad(); void setProposal(GameProposal &g); void setDrawProp(); void resetDrawProp(); private: P2PProtocol *proto; DropBox *color; GtkWidget *wtime, *winc, *wprop, *wacc; BoxedLabel *bl[3]; bool PropIsDraw; void clearProposal(); friend void p2ppad_accept(GtkWidget *w, gpointer data); friend void p2ppad_propose(GtkWidget *w, gpointer data); }; void p2ppad_accept(GtkWidget *w, gpointer data); void p2ppad_propose(GtkWidget *w, gpointer data); class P2PProtocol : public Protocol { public: P2PProtocol(); virtual ~P2PProtocol(); void receiveString(char *netstring); void sendMove(int x1,int y1,int x2,int y2,int prom); void sendUserInput(char *line); void finalize(); virtual bool requiresLegalityChecking(); void resign(); void draw(); void adjourn(); void abort(); void hail(); void sendProposal(GameProposal &g); void acceptProposal(); char *getRemotePlayer(); private: void sendId(); void createGame(GameProposal &g); void gameOver(GameResult gr, char *desc); PatternBinder Binder; ExtPatternMatcher Chat, ProtoGreet, NameGreet, GameProp, Accept, Move, Outcome, DrawOffer; char *tmpbuf; char RemotePlayer[64]; char RemoteSoftware[128]; int RemoteProtover; bool IdSent, IdReceived; GameProposal MyProp, HisProp, Current; bool GotProp, GotDrawProp, SentDrawProp; int MoveNumber; ChessGame *MyGame; P2PPad *pad; }; #endif eboard-1.1.1.orig/text.cc0000644000175000017500000003456610757567572014611 0ustar patrikpatrik/* $Id: text.cc,v 1.42 2008/02/22 14:34:30 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "text.h" #include "widgetproxy.h" #include "global.h" #include "tstring.h" #include "stl.h" #include "eboard.h" #include "icon-console.xpm" #include "addcons.xpm" gboolean dc_entry_focus_out(GtkWidget *widget,GdkEventFocus *event, gpointer user_data); gboolean dc_entry_force_focus(gpointer data); OutputPane::~OutputPane() { } Text::Text() { GdkFont *fxd; linecount=0; LastMatch=-1; setBG(global.Colors.Background); setFont(global.ConsoleFont); updateScrollBack(); } Text::~Text() { } void Text::execSearch() { LastMatch = -1; findTextNext(); } void Text::findTextNext() { char z[256]; bool wrapped = false; if (SearchString.empty()) { global.status->setText(_("No previous search."),5); return; } if (LastMatch == 0) wrapped = true; if (LastMatch < 0) LastMatch = 0; if (findTextUpward(0,LastMatch - 1,SearchString.c_str())) { LastMatch = getLastFoundLine(); global.ebook->goToPageId(-2); gotoLine(LastMatch); if (!wrapped) snprintf(z,256,_("Match Found at Line %d."), LastMatch+1); else snprintf(z,256,_("(Wrapped) Match Found at Line %d."), LastMatch+1); global.status->setText(z,10); } else { LastMatch = -1; global.status->setText(_("Search text not found."),5); } } void Text::saveBuffer() { FileDialog *fd; fd=new FileDialog(_("Save Buffer As...")); if (fd->run()) { if (saveTextBuffer(fd->FileName)) { global.status->setText(_("Console buffer saved."),5); } else { global.status->setText(_("Buffer Save failed."),10); } } delete fd; } void Text::updateFont() { setFont(global.ConsoleFont); repaint(); } void Text::updateScrollBack() { setScrollBack(global.ScrollBack); } void Text::pageUp() { NText::pageUp(0.75f); } void Text::pageDown() { NText::pageDown(0.75f); } void Text::append(char *msg,int color,Importance imp) { if (Filter.accept(msg)) { pushLevel(imp); NText::append(msg,strlen(msg),color); contentUpdated(); repaint(); } } void Text::append(char *msg,char *msg2,int color, Importance imp) { char *d; d=(char *)g_malloc0(strlen(msg)+strlen(msg2)+1); strcpy(d,msg); strcat(d,msg2); append(d,color,imp); g_free(d); } void Text::setBackground(int color) { setBG(color); } // ----------------- // textset // ----------------- TextSet::TextSet() { } TextSet::~TextSet() { while(!targets.empty()) removeTarget(targets.front()); } void TextSet::addTarget(Text *target) { targets.push_back(target); } void TextSet::removeTarget(Text *target) { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) if ( (*ti) == target ) { delete(*ti); targets.erase(ti); return; } } void TextSet::append(char *msg,int color,Importance imp) { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->append(msg,color,imp); } void TextSet::append(char *msg,char *msg2,int color,Importance imp) { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->append(msg,msg2,color,imp); } void TextSet::pageUp() { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->pageUp(); } void TextSet::pageDown() { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->pageDown(); } void TextSet::updateScrollBack() { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->updateScrollBack(); } void TextSet::updateFont() { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->updateFont(); } void TextSet::setBackground(int color) { list::iterator ti; for(ti=targets.begin();ti!=targets.end();ti++) (*ti)->setBackground(color); } // Detached text console int DetachedConsole::ConsoleCount=0; DetachedConsole::DetachedConsole(TextSet *yourset, ConsoleListener *cl) { GtkWidget *vb,*hb,*sf,*ac,*ae; GdkPixmap *ad; GdkBitmap *ab; GtkStyle *style; char tmp[64]; ConsoleCount++; global.Consoles.push_back(this); myset=yourset; listener=cl; // my copy of Stroustrup says one thing about the stringstream class // and my libstdc++ says another, better not risk compiling problems, // so I'm using C constructs here. Ack. snprintf(tmp,64,_("eboard: Console #%d"),ConsoleCount); basetitle=tmp; widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_events(widget,GDK_KEY_PRESS_MASK); gtk_window_set_default_size(GTK_WINDOW(widget),650,400); gtk_window_set_title(GTK_WINDOW(widget),basetitle.c_str()); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),4); gtk_widget_realize(widget); vb=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),vb); inner=new Text(); gtk_box_pack_start(GTK_BOX(vb),inner->widget,TRUE,TRUE,0); hb=gtk_hbox_new(FALSE,2); inputbox=gtk_entry_new(); gtk_widget_set_events(inputbox,(GdkEventMask)(gtk_widget_get_events(inputbox)|GDK_FOCUS_CHANGE_MASK)); focus_sig_id=(int)gtk_signal_connect(GTK_OBJECT(inputbox),"focus_out_event", GTK_SIGNAL_FUNC(dc_entry_focus_out),(gpointer)inputbox); gtk_box_pack_start(GTK_BOX(vb),hb,FALSE,TRUE,4); gtk_box_pack_start(GTK_BOX(hb),inputbox,TRUE,TRUE,4); flabel=gtk_label_new(_("Filter: (none)")); sf=gtk_button_new_with_label(_("Set Filter...")); gtk_box_pack_start(GTK_BOX(hb),flabel,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(hb),sf,FALSE,FALSE,4); // add new console ac=gtk_button_new(); style=gtk_widget_get_style(widget); ad = gdk_pixmap_create_from_xpm_d (widget->window, &ab, &style->bg[GTK_STATE_NORMAL], (gchar **) addcons_xpm); ae=gtk_pixmap_new(ad,ab); gtk_container_add(GTK_CONTAINER(ac),ae); gshow(ae); gtk_box_pack_start(GTK_BOX(hb),ac,FALSE,FALSE,4); Gtk::show(inputbox,sf,flabel,ac,hb,vb,NULL); inner->show(); yourset->addTarget(inner); setIcon(icon_console_xpm,_("Console")); gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(detached_delete),(gpointer)this); gtk_signal_connect(GTK_OBJECT(widget),"destroy", GTK_SIGNAL_FUNC(detached_destroy),(gpointer)this); gtk_signal_connect (GTK_OBJECT (inputbox), "key_press_event", GTK_SIGNAL_FUNC (dc_input_key_press), (gpointer)this); gtk_signal_connect (GTK_OBJECT (sf), "clicked", GTK_SIGNAL_FUNC (dc_set_filter), (gpointer)this); gtk_signal_connect (GTK_OBJECT (ac), "clicked", GTK_SIGNAL_FUNC (dc_new_console), (gpointer)this); hcursor=global.inputhistory->getCursor(); setPasswordMode(global.PasswordMode); } void DetachedConsole::clone() { DetachedConsole *dc; dc=new DetachedConsole(myset,0); //global.input->peekKeys(dc->widget); dc->show(); } DetachedConsole::~DetachedConsole() { myset->removeTarget(inner); global.Consoles.erase( find(global.Consoles.begin(), global.Consoles.end(), this) ); } void DetachedConsole::setPasswordMode(int pm) { gtk_entry_set_visibility(GTK_ENTRY(inputbox),(pm?FALSE:TRUE)); } void DetachedConsole::show() { WidgetProxy::show(); gtk_widget_grab_focus(inputbox); } void DetachedConsole::injectInput() { global.input->userInput(gtk_entry_get_text(GTK_ENTRY(inputbox))); gtk_entry_set_text(GTK_ENTRY(inputbox),"\0"); hcursor=global.inputhistory->getCursor(); } void DetachedConsole::historyUp() { gtk_entry_set_text(GTK_ENTRY(inputbox), global.inputhistory->moveUp(hcursor)); } void DetachedConsole::historyDown() { gtk_entry_set_text(GTK_ENTRY(inputbox), global.inputhistory->moveDown(hcursor)); } const char * DetachedConsole::getFilter() { return(inner->Filter.getString()); } void DetachedConsole::setFilter(char *s) { inner->Filter.set(s); updateFilterLabel(); } void DetachedConsole::updateFilterLabel() { char z[256]; g_strlcpy(z,_("Filter: "),256); g_strlcat(z,inner->Filter.getString(),256); if (strlen(z)==strlen(_("Filter: "))) g_strlcat(z,_("(none)"),256); gtk_label_set_text(GTK_LABEL(flabel),z); gtk_widget_queue_resize(flabel); } gint detached_delete (GtkWidget * widget, GdkEvent * event, gpointer data) { DetachedConsole *me; me=(DetachedConsole *)data; gtk_signal_disconnect(GTK_OBJECT(me->inputbox),me->focus_sig_id); return FALSE; } void detached_destroy (GtkWidget * widget, gpointer data) { DetachedConsole *me; me=(DetachedConsole *)data; if (me->listener) me->listener->consoleClosed(); else delete me; } int dc_input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data) { DetachedConsole *me; me=(DetachedConsole *)data; switch(evt->keyval) { case GDK_Up: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); me->historyUp(); return 1; case GDK_Down: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); me->historyDown(); return 1; case GDK_KP_Enter: gtk_signal_emit_stop_by_name(GTK_OBJECT(wid), "key_press_event"); case GDK_Return: me->injectInput(); return 1; case GDK_Page_Up: me->inner->pageUp(); return 1; case GDK_Page_Down: me->inner->pageDown(); return 1; default: return(global.input->keyPressed(evt->keyval, evt->state)); } return 0; } gboolean dc_entry_focus_out(GtkWidget *widget,GdkEventFocus *event,gpointer user_data) { gtk_timeout_add(50,dc_entry_force_focus,user_data); return FALSE; } gboolean dc_entry_force_focus(gpointer data) { gtk_widget_grab_focus(GTK_WIDGET(data)); return FALSE; } void dc_set_filter(GtkWidget *w,gpointer data) { DetachedConsole *me; me=(DetachedConsole *)data; (new TextFilterDialog(me->inner,me->flabel))->show(); } void dc_new_console(GtkWidget *w,gpointer data) { DetachedConsole *me; me=(DetachedConsole *)data; me->clone(); } // --- set filter... dialog TextFilterDialog::TextFilterDialog(Text *target,GtkWidget *label2update) : ModalDialog(N_("Set Filter")) { GtkWidget *v,*h,*lb,*lb2,*hs,*bb,*ok,*can; obj=target; ulabel=label2update; v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); h=gtk_hbox_new(FALSE,4); lb=gtk_label_new(_("Match Pattern: ")); lb2=gtk_label_new(_("Only lines that match the above pattern will be added\n"\ "to this text pane. Patterns can be OR'ed with the | (pipe)\n"\ "character. A * (star) can be used to match anything.\n"\ "Examples:\n"\ "'(20)|(22)' shows only lines from channels 20 and 22\n"\ "'blik * bored' shows lines containing 'blik '(...)' bored'.")); gtk_label_set_justify(GTK_LABEL(lb2),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(h),lb,FALSE,FALSE,2); pattern=gtk_entry_new(); gtk_box_pack_start(GTK_BOX(h),pattern,TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(v),h,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(v),lb2,FALSE,FALSE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,4); bb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bb), 5); gtk_box_pack_start(GTK_BOX(v),bb,FALSE,FALSE,2); ok=gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); can=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(can,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(bb),can,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,can,bb,hs,lb2,lb,pattern,h,v,NULL); gtk_entry_set_text(GTK_ENTRY(pattern),obj->Filter.getString()); setDismiss(GTK_OBJECT(can),"clicked"); gtk_signal_connect(GTK_OBJECT(ok),"clicked", GTK_SIGNAL_FUNC(tfd_ok),(gpointer)this); focused_widget=pattern; } void tfd_ok(GtkWidget *w, gpointer data) { TextFilterDialog *me; char z[1024]; me=(TextFilterDialog *)data; me->obj->Filter.set(gtk_entry_get_text(GTK_ENTRY(me->pattern))); if (me->ulabel) { g_strlcpy(z,_("Filter: "),1024); g_strlcat(z,me->obj->Filter.getString(),1024); if (strlen(z)==strlen(_("Filter: "))) g_strlcat(z,_("(none)"),1024); gtk_label_set_text(GTK_LABEL(me->ulabel),z); gtk_widget_queue_resize(me->ulabel); } me->release(); } // --- text filter class TextFilter::TextFilter() { FilterString=""; AcceptedLast=false; } TextFilter::~TextFilter() { cleanUp(); } void TextFilter::set(const char *t) { tstring T; ExtPatternMatcher *epm; char local[1024],single[512]; const char *p; char *q; string *P; cleanUp(); if (!strlen(t)) return; memset(local,0,1024); for(p=t,q=local;*p;p++) { if ((*p)=='%') *(q++)='%'; *q++=*p; } FilterString=local; T.set(local); while( ( P=T.token("|\n\r") ) != 0 ) { if (! P->empty() ) { epm=new ExtPatternMatcher(); single[0]=0; if (P->at(0) != '*') g_strlcat(single,"*",512); g_strlcat(single,P->c_str(),512); if (P->at(P->length()-1) != '*') g_strlcat(single,"*",512); epm->set(single); thefilter.push_back(epm); } } } const char * TextFilter::getString() { return(FilterString.c_str()); } bool TextFilter::accept(char *textline) { int i,j; if (thefilter.empty()) return true; if ((textline[0]=='\\')&&(AcceptedLast)) return true; j=thefilter.size(); for(i=0;imatch(textline) ) { AcceptedLast=true; return true; } } AcceptedLast=false; return false; } void TextFilter::cleanUp() { int i,j; AcceptedLast=false; j=thefilter.size(); for(i=0;i c #020202", ", c #828282", "' c #DADADA", ") c #525252", "! c #1A1A1A", "~ c #E4E4E4", "{ c #662212", "] c #2C2C2C", "^ c #CDCDCD", "/ c #BCBCBC", "( c #040100", "_ c #2D2D2D", ": c #ACACAC", "< c #C1C1C1", "[ c #313131", "} c #93321A", "| c #42160B", "1 c #211A19", "2 c #030100", "3 c #541C0E", "4 c #909090", "5 c #E6E6E6", "6 c #E2E2E2", "7 c #A6A6A6", "8 c #61462F", "9 c #5E3E22", "0 c #752714", "a c #1D1D1D", "b c #939393", "c c #5E5E5E", "d c #060606", "e c #6C6C6C", "f c #040404", "g c #363636", "h c #868686", "i c #4B4B4B", "j c #D7D7D7", "k c #A9A9A9", "l c #612111", "m c #7D2A16", "n c #250C06", "o c #080808", "p c #EBEBEB", "q c #D9D9D9", "r c #C0C0C0", "s c #63352A", "t c #3D140A", "u c #303030", "v c #4A433D", "w c #371309", "x c #5F5F5F", "y c #1E1E1E", "z c #4E1A0D", "A c #33302F", "B c #F9F9F9", "C c #CFCFCF", "D c #020000", "E c #6A2412", "F c #BA7A43", "G c #0A0301", "H c #888888", "I c #DBDBDB", "J c #282828", "K c #090909", "L c #060201", "M c #0D0402", "N c #8A2F18", "O c #676767", "P c #737373", "Q c #862D17", "R c #903119", "S c #361C15", "T c #F0F0F0", "U c #0E0402", "V c #280D07", "W c #6B2412", "X c #792916", "Y c #842D17", " .+@ ", " .#$%& ", " *=-;> .+. ", " .,').. !~. ", " .{]^/{(_:<[ ", " .}|123456<7.", " . ..89}0abcdef", " .ghijk.}lmn. ", " opqr^stuvw. ", " .x/y(zABCD. ", " u:EFFGHIJK ", " .LMN}}zO6~P. ", " .Q}}}RSTx]M. ", " .}FF}}UdVW}. ", " .}}}}}XY}}}. ", " ............ "}; eboard-1.1.1.orig/history.h0000644000175000017500000000247510757567572015162 0ustar patrikpatrik/* $Id: history.h,v 1.2 2002/09/10 19:08:28 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2001 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_HISTORY_H #define EBOARD_HISTORY_H 1 #include "stl.h" class History { public: History(unsigned int len); typedef list::iterator iterator; void appendString(char *s); char *moveUp(); char *moveDown(); char *moveUp(iterator &alt); char *moveDown(iterator &alt); iterator getCursor(); private: unsigned int Length; list thehistory; iterator cursor; }; #endif eboard-1.1.1.orig/eboard_themes.conf0000644000175000017500000000021010757567572016741 0ustar patrikpatrik# eboard themes classic.png,Diagram Pieces on Wood plastic.png,Plastic Pieces on Green-White ghouls.png,Ghostly Pieces on Gray Marble eboard-1.1.1.orig/chess.h0000644000175000017500000001251610757567572014563 0ustar patrikpatrik/* $Id: chess.h,v 1.47 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_CHESS_H #define EBOARD_CHESS_H 1 #include "eboard.h" #include "widgetproxy.h" #include "position.h" #include "board.h" #include "movelist.h" #include "clock.h" #include #include "stl.h" // foreign classes class Board; class PGNpair { public: PGNpair(); PGNpair(const char *n, char *v); PGNpair(const char *n, string &v); string name; string value; }; class PGNheader { public: ~PGNheader(); void set(const char *n,char *v); void set(const char *n,string &v); void setIfAbsent(const char *n,char *v); void remove(const char *n); int empty(); int size(); PGNpair *get(int index); const char *get(const char *n); private: vector header; friend ostream &operator<<(ostream &s, PGNheader h); }; ostream &operator<<(ostream &s, PGNheader h); class ChessGame : public MoveListListener { public: ChessGame(); ChessGame(int _number,int _tyme,int _inc, int _rated,variant _variant, char *p1,char *p2); ChessGame(ChessGame *src); virtual ~ChessGame(); int operator==(int gnum); void updatePosition2(Position &p,int movenum,int blacktomove, int wclockms,int bclockms,char *infoline, bool sndflag=false); void updateStock(); void updateGame(list &gamedata); void flipHint(int flip); void setBoard(Board *b); Board * getBoard(); void sendMove(int x1,int y1,int x2,int y2); void sendDrop(piece p, int x, int y); void acknowledgeInfo(); void endGame(char *reason,GameResult _result); void fireWhiteClock(int wval,int bval); void enableMoving(bool flag); int isOver(); void incrementActiveClock(int secs); char *getPlayerString(int index); char *getEndReason(); GameResult getResult(); void dump(); Position & getLastPosition(); Position & getCurrentPosition(); Position & getPreviousPosition(); void goBack1(); void goBackAll(); void goForward1(); void goForwardAll(); void openMoveList(); void closeMoveList(); void setFree(); virtual void moveListClosed(); void retreat(int nmoves); static void LoadPGN(char *filename); static bool ParsePgnGame(zifstream &f, char * filename, bool indexonly, int gameid, variant v = REGULAR, ChessGame *updatee = NULL); bool savePGN(char *filename, bool append=false); bool loadMoves(); bool isFresh(); void guessInfoFromPGN(); void guessPGNFromInfo(); void editEmpty(); void editStartPos(); bool getSideHint(); // true=white to move, used in scratch boards void setSideHint(bool white); static const char *variantName(variant v); static variant variantFromName(const char *p); int GameNumber; int Rated; variant Variant; char PlayerName[2][64]; char Rating[2][32]; piece MyColor; int StopClock; // for examined games TimeControl timecontrol; bool LocalEdit; bool Loaded; char PGNSource[256]; long SourceOffset; PGNheader pgn; GameSource source; string source_data; bool AmPlaying; char info0[64]; int clock_regressive; int protodata[8]; private: void showResult(); void fixExamineZigZag(Position &suspect); void updateClockAndInfo2(int wclockms, int bclockms,int blacktomove, char *infoline, bool sndflag); list moves; list::iterator cursor; char PrivateString[96]; Board *myboard; MoveListWindow *mymovelist; Position startpos; int last_half_move; int over; GameResult result; char ereason[128]; static bool GlyphsInited; static vector Glyphs; static void initGlyphs(); static void failGlyphs(); }; class PGNEditInfoDialog : public ModalDialog { public: PGNEditInfoDialog(ChessGame *src); private: ChessGame *obj; GtkWidget *clist,*del; GtkWidget *en[2]; int Selection; void populate(); friend void pgnedit_set(GtkWidget *w, gpointer data); friend void pgnedit_del(GtkWidget *w, gpointer data); friend void pgnedit_rowsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data); friend void pgnedit_rowunsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data); }; void pgnedit_set(GtkWidget *w, gpointer data); void pgnedit_del(GtkWidget *w, gpointer data); void pgnedit_rowsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data); void pgnedit_rowunsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data); #endif eboard-1.1.1.orig/qb2.xpm0000644000175000017500000000071510757567572014515 0ustar patrikpatrik/* XPM */ static char * qb2_xpm[] = { "18 16 4 1", " c None", ". c #C7C7C7", "+ c #000000", "@ c #FFF200", " .++++++. ", " +++@@@@+++ ", " ++@@@@@@@@++ ", " ++@@@@@@@@@@++ ", " .+@@@+@@@@+@@@+. ", " ++@@+++@@+++@@++ ", " +@@@+++@@+++@@@+ ", " +@@@@+@@@@+@@@@+ ", " +@@@@@@@@@@@@@@+ ", " +@@+@@@@@@@@+@@+ ", " ++@@+@@@@@@+@@++ ", " .+@@@++++++@@@+. ", " ++@@@@@@@@@@++ ", " ++@@@@@@@@++ ", " +++@@@@+++ ", " .++++++. "}; eboard-1.1.1.orig/dlg_prefs.h0000644000175000017500000000631410757567572015422 0ustar patrikpatrik/* $Id: dlg_prefs.h,v 1.32 2008/02/22 07:32:15 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_PREFS #define EBOARD_PREFS #include "eboard.h" #include "sound.h" #include "widgetproxy.h" class PreferencesDialog : public ModalDialog, public SoundEventChangeListener, public JoystickListener { public: PreferencesDialog(); virtual ~PreferencesDialog(); void SoundEventChanged(); virtual void joystickEvent(JoystickEventType jet, int number, int value); private: GtkWidget *tabposb[4],*efont[NFONTS],*fontdlg,*plainb, *showratb, *autologb, *showts, *sbacke, *special[4], /* *allob[2], */ *asp, *aso, *afn, *sgb, *hsb, *chsb, *coct, *dhsb, *aqbar, *lowtime, *wget, *smoothb, *xfont[NFONTS], *sndon[N_SOUND_EVENTS],*sndtest[N_SOUND_EVENTS],*sndedit[N_SOUND_EVENTS], *sndd[N_SOUND_EVENTS], *jcl, *jctl, *jmode, *jspeed; BoxedLabel *fm[NFONTS]; SoundEvent sndcopy[N_SOUND_EVENTS]; ColorButton *lsq, *dsq, *textcb[11]; TextPreview *preview; int FontBeingEdited; int jsval[5], jstate; static char *FontSample[NFONTS]; void Apply(); void ApplyCheckBox(GtkWidget *cb,int *curval,int *ch1, int *ch2); void ApplyEntry(GtkWidget *entry,char *curval,int sz, int *ch1, int *ch2); void ApplyColorButton(ColorButton *cb,int *curval,int *ch1, int *ch2); void formatJoystickDescription(); friend void prefs_ok(GtkWidget *w,gpointer data); friend void prefs_apply(GtkWidget *w,gpointer data); friend void prefs_frevert(GtkWidget *w,gpointer data); friend void prefs_cfont(GtkWidget *w,gpointer data); friend void prefs_fok(GtkWidget *w,gpointer data); friend void prefs_fcancel(GtkWidget *w,gpointer data); friend void prefs_sndtest(GtkWidget *w,gpointer data); friend void prefs_sndedit(GtkWidget *w,gpointer data); friend void prefs_defcolor(GtkWidget *w,gpointer data); friend void prefs_joyctl(GtkWidget *w,gpointer data); }; void prefs_ok(GtkWidget *w,gpointer data); void prefs_apply(GtkWidget *w,gpointer data); void prefs_frevert(GtkWidget *w,gpointer data); void prefs_cfont(GtkWidget *w,gpointer data); void prefs_fok(GtkWidget *w,gpointer data); void prefs_fcancel(GtkWidget *w,gpointer data); void prefs_sndtest(GtkWidget *w,gpointer data); void prefs_sndedit(GtkWidget *w,gpointer data); void prefs_defcolor(GtkWidget *w,gpointer data); void prefs_joyctl(GtkWidget *w,gpointer data); #endif eboard-1.1.1.orig/bugpane.cc0000644000175000017500000002212510757567572015232 0ustar patrikpatrik/* $Id: bugpane.cc,v 1.18 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "bugpane.h" #include "global.h" #include "eboard.h" string BugPane::BugTell; // ---------------- BareBoard BareBoard::BareBoard() : WidgetProxy() { global.addPieceClient(this); Names[0]=_("None"); Names[1]=_("None"); widget=gtk_drawing_area_new(); gtk_widget_set_events(widget,GDK_EXPOSURE_MASK); gtk_signal_connect(GTK_OBJECT(widget),"expose_event", GTK_SIGNAL_FUNC(bareboard_expose),(gpointer)this); pixbuf=0; pset=0; if (global.pieceset) pset=new PieceSet(global.pieceset); clock.setHost(this); upending=false; frozen=0; } BareBoard::~BareBoard() { global.removePieceClient(this); if (pixbuf) gdk_pixmap_unref(pixbuf); } void BareBoard::setPosition(Position &pos) { position = pos; repaint(); } void BareBoard::addPTell(char *text) { PTells.push_back(string(text)); if (PTells.size() > 15) PTells.pop_front(); } void BareBoard::setWhite(char *name) { Names[0]=name; repaint(); } void BareBoard::setBlack(char *name) { Names[1]=name; repaint(); } void BareBoard::update() { if (frozen>0) upending=true; else { repaint(); upending=false; } } void BareBoard::updateClock() { repaint(); } void BareBoard::setClock2(int wmsecs,int bmsecs,int actv,int cdown) { clock.setClock2(wmsecs,bmsecs,actv,cdown); update(); } void BareBoard::pieceSetChanged() { if (pset) delete pset; pset = new PieceSet(global.pieceset); update(); } void BareBoard::reloadPieceSet() { if (pset) delete pset; pset = new PieceSet(global.pieceset); } void BareBoard::freeze() { ++frozen; } void BareBoard::thaw() { --frozen; if ( (frozen<1) && upending ) update(); } gboolean bareboard_expose(GtkWidget *widget,GdkEventExpose *ee, gpointer data) { BareBoard *me; int i,j,k,ww,wh,zh,x,y=0; int sqside; GdkGC *gc; char z[256],t[64]; list::iterator pti; rgbptr tmp; int rowsz; bool flip; static piece stock[5]={PAWN,ROOK,KNIGHT,BISHOP,QUEEN}; flip=global.BoardList.front()->effectiveFlip(); flip=!flip; me=(BareBoard *)data; gdk_window_get_size(widget->window,&ww,&wh); zh=wh; sqside=ww/8; if ( (!global.UseVectorPieces) && (me->pset->extruded) ) wh-=wh/16; if (whpixbuf) { if (ww != me->pixw || wh != me->pixh) { gdk_pixmap_unref(me->pixbuf); me->pixbuf=0; me->pixw=ww; me->pixh=wh; } } if (! me->pixbuf) me->pixbuf=gdk_pixmap_new(widget->window,ww,wh,-1); gc=gdk_gc_new(me->pixbuf); gdk_rgb_gc_set_foreground(gc,0); gdk_draw_rectangle(me->pixbuf,gc,TRUE,0,0,ww,wh); me->C.prepare(widget,me->pixbuf,gc,0,0,ww,wh); me->C.setFont(0,global.InfoFont); if (sqside > 8) { if (global.UseVectorPieces) { global.vpieces.drawSquares(me->pixbuf,gc,sqside); for(i=0;i<8;i++) for(j=0;j<8;j++) global.vpieces.drawPiece(me->pixbuf,gc,sqside, i*sqside, j*sqside, me->position.getPiece(flip?7-i:i, flip?j:7-j)); } else { if (me->pset->extruded) y=sqside/2; if (me->pset->side != sqside) { me->reloadPieceSet(); me->pset->scale(sqside); } rowsz=sqside*8; tmp=(rgbptr)g_malloc(rowsz * (rowsz+sqside/2) * 4); me->pset->beginQueueing(); for(i=0;i<8;i++) for(j=0;j<8;j++) me->pset->drawPieceAndSquare(me->position.getPiece(flip?7-i:i, flip?j:7-j), tmp, i*sqside , y+j*sqside, rowsz, (i+j)%2); me->pset->endQueueing(); gdk_draw_rgb_image(me->pixbuf, gc, 0, 0, rowsz, rowsz+y, GDK_RGB_DITHER_NORMAL, tmp, rowsz*3); g_free(tmp); } x=sqside*8+10; int fh = me->C.fontHeight(0); me->C.setColor(0xffffff); me->C.drawString(x,10,0,_("Bughouse: Partner Game")); me->C.drawString(x+1,10,0,_("Bughouse: Partner Game")); // white's clock if (me->clock.getActive() == -1) { gdk_draw_rectangle(me->pixbuf,gc,TRUE,x-5,(flip?40:zh-5-fh), 150, 20); me->C.setColor(0); } me->clockString(me->clock.getValue2(0),t,64); snprintf(z,256,_("White: %s - %s"),me->Names[0].c_str(),t); me->C.drawString(x,flip?40:zh-5-fh,0,z); // black's clock me->C.setColor(0xffffff); if (me->clock.getActive() == 1) { gdk_draw_rectangle(me->pixbuf,gc,TRUE,x-5,(flip?zh-5-fh:40), 150, 20); me->C.setColor(0); } me->clockString(me->clock.getValue2(1),t,64); snprintf(z,256,_("Black: %s - %s"),me->Names[1].c_str(),t); me->C.drawString(x,flip?zh-5-fh:40,0,z); // paint stock // white's stock x=sqside*8+10; for(i=0;i<5;i++) { k=me->position.getStockCount(stock[i]|WHITE); for(j=0;jpixbuf,gc,sqside,x,flip?45:zh-5-sqside-20, stock[i]|WHITE); x+=sqside+2; } } // black's stock x=sqside*8+10; for(i=0;i<5;i++) { k=me->position.getStockCount(stock[i]|BLACK); for(j=0;jpixbuf,gc,sqside,x,flip?zh-5-sqside-20:45, stock[i]|BLACK); x+=sqside+2; } } // paint ptells x=sqside*8+10; me->C.setColor(global.Colors.TextBright); me->C.drawString(x,40+sqside,0,_("Partner Tells:")); if (!me->PTells.empty()) { me->C.setColor(global.Colors.PrivateTell); i=zh-20-5-sqside; pti=me->PTells.end(); for(pti--;i>(59+sqside);i-=20, pti--) { me->C.drawString(x,i,0,(*pti).c_str() ); if (pti == me->PTells.begin()) break; } } } gdk_gc_destroy(gc); gc=gdk_gc_new(widget->window); gdk_draw_pixmap(widget->window,gc,me->pixbuf,0,0,0,0,ww,zh); gdk_gc_destroy(gc); return 1; } // ---------------- BugPane BugPane::BugPane() { GtkWidget *v, *tbl, *qb[18]; GdkColor gray[5]; GtkStyle *style; int i,c,r; static char *stuff[18]={"---","--","-","+","++","+++", "P","N","B","R","Q","Diag", "Sit","Go","Fast","Hard","Dead","Safe"}; widget = gtk_hbox_new(FALSE,0); board = new BareBoard(); board->show(); gtk_box_pack_start(GTK_BOX(widget), board->widget, TRUE,TRUE, 0); // vbox v=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(widget), v, FALSE, TRUE, 0); // table tbl=gtk_table_new(6,3,FALSE); gray[0].red=gray[0].green=gray[0].blue=0xaaaa; gray[1].red=gray[1].green=gray[1].blue=0x8888; gray[2].red=gray[2].green=gray[2].blue=0xcccc; gray[3].red=gray[3].green=gray[3].blue=0x8888; gray[4].red=gray[4].green=gray[4].blue=0xaaaa; style=gtk_style_copy( gtk_widget_get_default_style() ); for(i=0;i<5;i++) style->bg[i]=gray[i]; // buttons for(i=0;i<18;i++) { qb[i]=gtk_button_new_with_label(stuff[i]); if (i<6) gtk_widget_set_style(qb[i],style); c=i/6; r=i%6; gtk_table_attach_defaults(GTK_TABLE(tbl),qb[i],c,c+1,r,r+1); gshow(qb[i]); gtk_signal_connect(GTK_OBJECT(qb[i]),"clicked", GTK_SIGNAL_FUNC(bug_ptell),(gpointer)(stuff[i])); } gtk_box_pack_start(GTK_BOX(v), tbl, FALSE, FALSE, 0); Gtk::show(tbl,v,NULL); } void BugPane::stopClock() { board->setClock2(0,0,0,1); } void BugPane::reset() { Position p; freeze(); board->setClock2(0,0,0,1); board->setPosition(p); board->setWhite(_("None")); board->setBlack(_("None")); thaw(); } void BugPane::addBugText(char *text) { board->addPTell(text); board->update(); } void BugPane::setPlayerNames(char *white, char *black) { board->setWhite(white); board->setBlack(black); board->update(); } void BugPane::setPosition(Position &pos) { board->setPosition(pos); board->update(); } void BugPane::setClock2(int wmsecs,int bmsecs,int actv,int cdown) { board->setClock2(wmsecs,bmsecs,actv,cdown); } void BugPane::freeze() { board->freeze(); } void BugPane::thaw() { board->thaw(); } void bug_ptell(GtkWidget *b,gpointer data) { char z[256],x[256],c; g_strlcpy(z,(char *)data,256); if ((z[0]=='-')||(z[0]=='+')) { BugPane::BugTell=z; return; } else { if (BugPane::BugTell.empty()) BugPane::BugTell=z; else { g_strlcpy(x,BugPane::BugTell.c_str(),256); c=x[strlen(x)-1]; if ((c=='+')||(c=='-')) BugPane::BugTell+=z; else BugPane::BugTell=z; } } if (global.protocol) { snprintf(z,256,"ptell %s",BugPane::BugTell.c_str()); global.protocol->sendUserInput(z); } } eboard-1.1.1.orig/qbr.xpm0000644000175000017500000000041610757567572014613 0ustar patrikpatrik/* XPM */ static char * qbr_xpm[] = { "8 16 2 1", " c None", ". c #000000", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " "}; eboard-1.1.1.orig/INSTALL0000644000175000017500000000075410757567572014337 0ustar patrikpatrik INSTALLATION INSTRUCTIONS: ========================== from this directory, do ./configure make (become root) make install if ./configure won't work (maybe because your perl installation isn't in /usr/bin), try perl ./configure The configure script provides some command line options that control how eboard is built and where it is installed, see './configure --help'. By default, eboard is installed to /usr/local/bin , and its data files are installed in /usr/local/share/eboard. eboard-1.1.1.orig/goc_discard.xpm0000644000175000017500000000310310757567572016264 0ustar patrikpatrik/* XPM */ static char * goc_discard_xpm[] = { "32 20 55 1", " c None", ". c #000000", "+ c #202420", "@ c #ACBA9C", "# c #B4C2AC", "$ c #E6E6DE", "% c #83897B", "& c #949D83", "* c #4A4C41", "= c #A4AE94", "- c #9CAA94", "; c #B4C6AC", "> c #BDCEB4", ", c #A4B69C", "' c #BDCAB4", ") c #626D5A", "! c #292C29", "~ c #313831", "{ c #9CAA8B", "] c #9CA58B", "^ c #94A58B", "/ c #D5DED5", "( c #A4B29C", "_ c #A4B294", ": c #94A18B", "< c #7B9573", "[ c #CDD6CD", "} c #DEE2D5", "| c #BDC6B4", "1 c #5A6952", "2 c #627152", "3 c #738D6A", "4 c #94AA8B", "5 c #8BA58B", "6 c #6A856A", "7 c #627962", "8 c #5A6D5A", "9 c #4A594A", "0 c #4A5041", "a c #73896A", "b c #6A7962", "c c #526552", "d c #394439", "e c #6A7D62", "f c #62795A", "g c #9CAE94", "h c #525D4A", "i c #4A5D4A", "j c #6A816A", "k c #080808", "l c #6A8162", "m c #B4C6B4", "n c #83997B", "o c #62715A", "p c #7B8D73", " ", " ", " ........ ", " +.@#$%&*=-.. ", " .;>,')!~+-{]]. ", " .^/'(__=-{]]:. ", " .<#[}|=-{]]<1. ", " .23455<<67890. ", " .+abb8c09d+. ", " .e++++++++b. ", " .e|fghai69b. ", " .e|fghaij9b.kkk ", " .e|fghail9b.kkkk ", " .emfghail9b.kkkk ", " .emfghail9b.kkkk ", " .n(fgoa9l17.kkk ", " .< ids; vector text; }; // ask about our multiple inheritance contest class MainWindow : public WidgetProxy, public InputHandler, public ConnectionHandler, public GameListListener, public StockListListener, public AdListListener, public ConsoleListener, public PaneChangeListener, public BookmarkListener, public UpdateInterface, public IONotificationInterface { public: MainWindow(); virtual ~MainWindow() {} void setPasswordMode(int pm); void openServer(char *host,int port,Protocol *protocol,char *helper); void openServer(NetConnection *conn, Protocol *protocol); void openEngine(EngineProtocol *xpp, EngineBookmark *ebm=0); void openGameList(); void openAdList(); void openStockList(); void openDetachedConsole(); void gameListClosed(); void stockListClosed(); void adListClosed(); void consoleClosed(); void paneChanged(int pgseq,int pgid); void userInput(const char *text); void peekKeys(GtkWidget *who); int keyPressed(int keyval, int state); void updatePrefix(); void restoreDesk(); static GdkWindow *RefWindow; void update(); void readAvailable(int handle); void writeAvailable(int handle); void joystickEvent(JoystickEventType jet, int number, int value); private: int HideMode; // password GtkItemFactory *gif; GtkWidget *v; GtkWidget *menubar; GtkWidget *inputbox; Notebook *notebook; TextSet *icsout; Text *inconsole, *xconsole; Status *status; PromotionPicker *promote; QuickBar *quickbar; GameListDialog *gamelist; StockListDialog *stocklist; AdListDialog *adlist; ScriptList *scriptlist; DetachedConsole *consolecopy; InputModeSelector *ims; ExtPatternMatcher asetprefix, arunscript; PrefixCache imscache; bool QuickbarVisible; GtkTooltips *tooltips; GtkWidget *navbar[8]; bool nav_enable[8]; GtkWidget *picseal; GdkPixmap *sealmap[2]; GdkBitmap *sealmask[2]; GtkWidget *vector_checkbox; History *InputHistory; int jpd; // joystick previous direction void createNavbar(GtkWidget *box); void createSealPix(GtkWidget *box); void setSealPix(int flag); void setTitle(char *msg); void searchThemes(); void updateBookmarks(); void parseThemeFile(char *name); void greet(); void injectInput(); void historyUp(); void historyDown(); void tryConnect(char *host,int port,Protocol *protocol,char *helper); void cleanUpConnection(); void disconnect(); void openEngineBookmark(EngineBookmark *bm); void openGnuChess4(); void openCrafty(); void openSjeng(); void openXBoardEngine(); void gameWalk(int op); void saveDesk(); void saveBuffer(); void newScratchBoard(bool clearboard); void cloneOnScratch(ChessGame *cg0); void showQuickbar(); void hideQuickbar(); list Themes; gint io_tag; friend void mainwindow_themeitem(GtkMenuItem *menuitem, gpointer data); friend void mainwindow_themeitem2(GtkMenuItem *menuitem, gpointer data); friend void mainwindow_themeitem3(GtkMenuItem *menuitem, gpointer data); friend int input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); friend int main_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); friend void peer_connect_fics(gpointer data); friend void peer_connect_xboard(gpointer data); friend void peer_connect_gnuchess4(gpointer data); friend void peer_connect_sjeng(gpointer data); friend void peer_connect_crafty(gpointer data); friend void peer_scratch_empty(gpointer data); friend void peer_scratch_initial(gpointer data); friend void peer_connect_ask(gpointer data); friend void peer_connect_p2p(gpointer data); friend void peer_disconnect(gpointer data); friend void help_about(gpointer data); friend void help_keys(gpointer data); friend void help_debug(gpointer data); friend void help_starting(gpointer data); friend void mainwindow_icsout_changed(GtkEditable *gtke, gpointer data); friend void mainwindow_connect_bookmark(GtkWidget *w, gpointer data); friend void mainwindow_connect_bookmark2(GtkWidget *w, gpointer data); friend void mainwindow_edit_engbm(GtkWidget *w, gpointer data); friend void navbar_back_all(GtkWidget *w,gpointer data); friend void navbar_back_1(GtkWidget *w,gpointer data); friend void navbar_forward_1(GtkWidget *w,gpointer data); friend void navbar_forward_all(GtkWidget *w,gpointer data); friend void navbar_movelist(GtkWidget *w,gpointer data); friend void navbar_trash(GtkWidget *w,gpointer data); friend void navbar_toscratch(GtkWidget *w,gpointer data); friend void navbar_flip(GtkWidget *w,gpointer data); friend void sett_hilite(GtkWidget *w,gpointer data); friend void sett_animate(GtkWidget *w,gpointer data); friend void sett_premove(GtkWidget *w,gpointer data); friend void sett_coord(GtkWidget *w,gpointer data); friend void sett_beepopp(GtkWidget *w,gpointer data); friend void sett_osound(GtkWidget *w,gpointer data); friend void sett_vector(GtkWidget *w,gpointer data); friend void sett_legal(GtkWidget *w,gpointer data); friend void sett_popup(GtkWidget *w,gpointer data); friend void sett_smarttrash(GtkWidget *w,gpointer data); friend gboolean mainwindow_read_agents(gpointer data); friend void windows_savedesk(GtkWidget *w, gpointer data); friend void windows_savebuffer(GtkWidget *w, gpointer data); friend void windows_find(GtkWidget *w, gpointer data); friend void windows_findp(GtkWidget *w, gpointer data); friend gboolean gtkDgtnixEvent(GIOChannel* channel, GIOCondition cond, gpointer data); #ifdef HAVE_LINUX_JOYSTICK_H friend void mainwindow_joystick(gpointer data,gint source,GdkInputCondition cond); #endif }; void sett_prefs(gpointer data); gint mainwindow_delete (GtkWidget * widget, GdkEvent * event, gpointer data); void mainwindow_destroy (GtkWidget * widget, gpointer data); void game_resign(GtkWidget *w,gpointer data); void game_draw(GtkWidget *w,gpointer data); void game_adjourn(GtkWidget *w,gpointer data); void game_abort(GtkWidget *w,gpointer data); void game_retract(GtkWidget *w,gpointer data); void windows_games(GtkWidget *w, gpointer data); void windows_sough(GtkWidget *w, gpointer data); void windows_stock(GtkWidget *w, gpointer data); void windows_detached(GtkWidget *w, gpointer data); void windows_script(GtkWidget *w, gpointer data); // keep focus on input box gboolean mainwindow_input_focus_out(GtkWidget *widget,GdkEventFocus *event,gpointer user_data); gboolean forced_focus(gpointer data); gboolean do_smart_remove(gpointer data); #define FA_HIGHLIGHT 100 #define FA_ANIMATE 101 #define FA_PREMOVE 102 #define FA_COORDS 103 #define FA_MOVEBEEP 104 #define FA_SOUND 105 #define FA_POPUP 106 #define FA_SMART 107 #define FA_LEGALITY 108 #define FA_VECTOR 109 #define FA_ICSBOOKMARKS 110 #define FA_ENGBOOKMARKS 111 #define FA_LOADTHEME 112 #define FA_LOADPIECES 113 #define FA_LOADSQUARES 114 // friends void mainwindow_themeitem(GtkMenuItem *menuitem, gpointer data); void mainwindow_themeitem2(GtkMenuItem *menuitem, gpointer data); void mainwindow_themeitem3(GtkMenuItem *menuitem, gpointer data); int input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); int main_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); void peer_connect_fics(gpointer data); void peer_connect_xboard(gpointer data); void peer_connect_gnuchess4(gpointer data); void peer_connect_sjeng(gpointer data); void peer_connect_crafty(gpointer data); void peer_scratch_empty(gpointer data); void peer_scratch_initial(gpointer data); void peer_connect_ask(gpointer data); void peer_connect_p2p(gpointer data); void peer_disconnect(gpointer data); void help_about(gpointer data); void help_keys(gpointer data); void help_debug(gpointer data); void help_starting(gpointer data); void mainwindow_icsout_changed(GtkEditable *gtke, gpointer data); void mainwindow_connect_bookmark(GtkWidget *w, gpointer data); void mainwindow_connect_bookmark2(GtkWidget *w, gpointer data); void mainwindow_edit_engbm(GtkWidget *w, gpointer data); void navbar_back_all(GtkWidget *w,gpointer data); void navbar_back_1(GtkWidget *w,gpointer data); void navbar_forward_1(GtkWidget *w,gpointer data); void navbar_forward_all(GtkWidget *w,gpointer data); void navbar_movelist(GtkWidget *w,gpointer data); void navbar_trash(GtkWidget *w,gpointer data); void navbar_toscratch(GtkWidget *w,gpointer data); void navbar_flip(GtkWidget *w,gpointer data); void sett_hilite(GtkWidget *w,gpointer data); void sett_animate(GtkWidget *w,gpointer data); void sett_premove(GtkWidget *w,gpointer data); void sett_coord(GtkWidget *w,gpointer data); void sett_beepopp(GtkWidget *w,gpointer data); void sett_osound(GtkWidget *w,gpointer data); void sett_vector(GtkWidget *w,gpointer data); void sett_legal(GtkWidget *w,gpointer data); void sett_popup(GtkWidget *w,gpointer data); void sett_smarttrash(GtkWidget *w,gpointer data); gboolean mainwindow_read_agents(gpointer data); void windows_savedesk(GtkWidget *w, gpointer data); void windows_savebuffer(GtkWidget *w, gpointer data); void windows_find(GtkWidget *w, gpointer data); void windows_findp(GtkWidget *w, gpointer data); #ifdef HAVE_LINUX_JOYSTICK_H void mainwindow_joystick(gpointer data,gint source,GdkInputCondition cond); #endif #endif eboard-1.1.1.orig/icon-local.xpm0000644000175000017500000000713610757567572016055 0ustar patrikpatrik/* XPM */ static char * icon_local_xpm[] = { "48 48 75 1", " c None", ". c #020202", "+ c #6A4E3A", "@ c #684A36", "# c #5F4333", "$ c #503A2A", "% c #B2966B", "& c #AE926A", "* c #AA8E66", "= c #A48A63", "- c #A28662", "; c #9E865F", "> c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #FFFFFF", "B c #555555", "C c #AAAAAA", "D c #000000", "E c #E3E3E3", "F c #1D1D1D", "G c #8E8E8E", "H c #727272", "I c #C7C7C7", "J c #393939", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzzzzzzAAABCAAAAAAAAAAAAAAAAAAAAAAAADAA", "zzzzzzzzzzzzzzzzAAADAAAAAAAAAAAAAAAAAAAAAAAACBAA", "zzzzzzzzzzzzzzzzAAEFAAAAAAGBHAAAEHBIAAEHBGAAGHAA", "zzzzzzzzzzzzzzzzAACBAAAAAJBCBBAEDGCFIAFGCBHABCAA", "zzzzzzzzzzzzzzzzAAHGAAAACJAAADABGAAIEEIAIHBAFEAA", "zzzzzzzzzzzzzzzzAABCAAAABCAAADADAAAAACDJBFGADAAA", "zzzzzzzzzzzzzzzzAADAAAAABCAAGBADAAEHADEAAFICJAAA", "zzzzzzzzzzzzzzzzAEDCCCCECFCGDEAJBCFCAFGCJDAGBAAA", "zzzzzzzzzzzzzzzzAIBBBBBEACBHEAAEHBCAAEBBIBAGIAAA", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}; eboard-1.1.1.orig/README0000644000175000017500000001105010757567572014155 0ustar patrikpatrikeboard README ------------- eboard is a chess board interface for ICS (Internet Chess Servers) and chess engines. for quick compilation / installation instructions, see the INSTALL file. Currently it supports the following protocols / engines: - Generic XBoard protocol v2-compliant engines Almost full support. Engines that behave on the edge of protocol may fail. Works with GNU Chess 5. - Particular Engine Support (most of them comply with the XBoard protocol, but eboard supports additional features): - GNU Chess 4 - Crafty - Sjeng (multi-variant engine) See the eboard site for links to get them. - Crafty Full support. Tested with 18.9 thru 18.14, won't work with versions earlier than 18.x Crafty is *NOT* distributed with eboard, see Documentation/Crafty.txt for information on installing Crafty and the game books. - Direct play across a network - one eboard connects to another eboard over a TCP/IP network (like the Internet). - FICS Support most features. Current status is: It will allow you to play regular, suicide, losers, atomic, crazyhouse and bughouse chess games. Wild variants are supported (tested with Fischer Random and Wild/5, but weird castlings are not directly supported and you may have to type in the castling moves by hand) It will observe games. It will examine games (but the move list may not be retrieved correctly) Supports premove and drag-and-drop. Nice, customizable, colorization of FICS output. bsetup mode not supported by the interface yet (but you can enter bsetup and add pieces with FICS commands) Known issues: simuls are not yet supported. If you set nowrap on on FICS (this is not the default), some very long lines (like 'in 1') can make eboard crash. Just don't mess with that FICS variable and you'll be fine. FICS is a no-charge service, operating since 1995, and over these years it has fostered the building of a huge community of chess enthusiasts. It's a great place to play chess and to make friends. Besides regular chess, it supports bughouse, crazyhouse, suicide, losers and several wild variants (in wild rules are the same as regular chess but the starting position isn't) FICS recently introduced thematic games - you don't get the initial moves but rather an ECO code. You can play and watch those with eboard, but PGN saving and game browsing (moving back and forth while watching) are still quite nuts. This should get fixed soon. For timeseal support see Documentation/FICS-Timeseal.txt For information on getting an account to play at FICS, visit FICS at http://www.freechess.org If you have problems with firewalls, the best approach is to use a third-party TCP port-forwarding tool. I have a nice experience with portfwd (http://portfwd.sourceforge.net), but many other packages like this exist. For automatic login scripts for FICS see Documentation/Scripts.txt Features: --------- - Scroll locking on text pane: if you scroll up in the text pane, it won't auto-scroll to the bottom when new output comes from the server. - Input history. The Up and Down arrow keys work like the bash history in the text entry box. - The board can be resized on the fly. - The piece set can be changed on the fly. - Scripting - PGN reading/writing - Seek Graph (FICS) - Multiple text panes (Windows|Detached Console) - National Language Support (portuguese, german, spanish, czech and italian so far) To change the language, make sure you performed 'make install' and set the environment variable LANGUAGE to the language code (de for German, pt_BR for brazilian Portuguese, es for Spanish, etc.) Under bash (the most common shell on Linux), it can be done with export LANGUAGE=de (eboard checks the LC_MESSAGES, LC_ALL, LANGUAGE and LANG environment variables for language settings, in this order) You can use, modify and redistribute eboard under the terms of the GNU General Public License, version 2 or any later version published by the Free Software Foundation. The license is included in the COPYING file. To compile/install it: ./configure make (become root) make install For further instructions see the INSTALL file. You'll need: - the GTK+ library, version 2.2.0 - the C++ standard library (libstdc++) eboard is developed by Felipe Bergo . The eboard web site is at http://eboard.sourceforge.net There is an alternative mirror for the source at ftp://ftp.seul.org/pub/chess/eboard and the project page (for bug reports, mailing list, CVS access) is http://sourceforge.net/projects/eboard Have fun! eboard-1.1.1.orig/clock.cc0000644000175000017500000003737110757567572014715 0ustar patrikpatrik/* $Id: clock.cc,v 1.19 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "clock.h" #include "global.h" #include "tstring.h" ClockMaster Chronos; int ChessClock::freeid=1; ClockMaster::ClockMaster() { timeout_on=0; timeout_id=-1; } void ClockMaster::append(ChessClock *clockp) { clocks.push_back(clockp); if (!timeout_on) { timeout_id=gtk_timeout_add(90,clockmaster_timeout,this); timeout_on=1; } } void ClockMaster::remove(ChessClock *clockp) { list::iterator li; for(li=clocks.begin();li!=clocks.end();li++) if ( (*li) == clockp ) { clocks.erase(li); return; } } void ClockMaster::update() { list::iterator it; for(it=clocks.begin();it!=clocks.end();it++) (*it)->update(); } gint clockmaster_timeout(gpointer data) { ClockMaster *cm; cm=(ClockMaster *)data; cm->update(); return 1; } // ================================================================== ChessClock::ChessClock() { active=CLK_STOPPED; host=0; host2=0; mirror=0; value[0]=value[1]=0; t_ref[0]=t_ref[1]=Timestamp::now(); val_ref[0]=val_ref[1]=0; id=freeid++; countdownf=1; LastWarning = Timestamp::now(); Chronos.append(this); } ChessClock::~ChessClock() { active=CLK_STOPPED; host=0; Chronos.remove(this); } void ChessClock::setMirror(ChessClock *dest) { mirror=dest; } void ChessClock::setClock2(int whitemsec,int blackmsec,int activep,int countdown) { global.debug("ChessClock","setClock"); countdownf=countdown; // cerr << "setClock " << whitesec << ',' << blacksec << ',' << activep << endl; // cerr << "oldvals = " << value[0] << ',' << value[1] << endl; if (whitemsec != CLOCK_UNCHANGED) value[0]=whitemsec; if (blackmsec != CLOCK_UNCHANGED) value[1]=blackmsec; t_ref[0]=t_ref[1]=Timestamp::now(); val_ref[0]=value[0]; val_ref[1]=value[1]; // cerr << "newvals = " << value[0] << ',' << value[1] << endl; active=activep; if (mirror) mirror->setClock2(whitemsec,blackmsec,activep,countdown); } void ChessClock::incrementClock2(int which, int msecs) { if (msecs==0) return; if (which==0) which = active; if (which == -1) { value[0] += msecs; t_ref[0] = Timestamp::now(); val_ref[0] = value[0]; } if (which == 1) { value[1] += msecs; t_ref[1] = Timestamp::now(); val_ref[1] = value[1]; } if (mirror) mirror->incrementClock2(which, msecs); } void ChessClock::setHost(ClockHost *hostp) { host=hostp; } void ChessClock::setAnotherHost(ClockHost *hostp) { host2=hostp; } int ChessClock::getActive() { return active; } void ChessClock::update() { Timestamp now; bool u = false; if (host) { switch(active) { case CLK_WHITE_RUNNING: now=Timestamp::now(); value[0]=val_ref[0]+(countdownf?-1:1)*(int)((now-t_ref[0])*1000.0); u = true; break; case CLK_BLACK_RUNNING: now=Timestamp::now(); value[1]=val_ref[1]+(countdownf?-1:1)*(int)((now-t_ref[1])*1000.0); u = true; break; } if (u) { host->updateClock(); if (host2) host2->updateClock(); } } } int ChessClock::getValue2(int black) { return(value[black?1:0]); } bool ChessClock::lowTimeWarning(piece mycolor) { Timestamp now; // only countdown clocks can issue warnings if (!countdownf) return false; now = Timestamp::now(); if (now - LastWarning < 1.0) return false; if ( (active==CLK_WHITE_RUNNING) && (mycolor==WHITE) && (value[0] <= 1000*global.LowTimeWarningLimit) ) { global.timeRunningOut(); LastWarning = Timestamp::now(); return true; } if ( (active==CLK_BLACK_RUNNING) && (mycolor==BLACK) && (value[1] <= 1000*global.LowTimeWarningLimit) ) { global.timeRunningOut(); LastWarning = Timestamp::now(); return true; } return false; } TimeControl::TimeControl() { mode = TC_NONE; } TimeControl & TimeControl::operator=(TimeControl &src) { mode = src.mode; value[0] = src.value[0]; value[1] = src.value[1]; return(*this); } int TimeControl::operator==(TimeControl &src) { if (mode != src.mode) return 0; switch(mode) { case TC_SPM: return(value[0] == src.value[0]); case TC_XMOVES: case TC_ICS: return(value[0] == src.value[0] && value[1] == src.value[1]); default: return 1; } } int TimeControl::operator!=(TimeControl &src) { return(!(src==(*this))); } void TimeControl::setSecondsPerMove(int seconds) { mode = TC_SPM; value[0] = seconds; } // the serialization is "/a/b/c" (no quotes), a=mode, b,c=value void TimeControl::fromSerialization(const char *s) { tstring t; int i; // cope with bookmarks from previous versions which just wrote // the secs per move value if (s[0]>='0' && s[0]<='9') { setSecondsPerMove(atoi(s)); return; } t.set(s); t.setFail(-1); i = t.tokenvalue("/"); if (i<0 || (i>2 && i!=99) ) { mode = TC_NONE; return; } mode = (TimeControlMode) i; value[0] = t.tokenvalue("/"); value[1] = t.tokenvalue("/"); } void TimeControl::setIcs(int base /* secs */, int increment /* secs */) { mode = TC_ICS; value[0] = base; value[1] = increment; } void TimeControl::setXMoves(int nmoves, int nsecs) { mode = TC_XMOVES; value[0] = nmoves; value[1] = nsecs; } // make sure dest is not shorter than char[32] to avoid // trouble void TimeControl::toXBoard(char *dest, int maxlen, int flags) { switch(mode) { case TC_NONE: dest[0] = 0; return; case TC_SPM: if (flags & TCF_GNUCHESS4QUIRK) { if (value[0]%60) snprintf(dest,maxlen,"level 1 %d:%02d",value[0]/60,value[0]%60); else snprintf(dest,maxlen,"level 1 %d",value[0]/60); } else { snprintf(dest,maxlen,"st %d",value[0]); } break; case TC_ICS: if (value[0]%60) snprintf(dest,maxlen,"level 0 %d:%02d %d",value[0]/60,value[0]%60,value[1]); else snprintf(dest,maxlen,"level 0 %d %d",value[0]/60,value[1]); break; case TC_XMOVES: if (value[1]%60) snprintf(dest,maxlen,"level %d %d:%02d 0",value[0],value[1]/60,value[1]%60); else snprintf(dest,maxlen,"level %d %d 0",value[0],value[1]/60); break; } } void TimeControl::toShortString(char *dest, int maxlen) { char z[64],y[64]; switch(mode) { case TC_NONE: snprintf(dest,maxlen,_("untimed")); // TRANSLATE break; case TC_SPM: TimeControl::secondsToString(z,64,value[0],true); snprintf(dest,maxlen,_("%s/move"),z); // TRANSLATE break; case TC_ICS: snprintf(dest,maxlen,"%d %d",value[0]/60,value[1]); break; case TC_XMOVES: TimeControl::secondsToString(z,64,value[1],true); snprintf(dest,maxlen,_("%d moves in %s"),value[0],z); // OK break; } } void TimeControl::toString(char *dest, int maxlen) { char z[64],y[64]; switch(mode) { case TC_NONE: snprintf(dest,maxlen,_("no time control set")); break; case TC_SPM: TimeControl::secondsToString(z,64,value[0],true); snprintf(dest,maxlen,_("%s per move"),z); break; case TC_ICS: TimeControl::secondsToString(z,64,value[0],true); TimeControl::secondsToString(y,64,value[1],true); snprintf(dest,maxlen,_("initial time %s, increment %s"),z,y); break; case TC_XMOVES: TimeControl::secondsToString(z,64,value[1],true); snprintf(dest,maxlen,_("%d moves in %s"),value[0],z); break; } } void TimeControl::toPGN(char *dest, int maxlen) { switch(mode) { case TC_NONE: g_strlcpy(dest,"?",maxlen); break; case TC_SPM: snprintf(dest,maxlen,"0+%d",value[0]); break; case TC_ICS: snprintf(dest,maxlen,"%d+%d",value[0],value[1]); break; case TC_XMOVES: snprintf(dest,maxlen,"%d/%d",value[0],value[1]); break; } } bool TimeControl::isRegressive() { return(mode == TC_ICS || mode == TC_XMOVES); } int TimeControl::startValue() { if (mode == TC_NONE || mode == TC_SPM) return 0; else return(mode==TC_XMOVES?value[1]:value[0]); } int TimeControl::stringToSeconds(char *src) { tstring t; int x, v=0; if (src[0] == '-') src++; t.set(src); t.setFail(-1); x=t.tokenvalue(":hms"); if (x>=0) { v = x; x=t.tokenvalue(":hms"); if (x>=0) { v = 60*v + x; x=t.tokenvalue(":hms"); if (x>=0) v = 60*v + x; } } return v; } void TimeControl::secondsToString(char *dest, int maxlen, int secs, bool units) { if (secs < 0) { secs = -secs; dest[0] = '-'; ++dest; --maxlen; } if (secs < 60) snprintf(dest,maxlen,"%d%c",secs, units?'s':0); else if (secs < 3600) snprintf(dest,maxlen,"%d%c%02d%c", secs/60,units?'m':':',secs%60,units?'s':0); else snprintf(dest,maxlen,"%d%c%02d%c%02d%c", secs/3600, units?'h':':', (secs%3600)/60,units?'m':':', (secs%3600)%60,units?'s':0); } TimeControlEditDialog::TimeControlEditDialog(TimeControl *tc, bool allownone) : ModalDialog(N_("Edit Time Control")) { GtkWidget *v, *om, *hs, *bhb, *ok, *cancel; GtkWidget *h[6], *l[6], *V[3]; GtkMenu *ddm; int i; char z[64]; listener = 0; src = tc; local = (*src); if (local.mode == TC_NONE) allownone = true; gtk_window_set_default_size(GTK_WINDOW(widget),300,150); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),v); om = gtk_option_menu_new(); ddm = GTK_MENU(gtk_menu_new()); mi[0] = gtk_menu_item_new_with_label(_("Type: Fixed Time per Move")); mi[1] = gtk_menu_item_new_with_label(_("Type: X Moves per Time Period")); mi[2] = gtk_menu_item_new_with_label(_("Type: Fischer Clock (ICS-like)")); mi[3] = gtk_menu_item_new_with_label(_("Type: Use engine's default setting")); for(i=0;i< (allownone ? 4 : 3);i++) { gtk_menu_shell_append(GTK_MENU_SHELL(ddm), mi[i]); gtk_signal_connect(GTK_OBJECT(mi[i]),"activate", GTK_SIGNAL_FUNC(tced_dropmenu), (gpointer) this); Gtk::show(mi[i],NULL); } gtk_option_menu_set_menu(GTK_OPTION_MENU(om),GTK_WIDGET(ddm)); gtk_box_pack_start(GTK_BOX(v),om,FALSE,TRUE,0); for(i=0;i<3;i++) { f[i] = gtk_frame_new(0); V[i] = gtk_vbox_new(FALSE,2); h[i] = gtk_hbox_new(TRUE,2); h[3+i] = gtk_hbox_new(TRUE,2); gtk_container_add(GTK_CONTAINER(f[i]),V[i]); gtk_container_set_border_width(GTK_CONTAINER(V[i]),4); gtk_box_pack_start(GTK_BOX(V[i]),h[i],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(V[i]),h[i+3],FALSE,TRUE,2); Gtk::show(h[i],h[i+3],V[i],NULL); } e[0] = gtk_entry_new(); l[1] = gtk_label_new(_("per move")); gtk_box_pack_start(GTK_BOX(h[0]),e[0],TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[0]),l[1],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(v), f[0], FALSE, TRUE, 4); e[1] = gtk_entry_new(); l[2] = gtk_label_new(_("moves in")); e[2] = gtk_entry_new(); l[3] = gtk_label_new(_("(time period)")); gtk_box_pack_start(GTK_BOX(h[1]),e[1],TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[1]),l[2],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[1+3]),e[2],TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[1+3]),l[3],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(v), f[1], FALSE, TRUE, 2); l[4] = gtk_label_new(_("Starting Time:")); e[3] = gtk_entry_new(); l[5] = gtk_label_new(_("Increment:")); e[4] = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(h[2]),l[4],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[2]),e[3],TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[2+3]),l[5],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(h[2+3]),e[4],TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(v), f[2], FALSE, TRUE, 2); l[0] = gtk_label_new(_("Times can be given as hh:mm:ss , mm:ss or ss")); gtk_box_pack_start(GTK_BOX(v),l[0],FALSE,TRUE,4); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_end(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label (_("OK")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); cancel=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(cancel,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(bhb),cancel,TRUE,TRUE,0); gtk_widget_grab_default(ok); hs=gtk_hseparator_new(); gtk_box_pack_end(GTK_BOX(v),hs,FALSE,TRUE,4); gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(tced_ok), (gpointer) this); setDismiss(GTK_OBJECT(cancel),"clicked"); Gtk::show(om,GTK_WIDGET(ddm),l[0],l[1],l[2],l[3],l[4],l[5], e[0],e[1],e[2],e[3],e[4], hs,ok,cancel,bhb,v,NULL); switch(local.mode) { case TC_SPM: gtk_option_menu_set_history(GTK_OPTION_MENU(om), 0); TimeControl::secondsToString(z,64,local.value[0]); gtk_entry_set_text(GTK_ENTRY(e[0]),z); gshow(f[0]); break; case TC_XMOVES: gtk_option_menu_set_history(GTK_OPTION_MENU(om), 1); snprintf(z,64,"%d",local.value[0]); gtk_entry_set_text(GTK_ENTRY(e[1]),z); TimeControl::secondsToString(z,64,local.value[1]); gtk_entry_set_text(GTK_ENTRY(e[2]),z); gshow(f[1]); break; case TC_ICS: gtk_option_menu_set_history(GTK_OPTION_MENU(om), 2); TimeControl::secondsToString(z,64,local.value[0]); gtk_entry_set_text(GTK_ENTRY(e[3]),z); TimeControl::secondsToString(z,64,local.value[1]); gtk_entry_set_text(GTK_ENTRY(e[4]),z); gshow(f[2]); break; case TC_NONE: gtk_option_menu_set_history(GTK_OPTION_MENU(om), 3); break; } } void TimeControlEditDialog::setUpdateListener(UpdateInterface *ui) { listener = ui; } void tced_dropmenu(GtkMenuItem *w, gpointer data) { TimeControlEditDialog *me = (TimeControlEditDialog *) data; GtkWidget *ww = GTK_WIDGET(w); switch(me->local.mode) { case TC_SPM: gtk_widget_hide(me->f[0]); break; case TC_XMOVES: gtk_widget_hide(me->f[1]); break; case TC_ICS: gtk_widget_hide(me->f[2]); break; default: break; } if (ww == me->mi[0]) { me->local.mode = TC_SPM; gshow(me->f[0]); gtk_widget_grab_focus(me->e[0]); } else if (ww == me->mi[1]) { me->local.mode = TC_XMOVES; gshow(me->f[1]); gtk_widget_grab_focus(me->e[1]); } else if (ww == me->mi[2]) { me->local.mode = TC_ICS; gshow(me->f[2]); gtk_widget_grab_focus(me->e[3]); } else if (ww == me->mi[3]) { me->local.mode = TC_NONE; } } void tced_ok(GtkWidget *w, gpointer data) { char z[128], y[128]; TimeControlEditDialog *me = (TimeControlEditDialog *) data; switch(me->local.mode) { case TC_SPM: g_strlcpy(z, gtk_entry_get_text(GTK_ENTRY(me->e[0])), 128); me->local.setSecondsPerMove( TimeControl::stringToSeconds(z) ); break; case TC_XMOVES: g_strlcpy(z, gtk_entry_get_text(GTK_ENTRY(me->e[1])), 128); g_strlcpy(y, gtk_entry_get_text(GTK_ENTRY(me->e[2])), 128); me->local.setXMoves( atoi(z), TimeControl::stringToSeconds(y) ); break; case TC_ICS: g_strlcpy(z, gtk_entry_get_text(GTK_ENTRY(me->e[3])), 128); g_strlcpy(y, gtk_entry_get_text(GTK_ENTRY(me->e[4])), 128); me->local.setIcs(TimeControl::stringToSeconds(z), TimeControl::stringToSeconds(y) ); break; } *(me->src) = me->local; if (me->listener) me->listener->update(); me->release(); } eboard-1.1.1.orig/util.h0000644000175000017500000001610610757567572014432 0ustar patrikpatrik/* $Id: util.h,v 1.20 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2001 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_UTIL_H #define EBOARD_UTIL_H 1 #include #include #include #include "stl.h" class FileFinder { public: FileFinder(); ~FileFinder(); void addDirectory(char *dir); void addDirectory(string &dir); void addMyDirectory(char *dir); void addMyDirectory(string &dir); int find(char *name,char *fullpath); int find(string &name, string &out); int getPathCount(); string &getPath(unsigned int i); private: vector path; }; class EboardFileFinder : public FileFinder { public: EboardFileFinder(); }; // pattern matching wizardry class Pattern { public: Pattern(); virtual ~Pattern(); // results: 0=match -1 = no match 1=multiple matches; on // matches, last contains the first character after the match virtual int tryMatch(list::iterator & first, list::iterator & last)=0; virtual void reset(); bool eternal; }; class ExactStringPat : public Pattern { public: ExactStringPat(char *pat); virtual ~ExactStringPat() {} virtual int tryMatch(list::iterator & first, list::iterator & last); protected: list pattern; }; // same thing, case insensitive class CIExactStringPat : public ExactStringPat { public: CIExactStringPat(char *pat) : ExactStringPat(pat) { } virtual ~CIExactStringPat() {} int tryMatch(list::iterator & first, list::iterator & last); }; // you probably know this simply as the '*' wildcard class KleeneStarPat : public Pattern { public: KleeneStarPat(); int tryMatch(list::iterator & first, list::iterator & last); void reset(); private: int CallCount; }; // string of any size (will try to maximize) made up of // characters from a given set class SetPat : public Pattern { public: SetPat(); void addToSet(char c); void addToSet(char *s); void clearSet(); void includeUppercase(); void includeLowercase(); void includeLetters(); void includeNumbers(); int tryMatch(list::iterator & first, list::iterator & last); protected: bool *myset; private: bool inSet(char c); }; // generic (eats 256 bytes per object -- unwise) class CharSetPat : public SetPat { public: CharSetPat(); private: bool theset[256]; }; // calling include___() or addToSet() or clearSet() on // any object of the *SetPat classes below is a shooting // offense -> you'll mess with all other objects of the // same class. // these classes eat 256 bytes _per class_, not per instance. // %n - digits, '+' and '-' class PercNSetPat : public SetPat { public: PercNSetPat(); private: static bool theset[256]; }; // %s - A-Z,a-z class PercSSetPat : public SetPat { public: PercSSetPat(); private: static bool theset[256]; }; // %S - A-Z,a-z,0-9,_ class PercUpperSSetPat : public SetPat { public: PercUpperSSetPat(); private: static bool theset[256]; }; // %a - A-Z,a-z,()* class PercASetPat : public SetPat { public: PercASetPat(); private: static bool theset[256]; }; // %A - %a U [0-9] class PercUpperASetPat : public SetPat { public: PercUpperASetPat(); private: static bool theset[256]; }; // %b - spaces and tabs class PercBSetPat : public SetPat { public: PercBSetPat(); private: static bool theset[256]; }; // %r - almost everything except spaces and tabs class PercRSetPat : public SetPat { public: PercRSetPat(); private: static bool theset[256]; }; // %N - digits only class PercUpperNSetPat : public SetPat { public: PercUpperNSetPat(); private: static bool theset[256]; }; class PatternMatcher { public: PatternMatcher(); virtual ~PatternMatcher(); void append(Pattern *p); void reset(); int match(const char *stryng); // binds local 'data' list int match(); // uses PatternBinder bound data char *getToken(int index); void bindData(list *newdata); protected: void cleanUp(); private: int recursiveMatch(list::iterator & pat, list::iterator & p0, list::iterator & p1); void lesserCleanUp(); list pattern; list data; list::iterator *> matches; list * bound; int bufsize; char *token; }; class ExtPatternMatcher : public PatternMatcher { public: ExtPatternMatcher(); void set(char *hrp); // set from a human readable pattern // for patterns created with "set", these are the %s , %n char *getSToken(int index); char *getNToken(int index); char *getAToken(int index); char *getBToken(int index); char *getRToken(int index); char *getStarToken(int index); private: char *getXToken(vector &v, int index); vector atokens; vector btokens; vector rtokens; vector stokens; vector ntokens; vector startokens; }; // helper class to encapsulate char * -> list // conversion for pattern matchers that will perform // matching over a common string class PatternBinder { public: void add(PatternMatcher *pm0,...); // arguments are pointers to PatternMatcher objects void prepare(const char *target); private: list group; list data; }; // read from a (possibly) compressed stream. currently // supports gzip only // somewhat compatible to istream (not everything is implemented) // gzip must be in the path. /tmp must be writeable and must have enough // space for the uncompressed file // whether the file is gzip'ed or not, it's determined by the .gz // extension in the name class zifstream { public: zifstream(); zifstream(char *name); void open(char *name); bool getline(char *ptr, int len, char delim='\n'); bool seekg(unsigned long offset); unsigned long tellg(); bool operator!(); bool eof(); void close(); bool fail(); bool is_open(); private: ifstream x; bool isopen; bool compressed; int failure; char tmpfile[280]; char ungzfile[280]; char origfile[256]; void copen(); void cclose(); }; class Timestamp { public: Timestamp(int sec, int usec); Timestamp(); Timestamp & operator=(Timestamp &t); double operator-(Timestamp &t); static Timestamp & now(); private: int S,U; }; #endif eboard-1.1.1.orig/help.h0000644000175000017500000000311310757567572014377 0ustar patrikpatrik/* $Id: help.h,v 1.7 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_HELP_H #define EBOARD_HELP_H 1 #include "widgetproxy.h" #include "notebook.h" namespace Help { class AboutDialog : public ModalDialog { public: AboutDialog(); }; class KeysDialog : public ModalDialog { public: KeysDialog(); }; class DebugDialog : public ModalDialog { public: DebugDialog(); private: char *grabOutput(char *cmdline); char pipedata[1024]; friend void debugdlg_writecons(GtkWidget *w, gpointer data); }; void debugdlg_writecons(GtkWidget *w, gpointer data); class GettingStarted : public NonModalDialog { public: GettingStarted(); private: void compose(); GtkWidget *text; }; } #endif eboard-1.1.1.orig/back1.xpm0000644000175000017500000000102110757567572015001 0ustar patrikpatrik/* XPM */ static char * back1_xpm[] = { "24 16 2 1", " c None", ". c #000000", " ", " ", " . ", " .. .. ", " ... ... ", " .... .... ", " ..... .. ", " ...... .. ", " ...... .. ", " ..... .. ", " .... .. ", " ... .. ", " .. ", " . ", " ", " "}; eboard-1.1.1.orig/treeics.xpm0000644000175000017500000000053610757567572015470 0ustar patrikpatrik/* XPM */ static char * treeics_xpm[] = { "14 14 3 1", " c None", ". c #000000", "+ c #F70000", " ..... ", " .+++. ", " .+++. ", " .+++. ", " ..... ", " . ", " .......... ", " . . ", "..... .....", ".+++. .+++.", ".+++. .+++.", ".+++. .+++.", "..... .....", " "}; eboard-1.1.1.orig/cimg.h0000644000175000017500000000411510757567572014371 0ustar patrikpatrik/* $Id: cimg.h,v 1.1 2004/12/27 15:16:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2005 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CIMG_H #define CIMG_H 1 #include "eboard.h" // hati type #define t0(a) (((a)>>16)&0xff) #define t1(a) (((a)>>8)&0xff) #define t2(a) ((a)&0xff) #define triplet(a,b,c) ((((a)&0xff)<<16)|(((b)&0xff)<<8)|((c)&0xff)) class Blitter { public: void bitblt(rgbptr src,rgbptr dest,int sx,int sy,int sw, int dx,int dy,int dw,int w,int h); void bitblt_a(rgbptr src,rgbptr dest,int sx,int sy,int sw, int dx,int dy,int dw,int w,int h, rgbptr alpha); }; class ColorSpace { public: int RGB2YCbCr(int triplet); int YCbCr2RGB(int triplet); int lighter(int triplet); int darker(int triplet); int pixr(int triplet); int pixg(int triplet); int pixb(int triplet); int pixel(int r,int g,int b); }; class CImg : public Blitter { public: CImg(int w,int h); CImg(const char *filename); CImg(CImg *src); virtual ~CImg(); void fill(int color); void set(int x,int y, int color); int get(int x,int y); void crop(int x,int y,int w,int h); CImg *alphaScale(rgbptr alpha, int nw,int nh, bool extruded); CImg *scale(int nw, int nh); void writeP6(const char *path); int W,H; int rowlen; hati *data; int ok; private: void alloc(int w,int h); }; #endif eboard-1.1.1.orig/movelist.cc0000644000175000017500000001134710757567572015457 0ustar patrikpatrik/* $Id: movelist.cc,v 1.18 2007/01/20 15:58:43 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "movelist.h" #include "tstring.h" #include "stl.h" #include "eboard.h" #include "icon-moves.xpm" MoveListWindow::MoveListWindow(char *p1,char *p2, int gid,list &moves, int over,GameResult result,char *reason) { char z[128]; GtkWidget *v,*sw; listener=0; if (gid<7000) snprintf(z,128,_("Game #%d - %s vs. %s"),gid,p1,p2); else snprintf(z,128,"%s vs. %s",p1,p2); widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(widget),300,400); gtk_window_set_title(GTK_WINDOW(widget),z); gtk_widget_realize(widget); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),v); sw=gtk_scrolled_window_new(NULL,NULL); clist=gtk_clist_new(3); gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE); gtk_clist_set_column_title(GTK_CLIST(clist),0,"#"); gtk_clist_set_column_title(GTK_CLIST(clist),1,_("White")); gtk_clist_set_column_title(GTK_CLIST(clist),2,_("Black")); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_box_pack_start(GTK_BOX(v),sw,TRUE,TRUE,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(sw),clist); textbar=new Status(); textbar->WaitUpdate=0; textbar->show(); gtk_box_pack_start(GTK_BOX(v),textbar->widget,FALSE,TRUE,0); setIcon(icon_moves_xpm,_("Moves")); populate_clist(moves,over,result,reason); Gtk::show(clist,sw,v,NULL); gtk_signal_connect (GTK_OBJECT (widget), "destroy", GTK_SIGNAL_FUNC (movelist_destroy), this); } MoveListWindow::~MoveListWindow() { delete textbar; } void MoveListWindow::updateList(list &moves, int over,GameResult result, char *reason) { populate_clist(moves,over,result,reason); } void MoveListWindow::populate_clist(list &moves, int over, GameResult result,char *reason) { tstring t; string *p; list::iterator li; char z[64]; char *zz[3]; int i,cm,tm; gtk_clist_freeze(GTK_CLIST(clist)); gtk_clist_clear(GTK_CLIST(clist)); cm=0; t.setChomp(true); for(li=moves.begin(),i=-1;li!=moves.end();li++) { if ( ! (*li).getLastMove().empty() ) { t.set( (*li).getLastMove() ); tm = t.tokenvalue("."); } else tm=0; if (!tm) continue; if (tm!=cm) { snprintf(z,64,"%d",tm); zz[0]=z; zz[1]=_("none"); zz[2]=_("none"); gtk_clist_append(GTK_CLIST(clist),zz); ++i; cm=tm; } p=t.token(" \n"); if (p) if (!p->compare("...")) gtk_clist_set_text(GTK_CLIST(clist),i,2,t.token("\n")->c_str()); else { t.reset(); t.token("."); p=t.token("\n"); gtk_clist_set_text(GTK_CLIST(clist),i,1,p->c_str()); } } if (over) { switch(result) { case WHITE_WIN: strcpy(z,"1-0 "); break; case BLACK_WIN: strcpy(z,"0-1 "); break; case DRAW: strcpy(z,"1/2-1/2 "); break; case UNDEF: strcpy(z,"(*) "); break; default: z[0]=0; } g_strlcat(z,reason,64); textbar->setText(z); } else { textbar->setText(_("Game in progress.")); } gtk_clist_set_column_width(GTK_CLIST(clist),0,32); gtk_clist_set_column_width(GTK_CLIST(clist),1,96); gtk_clist_set_column_width(GTK_CLIST(clist),2,96); gtk_clist_thaw(GTK_CLIST(clist)); } void MoveListWindow::setListener(MoveListListener *mll) { listener=mll; } void MoveListWindow::close() { gtk_widget_destroy(widget); } void movelist_destroy (GtkWidget * w, gpointer data) { MoveListWindow *me; me=(MoveListWindow *)data; if (me->listener) me->listener->moveListClosed(); } eboard-1.1.1.orig/qb1.xpm0000644000175000017500000000067610757567572014522 0ustar patrikpatrik/* XPM */ static char * qb1_xpm[] = { "18 16 3 1", " c None", ". c #FF5D00", "+ c #000000", " ", " ", " ", " ... ", " .......++", " ...........++ ", " ..............+ ", " ............++ ", " ..........++ ", " .........+ ", " .......++ ", " .....++ ", " ....+ ", " ..++ ", " ++ ", " "}; eboard-1.1.1.orig/qb6.xpm0000644000175000017500000000110610757567572014514 0ustar patrikpatrik/* XPM */ static char * qb6_xpm[] = { "18 16 12 1", " c None", ". c #000000", "+ c #1700FE", "@ c #1D01EC", "# c #1703E0", "$ c #1305D4", "% c #1306C7", "& c #1008BB", "* c #1009AE", "= c #0E0BA2", "- c #0D0D94", "; c #0E1389", " ", " ", " ........... ", " .+++++@#$%&. ", " .++++@#$%&*. ", " .+++@#$%&*=. ", " .++@#$%&*=-. ", " .+@#$%&*=-;.", " .++@#$%&*=-. ", " .+++@#$%&*=. ", " .++++@#$%&*. ", " .+++++@#$%&. ", " ........... ", " ", " ", " "}; eboard-1.1.1.orig/proto_fics.cc0000644000175000017500000014467310757567572015775 0ustar patrikpatrik/* $Id: proto_fics.cc,v 1.122 2008/02/19 15:58:53 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "config.h" #ifdef HAVE_STRINGS_H #include #endif #include #include "protocol.h" #include "global.h" #include "chess.h" #include "status.h" #include "seekgraph.h" #include "eboard.h" // game 45 white [PPPPPNBBR] black [PPNN] FicsProtocol::FicsProtocol() { SetPat *sp; global.debug("FicsProtocol","FicsProtocol"); GActions.push_back(new string("All Observers")); GActions.push_back(new string("Game Info")); PActions.push_back(new string("Finger")); PActions.push_back(new string("Stats")); PActions.push_back(new string("History")); PActions.push_back(new string("Ping")); PActions.push_back(new string("Log")); PActions.push_back(new string("Variables")); /* parsing state */ AuthGone = false; InitSent = false; LecBotSpecial = false; LastWasStyle12 = false; LastWasPrompt = false; LastColor = global.Colors.TextBright; LastChannel = -1; UseMsecs = false; PendingStatus = 0; RetrievingMoves = 0; RetrievingGameList = false; RetrievingAdList = false; lastGLC=0; lastALC=0; PartnerGame = -1; UserPlayingWithWhite = true; xxnext=0; xxplayer[0][0]=0; xxplayer[1][0]=0; xxrating[0][0]=0; xxrating[1][0]=0; Login.set ("*login:*"); Password.set("*password:*"); Prompt.set("*ics%%*"); WelcomeMessage.append(new ExactStringPat("**** Starting ")); WelcomeMessage.append(new KleeneStarPat()); WelcomeMessage.append(new ExactStringPat("session as ")); WelcomeMessage.append(sp=new PercSSetPat()); WelcomeMessage.append(new KleeneStarPat()); CreateGame.set("{Game %n (%S vs. %S) Creating %s %r *}*"); CreateGame0.set("Creating: %S (*) %S (*)*"); ContinueGame.set("{Game %n (%S vs. %S) Continuing %s %r *}*"); BeginObserve.set("You are now observing game %n."); EndObserve.set("*Removing game %n from observation list*"); ObsInfoLine.set("Game %n: %S (*) %S (*) %s %r *"); EndExamine.set("You are no longer examining game %n*"); MsSet.set("ms set.*"); Style12.set("<12> *"); Style12House.set(" game %n white [*] black [*]*"); /* As of 2007 FICS is sending this before moves even in crazyhouse games */ Style12BadHouse.set(" game %n white [*] black [*]%b<-*"); WhiteWon.set ("{Game %n (%S vs. %S) *} 1-0*"); BlackWon.set ("{Game %n (%S vs. %S) *} 0-1*"); Drawn.set ("{Game %n (%S vs. %S) *} 1/2-1/2*"); Interrupted.set ("{Game %n (%S vs. %S) *} %**"); DrawOffer.set("%S offers you a draw.*"); PrivateTell.set ("%A tells you:*"); //Index of new news items News.set("Index of new *news items:*"); // Ns: 0=game 1=rat.white 2=rat.black // Ss: 0=whitep 1=blackp // *s: 1=game string GameStatus.set("*%n%b%n%b%S%b%n%b%S%b[*]*"); // 2 (Exam. 2413 Species 1234 Pulga ) [ br 3 1] W: 1 // amazingly enough, the indexes are the same as in GameStatus ExaGameStatus.set("*%n (Exam.%b%n %S%b%n %S%b)%b[*]*"); GameListEntry.set("*%n *[*]*:*"); EndOfGameList.set("*%n games displayed.*"); AdListEntry.set("*%n%b%n%b%r%b%n%b%n%b%r*"); EndOfAdList.set("*%n ad* displayed.*"); //IceBox (1156) vs. damilasa (UNR) --- Sun Apr 22, 09:07 ??? 2001 MovesHeader.set("%S (*) vs. %S (*) --- *"); //Unrated blitz match, initial time: 2 minutes, increment: 12 seconds. MovesHeader2.set("%s %r match, initial time: *"); //Move IceBox damilasa MovesHeader3.set("Move%b%S%b%S*"); //---- ---------------- ---------------- MovesHeader4.set("---- ---*"); // 1. d4 (0:00) d5 (0:00) // n0 r0 r1 r2 r3 MovesBody.set("*%n.%b%r%b%r%b%r%b%r*"); // same thing, line without black move MovesBody2.set("*%n.%b%r%b%r*"); // {Still in progress} * MovesEnd.set("%b{*}*"); Kibitz.set ("%A*[%n]%bkibitzes:*"); Whisper.set ("%A*[%n]%bwhispers:*"); Say.set ("%A[%n] says:*"); Say2.set ("%A says:*"); ChannelTell.set("*(%n):*"); Seek.set("*(*) seeking*(*to respond)"); Shout.set ("%A shouts: *"); cShout.set ("%A c-shouts: *"); It.set ("-->*"); Notify.set("Notification:*"); SgClear.set("*"); SgRemove.set("*"); SgRemove2.set("Ads removed:*"); // 8 w=visar ti=02 rt=2194 t=4 i=0 r=r tp=suicide c=? rr=0-9999 a=t f=f // n0 s0 r0 n1 *0 n2 n3 s1 r1 r2 r3 s2 s3 SgAdd.set("%b%n%bw=%S%bti=%r%brt=%n*%bt=%n%bi=%n%br=%s%btp=%r%bc=%r%brr=%r%ba=%s%bf=%s*"); SgAdd2.set("%b%b%n%bw=%S%bti=%r%brt=%n*%bt=%n%bi=%n%br=%s%btp=%r%bc=%r%brr=%r%ba=%s%bf=%s*"); // bughouse stuff PTell.set("%A (your partner) tells you: *"); // sample output: Your partner is playing game 75 (aglup vs. cglup). GotPartnerGame.set("Your partner is playing game %n (*"); // challenge Challenge.set("Challenge: *"); // FICS LectureBot fake channel tells LectureBotXTell.set(":LectureBot(TD)(67):*"); LectureBotXTellContinued.set(": *"); // AllOb parsing AllObNone.set("No one is observing game %n.*"); // Observing 18 [Fullmer vs. knighttour]: #boffo #HummerESS TieFighter (3 users) // Observing 62 [VABORIS vs. Fudpucker]: BillJr(TM) CrouchingTiger(U) #Firefly AllObFirstLine.set("Observing %n [*]: *"); AllObMidLine.set("\\*"); AllObState = 0; memset(AllObAcc,0,1024); memset(style12table,0,256*sizeof(piece)); style12table['-']=EMPTY; style12table['P']=PAWN|WHITE; style12table['R']=ROOK|WHITE; style12table['N']=KNIGHT|WHITE; style12table['B']=BISHOP|WHITE; style12table['Q']=QUEEN|WHITE; style12table['K']=KING|WHITE; style12table['p']=PAWN|BLACK; style12table['r']=ROOK|BLACK; style12table['n']=KNIGHT|BLACK; style12table['b']=BISHOP|BLACK; style12table['q']=QUEEN|BLACK; style12table['k']=KING|BLACK; Binder.add(&WelcomeMessage,&UserName,&Login,&Password,&Prompt, &CreateGame,&CreateGame0,&ContinueGame,&BeginObserve, &EndObserve,&NotObserve,&EndExamine,&GameStatus, &ExaGameStatus,&GameListEntry,&EndOfGameList, &AdListEntry,&EndOfAdList,&Style12,&Style12House, &WhiteWon,&BlackWon,&Drawn,&Interrupted,&DrawOffer, &PrivateTell,&News,&MovesHeader,&MovesHeader2, &MovesHeader3,&MovesHeader4,&MovesBody,&MovesBody2, &MovesEnd,NULL); Binder.add(&Kibitz,&Whisper,&Say,&Shout,&cShout,&It,&ChannelTell, &Seek,&Notify,&SgClear,&SgAdd,&SgAdd2,&SgRemove, &PTell,&Say2,&Challenge,&LectureBotXTell, &LectureBotXTellContinued,&GotPartnerGame, &AllObNone,&AllObFirstLine,&AllObMidLine, &Style12BadHouse,&ObsInfoLine,&SgRemove2,&MsSet,NULL); } FicsProtocol::~FicsProtocol() { global.debug("FicsProtocol","~FicsProtocol"); clearMoveBuffer(); } void FicsProtocol::finalize() { global.debug("FicsProtocol","finalize"); if (global.network) global.network->writeLine("quit"); if (global.IcsSeekGraph && global.skgraph2) global.skgraph2->clear(); } void FicsProtocol::receiveString(char *netstring) { parser1(netstring); } /* -- eats blank lines after style-12 lines -- ensures initialization is sent on non-FICS servers -- ensures password mode is off on non-FICS servers -- removes the prompt from the line -- ignore empty lines -- calls the next parser */ bool FicsProtocol::parser1(char *T) { char pstring[1024]; /* ignore blank lines from timeseal */ if (T[0]==0 && LastWasStyle12) { LastWasStyle12 = false; return true; } LastWasStyle12 = false; Binder.prepare(T); /* remove prompts */ while(Prompt.match()) { /* avoid fake prompts in help files */ if (strlen(Prompt.getStarToken(0)) > 9) break; /* send initialization to servers that don't tell us our name */ if (!InitSent) { UserName.reset(); UserName.append(new CIExactStringPat("i n v a l i d")); strcpy(nick,"i n v a l i d"); sendInitialization(); InitSent = true; } /* exit auth mode on old ICS code */ if (!AuthGone) { AuthGone = true; global.input->setPasswordMode(0); } /* remove prompt, ignore prompt-only lines */ if (strlen(Prompt.getStarToken(1))>3) { memset(pstring,0,1024); g_strlcpy(pstring,Prompt.getStarToken(1),1024); T = pstring; if (T[0]==' ') T++; Binder.prepare(T); } else { LastWasPrompt = true; return true; } } /* while Prompt.match */ /* ignore empty lines after prompts (??) */ if (T[0]==0 && LastWasPrompt) return false; LastWasPrompt = false; /* call next parser */ return(parser2(T)); } /* -- check for login-time patterns, perform console output and control password obfuscation -- if login is gone, calls next parser */ bool FicsProtocol::parser2(char *T) { if (!AuthGone) { Binder.prepare(T); if (Password.match()) global.input->setPasswordMode(1); if (Login.match()) global.input->setPasswordMode(0); if (WelcomeMessage.match()) { global.input->setPasswordMode(0); AuthGone = true; g_strlcpy(nick,WelcomeMessage.getToken(3),64); UserName.reset(); UserName.append(new KleeneStarPat()); UserName.append(new CIExactStringPat(nick)); UserName.append(new KleeneStarPat()); if (!InitSent) { sendInitialization(); InitSent = true; } } return(doOutput(T,-1,false,global.Colors.TextBright)); } return(parser3(T)); } /* -- parse style-12 and zhouse stock lines, end with no output -- parse seek lines, output them depending on user settings, end -- parse seekinfo lines and update the seek table accordingly, end with no output -- call next parser */ bool FicsProtocol::parser3(char *T) { Binder.prepare(T); /* style 12 strings are parsed, end with no output */ if (Style12.match()) { parseStyle12(T); LastWasStyle12 = true; return true; } /* bad (early) zhouse stock lines - ignore with no output unless we are playing bughouse */ if (Style12BadHouse.match()) { attachHouseStock(Style12BadHouse,true); return true; } /* zhouse stock line, parse, end with no output */ if (Style12House.match()) { attachHouseStock(Style12House,false); return true; } /* human-readable seek line */ if (Seek.match()) { if (global.HideSeeks && global.IcsSeekGraph) return true; return(doOutput(T, -1, false, global.Colors.Seeks)); } /* seek table/graph lines */ if (global.IcsSeekGraph) { if (SgClear.match()) { ensureSeekGraph(); global.skgraph2->clear(); return true; } if (SgAdd.match()) { seekAdd(SgAdd); return true; } if (SgAdd2.match()) { seekAdd(SgAdd2); return true; } if (SgRemove.match()) { seekRemove(SgRemove); return true; } } else { if (SgClear.match()) return true; if (SgAdd.match()) return true; if (SgAdd2.match()) return true; if (SgRemove.match()) return true; } // Ads Removed: msg if (SgRemove2.match()) return true; return(parser4(T)); } /* -- treat "Ads on Server" retrieval, end with no output -- treat "Games on Server" retrieval, end with no output -- treat move list retrieval, end with no output -- call next parser */ bool FicsProtocol::parser4(char *T) { Binder.prepare(T); /* ad list retrieval for Windows -> Ads on Server */ if (RetrievingAdList) { if (AdListEntry.match()) { sendAdListEntry(T); return true; } if (EndOfAdList.match()) { RetrievingAdList = false; lastALC->endOfList(); lastALC = 0; return true; } } /* game list retrieval for Windows -> Games on Server */ if (RetrievingGameList) { if (GameListEntry.match()) { sendGameListEntry(); return true; } if (EndOfGameList.match()) { RetrievingGameList = false; lastGLC->endOfList(); lastGLC = 0; return true; } } /* move list retrieval */ switch(RetrievingMoves) { case 0: break; case 1: if (MovesHeader.match()) { ++RetrievingMoves; g_strlcpy(xxplayer[xxnext], MovesHeader.getSToken(0), 64); g_strlcpy(xxrating[xxnext], MovesHeader.getStarToken(0), 64); xxnext=(++xxnext)%2; g_strlcpy(xxplayer[xxnext], MovesHeader.getSToken(1), 64); g_strlcpy(xxrating[xxnext], MovesHeader.getStarToken(1), 64); xxnext=(++xxnext)%2; return true; } break; case 2: if (MovesHeader2.match()) { ++RetrievingMoves; return true; } break; case 3: if (MovesHeader3.match()) { ++RetrievingMoves; return true; } break; case 4: if (MovesHeader4.match()) { ++RetrievingMoves; clearMoveBuffer(); return true; } break; case 5: if (MovesBody.match()) { retrieve1(MovesBody); return true; } if (MovesBody2.match()) { retrieve2(MovesBody2); return true; } if (MovesEnd.match()) { retrievef(); if (MoveRetrievals.empty()) RetrievingMoves = 0; else RetrievingMoves = 1; return true; } break; } /* switch RetrievingMoves */ return(parser5(T)); } /* -- treat game creation (1), echo line to console, end -- treat game creation (2), end with no output -- treat adjournment resume, end with no output -- treat observation/examination start/end, end with no output -- treat game status retrieval, end with output -- treat game information line (wild/fr, wild/[012] issue) -- call next parser */ bool FicsProtocol::parser5(char *T) { Binder.prepare(T); if (CreateGame0.match()) { g_strlcpy(xxplayer[xxnext],CreateGame0.getSToken(0),64); g_strlcpy(xxrating[xxnext],CreateGame0.getStarToken(0),64); xxnext=(++xxnext)%2; g_strlcpy(xxplayer[xxnext],CreateGame0.getSToken(1),64); g_strlcpy(xxrating[xxnext],CreateGame0.getStarToken(1),64); xxnext=(++xxnext)%2; return(doOutput(T,-1,false,global.Colors.TextBright)); } if (CreateGame.match()) { createGame(CreateGame); return true; } if (ContinueGame.match()) { createGame(ContinueGame); /* fics sends 2 moves lists (!?), we ignore one of them */ retrieveMoves(ContinueGame); return true; } if (BeginObserve.match()) { addGame(BeginObserve); return true; } if (EndObserve.match()) { int gn; ChessGame *cg; gn = atoi(EndObserve.getNToken(0)); cg = global.getGame(gn); if (cg!=NULL) if (! cg->isOver()) removeGame(EndObserve); // if not over, user typed unob himself return true; } if (EndExamine.match()) { removeGame(EndExamine); return true; } if (PendingStatus>0 && ExaGameStatus.match()) { updateGame(ExaGameStatus); --PendingStatus; return(doOutput(T,-1,false,global.Colors.TextBright)); } if (PendingStatus>0 && GameStatus.match()) { updateGame(GameStatus); --PendingStatus; } if (ObsInfoLine.match()) { int gm; ChessGame *cg; gm = atoi(ObsInfoLine.getNToken(0)); cg = global.getGame(gm); if (cg!=NULL) { char *p; p = ObsInfoLine.getRToken(0); if (!strcmp(p,"wild/fr")) { cg->Variant = WILDFR; } else if (!strcmp(p,"wild/2")) { cg->Variant = WILDNOCASTLE; } else if ((!strcmp(p,"wild/0"))||(!strcmp(p,"wild/1"))) { cg->Variant = WILDCASTLE; } } return(doOutput(T,-1,false,global.Colors.TextBright)); } return(parser6(T)); } /* -- treat game termination, end with output -- call next parser */ bool FicsProtocol::parser6(char *T) { int tb = global.Colors.TextBright; Binder.prepare(T); if (WhiteWon.match()) { gameOver(WhiteWon, WHITE_WIN); return(doOutput(T,-1,false,tb)); } if (BlackWon.match()) { gameOver(BlackWon, BLACK_WIN); return(doOutput(T,-1,false,tb)); } if (Drawn.match()) { gameOver(Drawn, DRAW); return(doOutput(T,-1,false,tb)); } if (Interrupted.match()) { gameOver(Interrupted, UNDEF); return(doOutput(T,-1,false,tb)); } return(parser7(T)); } /* -- treat start of partner game in bughouse, end with output -- treat the hidden auto-allob feature -- call the next parser */ bool FicsProtocol::parser7(char *T) { Binder.prepare(T); if (GotPartnerGame.match()) { prepareBugPane(); return(doOutput(T,-1,false,global.Colors.TextBright)); } if (!AllObReqs.empty() || AllObState!=0) { switch(AllObState) { case 0: if (AllObNone.match()) { if (atoi(AllObNone.getNToken(0)) == AllObReqs.back()) { snprintf(AllObAcc,1024,"Game %d: no observers.",AllObReqs.back()); AllObReqs.pop_back(); global.status->setText(AllObAcc,20); return true; } else { return(doOutput(T,-1,false,global.Colors.TextBright)); } } if (AllObFirstLine.match()) if (doAllOb1()) return true; else return(doOutput(T,-1,false,global.Colors.TextBright)); break; /* case 0 */ case 1: if (AllObMidLine.match()) { doAllOb2(); return true; } break; /* case 1 */ case 2: if (strstr(T, "user")!=0) return true; if (T[0] == 0) { AllObState = 3; return true; } case 3: if (strstr(T,"1 game displayed")!=0) { AllObState = 0; return true; } break; } } /* allob treatment */ return(parser8(T)); } /* -- colorize and output chat lines -- treat ms ivar */ bool FicsProtocol::parser8(char *T) { int msgcolor = global.Colors.TextDefault; bool personal = false; ExtPatternMatcher *tm=0; Binder.prepare(T); if (UserName.match()) { msgcolor = global.Colors.PrivateTell; personal = true; } /* normal continuations */ if (T[0]=='\\') return(doOutput(T,LastChannel,personal,personal?msgcolor:LastColor)); /* lecturebot's stupid fake channel tells */ if (LecBotSpecial) if (LectureBotXTellContinued.match()) return(doOutput(T,LastChannel,false,LastColor)); else LecBotSpecial = false; if (Challenge.match()) global.challenged(); if (PrivateTell.match()) tm = &PrivateTell; if (Say.match()) tm = &Say; if (Say2.match()) tm = &Say2; /* update chat mode command after a direct tell */ if (tm != 0) { string x; char xn[64], *xp; x = "t "; g_strlcpy(xn, tm->getAToken(0), 64); xp = strchr(xn,'('); if (xp) *xp = 0; xp = strchr(xn,'['); if (xp) *xp = 0; x += xn; global.ConsoleReply = x; global.input->updatePrefix(); global.privatelyTold(); } if (UserName.match()) { msgcolor = global.Colors.PrivateTell; personal = true; if ( (!ChannelTell.match()) && (!LectureBotXTell.match()) ) return(doOutput(T,-1,personal,msgcolor)); } if (LectureBotXTell.match()) { LecBotSpecial = true; if (!personal) msgcolor = global.Colors.ChannelTell; return(doOutput(T,67,personal,msgcolor)); } if (PTell.match()) { global.privatelyTold(); global.bugpane->addBugText(PTell.getStarToken(0)); return(doOutput(T,-1,true,global.Colors.PrivateTell)); } if (PrivateTell.match() || Say.match() || Say2.match()) { return(doOutput(T,-1,true,global.Colors.PrivateTell)); } if (DrawOffer.match()) { global.drawOffered(); return(doOutput(T,-1,true,global.Colors.PrivateTell)); } if (News.match() || Notify.match()) return(doOutput(T,-1,false,global.Colors.NewsNotify)); if (Shout.match() || cShout.match() || It.match()) return(doOutput(T,-1,false,global.Colors.Shouts)); if (Kibitz.match() || Whisper.match()) return(doOutput(T,-1,false,global.Colors.KibitzWhisper)); if (ChannelTell.match()) { if (strchr(ChannelTell.getStarToken(0),' ')==0) { int ch; ch=atoi(ChannelTell.getNToken(0)); if (!personal) msgcolor = global.Colors.ChannelTell; return(doOutput(T,ch,personal,msgcolor)); } } if (T[0]==':') return(doOutput(T,-1,personal,global.Colors.Mamer)); if (MsSet.match()) { UseMsecs = true; return(doOutput(T,-1,personal,msgcolor)); } /* nothing matched, so much CPU for nothing ;-) */ return(doOutput(T,-1,personal,msgcolor)); } bool FicsProtocol::doOutput(char *msg, int channel, bool personal, int msgcolor) { LastChannel = channel; LastColor = msgcolor; if (channel<0 || !global.SplitChannels) { global.output->append(msg, msgcolor, (personal)?IM_PERSONAL:IM_NORMAL); return true; } global.appendToChannel(channel, msg, msgcolor, (personal)?IM_PERSONAL:IM_NORMAL); if (global.ChannelsToConsoleToo) global.output->append(msg, msgcolor, (personal)?IM_PERSONAL:IM_NORMAL); return true; } void FicsProtocol::createExaminedGame(int gameid,char *whitep,char *blackp) { ChessGame *cg; Board *b; char z[64]; global.debug("FicsProtocol","createExaminedGame"); cg=new ChessGame(); cg->clock_regressive=1; cg->GameNumber=gameid; cg->StopClock=1; cg->source = GS_ICS; g_strlcpy(cg->PlayerName[0],whitep,64); g_strlcpy(cg->PlayerName[1],blackp,64); cg->MyColor=WHITE|BLACK; cg->protodata[0]=258; global.prependGame(cg); b=new Board(); b->reset(); cg->setBoard(b); b->setGame(cg); b->setCanMove(true); b->setSensitive(true); snprintf(z,64,_("Exam.Game #%d"),cg->GameNumber); global.ebook->addPage(b->widget,z,cg->GameNumber); b->setNotebook(global.ebook,cg->GameNumber); if (global.PopupSecondaryGames) { b->pop(); b->repaint(); } cg->acknowledgeInfo(); snprintf(z,64,"game %d",cg->GameNumber); global.network->writeLine(z); PendingStatus++; } void FicsProtocol::sendInitialization() { char z[128]; if (!InitSent) { snprintf(z,128,"set interface eboard %s/%s\niset startpos 1\niset defprompt 1\niset ms 1", global.Version,global.SystemType); global.network->writeLine(z); if (global.Premove) global.network->writeLine("iset premove 1\n"); else global.network->writeLine("iset premove 0\n"); if (global.IcsSeekGraph) global.network->writeLine("iset seekinfo 1\niset seekremove 1"); else global.network->writeLine("iset seekremove 1"); global.network->writeLine("iset lock 1\nstyle 12"); InitSent = true; } } // creates a non-moveable, non-editable position for sposition void FicsProtocol::createScratchPos(int gameid,char *whitep,char *blackp) { ChessGame *cg; Board *b; char z[64]; global.debug("FicsProtocol","createScratchPos"); cg=new ChessGame(); cg->clock_regressive=1; cg->GameNumber=gameid; cg->StopClock=1; cg->source=GS_ICS; g_strlcpy(cg->PlayerName[0],whitep,64); g_strlcpy(cg->PlayerName[1],blackp,64); cg->MyColor=WHITE|BLACK; cg->protodata[0]=259; global.prependGame(cg); b=new Board(); b->reset(); cg->setBoard(b); b->setGame(cg); b->setCanMove(false); b->setSensitive(false); snprintf(z,64,_("Pos: %s vs. %s"),whitep,blackp); global.ebook->addPage(b->widget,z,cg->GameNumber); b->setNotebook(global.ebook,cg->GameNumber); cg->acknowledgeInfo(); } void FicsProtocol::createGame(ExtPatternMatcher &pm) { ChessGame *cg,*rep; char *p; global.debug("FicsProtocol","createGame"); cg=new ChessGame(); cg->source=GS_ICS; cg->clock_regressive=1; cg->GameNumber=atoi(pm.getNToken(0)); g_strlcpy(cg->PlayerName[0],pm.getSToken(0),64); g_strlcpy(cg->PlayerName[1],pm.getSToken(1),64); // FICS sends two "Creating" strings when resuming an adjourned // game. Weird. rep=global.getGame(cg->GameNumber); if (rep) { if ( (!strcmp(cg->PlayerName[0],rep->PlayerName[0]))&& (!strcmp(cg->PlayerName[1],rep->PlayerName[1]))&& (rep->isFresh()) ) { delete cg; return; } } p=knowRating(cg->PlayerName[0]); if (p) g_strlcpy(cg->Rating[0],p,32); p=knowRating(cg->PlayerName[1]); if (p) g_strlcpy(cg->Rating[1],p,32); clearRatingBuffer(); if (!strncmp(cg->PlayerName[0],nick,strlen(cg->PlayerName[0]))) { cg->MyColor=WHITE; UserPlayingWithWhite = true; } if (!strncmp(cg->PlayerName[1],nick,strlen(cg->PlayerName[1]))) { cg->MyColor=BLACK; UserPlayingWithWhite = false; } if (!strcmp(pm.getSToken(2),"rated")) cg->Rated=1; else cg->Rated=0; cg->Variant=REGULAR; if (!strcmp(pm.getRToken(0),"crazyhouse")) cg->Variant=CRAZYHOUSE; else if (!strcmp(pm.getRToken(0),"bughouse")) cg->Variant=BUGHOUSE; else if (!strcmp(pm.getRToken(0),"suicide")) cg->Variant=SUICIDE; else if (!strcmp(pm.getRToken(0),"losers")) cg->Variant=LOSERS; else if (!strcmp(pm.getRToken(0),"atomic")) cg->Variant=ATOMIC; else if (!strncmp(pm.getRToken(0),"wild",4)) { cg->Variant=WILD; if (!strncmp(pm.getRToken(0),"wild/0",6)) cg->Variant=WILDCASTLE; if (!strncmp(pm.getRToken(0),"wild/1",6)) cg->Variant=WILDCASTLE; if (!strncmp(pm.getRToken(0),"wild/2",6)) cg->Variant=WILDNOCASTLE; if (!strncmp(pm.getRToken(0),"wild/fr",7)) cg->Variant=WILDFR; } global.prependGame(cg); global.BoardList.front()->reset(); cg->setBoard(global.BoardList.front()); global.BoardList.front()->setGame(cg); global.BoardList.front()->pop(); global.BoardList.front()->setCanMove(true); global.BoardList.front()->repaint(); cg->acknowledgeInfo(); global.status->setText(_("Game started!"),10); global.gameStarted(); } void FicsProtocol::addGame(ExtPatternMatcher &pm) { ChessGame *cg; Board *b; bool is_partner_game=false; char tab[96]; global.debug("FicsProtocol","addGame"); cg=new ChessGame(); cg->clock_regressive=1; cg->GameNumber=atoi(pm.getNToken(0)); cg->Rated=0; cg->Variant=REGULAR; cg->source = GS_ICS; global.prependGame(cg); b=new Board(); b->reset(); cg->setBoard(b); b->setGame(cg); b->setCanMove(false); b->setSensitive(false); if (cg->GameNumber == PartnerGame) { is_partner_game=true; PartnerGame = -1; cg->protodata[2] = 1; } snprintf(tab,96,_("Game #%d"),cg->GameNumber); global.ebook->addPage(b->widget,tab,cg->GameNumber); b->setNotebook(global.ebook,cg->GameNumber); if (!is_partner_game) if (global.PopupSecondaryGames) { b->pop(); b->repaint(); } cg->acknowledgeInfo(); // to gather info about time, variant, player names... snprintf(tab,96,"game %d",cg->GameNumber); global.network->writeLine(tab); PendingStatus++; } void FicsProtocol::discardGame(int gameid) { ChessGame *cg; Board *b; char z[64]; global.debug("FicsProtocol","discardGame"); cg=global.getGame(gameid); if (!cg) return; switch(cg->protodata[0]) { case 257: // observed snprintf(z,64,"unobserve %d",cg->GameNumber); break; case 258: // examined strcpy(z,"unexamine"); break; case 259: // isolated position z[0]=0; break; default: cerr << "protodata for game " << gameid << " is " << cg->protodata[0] << endl; return; } if (! cg->isOver()) if (strlen(z)) global.network->writeLine(z); b=cg->getBoard(); if (b==0) return; global.ebook->removePage(cg->GameNumber); global.removeBoard(b); delete(b); cg->GameNumber=global.nextFreeGameId(10000); cg->setBoard(0); } void FicsProtocol::removeGame(ExtPatternMatcher &pm) { int gm; global.debug("FicsProtocol","removeGame"); gm=atoi(pm.getNToken(0)); if (global.SmartDiscard && global.ebook->isNaughty(gm)) return; innerRemoveGame(gm); } void FicsProtocol::innerRemoveGame(int gameid) { Board *b; ChessGame *cg; cg=global.getGame(gameid); if (cg==NULL) return; // bughouse partner game ? if (cg->protodata[2]) global.bugpane->stopClock(); b=cg->getBoard(); if (b==NULL) return; global.ebook->removePage(gameid); global.removeBoard(b); delete(b); cg->GameNumber=global.nextFreeGameId(10000); cg->setBoard(0); } void FicsProtocol::sendDrop(piece p,int x,int y) { piece k; char drop[5]; global.debug("FicsProtocol","sendDrop"); k=p&PIECE_MASK; drop[4]=0; switch(k) { case PAWN: drop[0]='P'; break; case ROOK: drop[0]='R'; break; case KNIGHT: drop[0]='N'; break; case BISHOP: drop[0]='B'; break; case QUEEN: drop[0]='Q'; break; default: return; } drop[1]='@'; drop[2]='a'+x; drop[3]='1'+y; global.network->writeLine(drop); } void FicsProtocol::sendMove(int x1,int y1,int x2,int y2,int prom) { char move[7]; piece pp; global.debug("FicsProtocol","sendMove"); move[4]=0; move[5]=0; move[6]=0; move[0]='a'+x1; move[1]='1'+y1; move[2]='a'+x2; move[3]='1'+y2; if (prom) { pp=global.promotion->getPiece(); move[4]='='; switch(pp) { case QUEEN: move[5]='Q'; break; case ROOK: move[5]='R'; break; case BISHOP: move[5]='B'; break; case KNIGHT: move[5]='N'; break; case KING: move[5]='K'; break; } } global.network->writeLine(move); } // attach stock info to bug/zhouse games void FicsProtocol::attachHouseStock(ExtPatternMatcher &pm, bool OnlyForBughouse) { ChessGame *cg; int gid; char *p; Position *pos; global.debug("FicsProtocol","attachHouseStock"); // Style12House or Style12BadHouse // game %n white [*] black [*]* // game %n white [*] black [*]%b<-* gid=atoi(pm.getNToken(0)); cg=global.getGame(gid); if (!cg) return; if (OnlyForBughouse && cg->Variant != BUGHOUSE) return; pos=&(cg->getLastPosition()); pos->clearStock(); p=pm.getStarToken(0); // cerr << "[" << p << "]\n"; for(;*p;p++) pos->incStockCount(style12table[*p]); p=pm.getStarToken(1); // cerr << "[" << p << "]\n"; for(;*p;p++) pos->incStockCount(style12table[tolower(*p)]); cg->updateStock(); } void FicsProtocol::parseStyle12(char *data) { static char *sep=" \t\n"; tstring t; int i,j; string *sp; Position pos; int blacktomove; int game; int rel; int itime,inc,flip; int str[2],movenum,clk[2]; ChessGame *refgame; char stra[64],strb[64],strc[64]; char plyr[2][64]; int ackp=0; int stopclock = -1; /* -1: keep as it is, 0: stop 1: moving */ bool spawnExamination; bool someSound; Position prevpos; global.debug("FicsProtocol","parseStyle12"); t.set(data); t.token(sep); // <12> // the position itself for(i=7;i>=0;i--) { sp=t.token(sep); for(j=0;j<8;j++) pos.setPiece(j,i,style12table[sp->at(j)]); } sp=t.token(sep); // B / W (color to move) blacktomove=(sp->at(0)=='B'); pos.ep[0]=t.tokenvalue(sep); // double pawn push if (blacktomove) pos.ep[1]=2; else pos.ep[1]=5; // white castle short pos.maycastle[0]=t.tokenvalue(sep)?true:false; // white castle long pos.maycastle[2]=t.tokenvalue(sep)?true:false; // black castle short pos.maycastle[1]=t.tokenvalue(sep)?true:false; // black castle long pos.maycastle[3]=t.tokenvalue(sep)?true:false; t.token(sep); // mv count for draw game=t.tokenvalue(sep); // game number memset(plyr[0],0,64); memset(plyr[1],0,64); t.token(sep)->copy(plyr[0],63); // white's name t.token(sep)->copy(plyr[1],63); // black's name rel=t.tokenvalue(sep); // relationship switch(rel) { case 2: // I am the examiner of this game spawnExamination=false; refgame=global.getGame(game); if (refgame==NULL) spawnExamination=true; else // v_examine=1 on FICS: played game still on main board but inactive if ( (refgame->protodata[0]!=258) && (refgame->isOver()) ) spawnExamination=true; if (spawnExamination) createExaminedGame(game,plyr[0],plyr[1]); break; case -3: // isolated position (e.g.: sposition command) game=global.nextFreeGameId(10000); createScratchPos(game,plyr[0],plyr[1]); break; case -4: // initial position of wild game WildStartPos = pos; return; case -2: // observing examined game case -1: // I am playing, it's my opponent's turn case 1: // I am playing, it's my turn case 0: // live observation break; } itime=t.tokenvalue(sep); // initial time (minutes) inc=t.tokenvalue(sep); // increment (secs) str[0]=t.tokenvalue(sep); // white strength str[1]=t.tokenvalue(sep); // black strength clk[0]=t.tokenvalue(sep); // white rem time clk[1]=t.tokenvalue(sep); // black rem time if (!UseMsecs) { clk[0] *= 1000; clk[1] *= 1000; } movenum=t.tokenvalue(sep); // move # to be made t.token(sep); // verbose for previous move memset(stra,0,64); memset(strb,0,64); t.token(sep)->copy(stra,63); // time taken for previous move t.token(sep)->copy(strb,63); // pretty print for previous move flip=t.tokenvalue(sep); // flip board ? t.setFail(-1); stopclock = t.tokenvalue(sep); // undocumented pause/unpause clock flag if (stopclock != -1) stopclock = 1-stopclock; refgame=global.getGame(game); if (refgame==NULL) { cerr << "no such game: " << game << endl; return; } switch(rel) { case 0: // observed case -2: // observing examined game refgame->protodata[0]=257; refgame->AmPlaying=false; break; case 1: case -1: refgame->protodata[0]=0; refgame->MyColor=(flip)?BLACK:WHITE; refgame->AmPlaying=true; if ((global.IcsSeekGraph)&&(global.skgraph2)) global.skgraph2->clear(); break; case 2: // examiner mode refgame->protodata[0]=258; refgame->setFree(); refgame->AmPlaying=false; break; case -3: // isolated position refgame->protodata[0]=259; refgame->AmPlaying=false; break; } if (strcmp(refgame->PlayerName[0],plyr[0])) { strcpy(refgame->PlayerName[0],plyr[0]); ackp=1; } if (strcmp(refgame->PlayerName[1],plyr[1])) { strcpy(refgame->PlayerName[1],plyr[1]); ackp=1; } if ( (refgame->timecontrol.value[0] != itime*60)||(refgame->timecontrol.value[1] != inc) ) { refgame->timecontrol.setIcs(itime*60,inc); ackp=1; } if (ackp) refgame->acknowledgeInfo(); g_strlcat(strb," ",64); g_strlcat(strb,stra,64); snprintf(strc,64,"%d.%s%s", (blacktomove?movenum:movenum-1), (blacktomove?" ":" ... "), strb); if (strc[0]=='0') strcpy(strc,"0. startpos"); if ((rel==-1)&&(global.AnimateMoves)) refgame->getBoard()->supressNextAnimation(); if (rel==-2) // don't let it tick when observing examined games refgame->StopClock=1; someSound = (rel==1 || rel==0 || rel==2 || rel==-2) && (movenum!=1 || blacktomove); if (stopclock >= 0) refgame->StopClock = stopclock; prevpos = refgame->getLastPosition(); refgame->updatePosition2(pos, (movenum-(blacktomove?0:1)), blacktomove, clk[0], clk[1], strc, someSound); /* if ( ((rel==-1)&&(blacktomove)) || ((rel==1)&&(!blacktomove)) ) { if (flip) cerr << "I'm white and <12> told me to flip!\n"; } if ( ((rel==1)&&(blacktomove)) || ((rel==-1)&&(!blacktomove)) ) { if (!flip) cerr << "I'm black and <12> told me not to flip!\n"; } */ if (rel==1 && (movenum!=1 || blacktomove) ) global.opponentMoved(); if (rel==0 || rel==-2 || rel==2 && (movenum!=1 || blacktomove)) if (prevpos != pos) global.moveMade(); if (rel!=0) refgame->flipHint(flip); if (rel==1) refgame->enableMoving(true); if (rel==-1) refgame->enableMoving(false); if (global.IcsAllObPlayed && (rel==1 || rel==-1) ) if (refgame->protodata[3] == 0) { refgame->protodata[3] = gtk_timeout_add(30*1000, fics_allob, (void *) refgame); fics_allob((gpointer) refgame); } if (global.IcsAllObObserved && (rel==0) ) if (refgame->protodata[3] == 0) { refgame->protodata[3] = gtk_timeout_add(30*1000, fics_allob, (void *) refgame); fics_allob((gpointer) refgame); } } void FicsProtocol::updateGame(ExtPatternMatcher &pm) { ChessGame *refgame; char *p,z[32]; int gm; global.debug("FicsProtocol","updateGame"); // Ns: 0=game 1=rat.white 2=rat.black // Ss: 0=whitep 1=blackp // *s: 1=game string // GameStatus.set("*%n%b%n%b%S%b%n%b%S%b[*]*"); // ExaGameStatus.set("*%n (Exam.%b%n %S%b%n %S%b)%b[*]*"); gm=atoi(pm.getNToken(0)); refgame=global.getGame(gm); if (refgame==NULL) { PendingStatus++; return; } g_strlcpy(refgame->PlayerName[0],pm.getSToken(0),64); g_strlcpy(refgame->PlayerName[1],pm.getSToken(1),64); p=pm.getStarToken(1); switch(p[1]) { case 's': case 'b': case 'l': refgame->Variant=REGULAR; break; case 'z': refgame->Variant=CRAZYHOUSE; break; case 'S': refgame->Variant=SUICIDE; break; case 'w': if (IS_NOT_WILD(refgame->Variant)) refgame->Variant=WILD; break; case 'B': refgame->Variant=BUGHOUSE; break; case 'L': refgame->Variant=LOSERS; break; case 'x': refgame->Variant=ATOMIC; break; } refgame->Rated=(p[2]=='r'); memset(z,0,8); memcpy(z,&p[3],3); refgame->timecontrol.setIcs(60*atoi(z),atoi(&p[7])); refgame->acknowledgeInfo(); // bughouse partner game, set up names in the bugpane if (refgame->protodata[2]!=0) { global.bugpane->setPlayerNames(refgame->PlayerName[0], refgame->PlayerName[1]); } if (refgame->protodata[0]!=258) { MoveRetrievals.push_front(gm); snprintf(z,32,"moves %d",gm); global.network->writeLine(z); RetrievingMoves=1; } } void FicsProtocol::gameOver(ExtPatternMatcher &pm, GameResult result) { int game; char reason[64]; ChessGame *refgame; global.debug("FicsProtocol","gameOver"); game=atoi(pm.getNToken(0)); reason[63]=0; g_strlcpy(reason,pm.getStarToken(0),64); refgame=global.getGame(game); if (refgame==NULL) { cerr << _("no such game: ") << game << endl; return; } // allob timeout if (refgame->protodata[3]!=0) { gtk_timeout_remove(refgame->protodata[3]); refgame->protodata[3] = 0; } if (refgame->protodata[0]==0) { if ( ( UserPlayingWithWhite && result==WHITE_WIN) || ( (!UserPlayingWithWhite) && result==BLACK_WIN) ) global.gameWon(); if ( ( UserPlayingWithWhite && result==BLACK_WIN) || ( (!UserPlayingWithWhite) && result==WHITE_WIN) ) global.gameLost(); } if (refgame->protodata[0]==257) { global.gameFinished(); } refgame->endGame(reason,result); if (((refgame->protodata[0]==0)&&(global.AppendPlayed)) || ((refgame->protodata[0]==257)&&(global.AppendObserved))) { if (refgame->savePGN(global.AppendFile,true)) { char z[128]; snprintf(z,128,_("Game appended to %s"),global.AppendFile); global.status->setText(z,5); } } // refresh seek graph if ((global.IcsSeekGraph)&&(refgame->protodata[0]==0)) refreshSeeks(true); // remove board ? // if game relation is observation and user has the Smart Discard setting on: // discard now if user is not looking to the board or schedule removal to // next pane switch if user _is_ looking to the board if ((refgame->protodata[0]==257)&&(global.SmartDiscard)) { if ( global.ebook->getCurrentPageId() == refgame->GameNumber ) global.ebook->setNaughty(refgame->GameNumber,true); else innerRemoveGame(refgame->GameNumber); } } void FicsProtocol::refreshSeeks(bool create) { if (create) ensureSeekGraph(); if ((global.IcsSeekGraph)&&(global.skgraph2)) { global.skgraph2->clear(); global.network->writeLine("iset seekinfo 1"); } } int FicsProtocol::hasAuthenticationPrompts() { return 1; } void FicsProtocol::resign() { global.network->writeLine("resign"); global.status->setText(_("Resigned."),10); } void FicsProtocol::draw() { global.network->writeLine("draw"); global.status->setText(_(" draw request sent"),30); } void FicsProtocol::adjourn() { global.network->writeLine("adjourn"); global.status->setText(_(" adjourn request sent"),30); } void FicsProtocol::abort() { global.network->writeLine("abort"); global.status->setText(_(" abort request sent"),30); } void FicsProtocol::clearMoveBuffer() { global.debug("FicsProtocol","clearMoveBuffer"); MoveBuf.clear(); } void FicsProtocol::retrieve1(ExtPatternMatcher &pm) { char z[32],mv[32]; char tmp[2][32]; int itmp; Position p,q; int gm; ChessGame *cg; variant Vr=REGULAR; global.debug("FicsProtocol","retrieve1"); gm=MoveRetrievals.back(); cg=global.getGame(gm); if (cg!=NULL) Vr=cg->Variant; if (MoveBuf.empty()) { if (IS_WILD(Vr)) MoveBuf.push_back(WildStartPos); else MoveBuf.push_back(Position()); } p = MoveBuf.back(); itmp=atoi(pm.getNToken(0)); g_strlcpy(tmp[0],pm.getRToken(0),32); g_strlcpy(tmp[1],pm.getRToken(1),32); snprintf(z,32,"%.2d. %s %s",itmp,tmp[0],tmp[1]); g_strlcpy(mv,tmp[0],32); p.moveStdNotation(mv,WHITE,Vr); p.setLastMove(z); MoveBuf.push_back(p); q=p; itmp=atoi(pm.getNToken(0)); g_strlcpy(tmp[0],pm.getRToken(2),32); g_strlcpy(tmp[1],pm.getRToken(3),32); snprintf(z,32,"%.2d. ... %s %s",itmp,tmp[0],tmp[1]); g_strlcpy(mv,tmp[0],32); q.moveStdNotation(mv,BLACK,Vr); q.setLastMove(z); MoveBuf.push_back(q); } void FicsProtocol::retrieve2(ExtPatternMatcher &pm) { Position p; char z[32],mv[32]; char tmp[2][32]; int itmp, gm; ChessGame *cg; variant Vr=REGULAR; global.debug("FicsProtocol","retrieve2"); gm=MoveRetrievals.back(); cg=global.getGame(gm); if (cg!=NULL) Vr=cg->Variant; if (MoveBuf.empty()) { if (IS_WILD(Vr)) MoveBuf.push_back(WildStartPos); else MoveBuf.push_back(Position()); } p = MoveBuf.back(); itmp=atoi(pm.getNToken(0)); g_strlcpy(tmp[0],pm.getRToken(0),32); g_strlcpy(tmp[1],pm.getRToken(1),32); snprintf(z,32,"%.2d. %s %s",itmp,tmp[0],tmp[1]); g_strlcpy(mv,tmp[0],32); p.moveStdNotation(mv,WHITE,Vr); p.setLastMove(z); MoveBuf.push_back(p); } void FicsProtocol::retrievef() { int gm; ChessGame *cg; char *p; global.debug("FicsProtocol","retrievef"); if (MoveRetrievals.empty()) return; gm=MoveRetrievals.back(); cg=global.getGame(gm); if (cg==NULL) { cerr << _("no such game: ") << gm << endl; return; } MoveRetrievals.pop_back(); p=knowRating(cg->PlayerName[0]); if (p) g_strlcpy(cg->Rating[0],p,32); p=knowRating(cg->PlayerName[1]); if (p) g_strlcpy(cg->Rating[1],p,32); clearRatingBuffer(); cg->updateGame(MoveBuf); cg->acknowledgeInfo(); clearMoveBuffer(); WildStartPos.setStartPos(); } void FicsProtocol::queryGameList(GameListConsumer *glc) { if (RetrievingGameList) { if (glc!=lastGLC) glc->endOfList(); return; } RetrievingGameList=1; lastGLC=glc; global.network->writeLine("games"); } void FicsProtocol::queryAdList(GameListConsumer *glc) { if (RetrievingAdList) { if (glc!=lastALC) glc->endOfList(); return; } RetrievingAdList=1; lastALC=glc; global.network->writeLine("sough"); } void FicsProtocol::sendGameListEntry() { char frank[256]; int gn; // GameListEntry.set("*%n *[*]*:*"); gn=atoi(GameListEntry.getNToken(0)); g_strlcpy(frank,GameListEntry.getStarToken(1),256); g_strlcat(frank,"[",256); g_strlcat(frank,GameListEntry.getStarToken(2),256); g_strlcat(frank,"]",256); g_strlcat(frank,GameListEntry.getStarToken(3),256); g_strlcat(frank,":",256); g_strlcat(frank,GameListEntry.getStarToken(4),256); lastGLC->appendGame(gn,frank); } void FicsProtocol::sendAdListEntry(char *pat) { ExtPatternMatcher rpat; int gn; rpat.set("*%n*"); if (!rpat.match(pat)) return; gn=atoi(rpat.getNToken(0)); lastALC->appendGame(gn,rpat.getStarToken(1)); } void FicsProtocol::observe(int gameid) { char z[64]; snprintf(z,64,"observe %d",gameid); global.network->writeLine(z); } void FicsProtocol::answerAd(int adid) { char z[64]; snprintf(z,64,"play %d",adid); global.network->writeLine(z); } char * FicsProtocol::knowRating(char *player) { int i; for(i=0;i<2;i++) if (strlen(xxplayer[i])) if ( !strncmp(xxplayer[i],player,strlen(player)) ) return(xxrating[i]); return 0; } void FicsProtocol::clearRatingBuffer() { xxplayer[0][0]=0; xxplayer[1][0]=0; } void FicsProtocol::exaForward(int n) { char z[64]; snprintf(z,64,"forward %d",n); global.network->writeLine(z); } void FicsProtocol::exaBackward(int n) { char z[64]; snprintf(z,64,"backward %d",n); global.network->writeLine(z); } void FicsProtocol::retrieveMoves(ExtPatternMatcher &pm) { ChessGame *refgame; int gm; char z[64]; global.debug("FicsProtocol","retrieveMoves"); gm=atoi(pm.getNToken(0)); refgame=global.getGame(gm); if (refgame==NULL) return; if (refgame->protodata[0]!=258) { MoveRetrievals.push_front(gm); snprintf(z,64,"moves %d",gm); global.network->writeLine(z); RetrievingMoves=1; } } // --- seek graph void FicsProtocol::ensureSeekGraph() { if (global.skgraph2==NULL) { global.skgraph2=new SeekGraph2(); global.skgraph2->show(); global.ebook->addPage(global.skgraph2->widget,_("Seek Graph"),-3); global.skgraph2->setNotebook(global.ebook,-3); } } void FicsProtocol::seekAdd(ExtPatternMatcher &pm) { SeekAd *ad; char *p; int flags; global.debug("FicsProtocol","seekAdd"); // 8 w=visar ti=02 rt=2194 t=4 i=0 r=r tp=suicide c=? rr=0-9999 a=t f=f // n0 s0 r0 n1 *0 n2 n3 s1 r1 r2 r3 s2 s3 ensureSeekGraph(); ad=new SeekAd(); // %n ad->id = atoi(pm.getNToken(0)); ad->rating = pm.getNToken(1); ad->clock = atoi(pm.getNToken(2)); ad->incr = atoi(pm.getNToken(3)); p=pm.getStarToken(0); if ((p[0]=='P')&&(atoi(ad->rating.c_str())==0)) ad->rating="++++"; // %s ad->player = pm.getSToken(0); p=pm.getSToken(1); if (p[0]=='r') ad->rated=true; ad->kind = pm.getRToken(1); // %r flags = strtol(pm.getRToken(0),NULL,16); ad->flags=" "; if (flags&0x01) ad->flags += "(U)"; if (flags&0x02) ad->flags += "(C)"; if (flags&0x04) ad->flags += "(GM)"; if (flags&0x08) ad->flags += "(IM)"; if (flags&0x10) ad->flags += "(FM)"; if (flags&0x20) ad->flags += "(WGM)"; if (flags&0x40) ad->flags += "(WIM)"; if (flags&0x80) ad->flags += "(WFM)"; p=pm.getRToken(2); switch(p[0]) { case '?': ad->color=" "; break; case 'W': ad->color=_("white"); break; case 'B': ad->color=_("black"); break; } ad->range=pm.getRToken(3); p=pm.getSToken(2); if (p[0]=='t') ad->automatic=true; p=pm.getSToken(3); if (p[0]=='t') ad->formula=true; global.skgraph2->add(ad); } void FicsProtocol::seekRemove(ExtPatternMatcher &pm) { tstring t; int i; t.setFail(-1); t.set(pm.getStarToken(0)); ensureSeekGraph(); while( (i=t.tokenvalue(" \t\n")) >= 0 ) { global.skgraph2->remove(i); } } vector * FicsProtocol::getPlayerActions() { return(&PActions); } vector * FicsProtocol::getGameActions() { return(&GActions); } void FicsProtocol::callPlayerAction(char *player, string *action) { for(unsigned int i=0;i [issued from menu] %s"),z); global.output->append(w,global.SelfInputColor); global.network->writeLine(z); } } void FicsProtocol::doGameAction(int gameid, int id) { char z[256], w[256]; bool ok=true; switch(id) { case 0: snprintf(z,256,"allob %d",gameid); break; case 1: snprintf(z,256,"ginfo %d",gameid); break; default: ok=false; } if (ok) { snprintf(w,256,_("> [issued from menu] %s"),z); global.output->append(w,global.SelfInputColor); global.network->writeLine(z); } } void FicsProtocol::prepareBugPane() { char z[64]; PartnerGame = atoi(GotPartnerGame.getNToken(0)); snprintf(z,64,"observe %d",PartnerGame); global.network->writeLine(z); } void FicsProtocol::updateVar(ProtocolVar pv) { char z[256]; switch(pv) { case PV_premove: snprintf(z,256,"iset premove %d\n",global.Premove ? 1 : 0); global.network->writeLine(z); break; default: break; } } gboolean fics_allob(gpointer data) { ChessGame *cg = (ChessGame *) data; FicsProtocol *proto; char z[64]; if (global.protocol == 0) return FALSE; if (cg == 0) return FALSE; if (cg->protodata[3] == 0) return FALSE; if (cg->isOver()) return FALSE; if (cg->source != GS_ICS) return FALSE; if (global.network == 0) return FALSE; proto = (FicsProtocol *) (global.protocol); proto->AllObReqs.push_front(cg->GameNumber); snprintf(z,64,"allob %d",cg->GameNumber); global.network->writeLine(z); return TRUE; } // AllObFirstLine Matched bool FicsProtocol::doAllOb1() { int n,i; tstring t; string *p; bool islast = false; // cerr << "allob2\n"; n = atoi(AllObFirstLine.getNToken(0)); // cerr << "n0=[" << AllObFirstLine.getNToken(0) << "]\n"; // cerr << "n=" << n << ", back=" << AllObReqs.back() << endl; if (n!=AllObReqs.back()) return false; t.set(AllObFirstLine.getStarToken(1)); snprintf(AllObAcc,1024,"Observing game %d: ",n); i=0; while((p=t.token(" "))!=0) { if ( (*p)[0] == '(' ) { islast = true; break; } if(i!=0) strcat(AllObAcc,", "); g_strlcat(AllObAcc,p->c_str(),1024); ++i; // cerr << "partial: [" << AllObAcc << "]\n"; if (strlen(AllObAcc) > 128) { g_strlcat(AllObAcc,"...",1024); break; } } if (islast) { AllObState = 2; global.status->setText(AllObAcc,28); AllObReqs.pop_back(); } else AllObState = 1; return true; } // AllObMidLine matched void FicsProtocol::doAllOb2() { int i; bool islast = false; tstring t; string *p; t.set(AllObFirstLine.getStarToken(0)); while((p=t.token(" "))!=0) { if ( (*p)[0] == '(' ) { islast = true; break; } if (strlen(AllObAcc) > 128) continue; g_strlcat(AllObAcc,", ",1024); g_strlcat(AllObAcc,p->c_str(),1024); ++i; if (strlen(AllObAcc) > 128) { g_strlcat(AllObAcc,"...",1024); break; } } if (islast) { AllObState = 2; global.status->setText(AllObAcc,28); AllObReqs.pop_back(); } else AllObState = 1; } eboard-1.1.1.orig/util.cc0000644000175000017500000003764010757567572014576 0ustar patrikpatrik/* $Id: util.cc,v 1.36 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "util.h" #include #include #include #include #include #include #include "global.h" #include "stl.h" #include "config.h" #include "eboard.h" FileFinder::FileFinder() { } FileFinder::~FileFinder() { path.clear(); } int FileFinder::getPathCount() { return(path.size()); } string &FileFinder::getPath(unsigned int i) { static string dot("."); if ((i<0)||(i>=path.size())) return(dot); return(path[i]); } void FileFinder::addDirectory(char *dir) { path.push_back(string(dir)); } void FileFinder::addDirectory(string &dir) { path.push_back(string(dir)); } void FileFinder::addMyDirectory(char *dir) { string s; s=global.env.Home; s+='/'; s+=dir; path.push_back(s); } void FileFinder::addMyDirectory(string &dir) { string s; s=global.env.Home; s+='/'; s+=dir; path.push_back(s); } int FileFinder::find(string &name, string &out) { int i,j; string fullname; ifstream f(name.c_str()); if (!f) { j=path.size(); for(i=0;i::iterator & first, list::iterator & last) { list::iterator mine,their; for(mine=pattern.begin(), their=first; (mine!=pattern.end()) && (their!=last); mine++, their++) { if (*mine != *their) return -1; } if (mine!=pattern.end()) return -1; last=their; return 0; } int CIExactStringPat::tryMatch(list::iterator & first, list::iterator & last) { list::iterator mine,their; for(mine=pattern.begin(), their=first; (mine!=pattern.end()) && (their!=last); mine++, their++) { if (toupper(*mine) != toupper(*their)) return -1; } if (mine!=pattern.end()) return -1; last=their; return 0; } KleeneStarPat::KleeneStarPat() { reset(); } int KleeneStarPat::tryMatch(list::iterator & first, list::iterator & last) { int i; list::iterator dupe1; dupe1=first; for(i=CallCount;i;i--) { if (dupe1==last) return -1; dupe1++; } ++CallCount; last=dupe1; return 1; } void KleeneStarPat::reset() { CallCount=0; } // ------------------------------------------ the set patterns SetPat::SetPat() { myset=0; } inline void SetPat::addToSet(char c) { if (myset) myset[(unsigned char)c]=true; } void SetPat::addToSet(char *s) { while(*s) addToSet(*(s++)); } int SetPat::tryMatch(list::iterator & first, list::iterator & last) { list::iterator mine; if (! inSet(*first) ) return -1; for(mine=first;mine!=last;mine++) if (!inSet(*mine)) { last=mine; return 0; } last=mine; return 0; } inline bool SetPat::inSet(char c) { return( myset[(unsigned char)c] ); } void SetPat::clearSet() { if (myset) for(int i=0;i<256;i++) myset[i]=false; } void SetPat::includeUppercase() { char c; for(c='A';c<='Z';c++) addToSet(c); } void SetPat::includeLowercase() { char c; for(c='a';c<='z';c++) addToSet(c); } void SetPat::includeLetters() { includeLowercase(); includeUppercase(); } void SetPat::includeNumbers() { char c; for(c='0';c<='9';c++) addToSet(c); } // ----------------------------------- generic CharSet CharSetPat::CharSetPat() { myset=theset; clearSet(); } // ----------------------------------- the percent-patterns /* %N = [0-9] %n = [0-9] U {+,-} %s = [A-Za-z] %S = [A-Za-z0-9] %a = [A-Za-z] U {(,),*} %A = [A-Za-z0-9] U {(,),*} %b = {space} U {tab} %r = [0-9A-Za-z] U "()[]{}.,;:!@#$%^&*_-+=\\|<>?/~" */ bool PercNSetPat::theset[256]; bool PercBSetPat::theset[256]; bool PercSSetPat::theset[256]; bool PercASetPat::theset[256]; bool PercRSetPat::theset[256]; bool PercUpperNSetPat::theset[256]; bool PercUpperASetPat::theset[256]; bool PercUpperSSetPat::theset[256]; PercNSetPat::PercNSetPat() { myset=theset; clearSet(); includeNumbers(); addToSet("+-"); } PercSSetPat::PercSSetPat() { myset=theset; clearSet(); includeLetters(); } PercUpperSSetPat::PercUpperSSetPat() { myset=theset; clearSet(); includeLetters(); includeNumbers(); addToSet("_"); } PercASetPat::PercASetPat() { myset=theset; clearSet(); includeLetters(); addToSet("()*"); } PercUpperASetPat::PercUpperASetPat() { myset=theset; clearSet(); includeLetters(); includeNumbers(); addToSet("()*"); } PercBSetPat::PercBSetPat() { myset=theset; clearSet(); addToSet(" \t"); } PercRSetPat::PercRSetPat() { myset=theset; clearSet(); includeLetters(); includeNumbers(); addToSet("()[]{}.,;:!@#$%^&*_-+=\\|<>?/~"); } PercUpperNSetPat::PercUpperNSetPat() { myset=theset; clearSet(); includeNumbers(); } // ----------------------------------- PatternMatcher::PatternMatcher() { token=(char *)malloc(bufsize=4096); bound=&data; } PatternMatcher::~PatternMatcher() { list::iterator pi; for(pi=pattern.begin();pi!=pattern.end();pi++) if (! (*pi)->eternal ) delete(*pi); pattern.clear(); free(token); } char * PatternMatcher::getToken(int index) { int sz,i; list::iterator ci,p0,p1; list::iterator *>::iterator trav; for(i=0,trav=matches.begin();i"); trav++; } p0=*(*trav); trav++; p1=*(*trav); for(sz=0,ci=p0;ci!=p1;ci++) sz++; if (sz>bufsize) token=(char *)realloc(token,bufsize=sz+16); memset(token,0,bufsize); for(i=0,ci=p0;ci!=p1;ci++,i++) token[i]=*ci; return token; } void PatternMatcher::append(Pattern *p) { cleanUp(); pattern.push_back(p); } void PatternMatcher::reset() { list::iterator pi; cleanUp(); for(pi=pattern.begin();pi!=pattern.end();pi++) if (! (*pi)->eternal ) delete(*pi); pattern.clear(); } void PatternMatcher::bindData(list *newdata) { bound=newdata; } int PatternMatcher::match() { int i; list::iterator ip; list::iterator ic1,ic2; list::iterator *gnd; lesserCleanUp(); if (!bound) return 0; i=recursiveMatch(ip=pattern.begin(),ic1=bound->begin(),ic2=bound->end()); if (i) { gnd=new list::iterator(); *gnd=bound->end(); matches.push_back(gnd); } return i; } int PatternMatcher::match(const char *stryng) { int i,j; list::iterator ip; list::iterator ic1,ic2; list::iterator *gnd; cleanUp(); j=strlen(stryng); for(i=0;i::iterator(); *gnd=data.end(); matches.push_back(gnd); } return i; } inline void PatternMatcher::lesserCleanUp() { list::iterator *>::iterator ti; for(ti=matches.begin();ti!=matches.end();ti++) delete(*ti); matches.clear(); } void PatternMatcher::cleanUp() { lesserCleanUp(); data.clear(); } int PatternMatcher::recursiveMatch(list::iterator & pat, list::iterator & p0, list::iterator & p1) { list::iterator b,*z,ic1; list::iterator pat2; int t,s; // null pattern matches null string if ((pat==pattern.end())&&(p0==bound->end())) return 1; // else null pattern matches nothing if (pat==pattern.end()) return 0; b=p1; pat2=pat; (*pat)->reset(); t=(*pat)->tryMatch(p0,b); switch(t) { case -1: // no match return 0; case 0: // one match z=new list::iterator(); (*z)=p0; matches.push_back(z); pat2++; s=recursiveMatch(pat2,b,ic1=bound->end()); if (!s) { delete z; matches.pop_back(); } return s; case 1: // matched, and may match again z=new list::iterator(); (*z)=p0; matches.push_back(z); pat2++; do { s=recursiveMatch(pat2,b,ic1=bound->end()); if (!s) { b=p1; t=(*pat)->tryMatch(p0,b); } else return s; } while(t>=0); delete z; matches.pop_back(); return 0; } return 0; } // Ext ExtPatternMatcher::ExtPatternMatcher() : PatternMatcher() { } void ExtPatternMatcher::set(char *hrp) { int i,L,tc; char exactbuf[256],ebsz; cleanUp(); if (!percA.eternal) { percA.eternal=true; percUA.eternal=true; percB.eternal=true; percN.eternal=true; percUN.eternal=true; percR.eternal=true; percS.eternal=true; percUS.eternal=true; } tc=0; // token count L=strlen(hrp); memset(exactbuf,0,256); ebsz=0; for(i=0;i ** bad pattern string: ") << hrp << endl; exit(67); } ++i; if (hrp[i]=='*') { exactbuf[ebsz++]='*'; break; } if (hrp[i]=='%') { exactbuf[ebsz++]='%'; break; } else { if (ebsz) { append(new ExactStringPat(exactbuf)); ++tc; memset(exactbuf,0,256); ebsz=0; } switch(hrp[i]) { case 's': append(&percS); stokens.push_back(tc++); break; case 'S': append(&percUS); stokens.push_back(tc++); break; case 'n': append(&percN); ntokens.push_back(tc++); break; case 'N': append(&percUN); ntokens.push_back(tc++); break; case 'a': append(&percA); atokens.push_back(tc++); break; case 'A': append(&percUA); atokens.push_back(tc++); break; case 'b': append(&percB); btokens.push_back(tc++); break; case 'r': append(&percR); rtokens.push_back(tc++); break; default: cerr << _(" ** bad pattern string: ") << hrp << endl; exit(68); } } break; default: exactbuf[ebsz++]=hrp[i]; break; } } if (ebsz) append(new ExactStringPat(exactbuf)); } char *ExtPatternMatcher::getXToken(vector &v, int index) { if (index >= (signed int) (v.size()) ) return 0; return(getToken(v[index])); } char * ExtPatternMatcher::getSToken(int index) { return(getXToken(stokens,index)); } char * ExtPatternMatcher::getNToken(int index) { return(getXToken(ntokens,index)); } char * ExtPatternMatcher::getStarToken(int index) { return(getXToken(startokens,index)); } char * ExtPatternMatcher::getAToken(int index) { return(getXToken(atokens,index)); } char * ExtPatternMatcher::getBToken(int index) { return(getXToken(btokens,index)); } char * ExtPatternMatcher::getRToken(int index) { return(getXToken(rtokens,index)); } // ----------------------- PatternBinder void PatternBinder::add(PatternMatcher *pm0,...) { va_list ap; PatternMatcher *pm; group.push_back(pm0); va_start(ap,pm0); for(;;) { pm=va_arg(ap,PatternMatcher *); if (!pm) break; group.push_back(pm); } va_end(ap); } void PatternBinder::prepare(const char *target) { list::iterator gi; int i,j; data.clear(); j=strlen(target); for(i=0;ibindData(&data); } // ----------------------- zifstream zifstream::zifstream() { compressed = false; isopen = false; failure = 0; tmpfile[0] = 0; origfile[0] = 0; } zifstream::zifstream(char *name) { compressed = false; isopen = false; failure = 0; tmpfile[0] = 0; origfile[0] = 0; open(name); } void zifstream::open(char *name) { int n; n = strlen(name); if (n>255) { failure = 1; return; } strcpy(origfile,name); if (n>3) if (!strcmp(&origfile[n-3],".gz")) { compressed = true; copen(); return; } x.open(origfile,ios::in); if (!x) failure = 1; if (x.is_open()) isopen = true; } bool zifstream::getline(char *ptr, int len, char delim) { if (x.getline(ptr,len,delim)) return true; else return false; } bool zifstream::seekg(unsigned long offset) { x.seekg(offset); return((bool)(x.good())); } unsigned long zifstream::tellg() { return( (unsigned long) x.tellg() ); } bool zifstream::operator!() { return(x.fail()!=0); } bool zifstream::eof() { return((bool)(x.eof())); } void zifstream::close() { x.close(); if (isopen && compressed) cclose(); isopen=false; } bool zifstream::fail() { return(failure!=0 || x.fail()!=0); } bool zifstream::is_open() { return(isopen); } void zifstream::copen() { int i,n; char cmd[1024]; n = snprintf(tmpfile,1024,"/tmp/eb%d-%s",(int) getpid(), origfile); if (n >= 1024) { failure = 1; return; } for(i=5;i=1024 || system(cmd)!=0) { failure = 1; return; } n = snprintf(cmd,1024,"gzip -d %s",tmpfile); if (n>=1024 || system(cmd)!=0) { failure = 1; unlink(tmpfile); return; } x.open(ungzfile,ios::in); if (!x) failure = 1; if (x.is_open()) isopen = true; if (!isopen) { unlink(tmpfile); unlink(ungzfile); } } void zifstream::cclose() { unlink(ungzfile); } Timestamp::Timestamp(int sec, int usec) { S=sec; U=usec; } Timestamp::Timestamp() { (*this) = Timestamp::now(); } Timestamp & Timestamp::operator=(Timestamp &t) { S = t.S; U=t.U; return(*this); } double Timestamp::operator-(Timestamp &t) { int msec; double sec; msec = 1000*(S-t.S); msec += (U/1000 - t.U/1000); sec = (double) (msec / 1000.0); return sec; } Timestamp & Timestamp::now() { static Timestamp t(0,0); struct timeval tv; gettimeofday(&tv,0); t.S = (int) tv.tv_sec; t.U = (int) tv.tv_usec; return(t); } eboard-1.1.1.orig/p2p.cc0000644000175000017500000001752410757567572014321 0ustar patrikpatrik/* $Id: p2p.cc,v 1.7 2007/01/20 15:58:43 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "global.h" #include "p2p.h" #include "protocol.h" P2PDialog::P2PDialog() : NonModalDialog(_("eboard Direct Connection Manager")) { GtkWidget *v, *bhb, *close; GtkWidget *vconn, *vlisten, *vops; GtkWidget *ct, *cl[2]; GtkWidget *wl[4]; GtkWidget *ot; int i; char z[64]; wconn = 0; toid = -1; v = gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); /* notebook */ nb = new Notebook(); gtk_box_pack_start(GTK_BOX(v),nb->widget, TRUE,TRUE, 0); vconn = gtk_vbox_new(FALSE,4); vlisten = gtk_vbox_new(FALSE,4); vops = gtk_vbox_new(FALSE,4); gtk_container_set_border_width(GTK_CONTAINER(vconn), 4); gtk_container_set_border_width(GTK_CONTAINER(vlisten), 4); gtk_container_set_border_width(GTK_CONTAINER(vops), 4); /* start a connection pane */ ct = gtk_table_new(2,2,FALSE); gtk_table_set_row_spacings(GTK_TABLE(ct), 4); gtk_table_set_col_spacings(GTK_TABLE(ct), 4); chost = gtk_entry_new(); cport = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(cport), "15451"); bl[0] = new BoxedLabel(_("Hostname or IP address:")); bl[1] = new BoxedLabel(_("TCP Port:")); gtk_table_attach_defaults(GTK_TABLE(ct), bl[0]->widget, 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(ct), chost, 1, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(ct), bl[1]->widget, 0, 1, 1, 2); gtk_table_attach_defaults(GTK_TABLE(ct), cport, 1, 2, 1, 2); gtk_box_pack_start(GTK_BOX(vconn), ct, FALSE, TRUE, 2); cl[0]=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(cl[0]), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(cl[0]), 5); cl[1] = gtk_button_new_with_label(_("Connect")); gtk_box_pack_start(GTK_BOX(vconn), cl[0], FALSE, TRUE, 2); gtk_box_pack_start(GTK_BOX(cl[0]), cl[1], TRUE, TRUE, 0); Gtk::show(cl[0], cl[1], chost, cport, ct, NULL); gtk_signal_connect(GTK_OBJECT(cl[1]), "clicked", GTK_SIGNAL_FUNC(p2p_connect), (gpointer) this); /* wait for a connection pane */ bl[2] = new BoxedLabel(_("TCP Port:")); wl[0] = gtk_hbox_new(FALSE,2); wport = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(wport), "15451"); gtk_box_pack_start(GTK_BOX(vlisten), wl[0], TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(wl[0]), bl[2]->widget, FALSE, TRUE, 2); gtk_box_pack_start(GTK_BOX(wl[0]), wport, FALSE, TRUE, 6); wl[1]=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(wl[1]), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(wl[1]), 5); wl[2] = gtk_button_new_with_label(_("Wait")); wl[3] = gtk_button_new_with_label(_("Cancel")); wbw = wl[2]; wbc = wl[3]; gtk_widget_set_sensitive(wl[3], FALSE); gtk_box_pack_start(GTK_BOX(vlisten), wl[1], FALSE, TRUE, 2); gtk_box_pack_start(GTK_BOX(wl[1]), wl[2], TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(wl[1]), wl[3], TRUE, TRUE, 0); Gtk::show(wl[0],wl[1],wl[2],wl[3],wport,NULL); gtk_signal_connect(GTK_OBJECT(wl[2]), "clicked", GTK_SIGNAL_FUNC(p2p_wait), (gpointer) this); gtk_signal_connect(GTK_OBJECT(wl[3]), "clicked", GTK_SIGNAL_FUNC(p2p_cancelwait), (gpointer) this); /* options pane */ ot = gtk_table_new(1,2,FALSE); gtk_table_set_row_spacings(GTK_TABLE(ot), 4); gtk_table_set_col_spacings(GTK_TABLE(ot), 4); oname = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(oname), global.P2PName); bl[3] = new BoxedLabel(_("Your name:")); gtk_table_attach_defaults(GTK_TABLE(ot), bl[3]->widget, 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(ot), oname, 1, 2, 0, 1); gtk_box_pack_start(GTK_BOX(vops), ot, FALSE, TRUE, 2); Gtk::show(oname,ot,NULL); /* bind them */ for(i=0;i<4;i++) bl[i]->show(); nb->addPage(vconn, _("Start a connection"),0); nb->addPage(vlisten,_("Wait for a connection"),1); nb->addPage(vops, _("Options"),2); /* bottom */ bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); close = gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(close,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),close,TRUE,TRUE,0); gtk_widget_grab_default(close); nb->show(); nb->setTabPosition(GTK_POS_TOP); focused_widget = chost; Gtk::show(close,bhb,vconn,vlisten,vops,v,NULL); setDismiss(GTK_OBJECT(close),"clicked"); } P2PDialog::~P2PDialog() { int i; if (nb) delete nb; for(i=0;i<5;i++) delete(bl[i]); if (wconn) { wconn->close(); delete(wconn); } if (toid>0) gtk_timeout_remove(toid); } void p2p_connect(GtkWidget *w, gpointer data) { P2PDialog *me = (P2PDialog *) data; int port; char host[128]; P2PProtocol *proto; g_strlcpy(host, gtk_entry_get_text(GTK_ENTRY(me->chost)),128); port = atoi(gtk_entry_get_text(GTK_ENTRY(me->cport))); if (global.network) if (global.network->isConnected()) { global.status->setText(_("Finish the current connection first."),10); return; } memset(global.P2PName, 0, 64); g_strlcpy(global.P2PName, gtk_entry_get_text(GTK_ENTRY(me->oname)), 64); global.writeRC(); global.chandler->openServer(host, port, proto = new P2PProtocol(), 0); if (global.network) if (global.network->isConnected()) { proto->hail(); me->release(); } } void p2p_wait(GtkWidget *w, gpointer data) { P2PDialog *me = (P2PDialog *) data; memset(global.P2PName, 0, 64); g_strlcpy(global.P2PName, gtk_entry_get_text(GTK_ENTRY(me->oname)), 64); global.writeRC(); me->waitConnection(); } void p2p_cancelwait(GtkWidget *w, gpointer data) { P2PDialog *me = (P2PDialog *) data; me->cancelWait(); } void P2PDialog::waitConnection() { int port; char z[128]; port = atoi(gtk_entry_get_text(GTK_ENTRY(wport))); wconn = new IncomingConnection(port); if (wconn->open()!=0) { global.status->setText(wconn->getError(),15); delete wconn; wconn = 0; } else { gtk_widget_set_sensitive(wbw, FALSE); gtk_widget_set_sensitive(wbc, TRUE); toid = gtk_timeout_add(500, p2p_check_incoming, (gpointer) this); snprintf(z,128,_("Waiting for connection on port %d."),port); global.status->setText(z,500); } } void P2PDialog::cancelWait() { char z[128]; if (wconn) { wconn->close(); delete wconn; wconn = 0; } if (toid > 0) { gtk_timeout_remove(toid); toid = -1; } gtk_widget_set_sensitive(wbw, TRUE); gtk_widget_set_sensitive(wbc, FALSE); g_strlcpy(z,_("Cancelled connection wait."),128); global.status->setText(z,5); } int P2PDialog::checkForConnection() { if (wconn->open()!=0) return 0; gtk_widget_set_sensitive(wbw, TRUE); gtk_widget_set_sensitive(wbc, FALSE); global.chandler->openServer(wconn, new P2PProtocol()); wconn = 0; release(); return 1; } gboolean p2p_check_incoming(gpointer data) { P2PDialog *me = (P2PDialog *) data; if (me->checkForConnection()) { me->toid = -1; return FALSE; } return TRUE; } eboard-1.1.1.orig/goc_refresh.xpm0000644000175000017500000000635310757567572016323 0ustar patrikpatrik/* XPM */ static char * goc_refresh_xpm[] = { "32 20 118 2", " c None", ". c #8FA5F0", "+ c #8DA3EE", "@ c #8AA1ED", "# c #87A0EB", "$ c #849EEA", "% c #819DE9", "& c #95A8F3", "* c #93A7F1", "= c #90A5F0", "- c #8DA3EF", "; c #8AA2ED", "> c #809CE8", ", c #7D9AE7", "' c #7B99E6", ") c #99AAF4", "! c #97A9F3", "~ c #95A8F2", "{ c #92A6F1", "] c #8EA4EF", "^ c #8BA2ED", "/ c #839EEA", "( c #7F9CE8", "_ c #7C9AE6", ": c #7998E5", "< c #7797E4", "[ c #9CABF6", "} c #94A7F2", "| c #829DE9", "1 c #7E9BE7", "2 c #7A99E5", "3 c #7495E2", "4 c #7294E1", "5 c #9CACF6", "6 c #7897E4", "7 c #7093E0", "8 c #6E92DF", "9 c #0F5DB1", "0 c #7194E1", "a c #6F92E0", "b c #6D91DF", "c c #6B90DE", "d c #135FB3", "e c #125EB3", "f c #115EB2", "g c #698FDD", "h c #688FDD", "i c #688EDC", "j c #1660B4", "k c #1560B4", "l c #145FB4", "m c #678EDC", "n c #668DDB", "o c #658DDB", "p c #1862B5", "q c #628BD9", "r c #1A63B7", "s c #1B63B7", "t c #1C64B7", "u c #5D88D7", "v c #5E89D8", "w c #5F89D8", "x c #1D64B8", "y c #1E65B8", "z c #1E65B9", "A c #1F66B9", "B c #5986D5", "C c #5A87D6", "D c #5B87D6", "E c #5C88D7", "F c #2066BA", "G c #2167BA", "H c #2368BB", "I c #2569BC", "J c #5383D2", "K c #5584D3", "L c #5785D4", "M c #5886D5", "N c #2468BB", "O c #2669BC", "P c #286ABD", "Q c #2A6CBE", "R c #4C7FCF", "S c #4F81D0", "T c #5282D2", "U c #5483D3", "V c #5684D4", "W c #266ABD", "X c #286BBD", "Y c #2D6DC0", "Z c #306FC1", "` c #3471C3", " . c #4279CA", ".. c #467BCC", "+. c #4A7DCE", "@. c #4D7FCF", "#. c #2F6FC1", "$. c #3270C2", "%. c #3572C4", "&. c #3974C6", "*. c #3D76C7", "=. c #4178C9", "-. c #447BCB", ";. c #487CCD", ">. c #4B7ECE", ",. c #2E6EC0", "'. c #316FC2", "). c #3371C3", "!. c #3673C4", "~. c #3A74C6", "{. c #4078C9", "]. c #437ACB", "^. c #467CCC", "/. c #497DCD", "(. c #3472C3", "_. c #3773C5", ":. c #3A75C6", "<. c #437ACA", " ", " . + @ # $ % ", " & * = - ; # $ > , ' ", " ) ! ~ { ] ^ # / ( _ : < ", " [ ) ! } = | 1 2 < 3 4 ", " 5 ) 6 3 4 7 8 ", " 9 0 a b c ", " d e f c g h i ", " j k k k l d m n o o ", " p p p p p p p p q q q ", " r s s t u v w w ", " x y z A B C D E ", " F G H I J K L M ", " H N O P Q R S T U V ", " W X Q Y Z ` ...+.@.S T ", " Q Y #.$.%.&.*.=.-.;.>.@. ", " ,.'.).!.~.*.{.].^./. ", " (._.:.*.{.<. ", " ", " "}; eboard-1.1.1.orig/network.h0000644000175000017500000001361410757567572015147 0ustar patrikpatrik/* $Id: network.h,v 1.22 2007/01/03 17:48:53 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_NETWORK_H #define EBOARD_NETWORK_H 1 #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #ifdef NEED_TCP_H #include #endif #include #include #include "stl.h" #include "eboard.h" class PidIssuer { public: virtual void farewellPid(int dpid)=0; }; class Parent { public: Parent(PidIssuer *a,int b); int operator==(int v); PidIssuer *issuer; int pid; }; class PidRing : public SigChildHandler { public: virtual ~PidRing() {} void add(PidIssuer *po, int pid); void remove(PidIssuer *po); void funeral(int pid); virtual void ZombieNotification(int pid); private: list parents; }; class NetConnection { public: NetConnection(); virtual ~NetConnection(); virtual int isConnected(); // 0 ok, -1 error, msg in getError virtual int open()=0; virtual void close()=0; // -1 if nothing available, 0 when line ok virtual int readLine(char *tbuffer,int limit)=0; virtual void writeLine(char *tbuffer)=0; virtual int readPartial(char *tbuffer,int limit)=0; virtual int bufferMatch(char *match)=0; virtual char *getError()=0; virtual int hasTimeGuard(); virtual int getReadHandle()=0; char HostName[128]; char HostAddress[96]; int TimeGuard; virtual void notifyReadReady(IONotificationInterface *target); virtual void sendReadNotify(); void cleanUp(); private: int TagRead; IONotificationInterface *listener; friend void netconn_read_notify(gpointer data, gint source, GdkInputCondition cond); }; void netconn_read_notify(gpointer data, gint source, GdkInputCondition cond); class BufferedConnection : public NetConnection { public: virtual int readPartial(char *tbuffer,int limit); virtual int bufferMatch(char *match); protected: virtual int innerReadLine(char *tbuffer,int limit,int handle); int consume(int handle, int amount=128); int produce(char *tbuffer,int limit,int handle); int bufferEmpty(); list buffer; }; // select instead of NONBLOCK class AltBufferedConnection : public BufferedConnection { protected: virtual int innerReadLine(char *tbuffer,int limit,int handle); }; class DirectConnection : public BufferedConnection { public: DirectConnection(char *hostname,int port); int open(); void close(); int readLine(char *tbuffer,int limit); void writeLine(char *obuffer); int isConnected(); char *getError(); int getReadHandle(); private: int Port; int Connected; char errorMessage[128]; struct hostent *he; struct sockaddr_in sa; int netsocket; }; class IncomingConnection : public BufferedConnection { public: IncomingConnection(int port); int open(); void close(); int readLine(char *tbuffer, int limit); void writeLine(char *obuffer); int isConnected(); char *getError(); int getReadHandle(); private: int Port; int Connected; char errorMessage[128]; int netsocket; int createSocket(); int acceptConnection(); }; class PipeConnection : public BufferedConnection, public PidIssuer { public: PipeConnection(int _pin,int _pout); /// chess engine constructor PipeConnection(char *helperbin,char *arg1,char *arg2,char *arg3,char *arg4); /// timeseal constructor PipeConnection(char *host,int port, char *helperbin,char *helpersuffix); virtual ~PipeConnection(); int Quiet; int isConnected(); // 0 ok, -1 error, msg in getError int open(); void close(); void setHandshake(char *s); // -1 if nothing available, 0 when line ok int readLine(char *tbuffer,int limit); void writeLine(char *obuffer); char *getError(); int getReadHandle(); virtual void farewellPid(int dpid); void setMaxWaitTime(double msecs); private: void init(); void checkChildren(); friend gboolean sched_close(gpointer data); int opmode; // 0=engine with bare args, 1=timeseal with network host int pout, pin; int Connected; int Port; char HelperBin[512]; char errorMessage[128]; vector args; int pid; int toid; // timeout string handshake; double MaxWaitTime; // msecs }; gboolean sched_close(gpointer data); class FallBackConnection : public NetConnection { public: FallBackConnection(); ~FallBackConnection(); void append(NetConnection *nc); virtual int isConnected(); virtual int open(); virtual void close(); virtual int readLine(char *tbuffer,int limit); virtual void writeLine(char *tbuffer); virtual int readPartial(char *tbuffer,int limit); virtual int bufferMatch(char *match); virtual char *getError(); virtual int getReadHandle(); virtual void notifyReadReady(IONotificationInterface *target); virtual void sendReadNotify(); private: int Connected; list::iterator current; list candidates; char errorMessage[128]; }; #endif eboard-1.1.1.orig/dlg_connect.h0000644000175000017500000000563210757567572015736 0ustar patrikpatrik/* $Id: dlg_connect.h,v 1.5 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DLG_CONNECT_H #define DLG_CONNECT_H 1 #include "eboard.h" #include "clock.h" #include "widgetproxy.h" class ConnectDialog : public WidgetProxy { public: ConnectDialog(); virtual void show(); private: GtkWidget *server,*port,*protocol; char Host[256]; int Port; char Proto[64]; friend void dlg_connect_ok(GtkWidget *w,gpointer data); friend void dlg_connect_cancel(GtkWidget *w,gpointer data); friend void dlgconn_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); }; void dlg_connect_ok(GtkWidget *w,gpointer data); void dlg_connect_cancel(GtkWidget *w,gpointer data); void dlgconn_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); class EditEngineBookmarksDialog : public ModalDialog, public UpdateInterface { public: EditEngineBookmarksDialog(BookmarkListener *updatee); virtual ~EditEngineBookmarksDialog(); private: BookmarkListener *beholder; GtkWidget *bl; GtkWidget *fe[7], *rm, *rmall, *apply, *edittc; BoxedLabel *uf[2]; int selindex; TimeControl localtc; void refresh(); void updateRightPane(); virtual void update(); friend void eebmd_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); friend void eebmd_rowunsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); friend void eebmd_rm1(GtkWidget *w, gpointer data); friend void eebmd_rmall(GtkWidget *w, gpointer data); friend void eebmd_apply(GtkWidget *w, gpointer data); friend void eebmd_edittc(GtkWidget *w, gpointer data); }; void eebmd_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); void eebmd_rowunsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data); void eebmd_rm1(GtkWidget *w, gpointer data); void eebmd_rmall(GtkWidget *w, gpointer data); void eebmd_apply(GtkWidget *w, gpointer data); void eebmd_edittc(GtkWidget *w, gpointer data); typedef EditEngineBookmarksDialog * EEBMDp; #endif eboard-1.1.1.orig/snd_edit.xpm0000644000175000017500000000051110757567572015614 0ustar patrikpatrik/* XPM */ static char * snd_edit_xpm[] = { "16 10 5 1", " c None", ". c #000000", "+ c #FFEB11", "@ c #B2A540", "# c #FFEBBF", " . ", " .+. ", " .+++. ", " .+++. ", " .+++. ", " .+++. ", " .@@+. ", " .#@. ", " ........ ", " "}; eboard-1.1.1.orig/eboard.60000644000175000017500000000504610757567572014630 0ustar patrikpatrik.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH EBOARD 6 "January 22, 2007" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME eboard \- a graphical chess board .SH SYNOPSIS .B eboard .RI [ -log ] .RI [ -debug ] .RI [ -dgtport device ] .br .SH DESCRIPTION This manual page briefly describes the .B eboard command. .PP \fBeboard\fP is a graphical chess board. It acts as an interface to chess engines (like GNU Chess, Sjeng and Crafty) and Internet Chess Servers (ICS) like FICS (http://www.freechess.org), and works as a browser for chess games saved as PGN (Portable Game Notation) files. .B eboard itself is not a chess engine: it won't play games, it will just act as a graphical interface between programs that play games like GNU chess (or ICS servers) and the end-user. .PP To move pieces click on the source square and then click to destination square. Optionally, you may drag the piece from the source to the destination square (you won't see the piece being dragged). To drop pieces on crazyhouse and bughouse variants (ICS-only) right-click the destination square and select the piece to drop from the popup menu. .PP For help with ICS commands consult the server (most of them have online help and help channels). .PP For help setting up associated programs (chess engines, timestamping, etc.) see the documentation in /usr/share/doc/eboard or visit the eboard web site at http://eboard.sourceforge.net. If the documentation is not installed in your system, you can find it in the source distribution, available from the web site. .PP .SH OPTIONS .TP .B \-log Log network communications to "~/LOG.eboard". Communications held in password mode are not logged. .TP .B \-debug Print miscellaneous debug info to "~/DEBUG.eboard". .TP .B \-dgtport device Use the DGT board connected to the given device. .PP .SH AUTHORS .B eboard is being developed by Felipe Bergo. This manual page was written by Felipe Bergo and Daniel Burrows . .PP .SH WEBSITE http://eboard.sourceforge.net eboard-1.1.1.orig/qbl.xpm0000644000175000017500000000041610757567572014605 0ustar patrikpatrik/* XPM */ static char * qbl_xpm[] = { "8 16 2 1", " c None", ". c #000000", " ", " ", " . ", " .. ", " ... ", " .... ", " ..... ", " ...... ", " ...... ", " ..... ", " .... ", " ... ", " .. ", " . ", " ", " "}; eboard-1.1.1.orig/dlg_prefs.cc0000644000175000017500000010221610757567572015556 0ustar patrikpatrik/* $Id: dlg_prefs.cc,v 1.54 2008/02/22 07:32:15 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "eboard.h" #include "dlg_prefs.h" #include "global.h" #include "tstring.h" #include "snd_test.xpm" #include "snd_edit.xpm" // 3700 widgets for the price of 3699. Only today at dlg_prefs.cc, the // Widget Warehouse. typedef void (*sigfunc)(int); char * PreferencesDialog::FontSample[NFONTS] = { "52:38", "White Capablanca", "38. N@c5+", "AOLer(1): I have a question...", "51 Player1 ++++ (U) 5 0" }; PreferencesDialog::PreferencesDialog() : ModalDialog(N_("Preferences")) { GtkWidget *v,*hs,*ok,*apply,*cancel,*bhb,*nb; // scroll containers for tabs GtkWidget *scr[7]; // ui, ics, colors, fonts, sounds, autosave, joystick // gui GtkWidget *uil,*uiv,*uih,*tfr,*tr[4],*tv,*uih3,*uih4,*uih5; GSList *tl; // -- fonts GtkWidget *fl, *fv, *ft, *fn[NFONTS], *fb[NFONTS], *frv; // -- ics GtkWidget *icv, *icl, *ict1, *icl1, *ifr1, *ifr2, *ifv1, *ifv2, *icl2, *icl3,*spf, *sph; GSList *spl; // -- sound static char *zcaption[]={N_("Opponent Moved"), N_("Draw Offered"), N_("Private Tell"), N_("ICS Challenge"), N_("Time Running Out"), N_("Game Won"), N_("Game Lost"), N_("Game Started"), N_("Obs'vd Game Ended"), N_("Move made (Obs'vd/Exm'd Games)") }; GtkWidget *sv,*sl,*zf,*zv,*zt,*zl,*zhe[N_SOUND_EVENTS], *zbb[N_SOUND_EVENTS]; GtkStyle *style; GdkPixmap *xpmedit, *xpmtest; GdkBitmap *bitedit, *bittest; GtkWidget *pic[2][N_SOUND_EVENTS]; // -- autosave GtkWidget *gv, *gl, *gll, *gh; // -- joystick GtkWidget *jv, *jl, *jf, *jv2, *jh1, *jh2, *jh3, *jh4, *jl2; // -- colors GtkWidget *tcl, *tcv, *tch, *tcv2, *tcdef; int i; char z[64]; for(i=0;i< N_SOUND_EVENTS;i++) sndcopy[i]=global.sndevents[i]; jsval[0] = global.JSCursorAxis; jsval[1] = global.JSMoveButton; jsval[2] = global.JSBrowseAxis; jsval[3] = global.JSPrevTabButton; jsval[4] = global.JSNextTabButton; jstate = -1; gtk_window_set_default_size(GTK_WINDOW(widget),600,480); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),v); nb=gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(v),nb,TRUE,TRUE,2); gtk_widget_realize(widget); // user interface =================================================================== uil=gtk_label_new(_("Appearance")); uiv=gtk_vbox_new(FALSE,2); gtk_container_set_border_width(GTK_CONTAINER(uiv),6); tfr=gtk_frame_new(_("Tab Position")); gtk_box_pack_start(GTK_BOX(uiv),tfr,FALSE,FALSE,4); gtk_frame_set_shadow_type(GTK_FRAME(tfr),GTK_SHADOW_ETCHED_IN); tv=gtk_hbox_new(FALSE,2); tr[0]=gtk_radio_button_new_with_label(0,_("Right")); tl=gtk_radio_button_group(GTK_RADIO_BUTTON(tr[0])); tr[1]=gtk_radio_button_new_with_label(tl,_("Left")); tl=gtk_radio_button_group(GTK_RADIO_BUTTON(tr[1])); tr[2]=gtk_radio_button_new_with_label(tl,_("Top")); tl=gtk_radio_button_group(GTK_RADIO_BUTTON(tr[2])); tr[3]=gtk_radio_button_new_with_label(tl,_("Bottom")); gtk_container_add(GTK_CONTAINER(tfr),tv); for(i=0;i<4;i++) { gtk_box_pack_start(GTK_BOX(tv),tr[i],FALSE,FALSE,2); gshow(tr[i]); tabposb[i]=tr[i]; } uih=gtk_hbox_new(FALSE,4); plainb=gtk_check_button_new_with_label(_("Use plain color squares")); gtk_box_pack_start(GTK_BOX(uih),plainb,FALSE,FALSE,0); lsq=new ColorButton(_("Light Squares..."), global.LightSqColor); dsq=new ColorButton(_("Dark Squares..."), global.DarkSqColor); gtk_box_pack_start(GTK_BOX(uih),lsq->widget,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(uih),dsq->widget,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(uiv),uih,FALSE,FALSE,4); Gtk::show(plainb,uih,NULL); gtset(GTK_TOGGLE_BUTTON(plainb), global.PlainSquares?1:0); uih3=gtk_hbox_new(FALSE,4); uih4=gtk_hbox_new(FALSE,4); uih5=gtk_hbox_new(FALSE,4); smoothb=gtk_check_button_new_with_label(_("Smoother animation (eats more CPU)")); gtk_box_pack_start(GTK_BOX(uih5),smoothb,FALSE,FALSE,0); dhsb=gtk_check_button_new_with_label(_("Graphic representation of crazy/bughouse stock")); gtk_box_pack_start(GTK_BOX(uih3),dhsb,FALSE,FALSE,0); aqbar=gtk_check_button_new_with_label(_("Show shortcut buttons below board")); gtk_box_pack_start(GTK_BOX(uih4),aqbar,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(uiv),uih5,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(uiv),uih3,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(uiv),uih4,FALSE,FALSE,4); Gtk::show(smoothb, dhsb, aqbar, uih3, uih4, uih5, NULL); gtset(GTK_TOGGLE_BUTTON(smoothb), global.SmootherAnimation?1:0); gtset(GTK_TOGGLE_BUTTON(dhsb), global.DrawHouseStock?1:0); gtset(GTK_TOGGLE_BUTTON(aqbar), global.ShowQuickbar?1:0); scr[0] = scrollBox(uiv); Gtk::show(tv, tfr, uiv, uil, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(nb),scr[0],uil); gtset(GTK_TOGGLE_BUTTON(tr[global.TabPos]), TRUE); // ics =============================================================================== icv=gtk_vbox_new(FALSE,2); icl=gtk_label_new("ICS"); gtk_container_set_border_width(GTK_CONTAINER(icv),6); ifr1=gtk_frame_new(_("Seek Graph")); gtk_frame_set_shadow_type(GTK_FRAME(ifr1),GTK_SHADOW_ETCHED_IN); ifr2=gtk_frame_new(_("Channel Tells")); gtk_frame_set_shadow_type(GTK_FRAME(ifr2),GTK_SHADOW_ETCHED_IN); spf=gtk_frame_new(_("Non-ASCII Character Filtering")); gtk_frame_set_shadow_type(GTK_FRAME(spf),GTK_SHADOW_ETCHED_IN); sph=gtk_hbox_new(FALSE,2); ifv1=gtk_vbox_new(FALSE,2); ifv2=gtk_vbox_new(FALSE,2); gtk_container_add(GTK_CONTAINER(ifr1),ifv1); gtk_container_add(GTK_CONTAINER(ifr2),ifv2); showratb=gtk_check_button_new_with_label(_("Show rating next to player name")); gtk_box_pack_start(GTK_BOX(icv),showratb,FALSE,FALSE,2); autologb=gtk_check_button_new_with_label(_("Run autofics.pl script after connecting to FICS")); gtk_box_pack_start(GTK_BOX(icv),autologb,FALSE,FALSE,2); showts=gtk_check_button_new_with_label(_("Show timestamps for text lines")); gtk_box_pack_start(GTK_BOX(icv),showts,FALSE,FALSE,2); /* allob[0]=gtk_check_button_new_with_label(FIXTRAN("Show observers on played games")); allob[1]=gtk_check_button_new_with_label(FIXTRAN("Show observers on observed games")); gtk_box_pack_start(GTK_BOX(icv),allob[0],FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(icv),allob[1],FALSE,FALSE,2); */ gtk_box_pack_start(GTK_BOX(icv),spf,FALSE,FALSE,2); special[0] = gtk_radio_button_new_with_label(0,_("None")); spl=gtk_radio_button_group(GTK_RADIO_BUTTON(special[0])); special[1] = gtk_radio_button_new_with_label(spl,_("Truncate")); spl=gtk_radio_button_group(GTK_RADIO_BUTTON(special[1])); special[2] = gtk_radio_button_new_with_label(spl,_("Use underscores")); spl=gtk_radio_button_group(GTK_RADIO_BUTTON(special[2])); special[3] = gtk_radio_button_new_with_label(spl,_("Soft translate")); spl=gtk_radio_button_group(GTK_RADIO_BUTTON(special[3])); gtk_container_add(GTK_CONTAINER(spf),sph); for(i=0;i<4;i++) { gtk_box_pack_start(GTK_BOX(sph),special[i],FALSE,FALSE,2); gshow(special[i]); } gtk_box_pack_start(GTK_BOX(icv),ifr1,FALSE,FALSE,2); sgb=gtk_check_button_new_with_label(_("Dynamic Seek Graph")); gtk_box_pack_start(GTK_BOX(ifv1),sgb,FALSE,FALSE,2); hsb=gtk_check_button_new_with_label(_("Inhibit seek lines on console when Seek Graph is active")); gtk_box_pack_start(GTK_BOX(ifv1),hsb,FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(icv),ifr2,FALSE,FALSE,2); chsb=gtk_check_button_new_with_label(_("Show channel tells in one pane per channel")); gtk_box_pack_start(GTK_BOX(ifv2),chsb,FALSE,FALSE,2); coct=gtk_check_button_new_with_label(_("Show channel tells on console too (when above option is active)")); gtk_box_pack_start(GTK_BOX(ifv2),coct,FALSE,FALSE,2); wget=gtk_check_button_new_with_label(_("Retrieve ICS Channel Lists from eboard.sf.net")); gtk_box_pack_start(GTK_BOX(ifv2),wget,FALSE,FALSE,0); ict1=gtk_table_new(2,3,FALSE); icl1=gtk_label_new(_("Scrollback limit (0 = unlimited) :")); sbacke=gtk_entry_new(); snprintf(z,64,"%d",global.ScrollBack); gtk_entry_set_text(GTK_ENTRY(sbacke),z); gtk_table_attach_defaults(GTK_TABLE(ict1), icl1, 0,1, 0,1); gtk_table_attach_defaults(GTK_TABLE(ict1), sbacke, 1,2, 0,1); icl2=gtk_label_new(_("Warn when own clock is below: ")); lowtime=gtk_entry_new(); snprintf(z,64,"%d",global.LowTimeWarningLimit); gtk_entry_set_text(GTK_ENTRY(lowtime),z); icl3=gtk_label_new(_("seconds.")); gtk_table_attach_defaults(GTK_TABLE(ict1), icl2, 0,1, 1,2); gtk_table_attach_defaults(GTK_TABLE(ict1), lowtime, 1,2, 1,2); gtk_table_attach_defaults(GTK_TABLE(ict1), icl3, 2,3, 1,2); gtk_box_pack_start(GTK_BOX(icv),ict1,FALSE,FALSE,2); scr[1] = scrollBox(icv); Gtk::show(icl1, sbacke, icl2, lowtime, icl3, ict1, ifr1, ifr2, ifv1, ifv2, icl, showratb, autologb, showts, /*allob[0], allob[1],*/ sgb, chsb, coct, wget, hsb, icv, spf, sph, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(nb),scr[1],icl); gtset(GTK_TOGGLE_BUTTON(showratb), global.ShowRating?1:0); gtset(GTK_TOGGLE_BUTTON(autologb), global.FicsAutoLogin?1:0); gtset(GTK_TOGGLE_BUTTON(showts), global.ShowTimestamp?1:0); gtset(GTK_TOGGLE_BUTTON(special[global.SpecialChars]), TRUE); /* gtset(GTK_TOGGLE_BUTTON(allob[0]), global.IcsAllObPlayed?1:0); gtset(GTK_TOGGLE_BUTTON(allob[1]), global.IcsAllObObserved?1:0); */ gtset(GTK_TOGGLE_BUTTON(sgb), global.IcsSeekGraph?1:0); gtset(GTK_TOGGLE_BUTTON(hsb), global.HideSeeks?1:0); gtset(GTK_TOGGLE_BUTTON(chsb), global.SplitChannels?1:0); gtset(GTK_TOGGLE_BUTTON(coct), global.ChannelsToConsoleToo?1:0); gtset(GTK_TOGGLE_BUTTON(wget), global.RetrieveChannelNames?1:0); // colors ======================================================================== tcl=gtk_label_new(_("Colors")); tcv=gtk_vbox_new(FALSE,0); tcv2=gtk_vbox_new(FALSE,4); tch=gtk_hbox_new(FALSE,4); gtk_container_set_border_width(GTK_CONTAINER(tch),6); textcb[0]=new ColorButton(_("Normal Text"),global.Colors.TextDefault); textcb[1]=new ColorButton(_("Bright Text"),global.Colors.TextBright); textcb[2]=new ColorButton(_("Private Tells"),global.Colors.PrivateTell); textcb[3]=new ColorButton(_("News/Notifications"),global.Colors.NewsNotify); textcb[4]=new ColorButton(_("Mamer and TDs"),global.Colors.Mamer); textcb[5]=new ColorButton(_("Kibitzes/Whispers"),global.Colors.KibitzWhisper); textcb[6]=new ColorButton(_("Shouts"),global.Colors.Shouts); textcb[7]=new ColorButton(_("Seek Ads"),global.Colors.Seeks); textcb[8]=new ColorButton(_("Channel Tells"),global.Colors.ChannelTell); textcb[9]=new ColorButton(_("Chess Programs"),global.Colors.Engine); textcb[10]=new ColorButton(_("Background"),global.Colors.Background); for(i=0;i<11;i++) gtk_box_pack_start(GTK_BOX(tcv),textcb[i]->widget,TRUE,TRUE,0); preview=new TextPreview(widget->window,textcb[10]); preview->attach(textcb[0],"Statistics for GMFoo(GM) On for: 1 hr, 16 mins"); preview->attach(textcb[1],"You accept the challenge of Zoobie"); preview->attach(textcb[2],"CleverBoy tells you: eboard is the best!"); preview->attach(textcb[3],"Notification: SsehcEmong has departed."); preview->attach(textcb[4],":mamer TOURNEY INFO: blah blah blah"); preview->attach(textcb[5],"Pulga(TM)(1492)[24] whispers: watch my pawns die"); preview->attach(textcb[6],"blik(C) shouts: I am wasting my cpu here!"); preview->attach(textcb[7],"GMFoo (2402) seeking 45 45 rated Standard"); preview->attach(textcb[8],"mhill(85): yes, that's exactly what I mean."); preview->attach(textcb[9],"My move is: d7d5"); gtk_box_pack_start(GTK_BOX(tch),tcv,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(tch),tcv2,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(tcv2),preview->widget,FALSE,FALSE,4); tcdef=gtk_button_new_with_label(_("Revert to Defaults")); gtk_box_pack_start(GTK_BOX(tcv2),tcdef,FALSE,FALSE,4); scr[2] = scrollBox(tch); Gtk::show(preview->widget, tcdef, tch, tcv, tcv2, tcl, NULL); gtk_notebook_append_page(GTK_NOTEBOOK(nb),scr[2],tcl); gtk_signal_connect(GTK_OBJECT(tcdef),"clicked", GTK_SIGNAL_FUNC(prefs_defcolor),(gpointer)this); // fonts ============================================================================== fl=gtk_label_new(_("Fonts")); fv=gtk_vbox_new(FALSE,2); gtk_container_set_border_width(GTK_CONTAINER(fv),6); ft=gtk_table_new(12,2,FALSE); gtk_table_set_row_spacings(GTK_TABLE(ft),4); gtk_table_set_col_spacings(GTK_TABLE(ft),6); gtk_box_pack_start(GTK_BOX(fv),ft,FALSE,FALSE,2); for(i=0;iwidget,0,1,3*i,3*i+1,GTK_FILL,GTK_FILL,0,0); gtk_table_attach(GTK_TABLE(ft),fn[i],0,1,3*i+1,3*i+2, (GtkAttachOptions)(GTK_EXPAND|GTK_FILL),GTK_FILL,0,0); gtk_table_attach(GTK_TABLE(ft),fb[i],1,2,3*i+1,3*i+2,GTK_SHRINK,GTK_FILL,0,0); } frv=gtk_button_new_with_label(_("Revert to defaults")); gtk_table_attach(GTK_TABLE(ft),frv,0,2,14,15,GTK_SHRINK,GTK_FILL,0,16); gshow(frv); for(i=0;ishow(); gshow(fn[i]); gshow(fb[i]); efont[i]=fn[i]; xfont[i]=fb[i]; } scr[3] = scrollBox(fv); Gtk::show(ft,fv,fl,NULL); gtk_notebook_append_page(GTK_NOTEBOOK(nb),scr[3],fl); gtk_signal_connect(GTK_OBJECT(frv),"clicked", GTK_SIGNAL_FUNC(prefs_frevert),(gpointer)this); for(i=0;iwindow, &bittest, &style->bg[GTK_STATE_NORMAL], (gchar **) snd_test_xpm); xpmedit = gdk_pixmap_create_from_xpm_d (widget->window, &bitedit, &style->bg[GTK_STATE_NORMAL], (gchar **) snd_edit_xpm); for(i=0;igetColor() != *curval) { if (ch1) *ch1=1; if (ch2) *ch2=1; *curval=cb->getColor(); } } void PreferencesDialog::Apply() { int i,nval=0,changed=0,fchg=0, schg=0, psetchg=0, tbg=0; GtkPositionType ntp; const char *p; for(i=0;i<4;i++) if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tabposb[i]))) nval=i; if (nval!=global.TabPos) { global.TabPos=nval%4; changed=1; switch(global.TabPos) { case 0: ntp=GTK_POS_RIGHT; break; case 1: ntp=GTK_POS_LEFT; break; case 2: ntp=GTK_POS_TOP; break; case 3: ntp=GTK_POS_BOTTOM; break; default: ntp=GTK_POS_RIGHT; } global.ebook->setTabPosition(ntp); } for(i=0,nval=0;i<4;i++) if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(special[i]))) nval=i; if (nval!=global.SpecialChars) { global.SpecialChars = nval%4; changed = 1; } ApplyEntry(efont[0],global.ClockFont,96,&changed,NULL); ApplyEntry(efont[1],global.PlayerFont,96,&changed,NULL); ApplyEntry(efont[2],global.InfoFont,96,&changed,NULL); ApplyEntry(efont[3],global.ConsoleFont,96,&changed,&fchg); ApplyEntry(efont[4],global.SeekFont,96,&changed,&schg); ApplyCheckBox(plainb, &global.PlainSquares, &changed, &psetchg); ApplyCheckBox(smoothb, &global.SmootherAnimation, &changed, NULL); ApplyCheckBox(dhsb, &global.DrawHouseStock, &changed, NULL); ApplyCheckBox(aqbar, &global.ShowQuickbar, &changed, NULL); ApplyCheckBox(showratb, &global.ShowRating, &changed, NULL); ApplyCheckBox(autologb, &global.FicsAutoLogin, &changed, NULL); ApplyCheckBox(showts, &global.ShowTimestamp, &changed, &fchg); /* ApplyCheckBox(allob[0], &global.IcsAllObPlayed, &changed, NULL); ApplyCheckBox(allob[1], &global.IcsAllObObserved, &changed, NULL); */ ApplyCheckBox(sgb, &global.IcsSeekGraph, &changed, NULL); ApplyCheckBox(hsb, &global.HideSeeks, &changed, NULL); ApplyCheckBox(chsb, &global.SplitChannels, &changed, NULL); ApplyCheckBox(coct, &global.ChannelsToConsoleToo, &changed, NULL); ApplyCheckBox(wget, &global.RetrieveChannelNames, &changed, NULL); ApplyCheckBox(asp, &global.AppendPlayed, &changed, NULL); ApplyCheckBox(aso, &global.AppendObserved, &changed, NULL); ApplyCheckBox(jmode, &global.JSMode, &changed, NULL); { int spd = (int) gtk_range_get_value(GTK_RANGE(jspeed)); if (global.JSSpeed != spd) { global.JSSpeed = spd; changed = 1; } } ApplyEntry(afn,global.AppendFile,128,&changed,NULL); if (lsq->getColor() != global.LightSqColor) { changed=1; psetchg=1; global.LightSqColor=lsq->getColor(); } ApplyColorButton(textcb[0],&global.Colors.TextDefault,&changed,NULL); ApplyColorButton(textcb[1],&global.Colors.TextBright,&changed,NULL); ApplyColorButton(textcb[2],&global.Colors.PrivateTell,&changed,NULL); ApplyColorButton(textcb[3],&global.Colors.NewsNotify,&changed,NULL); ApplyColorButton(textcb[4],&global.Colors.Mamer,&changed,NULL); ApplyColorButton(textcb[5],&global.Colors.KibitzWhisper,&changed,NULL); ApplyColorButton(textcb[6],&global.Colors.Shouts,&changed,NULL); ApplyColorButton(textcb[7],&global.Colors.Seeks,&changed,NULL); ApplyColorButton(textcb[8],&global.Colors.ChannelTell,&changed,NULL); ApplyColorButton(textcb[9],&global.Colors.Engine,&changed,NULL); ApplyColorButton(textcb[10],&global.Colors.Background,&changed,&tbg); if (dsq->getColor() != global.DarkSqColor) { changed=1; psetchg=1; global.DarkSqColor=dsq->getColor(); } p=gtk_entry_get_text(GTK_ENTRY(sbacke)); nval=atoi(p); if (nval!=global.ScrollBack) { changed=1; global.ScrollBack=nval; global.updateScrollBacks(); } p=gtk_entry_get_text(GTK_ENTRY(lowtime)); nval=atoi(p); if (nval!=global.LowTimeWarningLimit) { changed=1; global.LowTimeWarningLimit=nval; } for(i=0;ireloadFonts(); if (psetchg) global.respawnPieceSet(); else (*global.BLi)->invalidate(); (*global.BLi)->queueRepaint(); } if (fchg) { global.output->updateFont(); global.updateFont(); } if (changed && global.IcsSeekGraph!=0) if (global.network!=NULL && global.protocol!=NULL) if (global.network->isConnected()) global.protocol->refreshSeeks(true); if (changed && global.IcsSeekGraph==0 && global.skgraph2 != NULL) { global.skgraph2->clear(); } if (schg && global.skgraph2!=NULL) { global.skgraph2->updateFont(); global.skgraph2->repaint(); } if (tbg) global.output->setBackground(global.Colors.Background); if (changed) global.qbcontainer->update(); if (changed) global.writeRC(); } void prefs_defcolor(GtkWidget *w,gpointer data) { PreferencesDialog *me; TerminalColor tc; me=(PreferencesDialog *)data; me->preview->freeze(); me->textcb[0]->setColor(tc.TextDefault); me->textcb[1]->setColor(tc.TextBright); me->textcb[2]->setColor(tc.PrivateTell); me->textcb[3]->setColor(tc.NewsNotify); me->textcb[4]->setColor(tc.Mamer); me->textcb[5]->setColor(tc.KibitzWhisper); me->textcb[6]->setColor(tc.Shouts); me->textcb[7]->setColor(tc.Seeks); me->textcb[8]->setColor(tc.ChannelTell); me->textcb[9]->setColor(tc.Engine); me->textcb[10]->setColor(tc.Background); me->preview->thaw(); } void prefs_apply(GtkWidget *w,gpointer data) { PreferencesDialog *me; me=(PreferencesDialog *)data; me->Apply(); } void prefs_ok(GtkWidget *w,gpointer data) { PreferencesDialog *me; me=(PreferencesDialog *)data; prefs_apply(w,data); me->release(); } void prefs_fcancel(GtkWidget *w,gpointer data) { PreferencesDialog *me; me=(PreferencesDialog *)data; gtk_grab_remove(me->fontdlg); gtk_widget_destroy(me->fontdlg); } void prefs_fok(GtkWidget *w,gpointer data) { PreferencesDialog *me; char *p; me=(PreferencesDialog *)data; p=gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(me->fontdlg)); if (p!=NULL) gtk_entry_set_text(GTK_ENTRY(me->efont[me->FontBeingEdited]),p); gtk_grab_remove(me->fontdlg); gtk_widget_destroy(me->fontdlg); } void prefs_cfont(GtkWidget *w,gpointer data) { PreferencesDialog *me; GtkWidget *fd; const gchar *cmd; int i, fbe; me=(PreferencesDialog *)data; me->FontBeingEdited = -1; for(i=0;ixfont[i]) { me->FontBeingEdited = i; break; } if (me->FontBeingEdited < 0) { cerr << "**** eboard internal error: you should never see this, email bergo@seul.org\n"; return; } fbe = me->FontBeingEdited; cmd = gtk_entry_get_text(GTK_ENTRY(me->efont[fbe])); fd=gtk_font_selection_dialog_new(_("Choose Font")); if (strlen(cmd)) gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fd),cmd); gtk_font_selection_dialog_set_preview_text(GTK_FONT_SELECTION_DIALOG(fd), me->FontSample[fbe]); gtk_signal_connect (GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (fd)->ok_button), "clicked", GTK_SIGNAL_FUNC(prefs_fok),data); gtk_signal_connect(GTK_OBJECT (GTK_FONT_SELECTION_DIALOG (fd)->cancel_button), "clicked", GTK_SIGNAL_FUNC (prefs_fcancel), data); me->fontdlg=fd; gshow(fd); gtk_grab_add(fd); } void prefs_frevert(GtkWidget *w,gpointer data) { PreferencesDialog *me; me=(PreferencesDialog *)data; gtk_entry_set_text(GTK_ENTRY(me->efont[0]),DEFAULT_FONT_CLOK); gtk_entry_set_text(GTK_ENTRY(me->efont[1]),DEFAULT_FONT_PLYR); gtk_entry_set_text(GTK_ENTRY(me->efont[2]),DEFAULT_FONT_INFO); gtk_entry_set_text(GTK_ENTRY(me->efont[3]),DEFAULT_FONT_CONS); gtk_entry_set_text(GTK_ENTRY(me->efont[4]),DEFAULT_FONT_SEEK); } // sounds (the error codes are plain random ;-) void prefs_sndtest(GtkWidget *w,gpointer data) { PreferencesDialog *me = (PreferencesDialog *)data; for(int i=0;isndtest[i]) { me->sndcopy[i].safePlay(); return; } cerr << "** eboard ** odd internal error 5B7X (email the author).\n"; } void prefs_sndedit(GtkWidget *w,gpointer data) { PreferencesDialog *me = (PreferencesDialog *)data; for(int i=0;isndedit[i]) { me->sndcopy[i].edit(me); return; } cerr << "** eboard ** odd internal error 4FN8 (email the author).\n"; } void PreferencesDialog::SoundEventChanged() { int i; for(i=0;ijstate < 0) { me->jstate = 0; gtk_button_set_label(GTK_BUTTON(me->jctl),_("Cancel Joystick Configuration")); global.joycapture = (JoystickListener *) me; me->formatJoystickDescription(); } else { me->jstate = -1; gtk_button_set_label(GTK_BUTTON(me->jctl),_("Configure Axis & Buttons")); global.joycapture = NULL; me->formatJoystickDescription(); } } eboard-1.1.1.orig/classic.png0000644000175000017500000006021710757567572015435 0ustar patrikpatrik‰PNG  IHDRôسó‡@gAMA± üa€PLTE\4þþþçÇuqH"à¸]j)}T&e&’g-Þ~3]%ÚªNV&Ö£NR$ Ò›Gªe7N&—8îß§J#‰4åͮΟMF r3ì×—·Z)Êo7¨JâÈ“Ù¹Š–T$ŠF B Å—Cr;‚‚‚> Éq)åÏ’Ú¸o¦f+åÓ²Š.à¿l~:¦V&~-i?åÏ ïà°: –J!ŠB®*}4ß­Kh2íÚ¶Ú®e–^)ß±oŠ<áȤîÊ„i8äÁ†Ò®Œ¶j6r)îÊ“Êv:èÀvµ@ß¹|ãÇ…~@ˆ^*îÑŸèÒ‡¦v'Ö¬r¬r.¦^*˜@êÉ‘rB~H"æÎ‡òëÅâ¸nìГˑ/f,Ê™Iîß¿ŠU%^,Ò§SêÈ…íØ¢ŠK"–z*6 –Z(áÈžáÀy”r,ÛÀžß¯\ìÔ®êРãÁ›Î¤zV.ñæÄ«}:Ö­Xr=$ìÕ¸¶g+Ú¯zj.ÜÀŠ2s.…ÚÅbKGDˆH pHYs  d_‘tIMEÒ 0OBUƒ IDATxœì½_ÚØÖªƒ =øÑ[¿ÚÐ×s˜yA hzÂPPPrƉ8-xÉ0!÷'™BœÎˆ-\þõ»V°~&P{ŽÛ $keï|€à?þÀöøMle§Ù¤ê~³«ÕÉŽ$I€Ïèt:RÇçómÅ}E_zkKb …@€åYxãdLÑ*Yg'…šSpNÜweËcÁÒ\ñ¯¬ìììœì¬øýøF)°iJþS+~j…¢Îšd“¢(’ìtt–$½¼@yyÙ™aIAÎȲ\s6kNgm± îtÊUð_ ¤RÅT<žbAÿXD9‹)F^±ë±Ø–&¼6Ïbg±¦ÿ 6žùÏÀöŸ­õ:`žÅÿlMßl¢C×5Ö”WdÄ~`^—ÏšäÎEùëd“dÎýØvžµ µ–a}¼²+ƒqG^¤ö½)Ô IpVßf„·ÂcÃ_”‰‰;CâÄÄ*»Ó›ÙtYAJ–¾¹‚¬»jüÈm°Ã¦¹Ò£û~ 3à»R~ÙOÕÁs­Ë2ЯLÊ~|WõJ,Ÿ- £©Éø¬;˜ü¶ÊZ ‹èÜ.VS™ƒ‡ßwUîˆw‹úoôÍ3ʼný„Þ›~Ü x¥λ1•71xÀ_ÌŸ§Ø-‹Õ2NYÈÔ€Údð •A#ÿ<×B¡àÜM¥RUùÍbͰ< .K• s— øÝwßÝ {ªec×u®ïNô S3¸Á/ú²Šq?ïϹ,èêÆÎfSF /Ÿ9åf @祿àÓzkà¼Ôzå5ö×À]ž,šyø°¿¦5ÔÐv—¼wL@T3ç_U©)‹ùÿ@ßë¢ñ÷݃·?;¿úJQ¾qX ¸»œ½ñãxU )¹é„{©¦Ò ÐW˜ŒpPà^€w”³V`‹HkóPLCܾ0ˆoôØÖýˆOabâ[AýŸ_i͹E¿Æä1àòLqfßôŸ5)¯·)€Ó# Â^ùš3†=ó ¡wbY,X0¡vŒì=°yŽEïöá´Ã9Æ/®Ì…cygÚG z£àÓ9Ü%æÍ+:;;7ô`âÏqï1žÞg Kˆ)N¬ìK/{ñM™òŸ{Î =&ã˜öUâ ¬SèÁ ¾,µE¤7ÿ§Eo4 „¶åÚ¦(—üʱw úq8²}iŒJOÑXž6ç‚G)®ŸÓ׿yL]ñZcç?¶¢ Ð*Ï0IJׅyS¢nHpfw¨Þ“<`H*#d2”,dx ÆqX–/p'ëqòÛÙ¡ÈN¢Y–yŸä)/øµ™á3µL =ÏH,O ¬Œ¶?#àXUí@~ýð@ÿvw ú1ôœô±ªªoô×ÎߨÊÞL©^?eäþæ™bØ{½óg8™d‡BÄS|}E&)üZ&½d§ã•y¹ TG H†‘,åeÓ’\{]kÖÎ0 Ç ÿñÞë¬ya»è¿»(7±=ø s×ìB=qõÓH‘Ø÷F¬©ß«±m,7ú]´ßÄ5búýJ²øXì¢òÂý³ކž¬¿Î“|½¿Tck$Åú:^žÅ.L’¬Å(Jxždš_J‡a€é^/vî,þùúµúˆìý‚þ+ί?ò‡Urûèój¨JÕØ6¡f&‡­üþ»«Å¨NõŠÌ9€ÿÏ^ØA § ‚Ûz¦˜ýœU¢< Îä¦ül;E‘ð$e0øÞ ìH’8§„’%†,d2J÷eS®Õ^g0Øøõâ"[øŽTwd*èÇyñz*ÍëP=CíÓî³U¿çfúXý*¾»^ *õÆ`ƒÐë¦MýÙcõʈÕlR+gMp^›¤·é¥¼°¦Yó6)ÆwO*á rÌ ;ñ3™Æ =Ð_#õß]ý5蛬Où¥³ÇkVcM1:$<9³‡P1$è1ÕA/œ²‡p°ôõµÿ™¸üÙ™ž”ÀËæ Ûé  Wz0á·£¡¨Þ´X™”…óa*àô±E 3±ÅEØBÕ†GgVŸ¥¿VaÚÒ_tßàÿ+Ânh4.[î!œ°úÑquiZZTÂ’ô9…Q–Û˜7zÂwÿ¹‰ÿ³×{£x奃CQgb+ÃË+àÏ®xI»,c¯?4©f-ÓŒþÉw>@=ÓáyÙKʵ PŸÅ˜, ,[¨-‚3›iÖcô_Á~³ý®ìUëeX„VÝû˜tõͺ%9;“GÐ0$è•T8iý —¿‡¿é¹«ÕwVxŒ4ÛÁ)ƒ@rX4óT'e*æŒÕ>Ôœµƒš÷%¿~½« T±î¬%’˜“5~0èo€[ó‹á@ÝÎ_o¼[m9Ú‹¨zŸÔ`ô!cý섊Š!APާzÝñ_»ëc{©Ü g~|GÕë$°õ¹#£+KÖI–”q Ïb’¢†¥ÈZ/èÌ‹á¼p :¼ ¤,Užû6£ÙO« FŠñ6¾‚y=ÒGxoCþB‡1)ZuW¥z•}‡ý…Q2s°%C¢@1óØC³‚ù°wòL鱂ßl6•g…S©VVšpcóÍ3 í=K2uŠr/²Wf½pòÄ[ß!›rÓ)ó2üQË0U†I[·Š'<ùp@oLþ¨.¢:æ £þá‚þÊ£ØÄÑ´ ‰‚wvÞ^ŒD!­ñ+!~œ)Ž÷7cÍz§Ó©7Iª¹Bîœ5πğ5›hð)¿Lâ|Y†ä1ÀžáÁc `݉—y@{|&O§ÞöÂ0è*ÙEÔ€üW&*ðÀ@QÁñ¢~xУßé%ñ»ü‡œþÇ•ËìgàÎÖw€ËÈu’¤xª Ö^Æ^I?@Ó›y)4ìàÆò<# $ÿVbX&ÃóU&¾Ç‘ª””bŠô} §­aQËÌ_Ña@”FÕUOUôš»šiÔ ‰Wªc\€EàgÏWzƒP;+²2,uÖ¤vvê~%¿“Òç/ͳ:ÙYëy§(Yöâÿ ¸ŽŒ…”›M/˜— ¡Àó0ý4ËËM3€w–‘|[[Z ¶ Ùbw‚úþ˜7†zíª«mœP ís¼Éê^­àýJ3vKùçp\{Ö]á:1%Ó™2ŸöXÙñ7©•3¯LÕ•þyŠª“˜Ÿ þ Õ¤xé$žnHE ËVÁàÃ{¯åmÆ wA¦¦ÝO— ¿qeî õ ÿU‰iª§4,è‡ñD¯×ðNQoT™E öc"„^—ML¡õÊ»³••úÉÇ:veR+d§³³³–`Π°ªÎ×å˜Ü¬Q²—\ó}9I )]e¤·¤ xå“9 :,¯‘µøN1Ù^½cõ~ˆˆË:êRbDàíÝ'ÎGTj¬ºUU‚ÙªÞ-è‡ 8SRÜ(I”1*ûÎÊÙÙÎu¶²C~ü¸öqe‡²Óù¸s¶Ó¡°kSVzo¼híOÖÒ’„‰‹×Ö¾|ñI',pyKz x<“>‘ù:ŸÉÔä¦bèkšùé €oœ\(»„±1ECÅ£èÑeLÇØ@¯ÿTô\©‹I9:u];7vøÇ?*©èÑ£Uú.wNêuÌV†¹ëw€ÇìPˆðqíŸ:‰®«|–iR8™Šò²æ¤óÅ×I×Ó§s€v{m|ñ™£­x<ÿÿ2ï0>_üÔ§uj¦Q?$æ ÷\Óe¼~†t¨œÑР¢–7ë8FÔO\»z&NJˆå9•÷÷è;lh®¬PõN½Ž­¼RïtÖÖÖH¸ føC˜K¬WvRbÜ„Oi)îHÌÑÓçïv2lçç[[>¦Èðì‰ÿ3 ܘ=A;«IÔ›¸B—c±&@?"<œKT×bH¬|_¹Íì©ó¥_%o=uR•týÒ¼²‚¦þ#˜øØ}óq­SWúr>*+0tNê‹óFÀgítÈ:EvH|Ø:ÉJ|ÊR,ž¤Ó ðx†’ùôÜ\šg€ÛÓÅb1úϬͼ;:ò}9z®Þ{sY¼¨«‰»l§ñ«»ªó¶<õ­FäÞ9è'nÍZÞøNã(ÃEÝ\{†=óÁ’¯í|\ée¢_*ßë/Sõìx°ßÐ×Éœ+w|ïþù‘’øŽ”!íó1,S,’ ã­É@oÀ´óÕ YååÌ[ ÷ìÖóçþå]Ÿ“º+^\lãw™Ù«¥¡Is«Agöví®cYôj;juèÜÚAÀÚ ïw”Ñ¢}ÝŒHýx,^YnªÇå{Ù‹ýkkƒQ;T]À´õ)ãò#$%ŸÉ࿞t:2EI°cG<ÃdŠgy/ Ÿ>UåY6Ð8šÙ*žTaÇt:Þ÷œT›¦1×hJ}gœO™Õ©q•´7|· ?oö›M2¡ZÍ+Ûµ2Z4!ÿU°>1u=pwte{ˆ_ÙñãÔ)?¸¶õzNO­k_Ò ŽÇ²’ÄbàÉwÖÞÅÓ,%$ÏS!Pvö|LŠa% ÃËSŒƒ?[”&o|rŽó— 7QÌ)ÕºL}¶|}ïá@[ÞMuZÑr*õ¼Øªy”ÎjÞ8…H—øZ‡aý+gõΉÿƒ’ÜÉ n>âZS@sä’dyì›—¶pµ)–¢àžÏv|RÞ9!ee¦`Tã«`ú%F ãÀì‹Ï$ž©îJoïô»Ói·©i/B·š€þêÖK5*€^½—Í¢z È7jb´íÔMÜÙ“ ìTsE±ðàÚ¢•‡? —‘eŠBõZ9kRçËÇR+ꕦ¿Ù[Z°ƒ…ÅøI Øu’í­ùÃסp…5¸ Œ¦÷êWA®jÎ]–šÌ»£¹?¶ŠLõ-Î,®.XLÇ‹©ÿЛЯư©¿Ýƒbô}Aß¾-ss”tð1#jK£m^ì™ÿܾ¯`Jì¦ß¡ü++Ê‚ju@u½>Ï:X“H\Y u³[ï|¾t‡’q­A&mµçÕT Ueù“ô»™wà ¤ÓÌÛ*Ðb|æþ-½.ƒLÚ*'n³5›¸9Àt!ër£èUvÓ¢ÕÙr tÌmiVdýX ãn0Ãè) 4pì4)`ó+˜Ål§Nžt:'HÞë¼L€Ô“dAÆÙ Õù²å—–ÇnÊ“´5Чpvà[™IÇ·¶¾Ä·ÞYO%†Ídø“ÿ ÐÓ;vЫšõ‹mW¥ßÞxëP-ݺàvôƒª)M‹Tâ'w”ªJwMÁ¶²wزÃú|vÔó@o:ðÞÇ{y9ãe)¯—d:/éf -zú£8 6™‹§Rq©jy ïß |5åóùæNOúõÓ묓é3 ¡ß^ ïß4Ÿ´ª)M‹ÄüÛØ3™@Δhâú ИO0øàG§`7ôÚÚùšÉ É$eE’&á( 0Ã"3_ææŽŠ@m˜øÌ«%U,ZÞ oyAx‹I^…{·ô#ýh®T¿/Œ ïÇeÔ@¯Íx†À|¯mÔ?ô;dMiXbd?Ö©j§—¤òÆàd‘•r‡B)úÐ¥…»À·Ffš²W `W½$uà7}R“ådæ]œaX¾jÛ:J¿ª»ú@ªh}sä+¦áÕzߎìð˜7aêÿ{@èú0o oö&ƒŸ5å‡÷S~WRÛ9é¬}ùPgH¾ÞA[ßaà…a€á°(zšõHVW–! <›~Æ>`aRUž÷mÅgþ(¦‹Àoª|Fˆ9…ÝTªzÏ ×!úûà@¯Ff ‚þ¦ ½•¸Õ6·ß8bMiX¢Ÿªï|¬Ÿ}§N:doÙ5ÌU\'ë,kw•”|,²C2,¼ïtð|ÔtýŒRú2IŠÇÓ_$Y0÷¸F+xIðv_¶¶f¾øÒé™{½NÁý¿Ñ•/èÏ·]Wrk›NÐë½2P׉yƒWqt Ç3$õgMÃ(á&ðS$r,M% \ØN@’pb ¶] ¤Yž•€Î°(¦0éA±!:˜LÜW”HÌy#xYp­p õÕ”úÄpÃMk¢¹ ˆ´ÛC½š]7ú›rÌ5ÝeŒ0‚¦4,°¾³SÇÁÏ€ÕPTÓßlúò2ÄžÅtÄõ:ΓªS,æõãY_<¡eL‘-1¦:“F.ÃâÂ#ß*è'n*S6©€^…ðLŒôß0ô÷zÙ¿8Ç!XLbVG|7峘ŸjÂ¥Ì ÄyT;×ÖxœT"³q ñ,y²–NƒMGÌϹaÒ>Þh¤¥4æ>àqVl  ·Ïð¾ZØÝeïÓÒÀ¼žQcšµ _±h5ú¾ªõ_™ Ðëßø–4.påL>ç7~Œ:«“;øC}Ü9; ÿóã?ÿùÏ5øûçüá[cpBlF¦:k[¾iHƒÅWb‹Ó[Å"8­)‰eè~y÷î7úüs\ûX¯w>vÒ†Š}ȼÍX†ÜÚJãª#RºX|/Óð)þlÑ Øà‹qo}ƒ¯tâ¤â÷hé`þÎøÍ*Öôß©ÔåÖ¦Qƒþ»sÐØ}MiT^§S÷ãªÈM…Èø›;$üc3?É8%–ò’^%Ì’§߯b²Ü¬5e_ãK€,0V† HEk|+½uZd|@iàFh¼™iì‹ÅÓ7EþíÛjµš:½ÇØ}²8ß¿m½nŸº^Ð_—1d ¾ Ð7Ç{½$ù:ɃûêÅ•M0öke~ ¼BÖytg… /8åf,ö—^ˆÕœËú¶¬ŒÓ)È@ây™¯“é­¹ø—?ffâE0õÅFñM±Z…7ÖbhÐ_`yà¾FAo¨bæEßFÛå†+¯*»Üî¶¢F0o¦ n$ò€Éà4X¦Óé^ lý¹‚]8õ <¾/´ÿ˜¬’õf¼¤³æ¬Éþ˜Ó_Ô×^Ç11¾çÙ@Z’| «Ç®Läúñ§ÏçŽþx7óG£XŒÏ=}>sz_ ×e!¾ Ôúq™zó0¸‚ß›¿ýæÚ. ýC}?Ùº¯ËÎÎG4éLgmMÂ#2µÓ!ëMLâWÇõ3×|¾/ñYàɪÀ“qÊ1ÌØê—WêÄàfä…Í”7ÝI#_LñBvNY{ãVïN{útnîéosôWaæ,#SlÚ‡Y+^y\x„Cvp ðÎz1eeLÆxJàyžIñ)(éô»?~{úÇ»Ýb¼˜JÍ<¿gÐ÷k,˜7Aê ĺ™ (ºaÓo`üJ=Uö¸ üý´ë¿8†ö4XÛó¦TQqã*($ ˜’ùøˆçùº,×ëœXGÃ/Ël=ÛzÇW¢&)^HežÆ#0¼Ej!#`®b( ËX˜bÑÀ,sÌm!Þ¡á§O†3cíj°ÅTŒÚÖ2vÆø«T]+f,ßw·ŒûwW7Ý:ñ›;\lê«^÷Õ1²£ÑÚ~mÊ[* ^9“É€›J‹"C’^Wÿ¦À¥õ“uø,í< îlGZ‹ûv·ÊW«8.¤‡© UÁ^­ ¶Ê¦ãG33Ï›‰[ãñÓ£Fñ¾[M5€è§¶îipê .Ô¤Ü3Ð_ o¹].¾1&ô«`a:›ðFÑSRuk7_]ºè”‚I_¡p–,EÕ1m¥LÉþZÓ |‡RVAè³8ee0÷’d‘ªLC/³R@’XKA¨¦$KÊR,ný1ó%ß:Ú*bLBúíÛjºØøÒPòZVIéáÞæM^œ*Å Ì+rU»åuµâ•ƒûê×+]ÿnÆ«Ûï¶6Ò„Tó =uFÕëÿìÔ•X€=`^vze%ãMYƒ!—$Ÿ/Ða-LUfϲ«µ˜ª Õ@@J¥˜Ó™¹™­­t hRc©V-©b:ÅË–ø©Ä§}¾_ïô:~l ×ƒz£"/Äh·¾•¨IŸ êF^WÝX§ô䊿þ‘Ö¬÷ TÆ™¸{I©ƒsI$©èë°@c”Œ•ÊÚ€µ€ÛÁ‚4F‚›£8óî(Ž|>ÈÇt7q@}ÊgeßÑ‘f~ú‹*é¼@çÔßT½t4¼þ+fôÚÍÞ@ÇÊÀ:D“ÞFØqs]®Á@ÛkM„º?ÖlÊ+@e:¸ŠÉ2È^p¹LÝS,^/iÎF*qϳL` |M¥E6ÅKÅøÑVÜ'UÁuµ•bRÏ¿}Ë0s¯ ¿<°OÃôº.˜A™FÎYGôhÒT¥úèê·³‰jê} ”å%y\@ªÎcÒ2´ñ`à)™ Ä}àøl- £Êò^ž‘k˜§ø„aÓE+€>ÅZ,ˆò­¸5L&Øg Ÿ{~ŠÝ<v†6Åb£tϽrú«j6¼ÎS0c—Çú‘ ^Ÿr5Ü©¢½?öÍb^oM —½2)dx²Ã(« “”²X&º³ÊòÈÞ‚Wà1W1É{k ô§J$†·Ty6·eµÐ[R»)†Ùz¶^bŠ)Ï ï‰§˜"°ýÆ=Í‘½.wæ¿QЋz½õ¹®JÞÕ?VÌëßÌ€…¯§ã[> W‡õÂ/YÇŽe­XŸÄ“¸œŽìo6ÏäZ¬)ûï$x·M ò$‹=ó […½3U¦Ê Ê2™ÀîO·€Ó³…¦vkÿ.>“>ÝÚ²Ó)´òGÏT æÖûýÕøÍvÑ} ô7k¨·èGÉuUƒÑ®Ö^WÊ0õÓ©¯¯<\7Í÷¥£ÄÖÈNà5^ªNÉg~o:ð×à&ð²@b|Ö4˪Už/ð…‚Ps:ýJº\t¼ZV>¨*㮣££Ó­™­±aRì×ÙzúëÜÌÖL#0¸KÌP1Ôf—¤F«Uô·¬‰+w)[|&ÐpíÜ 7à¹vƒ•¹uÞFÍpÃ}UiTW_y¸ŠË2$ÉHk>/Iz¤_ÆÅ“Ïx¸¼ Ëc%P~¯_öÈN{m±†k/@Ø”ÕZ X$àõÖbüß~{>o¼±¾‰·fæ0Žûo¶Ng§GG(SJ IDATÏï ô×Ek4Š‘«høÚMèÁä°¨¿)n0üL4åWmˆÑb\×W…ÆõèçµP ÓqŸDz›`ék”ß$G–q1’%Ajï-šˆw\w‹\À¥víqk çFS£ßþþÛL:ÞÀòffîi<‚D¾ukîéÓ¹þ±7ú€nöR]Âڡ†.äêGW%íú«†ÐÄà5•¦*7Z51¿Sî`j>VI¼]Ã`ù&Rz/¦hõzgíW)°l±£L–åY¦#±UýØ4Ž?Í̽›™›‰ÿÓÃãñ733ss38q$U-ðà§Roñ3xß…Ö ^/ã}— P;Ò˜úa@¯)n(ÐDÃZïôfôõ׎l!3^¹`÷Ö(°ê`ã½”çÎ’ÎZLÁ?R ˜?/ðoyøTe™øÖÑÓ¹ç3´Ä`ƃ4°ûøÌÌÑ Zõ7èÕ‚ € ·ýú+Fœõœ2Œùá¢7†To úLð°¦Þ`û]Q{Wª è½lÁW 7^ÁÛñâxïlqfœ`7$‰µ æ¶;>Ó˜ÙJcW}1ÞÀÑØ4®‹¡9â°ñ3@lÞÄã˜ö©ˆQôE 7V°òÆÜ©¯Oï Ì1®7,æÍ€~—j$*F TCÕ-ª6¢š«Y_Evûüö¢± †½)ó*Oòàã*Ó]ì[ýylŠx ñðš‚í8!–!Y€¼Õjíy­E«õÍ «qÚëµ,Z-dºx6 XÉËzYKeÖÖØ&ÙaâÖbÁ¹X…1ô@ÛÁXã‚È)‹à €­K)¸ ,–ÿV¼ÕÝ&¾V˰8‡„eRÖT ý›¹Æ r~­‰áæë5”ë7Œv3øÞõ‰™â[÷Îö2«ÌøåùªSK(Ãq.°^ç·&“>–• T÷6Å(k~K,foJ™—ª˜éážbX%šX Â)€/ìD6ƒœFÜÃlç«–t@zÛ(6¬§ÖFÀ Oˆ‡zWîºÚa¢ÃFŠv-ÁýO~õÆC­q]Æ/ÏW}ZBùLÓ[p oÍÙlžœž2lÁË‚ÛZÄžyVb%0õ»vSµ}ÁnK뎸Ƌ©t ˜ÆÉT<ËzÀ×ÞfšµLÓ«9˜Á‡)ºw‹©j±÷‡¯ªÙOŸ 7‡ùáºÔ¿öÛð?\bÞh-LœƒÉF3ÓÝ6l85g ƒ šqàâ< ®)zA`¥Z•MWÆVà ( .EÂJÀoXþm/‹Ï×3N<`ß–ïùÜó£££´× v7S[„'+U-UFªÌ.ó÷‡z³—o8 ýœ#Eý@ª[°Q(6j,è°NÙÛ9õ±Þx±ž)3‘Š>°÷ÀSX¸ª@Ýqî7«¤·_ݵ`FV3U>³øzCI|Fx›²ÍZ…+°ÕÀVüèÔ—*´&†ß/èͪ5­ù* F{µšÜ‚¡*‡§ªzTõ=ЃI÷z½dÍ)óNLØ`ª [ÅÁ©˜udñ¸SÝpM«Ê|ØsG¶¨„3Õï¬ oÁðï B*þ¦7DN,«$zj­E 7’æ:²÷zÓšMƒþ&L U¹7…ö/×ö6¬Ì¼.óªL\$ ©lF†Ã°,ïØ‚óµ3CUY‰)dœàáò¸ÄÈÛpò€d±ôƲ+(®lÊRl¸gfÞÄþ¤°'•ªîVq=†78ž°¡}›)+Ž^ý7^.Ei£5ÑÁ›§b‰}j¥ñµiU&/’†Ôª$8§pଽ~½è¬ÈÎZí P‚HO1–¢5¯)v·PöSµH¼ ,–@5¥tÄ[Spß…Ý]x€qoÄ‹pK¤2ÀäwÖØÓj ¤¬­I$ã©ØX[´/$uàLE˜fÑY=š´µo·AzTô=Ð[¥ª—¼àÈø¾¿Pq±§€DG’Ø‚q¢¼,¬—xD7à#Ð3s3§5Ÿ’ñð³çÈúfs3Jw¥%À,7ÏaÀÕ6VŒ5æ-ª­rÀYö•g¾nº”ôSi´ÝÌë2ªIçÑP«.¶ &YV>¨½wâäoöÀ‹¦¾vàÈ+¥XœL¦Ši€3®©ƒI?0±GüùóçGsoÞXŸ?úüùoÏçŠð8€[N玎N‹ Æ8µÎm5¬>«UÐßê§p©C9l‹j©4€]ÊuÖÎM(PWgJ“Eã}M@|2ØøZìõëØ\[Œ)³eì»dYá=±¤Äcè0ØÆ“}4ë3s¿ý:§$¯,«ðp€R2™·ü.\¾¸ /8½€/ìþǃÞ îÙ·z¦à~S…±†»£Ñ1¾*±¤ó &¿ŽÅ÷¸ Î¢Ä*‰n¿ö^L ïy©ˆñ”©·AYgätfî¨øÆúƪäs÷õ´¨d)ÞòùâààÍ4¬bÜzêó1ð š 臨’®ê©EÕh Ælå° ßŽ&@o.2õ€^¨z…Kú|GKzNò€?Ø{_[§6öZYW ÞÔk™ÝÔyØ|œ[po­ä;O}úû)Áe,»a7Å™ÝLm·š²âO UµZŸÿý§[ÃïôÃhô½£û±Aã\Ѷ3|ךy ôà–èùš,“ é%åšBjdLuPÀµxÀÆã¤poF % ®É(É=”Ôe©*£¤n-­qkã¨Ñ˜{>wŠþ«ÕjݲúÀüŸ*+’«ÖªÄÄþÓA¯õëÆzcšâ˜‡£Nµ—;TñÃØ@Ÿa«,›Nûpa)\ó> áZȬì”ÅÄà ù2ž4˧·[G@kfâ33[sspÌÍÌÄ33½õF”b©î*Ñg¦jMáRš§ñ££ç¾£ç·Zûý™ê°¸~ý5¿¿¶}`í´”é©„i@ÞtÉúË7׳<1lQ+¥YgÍëu."…‘yX½“˜Cñ/: µ×‹°a±†gl€çÞyPŒ¿™ƒr„ó¿·àøíèèïOçž>?úûó7b`{n§À€NáÖhYY6àcyp–#;•—A5ú´ëwúÜLCb]»&#mÄ1‹7ªX`«%/ÓŒ—”|¾´ä+0¾'‹ѧeI #I|µÁ—N?sÖýÍy"î"³»k3ƒ´»»owÑÊcÚµ¤Øê.ÀëéprŸÎmÝÊO?t•Woœ ªz£‡™Ô4ªn7£jÇ)Ûdí2˜¯ìÀ‰½6˜³L–3²3VËg¦Æ“ø ‚ {3¦XTò eo©ÓxÓˆ•QXd1) t>æ%œ]"U¾@<`[aŒ|gnYú‘¢þδ¿P-MƒÎd°°‘UËTzG,„Å[sâ WÒY˳‘1á|ZbSŒ×YÒÖø#W­i†õ˜¦C(2p^*fü°6ÐÜ7¬[§>6 Hìn¦Êî²'ÕjŠªB€©xvÜ8láp3Œ®Œør!în°þ-–BMv"ýú5XzVz ö¾€ oœ^œÜ›/g2<ŸÉd¦Ê`0ån[¤0㪻»Ânf·&ìÖb¾ZÍÔœ<à ™ª… ?:ð²8Ú;`%’ÿ2 :b\ÖN÷ Hg<ó©€3¡X©q R€¯p«LJ HðPH<öWZ¯Ý5 \^ ¶Y€Ç( OYá…±ì‚ÉW"u„*ÏWqëèËÃ/xŒ¬\t’J›€Pò±¦,L*Se¤”…/¤Ab0×<³û {X®¥¦tÐÇ­qkõ¼§² Ž,k±T-`ßRÕ’v…ŒPpzA‚ôúÇò Jµ°N“jÎB ³‚f`íÝj±šÁÕ€d±ZwãØ#ÿôÒå¢óåòtžqÉd4IÚ“ID>>´Ü"‡¥Õ“ù¼g3ljpqá¼k½ÅM‡\Y<@\åmñôåA”<Е°'É…^ÒÙí²˜<'[¹V+ï:7“““-ضÞm¢÷x’î|^„wQpø ‡ =‚þ±<ˆ2u<=ýäÉôþï¿ÿ†ìºHg]@òsS€a€îñËrˆ].Q ÑHZÀ„±Ýœ'ˆÜFt‡¹°Bk\Ç®õc×Ïÿ“…·/þìËÙu–ƒ;äOƒ|÷#è˃(Çëë/³P€ÛZÅûüæætÙuœ…°Ø9 óνÙjqùÖfN ƒu“Ϲ¹0þxÞˆyî‘<O+?ËÇÓÇ`ò] ?Ê®&ˆà£#ûXFùœÝþ ýz¼ÕÖæf€ xFÒÄ$·ÉMäCbn `/æiÚ d¸ Â< wçá‚}ÛO»DWa‹|î×úv–Î*òóåu1Y)=‚þ²Üe”ïcDñ’ÚÌ=§C/WCÙ˜w…èD" rAÏ&-&Ã/áhå€ëÓ@ã dñ@æ ðf=Hr8ÜT‰rn¸Q¦’@}ÊâT(›ÝÞ~ŸË­p+ò$ ZL§?|lø¯å.ƒÛï8þ[¸¿¦¦ö÷Ÿìƒ%æ^–·ËyqzjºœuMç§ÅÜôñçõ÷ï§r›9ð]9`.\2Ù›ܦ‡KlNåÅ0¦>ªb*>l9?½?½ÿd}¿œßÇ'A2דŸˆ¬>rú¯å.§tÜõô‘oônWöÉû'O²Ó›@Á§§š»žlo»\ÛëÙõì6lÚ߆7Ç.¥„à‘r“)¯ÒàðŠàÈŠ«°ÑEÓt]`3ÙŸñ¸\hÏòòr‚V䇸èCâôê™ îNû"ñô·Ëö:Xb`#ëÙÿý|<íÚv~¿¾ž}²ýþýx·ÿÊ{x-OcW$rwø[àîEívÓhîèÐSù©¼+ •Ë¡—à¼þÏþö6Ü;`柿φþ÷åƒi 5Ü5ÇÕäõÓ5–;á[=°–ryjzýý6¿| ÆýÉö>–'ïÿ÷§¿~ùë¯÷¿Ã-0O*%ŠCQàñ"ÕáÜ@}Zy.Oçsâñ1ø²î(xñxÂDxõ0 E±5µ”éýƒi •«}·¬w¨W¨­jL€oôOþß¿ÿí_ïß¿ÿë¯_ÿú Ðýû0î¿¿ÿ_z¯@NðÃþtÖUj~bãÊ~~¢E 9¾ó¶`ŸghO¸ývöóÿþõ;ÿ“"ÿ§_ÿz0­qûjß1è5$jªçmwwÄ\Énÿ ¤¬ùOýþ÷¿~ÿë×_ÿúÛ_ÿú`úy <ÖÁÞãYÿŒ‘HoÄ\®Åå1PÞ¹à6paìp`3bž?ƒG ^oÖí)g³ÛŸAþ{EþƒiˆÛæô#=ƒŽú÷`Ú·Wl2Xs 4#ã¾ýä 8²®ÏÛe çb9‹¸Æ@›ržsƒ¥?ž.+c¸bÈ¥@¾œÇ>zÚõ™ãÄP6T·&½ÿåBþþþÃi‡›WæN¯ÔXÀ¡%ÒèöqœÃ˜ŠyE¢Ëµ¿Ðüëï?½_ßÞþ¼Ž}ŽO€Æ¯oÿ þ²/éŸËYÒ%!œÇ¨|~ëY <€üP¾*c€å18¼!8üÑ¡—!x2Ðûû¿üòûO?ý¤Áé51  Ž¡asóØ;ýÝnðæÑÖúÑð±@WÀ“ξ~¼½½þäÿÉf9×ÿd§óÇï÷߯£ Ï¢K;Àv¹é0!ƒç¦i·‡#JàµÒâ*wƒíOpaÆ%ƒá†ãÐÇÇb"‘8 GD”Ÿ¥]ªgwÀz@¯}ˆÞrãà1]ÚAoZËŸ4›ýü~{ºü>‹]6ÛYå×ßÿúe}}ûIvýýçmì§ä<««Mr¹d2Èqn·;¬Ìz8å Åh¬;ZxŽˆÁ`"év­§Ã!œ?«GYÞ7è'~¸sÐß­9`ë7 ú›0¨Ò•]‰ùýcìR|þ*°xQá%®Ïëë8$ß 29Ç% °ì«/CnkäÜhÒéäÉ«mVß_SŠÉOÎì¡TÜ.Fd§§6óYðVYòþ=púÍÉO“k.ŸË`²¹ly*?í¢ÝÑdÒM‡]/_®mwãè01·én¹Ý@yZawo¸VÄÁªìçuW(ûПwQ.Zÿå] 7Q†i¶›‹sÜ\®Ã¸lýºÍªÐǪKÓP¢~¸ùV½aòH†DA2×Êå6[­×ÊOmnât©<7•Ÿš.—§ö·äo¯ÑÙ^ßÞ.'=\!(³ªB⦇sÃÓ€ ·Üy—è¢?¿CS¡|v{ûx*¿þóv¶œ ‡»mJþ"ÝàCýùaZ‹0Ý„½QñztS>‡ª ÓR¢~¸éV½"ÂÜ¡†T ÕˆnQŽ‚§¡ìÏŸ³®ã—?g³Ùíãã鼘Ï妔ٮÓyðn“Ÿ>ä=nœ/åÁ©Sn1]™É–Gl"’\ËU>]årùÞdË«/áD$’H„WõõÓ›(&MsÙ±[$Ç ‚Áª‡ªBŸUei¨Ð:|˜Ju°a%¦›P …ÇT6yqjÚ4ç¸\Þ_ÿyýýú¶ÝÕ©|9'‚¿êÒÀï=8êÊõbŒ“ž©¼Ë%ºÝÈoZÑh0è!`‡ÞBžãæÂ‡ÁHd9éÚ¶HÂóÀ@?ÑwÀqûÑÔ¡Ïqª¢44hn²UooâhZLžot2é ¯¾|‰F¾\Îsùé|© ÎýÆ©T"øI Ϊ[‰:psÀfD¤÷›ð—ôx¢I‚kÁä€ë‡¹0ðû0z¢k·ÛmÝ僂­>sªðt–‘´Ùí2rÔ¨}S•¤¡@ëps­zqø×63~¸!5Ã4àà =žú©ÍV8㮹\ÈÊË—yW(”͆²eà;¡\2)†ÝnϤ'Çqj bT}<Û— b–Ëp0ÄÁ©(¼9$à  ¢d·mt±„z6}^ ê»{C:Ì)6#Iõ õÝõl5Û¨_á…ÆQd¾õ  wt*Æ<™ &ÂneB ØïäpsQ³Ÿ-ãA±5YùTQ²¸EL·F׋@pZàä¹`8áÓîÄr‚"¿LÐôa°!"‘Ñ­<{¦ úþK[÷)ƯÏ@ì]-#D½m&D©~¡±·‘}M‚þêu1.À€"ó‡%Ï)@D×çÿùÛK1ϹÀ¸¿üŒÝíàNçó¹ütÖå*Éì'óô&æ¾ÁA܇Yþ¢žÉh+ <(Œ޶£]ŠÁs]náÜ49¤i »|ùùoô7 =‡#Cý E†ThÐÈ:öÆ=o­Ëã" ¨2ÛtJ™Î…Р#¡™š>ºËÓðÆµ ÜçAý™îƒä§Iô^[¹ÞK˃I,ƒ-wn™\~3Y™–P‚h'"Äa0æDŽXu‹b" j8²WŸŠæ@o®½®Ü4ýʈP?PAý!«®zð®ÚÝ›úNékS=tЇBåì´Xve³åílg¹rÉÒΕCÿ‘,»+éäd C‡Ýœg³åÉmrn.Ziã •»Õ.Uf+mÂC‘`iÖQiGº:guU q ÌâV§šÕ›k/}¿¶£1EæªhT¦ºu݃wª—}âî@?ì¨ö$–Í&(†ÿðÒjÁ?z>O»¹šL¶æ%OéÙ‹ÙäÀÒ—JóóÏ*¥Ò¬R¢Ä§ùgKŸ´NM7$†„É70¯ ô£@ýXª£²»šuÙú†¨æÄUº8^ÔÙp?ü°)º¦¸ÖÆÉ¸ò›ù¬+䢹œÛæúwß$+Ÿžõ¸8 0™Éh’Nƒsaé\2ZжKívdéÅŽ‰Î/9ì6`ô‰ ѶE‡D„ WC/µ“=Å0u½ÔôÐz ±CVHew5!ê¢ÕÕé;õsèz¨ÞlËýos˜OŸÀ¢''á…ãD·‚ðdt2‰#WM·,UJm`4måèH$"Ë‘åDb5˜H®Â-qüøã?~tÌö9©¾u¾–7ô2ôC›zM¡CÖéöîjBT%«k¨¿ßùNh‚~¸Zê8ÃRqý¨VX¤o¢ßš]b9Ê}OFƒ´;è r­0¼‚uO{÷€kwTYb-L‡ÀÞmx *‹z8·›J!õ‰Hb9éÚçí@uàˆ”Jö¾çtÞVcë¶¹Úhp¸~ÈO ‰zm™Ã]¹»ýÕÖ¸j5¾~© ú¾-šWÈXÛáBR{ 'HzB«.׿æPî%ºWSãÀ…ýD¸ép N$¦ëþ´4[˜cVoLY 7‡¬'J”iÇcKmIDAT€ÐGºÁHâð0b³9l6~. ÈO?aôæ[Íâ/.™ÉK¥-r¨ §Ö½¨"C]²ª²ê¯´Ä ã£3¡ ú,ÚÈXãy<ħÉí¿tÕ“Læ1èà8; 4ÿ®)¿A ?ÉV¹`0MâÒS¹|>™ÜâSªT<îÌgÕ¢i—ˆcQoÚ¶½nwoïÅ|way9AüûþAqMt4ßÕry©ÌªT9Ô…SëuT‘¡*XU×í—í Žà ÐOô?ÈH3Þ®Ìm‡ÃL¢;ïF OKä”ð¥$“9®…Ì^‰4À5Ö>ÍNNbBØœ¨ò)éá¸D"¦óy\“Ê•Ý߯”g\e¶²ôÂ^²·»]Ã+»Ýpü ûžÍ 4’ú ©ãk1oêûH¶b·vW‘¡*XUWå—­p ÚW?ÞýÀc 4ã­º Óxn‘æ0B;#•AW ®ÏÓ.?(Ø÷| $žÄ·Àt^|‡U ‹ðka| W¾år%",óK/^Ø»‘åÃÄrâ¨ÍÞÆÞÞFä½ùœ>‡­Ø­ýUd¨ VÓÕ_ùEÜ<雈¾Q·ï41TÓþMi¸ñ<\L¹;‡ÐnpC¡—ÃÕ¸®®ÓÂÉ"„·Çãs_©€3+Òî<¼ßLÎ>«T>µáì¥R) 8_?6L,·ó{—¬.'–»{öÙþŽì]€Þ°ŠËbÖÔ« R#ÆkvkwjrUUõ×ýõÌûµŒ èÕ«w)jȶT+za ¸ºB"Øør^Ì+Sq^TŒ¿;ìN$‚ø}ôÓ$à>ìæ&ÑùmqîMøšÎGggg%Þ$"m[wÃéFºÄÂ!8w8Ï*ó¥åÈájâþ-½aWʨ¬Ó@¯jÖUÕkí¦9D{å[ ü^E¶ÊkŸcŒ6¦ª ÛE‡$³Obg%‚þr"§1Qer2èI✪èl!ïI ÇK_ÁØbœC•ã6ñÛOØGO´+íùùRpìü¼=±u‘@ÿááárÄQ™}ñâÙ‹~ýôúëd¨vCj¸ZLšzu9wú‰Û[Ô¶iʺ¥©»ú«˜ïsˆšª7¥zÑ!)¤`Ü´Æþèñq9ßÂÞËIŒ®üTÁîLd6öO•0ö×{ ÷ÞÁÒ©iªTšƒ D?¨ôh–ÚÄj8FK@fˆ6ÐùÒü³yÛáaâèî„­âxñ¬„§Ô]¾gÐëÛw²¸a½}Ô ú[æù¶5Ájªú«t¾×Q¯ófL}a*5êWD:TÎÓ. @*ωné pøY–%¨0%\E• ÐkjÑâË®›Á†þ>Aï¦Ã[ãRrØÐ"æèKNzr“Išœ#_z†åÇ_`'N‰p¯Š­ä'0øžR” ø¶6x¯m‡Í†ï‘MD6öì¶yGwcùp9Nà]Yø&@ß§K=‚’Jƒ…KI€Ÿ&ÏÍòn7‡Šq8†Yb†n¸AÄm\[ÓEç+ŽJ‰%ƒ3¨JŽ’c¶Ý-Ù"‘½.0‡ý˜{@ý^âpJdþco ËV/£ueG]/“ ¬ûkÕ‰ºÜEÿ-r/ [-æ°Ý/ßÚÜä’`î=I î“ÀsÂt"éñÀæÃ4FRŠ®ãíýòþ±Ë•ç<¸µ„èr»ƒ\‚ =žö³y;ΕÚÛ[Þ@~ã°%Ý.ÕG–_Ùî/´ØˆÐ~_>lТh«èµQ[=‚r- ½Á¸âV’ s˜‚É '1‚îLù‘àðWÄTPÇû½Ày1º™›šjÁÑRÖÐt•]îÄKŽÙùY‡ÑßíFfívÛFdÃVù@ßßïFÊo†¯×Ãýà ›+;k+4_]]r&1m1ç‰NVéìVSl"¥iM>{†Ñ-·S¿šk••žÍéüt¹ •?g·Ë.W(‹+Ç–*ívÅaǹR¸C»Ûµ¿ôb~~ɱdßÛØ›±4oƒS†$öÝá.L½Ñ£F}?-L½]G][]rвc_L;" O0‘çà. Ã8Ÿ‡d+ÏfŸÍF[\Ðtãü1ïÊCqã‚TJÁˆdNÉúÔŽ¶íÇl)’X=\Fl{‘åni~éÅ÷/óßÿøâƒ^ÇÎÿ¥ ×ËêõƒÞTH‡Žêê3ùéÙdÔŒÎ:¢y ¨D‹K*x0ÌÒv»á®(E‰ˆ'Œë7ˆneú ø®ÁÊ$†/D•1*"ZªÌÛÛèË‚¡O,ˉe[·dwÌ¿øÇÒ,ø³ßoެ1i}wqüÍ0µ2!Ú¼ò¯•p¸îÑXs†~p}uJùTIblüê!x­Á`»á0×ݤéVåY4„a•¥YÌúÆ$nÀO Î1Ʋ w.r‰«‡‡‡aœ ‰$6ˆHwcϱôý‹%ûá†mcaÁñý=ƒ¾ï…Ðy¦H½1Gzl’‡Òþµòý7‚`ÆÐª°^!à½æ9wŒ{8Iê9eyL±åQrxDw²¤ÌŒV¥ø«ðpíŒm¿œ8Ð_ˆ1\ÛÑ›^RVOKœžâÀ¤c^VQÄUò˜š˜Ã…ƒÊÌ©’ãm*U™ Ã‘`"œD.¦Ÿ*‹tÛŽK³%›}~¶m¸w–7öìö=ÛÆ†­½ì‰î=LÐ: “ ¿zêÅP• œ°¡2PQÓñõû‰A ¿”1ŽÊê’Ã)ë¨M‰S››Ï&“›¹|¾å>_UG鬹h/v8Šù›¢˜·ÒCA7F"ÃÇ › ^Ó_ZšŸÅl7¶½åàöíÈòáòì³h¢ôéÙÿwß ×!dN“¤þ’ôE½Q¡:NØP¬iêu€~¼˜×'µ•ÇXb.¿99¹‰A®U‘ãZa„=Ç%'£ž¦B(U¢àÙèÛø×$píAO»„®,2üH7ÒîÚfg—ìÄ.¬¶·éîÁO$©86"•÷51ü¢±uȬÔ,诠^M¢iŠ;JÔëÑÔõƒAoó£ªO‹sÑôª 9 -æÀ­¸‘Ô`ŠËÞ´ì”ôðÓÛŒaômÀ¾ÂŠˆN‰D‚˸°Z$A ¹©T¶SÜïmt»‡ ÿ^X‹¯ ×%b°ÒáøÍhjdBòH´_o€ÛÍ¢EÚnîgª®£¬.&ð…?ÚÎs½ ³°':û©ÔRúo8PŽIZ1&Gä‚ÊŒ`5A€:ø³¥ŠÃfy9²HDìKßcFx¿¡ۆþ{¯îÕ‘½ÒìÚt(ýo½SìKÙnaÿòÃXk9HX˜s{Â4ç)E•ô}¸JlŽÃfä“,&ÚFðƒsÛ#4m¢Å…F¸D¤mŸuØö0’~c#ˆ=ôû÷KðúH÷ÕÆ«ååW‘eÛò†}Þa¿_zsÙîšô(}x êõ«úî‚Å)w†ùâ1óÛ£,“† †gSIhÉåónG£0{«Òã!’`Ùà8= û*KJî>eÖÈN±µggŽ P›î~a!±°°üÊ>ÿý?¾wÜW6„kõÁü8A?â* ®ÏòVÝG¸¾S0WOͧ·6€n0_©tƒ-0æÊ|’ó™Ty1‡‰ê]ôôÒÏÁ0®E âMä&jÌw7`s©Ìr×ᘷÍ;% »YÞX^NñY°¿øþûïí{ƒóÓ²b‚//޹¸¸tzµªœ1¡jÒ_s9àRm³»ÄüHÖ+³“hO^‰'Ëå6§ò؃9•/»òSy.‰!”¥Òf0œH$8ø â"=tÈåüÛì¶n7èò®}~~ 0oßÛ@°G6¼/þñÂ…zc×ËL› ‹ù¡Aß|Æ„Þoï7”›Òe…¦t]Ui¬ô•Çq fîKbr§MO+'¶òùéòqHä\"r‚ÃÕa£D›ÊOÁP.ïoooì]4Mƒ'[?¶ ¼¾k³/ýã/0¼éí³À|*€ùW%Œ¬Ÿ_úÇ}þꀨf£½xúµÿ £—þ+" I¤@ûü‡Rk7йÊTMÎãZƒc­QLìG‹®Æ ÂÃåò4ü(ð&ß"Z=¤+›ÂO)šäÜàßâ²R8>éFÛ¶’Í6¿4;»ä°/m(sc혞ÛnßØØ‹,„ljñJ‰+¶ïõ95ööë¤~Ã^Mà° ‰w¨êî‹úH,çÅV´â 0ô`Õ•sûšÇܹ)GŸ »h:A”ìK/€èÛlQÍ´~ZO¥-¶âÍú­€^ͨÔÒ0àLÖÏPãé¬$À¼Ý-ŽÏÕ“ÿôi2©dÇœä]*e/µƒè½*…Àûûnð&ذíuqEð¶ÍQ©D eJU©Ôí‚£ÛŽ&JË¥îžý{ÇÞüÎÒ8‹A×hÌ 7Ø’ôÆÛoø 1:ÚËôå2ÔvzÛ‘ 6À{8×D=Éh È{ÁMphÌ•ÐJ`óðÒ%0_+æ$FvÓ» " 2aºg÷éÐ*´E‚Ëp”–ööæíðÓ®´Zsd‡ª×Р7ªÎèG ÞO…I»aBÓÄÕãu¶ÙøõŒ¶&‘ ‚I°ð91Ï…Ääl2‰áôA:NóÆäóA íFÁ³`$˜@¨•z$ïa .ÛB‡ÝaÎ-‚sœ8„Û‡öWö½Ùn¥]‰Dµbo†ª×° 7¬Îèuiº"†\íü¯ídª&zE¯™ZÒq³h õÐ.Žo6‡ÓH¢³Ï0ß§ ”‰J0$°³ ;¾3ß.µ±gÒŽ ÆÃzà)ôp"}¢i×Ëcàó‰H»G.–ºmðm+Ë­Ø›¡ê5$VLè3k³´5Uƒ«rõÛÞ¡*b¢ÑÌVv(UšÊò8eêeÈ%†Ê³•R)àæ0¦,ŒÒ‰`;%J»­ËŒqÖH„ˆvÁÚ.®.ÀÍãrƒœ§2;ûã‹/~\*q.×êáá¿_þÏñgWÈžÁBäßpZ±7ã©ØØuHÐßP;ÔÙWÓ'¡Ý,:ž4wX-Meå|WPr}Vñp!"è¡ÃDÛ%¢6¸ "Jj„(¾k;rºË‰…DoªTÌ{"±šý9 /èêØy±---UÄ糎¥ùùH»´¤51|<[›úÑÿp51{ j Òßk0­k¨ji*E.¥¢ENä0iÁ!vз¹ f¸QæŠ`ïä!Òxø "•ÇIR?Á©‚ à5 ˇ€÷GöíWÀçžÒàóíÊÂ+¢ôðè)}Â~¤5ª&fÏàfc .£P5ÂzWó@ëÝ®' ‡^Ò4—™¡]D"Ä…–±{§G-àœ\IGé¶ÙØÛØØÃày<"˯‘…Ã…WtöêÕÂÂá!ÜÿÞ[Xh//Û6Ž’ÖÄðñTllM:èG^‡!jbVÿµ–Ð4éß>„z-4Mç]yœ35½ÿþý~¹ opÙµÑëÇ äÁD8L( /•…¥àoyy#66Ü¡X>«oƒ_[{aayauuuáß‘ Ç«ååv¢D”^ï9}º@?dŒÖmp8Ûˆ]Vn yŸPßͦ1a£]ÎcøA¹,æËåÜÔ4üËå]Ç®rÙý7èÁ†WiŒ-ªÈW•@Ë=¤÷¶=Œ&sÌ/-Í–º%¸66‡Í†aiÀoJ%àó³íJ¤´@xºÑ›ç Ñ6ŠÙË6L‹½ùk¤ZtÕ¤?òF£äZuàý²\ÝÙ°¦1Ô«DÀé7ñy®\žÂ<7]\v•9Ú c4±Í;˜} -ÿ{×÷Úª²Fw!XƒˆPÉ@† hðvƒ5pt2àƒ—8Ô§}ØoáRŠœù×ï|öéžžÓìüêéÙ7«”¤úeÆå°F¿Yßuc¡D¬¦éÆ|¶´€óóù|ùø8Ÿ ¨2ØaMÍ[Á߯ 6‡¹¡½0¥š¿éßöʬ?ª3ÏéÑ÷Oß'è¯q¸%ç’þøGm?Ìø/ÿ»ù1®Eú¨\·iÖMÓDQýõkÖxn½KÚÖí›Ñ©5d =…>e£•„™,#ƒaèår®d½’81S‚†s©—j«—È&6c‚>ú6÷æ}rç?éO>9‡p]jŒpÁxqŠE ©ïCu‘:«'“& vm–û£Ñ úÕ+šÊ÷•Ò †⎧ä  ciºÔ…RõZ¡>š w`îgu¦0ÀËÕPjÇê:,˜à)ß¿CúóqTgžþÒ_°9ÄU©q(À%ã}Ä):-LÃÊs}¿3g]¾Î'÷ͳ"yØôÑ"Û¹»zQ» }R×õÂá«Ü ƒÔ¤”".–j°×Á„ÅD]M\:¥³(m4 !VÓ`fš¿ýþø¹Hj K‘þryhGè”—‹xT”«‘ž%I•º•ëõ> «'/éY†U¢˜þä?+`Ü€éY’†t¼K9f˜!“ZÙÈV<•ê) cf³Ç¹c±7ûÎè,#$$HbsösþËEäÍ)›_#\&æ‘!.Ѳ??,WsT"áÓNêE¯4;¥¡—xé.sGËî>«=L)>‹õBŸ–eh¬†RRÞ°LXC©[1žÖr^òÔc„ (FB˜úÜZš³_¬Ÿ„ô_Î'ýé;\¸)?àQOp5Òã!lÛfÝ×»v—õ•· 25§Í‚ îëö© ¦,"Ä”1Ò,S׋ 0<˜U2MÓš=ÎfË¥eÍ­_ÁïÌœ›š0Lœ\–ð}±Ç<ÄáÏBúw"ž°ß©¡.Ù˜£;ïȸW>ü±™_ÁÂ(¬ d²¦]'h' Ì¡æÅPs þL™9Ų ÃÐE¯Vq¼B¶ÝI„l;¶Ím^B¶™ žÆ%‘±éMÜό‡ÿÒÿëO?üÑþj¿«6èÇ~zÜkûÄÆ%Ñ®Þ5m–µÓMÛ÷cÕ´Å"I{õÂBç%Iøhv“8DÓ^ͺAè0„ëP \‚Iw«‹uüÿ$ÂBʘ2§ ¡.ÆÃ1_¹Éß|…s›t¸yß¡§}—w¿äñ{\©ÇŽ‹{áã_•ÛTha´Hê¬í«AÎe•린:§D(6w3s nLjðd–ù-%ç ¨(5hƒeu„rœs' Õ0ÏÔHï1bF†- Tö‰»ár¸™NÞñ#¸þOÄ“ÛL¦ÓûÍ÷ïßû¾M›ÙuâUÏ8N*ÏKÝ…çðtÌæC …ê-Cîã(mƒF›È.ã 8_,$ŽÃH¨¶'xÏèÝì`ï'oÒn¸áoÁ.uTG)® ¸&ƃRZõ‰[çPP–Á–`“"fH’¸(ôlVd¥.Ýáq--hšSⳜa1¥¸ÍØ`vüéo¸áƒðRï¾O›MЃC%¥JÚ)µqÉw¢O*EyRp ðÉŒe\ˆWš-V„—öjÆÜ6,qƒíöêRIRö7U3¹[{ôá·7÷éo¸áoAäçXçÜ)¹9i˜8$K¬ÆrÊÙ€J»€dúpè¸Ð‹WÓ>óÕ{,4¥é†±´Š•0ua\iù;›;iºàï¥)íýƒIò!†û;7Òßð)?·›é¦ Yônæz«üªw’¦jšÍ¾Û¯`Þ Þ¡úºTSY†…¯:LÐ ²é-]ÊBê{¬†ùúÕZàɧÏt/̇ýóºYçé`Ø7MÃçâõt;F ­\¯iXÅ’éÊ-ì‚(ˆÜv,ÐPGê`Zæ0»ÿ2ĸm;œÙHMfK%mdé8ž³pÊÔW™9„7I³fw³î@%’nø ìÔ0?Ýí¶Aôë‹[%nâ.¶AMÝívú²­7Ù4ÛÛºïo¼mÃ`-¬šµÚyƒ¸Òó6Y©®”6Åw˜ñÒ&!/KÛ.ýª"¤ªÖyVIÊ~#ý ŸjÂÚ÷Ï“Í}lÝÍL‹'M›¹›vÓ¶ÓíöÛ·ÿçÛvYEö&<2•à/:C‹Õ¯\ CXb[ ’2H¡·fÀ›faj«X3:ƒÒý]¾Î«þ¿Iö¿¯ŽíIEND®B`‚eboard-1.1.1.orig/tstring.h0000644000175000017500000000426710757567572015154 0ustar patrikpatrik/* $Id: tstring.h,v 1.6 2003/02/05 19:57:54 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2002 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef TSTRING_H #define TSTRING_H #include "stl.h" // string tokenizer // differs from the one in gps (http://gps.seul.org) and eboard 0.4.3 // since it only matches strtok behavior after setChomp(true). // it's cleaner too. class tstring { public: /* creates a new string tokenizer, with empty string, chomp false and fail value 0 */ tstring(); /* sets chomp flag. when true, the character that caused the token to end is not considered a candidate for the next token */ void setChomp(bool v); /* sets the value tokenvalue returns when there are no more tokens */ void setFail(int v); /* sets the working string and resets position to its start */ void set(string &s); void set(const char *s); /* keeps working string but resets position to the start */ void reset(); /* returns a pointer to the next token, t is string of delimiter characters */ string *token(char *t); /* returns the integer value of the next token, delimited by characters of t and assumed to be in the given base */ int tokenvalue(char *t, int base=10); /* returns false if number is zero, true if not, defval if no more tokens */ bool tokenbool(char *t, bool defval); private: string ptoken, src; int pos; bool chomp; int fail; }; #endif eboard-1.1.1.orig/COPYING0000644000175000017500000004311010757567572014332 0ustar patrikpatrik GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU 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. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), 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 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 show them these terms so they know 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. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. 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 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 derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 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 License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. 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. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary 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 License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 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 Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing 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 for copying, distributing or modifying the Program or works based on it. 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. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. 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 this 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 this License, you may choose any version ever published by the Free Software Foundation. 10. 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 11. 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. 12. 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 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 the public, 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) 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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) year 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 is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. eboard-1.1.1.orig/goc_edit.xpm0000644000175000017500000000167310757567572015612 0ustar patrikpatrik/* XPM */ static char * goc_edit_xpm[] = { "32 20 12 1", " c None", ". c #3F3F3F", "+ c #000000", "@ c #F2D604", "# c #FFF3A5", "$ c #FFE4A8", "% c #060606", "& c #FBE1A6", "* c #1C1C1C", "= c #8B7C5D", "- c #1F1F1F", "; c #050505", " ", " ", " ... ", " .... + ", " ... +@+ ", " .. +@#@+ ", " .. ... +@#@#@+ ", " ...... +@#@#@+ ", " ...... +@#@#@+ ", " ...... +@#@#@+ ", " ... +@#@#@+ ", " .. +@#@#@+ ", " ... +@#@#@+ ", " . +@#@#@+ ", " ... +$+@#@+ ", " .. %&$+@+ ", " .... ..*=$$+ ", " ........-;++ ", " ..... ", " "}; eboard-1.1.1.orig/sealon.xpm0000644000175000017500000000335110757567572015311 0ustar patrikpatrik/* XPM */ static char * sealon_xpm[] = { "32 16 76 1", " c None", ". c #161616", "+ c #566202", "@ c #969256", "# c #FEB20A", "$ c #FEBA2A", "% c #FEFAC2", "& c #FEF69D", "* c #EED246", "= c #4E4A52", "- c #E68256", "; c #E67A4A", "> c #C2B64E", ", c #C6A626", "' c #EE8A42", ") c #FEF296", "! c #373647", "~ c #BEB682", "{ c #EE924E", "] c #2E2E3B", "^ c #CECA8E", "/ c #76725A", "( c #EADA3A", "_ c #FEFEF0", ": c #FE9E2A", "< c #CEC24E", "[ c #C6C2AE", "} c #272633", "| c #E6DA4E", "1 c #FEAE02", "2 c #FEFADB", "3 c #FEF6B5", "4 c #D6CE7A", "5 c #565246", "6 c #E2D65E", "7 c #CAC69E", "8 c #EA8A62", "9 c #AAA672", "0 c #46464A", "a c #EE8266", "b c #FEA60E", "c c #C6BE76", "d c #DED262", "e c #CECA92", "f c #FE9A1E", "g c #FEFACA", "h c #FEBA22", "i c #625E50", "j c #FEF6A4", "k c #DAD26A", "l c #3E3E42", "m c #A69E52", "n c #E6DA4A", "o c #D2CE86", "p c #C6C6AA", "q c #DACE76", "r c #FEF6BE", "s c #FEF6AC", "t c #9A966A", "u c #E67A5E", "v c #3E3E56", "w c #FEFEFE", "x c #DAD271", "y c #D6CE82", "z c #FEFEE3", "A c #CECA96", "B c #CAC6A6", "C c #323241", "D c #4A4A62", "E c #D2CA8E", "F c #CEC26A", "G c #FEAA16", "H c #EADA42", "I c #CECA9A", "J c #EEDE36", "K c #FEFACF", " [B7IAeAI7B[ ++++ ", " p7e~/ii/9Ee7p ++ ", " [I^tDC}]}lcoE7p ++++++ ", "[7^EC]=m@=}54EE7[ ++,+*,++ ", "77o4}C!}FxE^B +++__+*g%+++ ", "7E4kC]H(((v}6q4^7 +,_w_+*Kr3,+ ", "AEq..........dqoA++2___+*K%3j++ ", "^4.$111b:'8-;.kE7+,z222+*%r3s,+ ", "74.$11#G:{8a-.q4^+r22z2+*%3s))+ ", "EE.$##1G:{8a;.k47+,%2rg*+*r)j,+ ", "7E.$1#1G:{8a-.4y7++r%rgr*+*))++ ", "e^.$#1#G:{8a;.4^7 +,3%33s*j&,+ ", "77.$#1#G:{8a-.EE7 +++jjjj&)+++ ", " 7.$1#1G:{8a;.^7[ ++,)),++ ", " .$G11Gf'-u;.7p ++++++ ", " ..........7p "}; eboard-1.1.1.orig/p2p.h0000644000175000017500000000343610757567572014160 0ustar patrikpatrik/* $Id: p2p.h,v 1.3 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_P2P_H #define EBOARD_P2P_H 1 #include "eboard.h" #include "widgetproxy.h" #include "notebook.h" #include "clock.h" #include "network.h" class P2PDialog : public NonModalDialog { public: P2PDialog(); virtual ~P2PDialog(); private: Notebook *nb; GtkWidget *chost, *cport, *wport, *wbw, *wbc, *oname; BoxedLabel *bl[4]; IncomingConnection *wconn; int toid; void waitConnection(); void cancelWait(); int checkForConnection(); friend void p2p_connect(GtkWidget *w, gpointer data); friend void p2p_wait(GtkWidget *w, gpointer data); friend void p2p_cancelwait(GtkWidget *w, gpointer data); friend gboolean p2p_check_incoming(gpointer data); }; void p2p_connect(GtkWidget *w, gpointer data); void p2p_wait(GtkWidget *w, gpointer data); void p2p_cancelwait(GtkWidget *w, gpointer data); gboolean p2p_check_incoming(gpointer data); #endif eboard-1.1.1.orig/script.h0000644000175000017500000000454310757567572014763 0ustar patrikpatrik/* $Id: script.h,v 1.5 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_SCRIPT_H #define EBOARD_SCRIPT_H #include "eboard.h" #include "network.h" #include "widgetproxy.h" class ScriptList : public ModalDialog { public: ScriptList(); private: void refresh(); GtkWidget *clist,*b[3]; int SelectedRow; friend void script_refresh (GtkWidget * w, gpointer data); friend void script_run (GtkWidget * w, gpointer data); friend void script_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); friend void script_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); }; void script_refresh (GtkWidget * w, gpointer data); void script_run (GtkWidget * w, gpointer data); void script_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); void script_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); class ScriptInstance : public WidgetProxy { public: ScriptInstance(char *name); private: PipeConnection *child; int toid, anid, frame; GtkWidget *runner; friend void scripti_kill(GtkWidget *w,gpointer data); friend gboolean scripti_check(gpointer data); friend gboolean scripti_anim(gpointer data); static void initPixmaps(); static bool pixmapsok; static GdkPixmap *spir[4]; static GdkBitmap *smask[4]; }; void scripti_kill(GtkWidget *w,gpointer data); gboolean scripti_check(gpointer data); gboolean scripti_anim(gpointer data); #endif eboard-1.1.1.orig/clock.h0000644000175000017500000000721710757567572014553 0ustar patrikpatrik/* $Id: clock.h,v 1.15 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CLOCK_H #define CLOCK_H 1 #include #include #include #include #include "stl.h" #include "eboard.h" #include "util.h" #include "widgetproxy.h" class ClockHost { public: virtual void updateClock()=0; }; // values for getActive() #define CLK_WHITE_STOPPED -2 #define CLK_WHITE_RUNNING -1 #define CLK_STOPPED 0 #define CLK_BLACK_RUNNING 1 #define CLK_BLACK_STOPPED 2 class ChessClock : public UpdateInterface { public: ChessClock(); virtual ~ChessClock(); void setClock2(int whitemsec,int blackmsec,int activep,int countdown); void setHost(ClockHost *hostp); void setAnotherHost(ClockHost *hostp); void setMirror(ChessClock *dest); int getActive(); int getValue2(int black); // which= -1=white 0=active one 1=black void incrementClock2(int which, int msecs); bool lowTimeWarning(piece mycolor); void update(); int id; private: int value[2],val_ref[2]; Timestamp t_ref[2]; int active; int countdownf; ClockHost *host, *host2; ChessClock *mirror; Timestamp LastWarning; static int freeid; }; class ClockMaster { public: ClockMaster(); void append(ChessClock *clockp); void remove(ChessClock *clockp); private: void update(); list clocks; int timeout_on; int timeout_id; friend gint clockmaster_timeout(gpointer data); }; gint clockmaster_timeout(gpointer data); #define TCF_GNUCHESS4QUIRK 0x01 class TimeControl { public: TimeControl(); TimeControl &operator=(TimeControl &src); int operator==(TimeControl &src); int operator!=(TimeControl &src); void fromSerialization(const char *s); static void secondsToString(char *dest, int maxlen, int secs, bool units=false); static int stringToSeconds(char *src); void setSecondsPerMove(int seconds); void setIcs(int base /* secs */, int increment /* secs */); void setXMoves(int nmoves, int nsecs); bool isRegressive(); int startValue(); void toXBoard(char *dest, int maxlen, int flags = 0); void toString(char *dest, int maxlen); void toShortString(char *dest, int maxlen); void toPGN(char *dest, int maxlen); // format as a TimeControl tag TimeControlMode mode; int value[2]; }; class TimeControlEditDialog : public ModalDialog { public: TimeControlEditDialog(TimeControl *tc, bool allownone=true); virtual ~TimeControlEditDialog() {} void setUpdateListener(UpdateInterface *ui); private: GtkWidget *mi[4], *e[5], *f[3]; TimeControl *src; TimeControl local; UpdateInterface *listener; friend void tced_ok(GtkWidget *w, gpointer data); friend void tced_dropmenu(GtkMenuItem *w, gpointer data); }; void tced_ok(GtkWidget *w, gpointer data); void tced_dropmenu(GtkMenuItem *w, gpointer data); #endif eboard-1.1.1.orig/treeeng.xpm0000644000175000017500000000053610757567572015463 0ustar patrikpatrik/* XPM */ static char * treeeng_xpm[] = { "14 14 3 1", " c None", ". c #000000", "+ c #E0DACC", " .......... ", " .++++++++++. ", " .+........+. ", " .+........+. ", " .+........+. ", " .+........+. ", " .+........+. ", " .+........+. ", " .+........+. ", " .++++++++++. ", " .......... ", " .++++++++++. ", ".++++++++++++.", " ............ "}; eboard-1.1.1.orig/position.h0000644000175000017500000001032510757567572015316 0ustar patrikpatrik/* $Id: position.h,v 1.30 2003/07/01 04:38:26 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2001 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef POSITION_H #define POSITION_H 1 #include "eboard.h" #include "stl.h" class IntAndString { public: IntAndString() { references=0; } string s; int i; int references; }; // if only glibc would malloc() corectly, we wouldn't need this ugly duck class StringCollection { public: StringCollection(); ~StringCollection(); int open(); void append(char *s); void append(string &s); void append(char c); void close(); void link(int id); void unlink(int id); bool isOpen(); const char *get(int id); private: list collection; int LastId; bool amOpen; }; class SMove { public: SMove(piece p,int sx,int sy,int dx,int dy); int distance(); int valid(); int SX,SY,DX,DY; piece Piece; }; class Position { public: Position(); ~Position(); int operator==(const Position &p); int operator!=(const Position &p); Position operator=(Position &p); void setStartPos(); void setPiece(int col,int row,piece p); piece getPiece(int col,int row); void setLastMove(char *s); void setLastMove(string &s); string &getLastMove(); string &getMaterialString(variant Vr=REGULAR); string &getHouseString(); void addAnnotation(int id); char *getAnnotation(); void clearAnnotation(); string &getFEN(); void setFEN(const char *fen); int getStockCount(piece p); void clearStock(); void incStockCount(piece p); void decStockCount(piece p); void print(); void diff(Position &np,vector &sl); void intersection(Position &b); void moveAnyNotation(char *m,piece color,variant Vr=REGULAR); void moveStdNotation(char *m,piece color,variant Vr=REGULAR); void moveCartesian(int x1,int y1,int x2,int y2,variant Vr=REGULAR, bool resolvepromotion=false); void moveDrop(piece p,int x2,int y2); void stdNotationForMove(int x1,int y1,int x2,int y2,piece prom,char *m, variant Vr=REGULAR); void SANstring(char *src,char *dest); // randomly changes the position to make it "different" void invalidate(); // checking bool isMoveLegalCartesian(int x0,int y0,int x1,int y1,piece mycolor,variant vari); bool isDropLegal(piece p,int x1,int y1,piece mycolor,variant vari); bool isMate(piece c,variant Vr=REGULAR); bool isStalemate(piece c,variant Vr=REGULAR); bool isNMDraw(variant Vr=REGULAR); /* no-material draw */ bool maycastle[4]; // 0=white short, 1=black short, 2=white long, 3=black long signed char ep[2]; // enpassant square (ep[0]=-1 for none, ep[0]=-2 for allow any) bool sidehint; // used by scratch boards only private: piece square[8][8]; string LastMove; string MaterialString; string HouseString; short int House[5][2]; // {crazy,bug}house stock (P,R,N,B,Q) list Annotations; static char AnnotationBuffer[512]; void locate(piece p,int *src,int *dest,int istake,variant Vr=REGULAR); void ambiguityCheck(piece p, piece c,int destx,int desty, int exclx,int excly, vector & ambx, vector & amby); bool canMove(piece p,piece c,int sx,int sy,int dx,int dy); bool isInCheck(piece c,variant Vr=REGULAR); bool isSquareInCheck(int x,int y,piece dc,variant Vr=REGULAR); void checkCastlingPossibility(); void stdNotationForMoveInternal(int x1,int y1,int x2,int y2,char *m); void makeAtomicExplosion(int x,int y); void dropAnnotations(); }; #endif eboard-1.1.1.orig/quickbar.h0000644000175000017500000000417710757567572015263 0ustar patrikpatrik/* $Id: quickbar.h,v 1.5 2004/12/27 15:16:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2002 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_QUICKBAR_H #define EBOARD_QUICKBAR_H 1 #include "widgetproxy.h" #include "stl.h" class QButton { public: QButton(); QButton(const char *a, const char *b, int c); string caption; string command; int icon; }; ostream &operator<<(ostream &s, QButton q); class QuickBarIcons { public: static GdkPixmap *arrow[6], *qbl, *qbr; static GdkBitmap *mask[6], *mqbl, *mqbr; static int numbers[10]; protected: static void loadIcons(GtkWidget *parent); GtkWidget * CommandButton(GdkPixmap *pix, GdkBitmap *mask, char *caption); private: static bool IconsLoaded; }; class QuickBar : public WidgetProxy, public QuickBarIcons { public: QuickBar(GtkWidget *parent); virtual ~QuickBar() {} void update(); private: vector buttons; void build(); void clear(); }; class QuickBarSetupDialog : public ModalDialog, public QuickBarIcons { public: QuickBarSetupDialog(); private: GtkWidget *bcap[10], *bcom[10], *bpix[10], *bl[10], *br[10]; int iconValue[10]; int whichButton(GtkWidget *w); friend void qbsetup_ok(GtkWidget *w, gpointer data); friend void qbsetup_left(GtkWidget *w, gpointer data); friend void qbsetup_right(GtkWidget *w, gpointer data); }; #endif eboard-1.1.1.orig/sound.h0000644000175000017500000000534610757567572014611 0ustar patrikpatrik/* $Id: sound.h,v 1.11 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_SOUND_H #define EBOARD_SOUND_H #include #include #include #include "tstring.h" #include "widgetproxy.h" #include "stl.h" typedef enum { INT_WAVE, EXT_WAVE, EXT_PROGRAM, PLAIN_BEEP } SoundEventType; class SoundEventChangeListener { public: virtual void SoundEventChanged()=0; }; class SoundEvent { public: SoundEvent(); SoundEvent operator=(SoundEvent &se); int operator==(SoundEvent &se); int operator!=(SoundEvent &se); void read(tstring &rcline); void safePlay(); void play(); void playHere(); void edit(SoundEventChangeListener *listener); char *getDescription(); SoundEventType type; int Duration; int Pitch; int Count; char Device[64]; char ExtraData[256]; bool enabled; private: void sine_beep(char *device,int pitch,int duration); char pvt[128]; }; ostream & operator<<(ostream &s, SoundEvent e); class SoundEventDialog : public ModalDialog { public: SoundEventDialog(SoundEvent *src, SoundEventChangeListener *listener); private: SoundEvent *obj; SoundEventChangeListener *hearer; GtkWidget *en[5], *rd[4], *fdlg, *tme; vector sthemes; void apply(SoundEvent *dest); friend void snddlg_ok(GtkWidget *w,gpointer data); friend void snddlg_test(GtkWidget *w,gpointer data); friend void snddlg_browse(GtkWidget *w,gpointer data); friend void snddlg_picktheme(GtkMenuItem *w,gpointer data); }; void snddlg_ok(GtkWidget *w,gpointer data); void snddlg_test(GtkWidget *w,gpointer data); void snddlg_browse(GtkWidget *w,gpointer data); void snddlg_picktheme(GtkMenuItem *w,gpointer data); class SoundSlave { public: SoundSlave(); ~SoundSlave(); void play(SoundEvent &se); void waitForEvents(); private: int sout[2]; int pid; bool alive(); bool kicking(); void kill(); void run(); }; #endif eboard-1.1.1.orig/proto_xboard.h0000644000175000017500000001233210757567572016154 0ustar patrikpatrik/* $Id: proto_xboard.h,v 1.18 2007/01/03 16:49:46 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_XBOARD_H #define EBOARD_XBOARD_H #include "stl.h" #include #include "widgetproxy.h" #include "clock.h" class ChessGame; class EngineBookmark; #define XBOARD_GAME 7777 // a generic xboard protocol (version 2) parser // http://www.tim-mann.org/xboard/engine-intf.html /* Protocol | EngineProtocol (in protocol.cc) | XBoardProtocol (proto_xboard.cc) | +----------------+-----------------+ | | | CraftyProtocol SjengProtocol GnuChess4Protocol */ class XBoardProtocol : public EngineProtocol, public UpdateInterface { public: XBoardProtocol(); virtual ~XBoardProtocol() {} virtual void receiveString(char *netstring); virtual void sendMove(int x1,int y1,int x2,int y2,int prom); virtual void finalize(); virtual void resign(); virtual void draw(); virtual void adjourn(); virtual void abort(); virtual void retractMove(); virtual int run(); virtual int run(EngineBookmark *bm); virtual int loadEngine(); virtual void initEngine(); virtual void readDialog(); virtual void setInitialPosition(Position *p); virtual void update(); // for time control editing protected: // initEngine work after variant settings and "new" command, // common to most classes virtual void lateInit(); // set status bar after all is done virtual void endInit(); virtual void loadBookmark(EngineBookmark *bm); virtual void createDialog(); virtual void createGame(); virtual void parseFeatures(); virtual char *getDialogName(); virtual char *getComputerName(); virtual char *xlateDialect(char *s); void makeBookmarkCaption(); void backMove(); void advanceMove(); void gameOver(ExtPatternMatcher &pm,GameResult gr,int hasreason=1); ChessGame *getGame(bool allowFailure=false); virtual void setupPosition(); GtkWidget *eng_dlg, *eng_book, *engctl_engcmd, *engctl_engdir; int EngineWhite; int MoveNumber; int MoveBlack; TimeControl timecontrol; int MaxDepth; bool ThinkAlways; variant Variant; char EngineCommandLine[512]; char EngineRunDir[256]; char ComputerName[64]; bool supports_setboard; bool requires_usermove; int want_path_pane; bool need_handshake; int timeout_id; ExtPatternMatcher WhiteWin[2]; ExtPatternMatcher BlackWin[2]; ExtPatternMatcher Drawn[2]; ExtPatternMatcher Features; ExtPatternMatcher Moved[3]; ExtPatternMatcher IllegalMove; ExtPatternMatcher Dialect[10]; Position CurrentPosition; Position LegalityBackup; EngineBookmark *ebm; Position initpos; bool got_init_pos; bool just_sent_fen; private: int runDialog(); void destroyDialog(); void dumpGame(); char FullCommand[1024]; GtkWidget *engctl_lbl, *engctl_ewhite, *engctl_ply,*think,*bookmark; int GotResult; bool Finalized; bool InitDone; friend void xboard_eng_ok(GtkWidget *w,gpointer data); friend void xboard_eng_cancel(GtkWidget *w,gpointer data); friend void xboard_edit_time(GtkWidget *w,gpointer data); friend gboolean xboard_eng_delete(GtkWidget *w,GdkEvent *e,gpointer data); }; void xboard_eng_ok(GtkWidget *w,gpointer data); void xboard_eng_cancel(GtkWidget *w,gpointer data); void xboard_edit_time(GtkWidget *w,gpointer data); gboolean xboard_eng_delete(GtkWidget *w,GdkEvent *e,gpointer data); class CraftyProtocol : public XBoardProtocol { public: CraftyProtocol(); virtual ~CraftyProtocol() {} virtual void initEngine(); virtual void readDialog(); protected: virtual char *getDialogName(); private: char BookPath[256]; char LogPath[256]; void resolvePaths(); }; class SjengProtocol : public XBoardProtocol { public: SjengProtocol(); virtual ~SjengProtocol() {} virtual void sendDrop(piece p,int x,int y); virtual void initEngine(); virtual void readDialog(); protected: virtual void createDialog(); virtual char *getDialogName(); private: GtkWidget *varbutton[5]; }; class GnuChess4Protocol : public XBoardProtocol { public: GnuChess4Protocol(); virtual ~GnuChess4Protocol() {} virtual void initEngine(); virtual void readDialog(); protected: virtual char *getDialogName(); }; #endif eboard-1.1.1.orig/dlg_gamelist.h0000644000175000017500000001201110757567572016077 0ustar patrikpatrik/* $Id: dlg_gamelist.h,v 1.13 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef DLG_GAMELIST_H #define DLG_GAMELIST_H #include "eboard.h" #include "widgetproxy.h" class GameListDialog : public WidgetProxy, public GameListConsumer { public: GameListDialog(GameListListener *someone); void appendGame(int gamenum, char *desc); void endOfList(); void refresh(); private: GameListListener *owner; GtkWidget *clist,*b[2]; int SelectedRow; int canclose; friend void gamelist_refresh (GtkWidget * w, gpointer data); friend void gamelist_observe (GtkWidget * w, gpointer data); friend gint gamelist_delete (GtkWidget * widget, GdkEvent * event, gpointer data); friend void gamelist_destroy (GtkWidget * widget, gpointer data); friend void gamelist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); friend void gamelist_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); }; void gamelist_refresh (GtkWidget * w, gpointer data); void gamelist_observe (GtkWidget * w, gpointer data); gint gamelist_delete (GtkWidget * widget, GdkEvent * event, gpointer data); void gamelist_destroy (GtkWidget * widget, gpointer data); void gamelist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); void gamelist_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); class StockListDialog : public WidgetProxy { public: StockListDialog(StockListListener *someone); void refresh(); private: void calcEnable(); void open(); void trash(); void trashAll(); StockListListener *owner; GtkWidget *clist; GtkWidget *b[7],*fdlg; int SelectedRow; int canclose; GtkCTreeNode * toplevel[4]; GdkPixmap *icons[6]; GdkBitmap *masks[6]; friend void stocklist_refresh (GtkWidget * w, gpointer data); friend void stocklist_open (GtkWidget * w, gpointer data); friend void stocklist_loadpgn (GtkWidget * w, gpointer data); friend void stocklist_savepgn (GtkWidget * w, gpointer data); friend void stocklist_editpgn (GtkWidget * w, gpointer data); friend void stocklist_dump (GtkWidget * w, gpointer data); friend void stocklist_dumpall (GtkWidget * w, gpointer data); friend void stocklist_destroy (GtkWidget * widget, gpointer data); friend void stocklist_select (GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data); friend void stocklist_unselect(GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data); }; void stocklist_refresh (GtkWidget * w, gpointer data); void stocklist_open (GtkWidget * w, gpointer data); void stocklist_loadpgn (GtkWidget * w, gpointer data); void stocklist_savepgn (GtkWidget * w, gpointer data); void stocklist_editpgn (GtkWidget * w, gpointer data); void stocklist_dump (GtkWidget * w, gpointer data); void stocklist_dumpall (GtkWidget * w, gpointer data); void stocklist_destroy (GtkWidget * widget, gpointer data); void stocklist_select (GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data); void stocklist_unselect(GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data); class AdListDialog : public WidgetProxy, public GameListConsumer { public: AdListDialog(AdListListener *someone); void appendGame(int gamenum, char *desc); void endOfList(); void refresh(); private: AdListListener *owner; GtkWidget *clist,*b[2]; int SelectedRow; int canclose; friend void adlist_refresh (GtkWidget * w, gpointer data); friend void adlist_answer (GtkWidget * w, gpointer data); friend void adlist_destroy (GtkWidget * widget, gpointer data); friend void adlist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); friend void adlist_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); }; void adlist_refresh (GtkWidget * w, gpointer data); void adlist_answer (GtkWidget * w, gpointer data); void adlist_destroy (GtkWidget * widget, gpointer data); void adlist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); void adlist_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data); #endif eboard-1.1.1.orig/help.cc0000644000175000017500000003320610757567572014543 0ustar patrikpatrik/* $Id: help.cc,v 1.33 2008/02/18 13:21:05 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "config.h" #include #include #include #ifdef HAVE_STRINGS_H #include #endif #include #include #include #include #include #include "util.h" #include "tstring.h" #include "global.h" #include "help.h" #include "mainwindow.h" #include "eboard.h" #include "widgetproxy.h" #include "gnupiece.xpm" namespace Help { AboutDialog::AboutDialog() : ModalDialog(N_("About eboard")) { GtkWidget *v,*hb,*label,*bhb,*hs,*ok,*gnup; GtkStyle *style; GdkPixmap *gnud; GdkBitmap *gnub; char z[1024]; v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); hb=gtk_hbox_new(FALSE,4); gtk_box_pack_start(GTK_BOX(v),hb,TRUE,TRUE,0); style=gtk_widget_get_style(widget); gnud=gdk_pixmap_create_from_xpm_d(widget->window,&gnub, &style->bg[GTK_STATE_NORMAL], (gchar **)gnupiece_xpm); gnup=gtk_pixmap_new(gnud,gnub); gtk_box_pack_start(GTK_BOX(hb),gnup,FALSE,TRUE,4); snprintf(z,1024, _("eboard version %s\n"\ "(c) 2000-%d Felipe Bergo\n"\ "\n"\ "http://eboard.sourceforge.net\n\n"\ "This program is free software; you can redistribute\n"\ "it and/or modify it under the terms of the GNU General\n"\ "Public License as published by the Free Software\n"\ "Foundation; either version 2 of the License, or\n"\ "(at your option) any later version.\n"), global.Version, 2008); label=gtk_label_new(z); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(hb),label,TRUE,TRUE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,4); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,bhb,hs,label,gnup,hb,v,NULL); setDismiss(GTK_OBJECT(ok),"clicked"); } KeysDialog::KeysDialog() : ModalDialog(N_("Help: Keys")) { GtkWidget *v,*label,*lbs,*bhb,*hs,*ok; char z[1024]; v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); strcpy(z, _("Anywhere:\n"\ "F3: Go to previous pane.\n"\ "F4: Go to next pane.\n"\ "F5: Go to the main board pane.\n"\ "F6: Go to the console pane.\n"\ "F7: Go to the seek graph pane (if available).\n"\ "F8: Toggle Shortcut Bar visilibity.\n"\ "Page Up/Page Down: scrolls the text console (must be visible)\n"\ "Ctrl+(Left Arrow): Backward 1 halfmove\n"\ "Ctrl+(Right Arrow): Forward 1 halfmove\n"\ "Ctrl+F: Find Upwards(main console buffer)\n"\ "Ctrl+G: Find Previous\n"\ "\nInput box:\n"\ "Up/Down (arrows): move thru input history\n"\ "Enter: send text line\n"\ "Esc: switch Chat/Command Mode\n"\ "\nSyntaxisms:\n"\ "In main window's input box:\n"\ ".. entering %prefix text will set the chat prefix to text.\n"\ ".. entering %do scriptname will run scriptname.")); label=gtk_label_new(z); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); lbs = scrollBox(label); gtk_box_pack_start(GTK_BOX(v),lbs,TRUE,TRUE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,4); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_widget_grab_default(ok); gtk_window_set_default_size(GTK_WINDOW(widget),450, 450); Gtk::show(ok,bhb,hs,label,v,NULL); setDismiss(GTK_OBJECT(ok),"clicked"); } DebugDialog::DebugDialog() : ModalDialog(N_("Help: Debug Info")) { GtkWidget *v,*label,*hs,*bhb,*ok,*txt; char z[2048],y[256],x[256],w[256]; struct stat s; EboardFileFinder eff; v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); z[0]=0; // gtk snprintf(y,256,"GTK+ version %d.%d.%d\n", gtk_major_version, gtk_minor_version, gtk_micro_version); g_strlcat(z,y,2048); // gcc (c++) if any snprintf(y,256,"GCC says: %s\n", grabOutput("c++ --version 2>&1")); g_strlcat(z,y,2048); // perl snprintf(y,256,"Perl says: %s\n", grabOutput("perl -v | grep ^This")); g_strlcat(z,y,2048); // expect snprintf(y,256,"expect says: %s\n", grabOutput("expect -d -c exit 2>&1")); g_strlcat(z,y,2048); // kernel snprintf(y,256,"kernel info: %s\n", grabOutput("uname -srm")); g_strlcat(z,y,2048); // timeseal snprintf(x,256,"timeseal.%s",global.SystemType); if (!eff.find(x,y)) strcpy(y,x); if (lstat(y,&s)==0) { snprintf(w,256,"Found %s\n",y); strcpy(x,w); snprintf(w,256,"Size %lu bytes, Last Modified %s", s.st_size, ctime(&(s.st_mtime)) ); g_strlcat(x,w,256); snprintf(w,256,"Mode %.4o. (seems it i%s enough to be run by eboard)\n", s.st_mode, ( S_ISREG(s.st_mode) && ( ( S_IXUSR&s.st_mode && s.st_uid==getuid() ) || ( S_IXGRP&s.st_mode && s.st_gid==getgid() ) || ( S_IXOTH&s.st_mode ) ) ) ? "s" : "s NOT" ); g_strlcat(x,w,256); } else { snprintf(x,256,"%s Not Found (errno %d)",y,errno); } snprintf(y,256,"\nFICS timeseal:\n%s\n",x); g_strlcat(z,y,2048); label=gtk_label_new(z); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(v),label,TRUE,TRUE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,4); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label(_("Close")); txt=gtk_button_new_with_label(_("Write to Console")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(txt,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),txt,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,txt,bhb,hs,label,v,NULL); setDismiss(GTK_OBJECT(ok),"clicked"); gtk_signal_connect(GTK_OBJECT(txt),"clicked", GTK_SIGNAL_FUNC(debugdlg_writecons), (gpointer) this); strcpy(pipedata,z); } char * DebugDialog::grabOutput(char *cmdline) { FILE *f; bool ok = false; char *c; f=popen(cmdline,"r"); if (f) { if (fgets(pipedata,127,f)) ok=true; pclose(f); } if (!ok) strcpy(pipedata,"unable to retrieve"); else while( (c=strchr(pipedata,'\n'))!=NULL) *c=0; return pipedata; } void debugdlg_writecons(GtkWidget *w, gpointer data) { DebugDialog *me; tstring t; string *c; char z[512]; me = (DebugDialog *) data; t.set(me->pipedata); global.output->append("=== START DEBUG INFO ===",0xc0ff00); while( (c=t.token("\n")) != 0) { memset(z,0,512); c->copy(z,511); global.output->append(z, global.Colors.TextBright); } global.output->append("=== END DEBUG INFO ===",0xc0ff00); } GettingStarted::GettingStarted() : NonModalDialog(N_("Help: Getting Started ")) { GtkWidget *v, *ts, *bhb, *ok, *fr; gtk_window_set_default_size(GTK_WINDOW(widget),620,560); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); fr = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(fr),GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(v),fr,TRUE,TRUE,0); text=gtk_text_view_new(); g_object_set(G_OBJECT(text),"cursor-visible",FALSE,NULL); ts = scrollBox(text); gtk_container_add(GTK_CONTAINER(fr),ts); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,bhb,text,fr,v,NULL); setDismiss(GTK_OBJECT(ok),"clicked"); compose(); gtk_text_view_set_editable(GTK_TEXT_VIEW(text),FALSE); } void GettingStarted::compose() { char *T,*p,*q; GtkTextBuffer *tb; GtkTextIter iter; GtkTextTag *tag[6]; // codes: #L# large #M# medium #S# small #B# blue #K# black T=_("#L#Getting Started\n"\ "#M#Common Tasks in eboard\n\n"\ "Playing against the computer\n"\ "#S#eboard does not \"play chess\" itself, but rather is works as interface to programs that do,\n"\ "called \"engines\", which don't have a graphical interface themselves. You need an engine to\n"\ "play against the computer. GNU Chess, Crafty and Sjeng are chess engines that are available at\n"\ "no cost.\n"\ "Once you have one of them installed, open the #B#Peer#K# menu, then the #B#Play against\n"\ "engine#K# submenu, and select the appropriate option depending on which engine you have\n"\ "installed.\n\n"\ "#M#Playing Chess on the Internet\n"\ "#S#Eboard supports the FICS protocol. FICS runs at freechess.org, but other servers, such as\n"\ "US Chess Live, use FICS's software and should work with eboard too. ICC is not supported.\n"\ "To connect to FICS, open the #B#Peer#K# menu, click #B#Connect to FICS#K#. To connect to\n"\ "other servers, open the #B#Peer#K# menu, click #B#Connect to Other Server...#K#.\n"\ "While you can login as guest on FICS, you'll enjoy it better as a registered user. Registration\n"\ "is done through FICS's site at #B#http://www.freechess.org#K#, and it's free.\n\n"\ "#M#Browsing PGN Games\n"\ "#S#PGN is the most common file format to store chess games. It can store moves and comments\n"\ "(annotations). To open this kind of file within eboard, open the #B#Windows#K# menu, click\n"\ "#B#Games on Client#K#. In the Local Game List dialog, click #B#Load PGN...#K#. To browse a\n"\ "game, #B#select it#K# and click #B#Display#K#. A new tab will be created in the main window\n"\ "with the game."\ "#L#"); tb = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text)); tag[0] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag0", "font","Sans 10", "foreground","#000000", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_NORMAL, "wrap-mode",GTK_WRAP_WORD, NULL); tag[1] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag1", "font","Sans 12", "foreground","#000000", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_BOLD, "wrap-mode",GTK_WRAP_WORD, NULL); tag[2] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag2", "font","Sans 16", "foreground","#000000", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_BOLD, "wrap-mode",GTK_WRAP_WORD, NULL); tag[3] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag3", "font","Sans 10", "foreground","#0000ff", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_NORMAL, "wrap-mode",GTK_WRAP_WORD, NULL); tag[4] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag4", "font","Sans 12", "foreground","#0000ff", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_BOLD, "wrap-mode",GTK_WRAP_WORD, NULL); tag[5] = gtk_text_buffer_create_tag(GTK_TEXT_BUFFER(tb),"tag5", "font","Sans 16", "foreground","#0000ff", "justification",GTK_JUSTIFY_LEFT, "editable",FALSE, "weight",PANGO_WEIGHT_BOLD, "wrap-mode",GTK_WRAP_WORD, NULL); int ctag = 0, tval[2] = {0,0}; q = T; for(p=T;*p;p++) { if (*p=='#') { if (p-q) { gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(tb),&iter); gtk_text_buffer_insert_with_tags(GTK_TEXT_BUFFER(tb),&iter,q,p-q,tag[ctag],NULL); } q = p + 3; switch(p[1]) { case 'L': tval[0]=2; break; case 'M': tval[0]=1; break; case 'S': tval[0]=0; break; case 'B': tval[1]=1; break; case 'K': tval[1]=0; break; } ctag = 3*tval[1] + tval[0]; p += 3; } } } } // namespace Help eboard-1.1.1.orig/icon-moves.xpm0000644000175000017500000000732610757567572016115 0ustar patrikpatrik/* XPM */ static char * icon_moves_xpm[] = { "48 48 83 1", " c None", ". c #020202", "+ c #6A4E3A", "@ c #684A36", "# c #5F4333", "$ c #503A2A", "% c #B2966B", "& c #AE926A", "* c #AA8E66", "= c #A48A63", "- c #A28662", "; c #9E865F", "> c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #FFFFFF", "B c #545454", "C c #000000", "D c #C6C6C6", "E c #727272", "F c #AAAAAA", "G c #1C1C1C", "H c #383838", "I c #A9A9A9", "J c #E3E3E3", "K c #1D1D1D", "L c #E2E2E2", "M c #555555", "N c #8E8E8E", "O c #C7C7C7", "P c #8D8D8D", "Q c #717171", "R c #393939", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzzzBCDAAAECFAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzzzGHIAAJKKJAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzzLCBIAAMNCAANMEAANOAAJEAJEMNAAAEMNAAA", "zzzzzzzzzzzzIBPQAOKFMARMFMMANEAAMNJRNFKNAEMFREAA", "zzzzzzzzzzzzQQIBARNNEFRAAACAFMAOKAMEFFEMAEMJJOAA", "zzzzzzzzzzzzBIIBOKAMFMFAAACAJKARNACMMMMNAAEKEAAA", "zzzzzzzzzzzzCLLGMNACJMFAANMAACFRAACAAAFJONAARFAA", "zzzzzzzzzzzLCzzCRAJCAFKFNCJAARKOAAEMFMMAJCNFKOAA", "zzzzzzzzzzzDPzzBOAONAAFMEJAAANEAAAAEMNAAAOMMOAAA", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}; eboard-1.1.1.orig/goc_save.xpm0000644000175000017500000000302310757567572015612 0ustar patrikpatrik/* XPM */ static char * goc_save_xpm[] = { "32 20 52 1", " c None", ". c #000000", "+ c #739DAC", "@ c #4A595A", "# c #BDD2D5", "$ c #ACC2C5", "% c #E6EEEE", "& c #FFFFFF", "* c #EEF2F6", "= c #E6EAEE", "- c #83AAB4", "; c #ACC6CD", "> c #F6FAFF", ", c #8BAEB4", "' c #394C52", ") c #94B2BD", "! c #CDDEDE", "~ c #7B898B", "{ c #EEEEF6", "] c #F6F6F6", "^ c #62797B", "/ c #526D73", "( c #A4BEC5", "_ c #415D62", ": c #4A555A", "< c #52717B", "[ c #A4AAAC", "} c #EEEAEE", "| c #E6E6E6", "1 c #626162", "2 c #C5CACD", "3 c #F6F2F6", "4 c #E6E2E6", "5 c #ACB2B4", "6 c #4A6162", "7 c #31444A", "8 c #739194", "9 c #BDC2C5", "0 c #52696A", "a c #CDDADE", "b c #DEDEDE", "c c #DEDADE", "d c #8B9194", "e c #39444A", "f c #7BA5AC", "g c #D5DADE", "h c #B4B6B4", "i c #627173", "j c #D5D6D5", "k c #A4B2B4", "l c #4A484A", "m c #8B999C", " ", " .. ", " ..+@. ", " ..#$%+. ", " ..#$#&*+@. ", " ..#$#&&&&=+. ", " ..-;#&&&&&&>,'. ", " .);!&&&&&&&&&%+. ", " .~)*&&&&&&&&&{+@. ", " .$=&&&&&&&]=+++. ", " .^-*&&&&]=++//+@. ", " .(=&&]=++_:<+/+. ", " .^-{=++_[}|1+/+@. ", " .)++/233|456+_7. ", " .8-+9]0a|bcd+'.. ", " .)+/3efg4hi.. ", " .<++j}kjdl. ", " .6+/bm.. ", " ..... ", " "}; eboard-1.1.1.orig/network.cc0000644000175000017500000005500610757567572015306 0ustar patrikpatrik/* $Id: network.cc,v 1.50 2008/02/22 07:32:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include "network.h" #include "global.h" #include "status.h" #include "util.h" #include "config.h" #include "eboard.h" // =================================================================== // PROCESS CONTROL // =================================================================== Parent::Parent(PidIssuer *a,int b) { issuer=a; pid=b; } int Parent::operator==(int v) { return(pid==v); } void PidRing::add(PidIssuer *po, int pid) { parents.push_back(new Parent(po,pid)); } void PidRing::remove(PidIssuer *po) { list::iterator i; Parent *x; for(i=parents.begin();i!=parents.end();i++) if ( (*i)->issuer == po ) { x = *i; parents.erase(i); delete(x); return; } } void PidRing::funeral(int pid) { list::iterator i; for(i=parents.begin();i!=parents.end();i++) if ( (**i) == pid ) { (*i)->issuer->farewellPid(pid); i=parents.begin(); } } PidRing netring; static pid_t last_dead_pid = 0; void PidRing::ZombieNotification(int pid) { funeral(pid); last_dead_pid = pid; // for use in PipeConnection::open() } // =================================================================== // NET // =================================================================== NetConnection::NetConnection() { strcpy(HostName,"abstract"); strcpy(HostAddress,"abstract"); TimeGuard=0; TagRead=-1; listener = NULL; } int NetConnection::isConnected() { return 0; } NetConnection::~NetConnection() { notifyReadReady(NULL); } void NetConnection::cleanUp() { if (TagRead>=0) gdk_input_remove(TagRead); TagRead = -1; } void NetConnection::notifyReadReady(IONotificationInterface *target) { if (TagRead>=0) gdk_input_remove(TagRead); TagRead = -1; listener = NULL; if (target != NULL) { listener = target; TagRead = gdk_input_add(getReadHandle(), GDK_INPUT_READ, (GdkInputFunction) netconn_read_notify, (gpointer) this ); } } void netconn_read_notify(gpointer data, gint source, GdkInputCondition cond) { NetConnection *me = (NetConnection *) data; if (me->listener != NULL) me->listener->readAvailable(source); } void NetConnection::sendReadNotify() { if (listener != NULL) listener->readAvailable(getReadHandle()); } int NetConnection::hasTimeGuard() { return TimeGuard; } // =================================================================== // BUFFERED // =================================================================== int BufferedConnection::readPartial(char *tbuffer,int limit) { if (buffer.empty()) return -1; int i; memset(tbuffer,0,limit); for(i=0;!buffer.empty();) { if (buffer.front()>=32) tbuffer[i++]=buffer.front(); buffer.pop_front(); } return 0; } int BufferedConnection::bufferMatch(char *match) { char dump[512]; list::iterator li; int i; if (buffer.empty()) return 0; memset(dump,0,512); for(i=0,li=buffer.begin();li!=buffer.end();li++,i++) { dump[i]=*li; if (i>510) return 0; } return(strstr(dump,match)!=0); } int BufferedConnection::consume(int handle, int amount) { int i,j; char sm[2048]; if (amount>2048) amount=2048; // global.debug("I/O","consume-in"); while(1) { i=read(handle,sm,amount); if ((i==0)&&(errno==0)) { if (buffer.empty()) { close(); // global.debug("I/O","consume-out"); return -1; } else { if (buffer.back()!='\n') buffer.push_back('\n'); break; } } if (i<=0) break; for(j=0;j::iterator di; for(di=buffer.begin();di!=buffer.end();di++) if (*di=='\n') break; if (di!=buffer.end()) { memset(tbuffer,0,limit); i=0; while(di!=buffer.begin()) { c=buffer.front(); buffer.pop_front(); if (c>=0x20) tbuffer[i++]=c; } buffer.pop_front(); global.LogAppend(tbuffer); return 0; } return -1; } int BufferedConnection::innerReadLine(char *tbuffer,int limit,int handle) { if (consume(handle)) return -1; return(produce(tbuffer,limit,handle)); } int BufferedConnection::bufferEmpty() { list::iterator di; for(di=buffer.begin();di!=buffer.end();di++) if (*di=='\n') return 0; return 1; } // =================================================================== // ALTBUFFERED // =================================================================== int AltBufferedConnection::innerReadLine(char *tbuffer,int limit,int handle) { int i,j; char sm[128]; char c; list::iterator di; fd_set mine,*mp; struct timeval tv; mp=&mine; while(1) { // do the select thing... FD_ZERO(mp); FD_SET(handle,mp); tv.tv_sec=0; tv.tv_usec=20000; if (select(handle+1,mp,0,0,&tv)<=0) break; i=read(handle,sm,128); if (i<=0) { if (buffer.empty()) { close(); return -1; } else { if (buffer.back()!='\n') buffer.push_back('\n'); break; } } for(j=0;j=0x20) tbuffer[i++]=c; } global.LogAppend(tbuffer); buffer.pop_front(); return 0; } return -1; } // =================================================================== // DIRECT // =================================================================== DirectConnection::DirectConnection(char *hostname,int port) { strcpy(HostName,hostname); strcpy(HostAddress,"???"); Port=port; Connected=0; g_strlcpy(errorMessage,_("No error."),128); } int DirectConnection::open() { char z[128]; int i; if (global.CommLog) { char ls[512]; snprintf(ls,512,"+ DirectConnection::open(%s,%d)",HostName,Port); global.LogAppend(ls); } snprintf(z,128,_("Looking up host %s..."),HostName); global.status->setText(z,30); he=gethostbyname(HostName); if (he==NULL) { snprintf(errorMessage,128,_("Host not found: %s"),HostName); return(-1); } snprintf(HostAddress,96,"%d.%d.%d.%d", (guchar) he->h_addr_list[0][0], (guchar) he->h_addr_list[0][1], (guchar) he->h_addr_list[0][2], (guchar) he->h_addr_list[0][3]); netsocket=socket(AF_INET,SOCK_STREAM,0); #ifdef USE_SOCK_OPTS int nagle=1; #ifdef USE_SOL_TCP setsockopt(netsocket,SOL_TCP,TCP_NODELAY,&nagle,sizeof(nagle)); #elif defined USE_IPPROTO_TCP setsockopt(netsocket,IPPROTO_TCP,TCP_NODELAY,&nagle,sizeof(nagle)); #endif #endif sa.sin_family=he->h_addrtype; sa.sin_port=htons(Port); memcpy(&sa.sin_addr,he->h_addr_list[0],he->h_length); snprintf(z,128,_("Connecting to %s..."),HostAddress); global.status->setText(z,30); i=::connect(netsocket,(struct sockaddr *)&sa,sizeof(sa)); if (i!=0) { snprintf(z,128,_("Connection to %s:%d failed: "),HostName,Port); switch(errno) { case EBADF: g_strlcat(z,_("Bad descriptor"),128); break; case EFAULT: g_strlcat(z,_("Wrong address space"),128); break; case ENOTSOCK: g_strlcat(z,_("Not a socket ?!?"),128); break; case EISCONN: g_strlcat(z,_("Already connected ?!?"),128); break; case ECONNREFUSED: g_strlcat(z,_("Connection refused"),128); break; case ETIMEDOUT: g_strlcat(z,_("Timeout"),128); break; case ENETUNREACH: g_strlcat(z,_("Network is unreachable"),128); break; case EADDRINUSE: g_strlcat(z,_("Address already in use"),128); break; case EALREADY: case EINPROGRESS: strcat(z,"EINPROGRESS"); break; default: g_strlcat(z,_("Unknown error"),128); } g_strlcpy(errorMessage,z,128); return(-1); } Connected=1; fcntl(netsocket,F_SETFL,O_NONBLOCK); snprintf(z,128,_("Connected to %s (%s)"),HostName,HostAddress); global.status->setText(z,300); global.getChannels(HostAddress); return 0; } void DirectConnection::close() { shutdown(netsocket,2); Connected=0; } int DirectConnection::readLine(char *tbuffer,int limit) { return(Connected?innerReadLine(tbuffer,limit,netsocket):-1); } void DirectConnection::writeLine(char *obuffer) { if (Connected) { char *tmp; tmp = global.filter(obuffer); write(netsocket,tmp,strlen(tmp)); write(netsocket,"\n",1); if (global.CommLog) { char z[4096]; snprintf(z,4096,"WROTE: %s",tmp); global.LogAppend(z); } if (tmp != obuffer) free(tmp); } } int DirectConnection::isConnected() { return(Connected); } char * DirectConnection::getError() { return(errorMessage); } int DirectConnection::getReadHandle() { return(Connected?netsocket:-1); } // =================================================================== // INCOMING CONNECTION (FOR P2P PLAYING) // =================================================================== IncomingConnection::IncomingConnection(int port) { strcpy(HostName,"localhost"); strcpy(HostAddress,"???"); Port = port; Connected = 0; netsocket = 0; g_strlcpy(errorMessage,_("No error."),128); } /* the first open call on this object only creates the socket, binds and listens, subsequent calls do a non-blocking accept() */ int IncomingConnection::open() { if (Connected) return 0; if (!netsocket) return(createSocket()); else return(acceptConnection()); } int IncomingConnection::createSocket() { struct sockaddr_in sin; netsocket = socket(AF_INET, SOCK_STREAM, 0); if (netsocket == -1) { g_strlcpy(errorMessage,_("Unable to create socket."),128); return -1; } memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(Port); if (bind(netsocket,(struct sockaddr *) &sin,sizeof(sin))==-1) { snprintf(errorMessage,128,_("Unable to bind on port %d."),Port); return(-1); } fcntl(netsocket,F_SETFL,O_NONBLOCK); if (listen(netsocket, 1)!=0) { snprintf(errorMessage,128,"Unable to listen on port %d.",Port); return(-1); } return 0; } int IncomingConnection::acceptConnection() { int sock; socklen_t addrlen; struct sockaddr_in pin; char z[128]; addrlen = (socklen_t) sizeof(struct sockaddr_in); sock = accept(netsocket, (struct sockaddr *) &pin, &addrlen); if (sock == -1) { switch(errno) { case EAGAIN: strcpy(errorMessage,"Nobody called."); break; default: strcpy(errorMessage,"Something broke."); break; } return -1; } g_strlcpy(HostName, inet_ntoa(pin.sin_addr),128); strcpy(HostAddress, HostName); ::close(netsocket); /* kill the listening socket */ netsocket = sock; g_strlcpy(errorMessage,_("No error."),128); Connected = 1; fcntl(netsocket,F_SETFL,O_NONBLOCK); snprintf(z,128,_("Accepted incoming connection from %s"),HostName); global.status->setText(z,300); return 0; } void IncomingConnection::close() { if (Connected) { shutdown(netsocket,2); Connected=0; netsocket=0; ::close(netsocket); } else { ::close(netsocket); netsocket=0; } } int IncomingConnection::readLine(char *tbuffer, int limit) { return(Connected?innerReadLine(tbuffer,limit,netsocket):-1); } void IncomingConnection::writeLine(char *obuffer) { if (Connected) { char *tmp; tmp = global.filter(obuffer); write(netsocket,tmp,strlen(tmp)); write(netsocket,"\n",1); if (global.CommLog) { char z[4096]; snprintf(z,4096,"WROTE: %s",tmp); global.LogAppend(z); } if (tmp!=obuffer) free(tmp); } } int IncomingConnection::isConnected() { return(Connected); } char * IncomingConnection::getError() { return(errorMessage); } int IncomingConnection::getReadHandle() { return(Connected?netsocket:-1); } // =================================================================== // PIPE // =================================================================== PipeConnection::PipeConnection(int _pin,int _pout) { pin=_pin; pout=_pout; pid=0; fcntl(pin,F_SETFL,O_NONBLOCK); Connected=1; strcpy(HostName,"local pipe"); snprintf(HostAddress,96,"pipe[%d,%d]",pin,pout); Quiet=0; MaxWaitTime = 60000.0; // 1 minute } void PipeConnection::init() { Connected=0; pid=0; toid=-1; memset(HostName,0,128); strcpy(HostAddress,"unknown"); memset(HelperBin,0,512); Quiet=0; handshake.erase(); MaxWaitTime = 60000.0; // 1 minute } void PipeConnection::setMaxWaitTime(double msecs) { MaxWaitTime = msecs; } PipeConnection::PipeConnection(char *helperbin,char *arg1=0,char *arg2=0, char *arg3=0,char *arg4=0) { init(); opmode=0; g_strlcpy(HelperBin,helperbin,512); args.push_back(HelperBin); if (arg1) args.push_back(arg1); if (arg2) args.push_back(arg2); if (arg3) args.push_back(arg3); if (arg4) args.push_back(arg4); } void PipeConnection::setHandshake(char *s) { handshake=s; } PipeConnection::PipeConnection(char *host,int port, char *helperbin,char *helpersuffix) { char z[256]; EboardFileFinder eff; init(); opmode=1; Port=port; g_strlcpy(HostName,host,128); // build helper path if (helpersuffix) snprintf(z,256,"%s.%s",helperbin,helpersuffix); else g_strlcpy(z,helperbin,256); if (!eff.find(z,HelperBin)) HelperBin[0] = 0; } PipeConnection::~PipeConnection() { if (toid>=0) gtk_timeout_remove(toid); netring.remove(this); args.clear(); } int PipeConnection::isConnected() { checkChildren(); return(Connected); } void PipeConnection::checkChildren() { pid_t r; if (!pid) { Connected=0; return; } r=waitpid((pid_t)pid,NULL,WNOHANG); if (r>0) Connected=0; } // 0 ok, -1 error, msg in getError int PipeConnection::open() { char z[256],firstline[256],*p; struct hostent *he; int n2h[2], h2n[2]; char *arguments[6]; unsigned int i; if (Connected) return 0; if (global.CommLog) { char ls[512]; snprintf(ls,512,"+ PipeConnection::open(%s)",HelperBin); global.LogAppend(ls); } for(i=0;i<6;i++) arguments[i]=0; if (HelperBin[0]==0) { snprintf(errorMessage,128,_("Helper program not found")); return -1; } switch(opmode) { case 0: for(i=0;isetText(z,30); he=gethostbyname(HostName); if (he==NULL) { snprintf(errorMessage,128,_("Host not found: %s"),HostName); return(-1); } snprintf(HostAddress,96,"%d.%d.%d.%d", (guchar) he->h_addr_list[0][0], (guchar) he->h_addr_list[0][1], (guchar) he->h_addr_list[0][2], (guchar) he->h_addr_list[0][3]); snprintf(z,256,_("Connecting to %s..."),HostAddress); if (!Quiet) global.status->setText(z,30); snprintf(z,256,"%d",Port); arguments[0]=HelperBin; arguments[1]=HostAddress; arguments[2]=z; break; } // step 2: run helper if (pipe(n2h)||pipe(h2n)) { g_strlcpy(errorMessage,_("IPC pipe creation failed."),128); return -1; } signal(SIGPIPE,SIG_IGN); pid=fork(); if (pid < 0) { g_strlcpy(errorMessage,_("process creation failed."),128); return -1; } if (!pid) { dup2(n2h[0],0); dup2(h2n[1],1); ::close(n2h[0]); ::close(n2h[1]); ::close(h2n[0]); ::close(h2n[1]); dup2(1,2); setpgid(getpid(),0); // to broadcast SIGKILL later execvp(HelperBin,arguments); write(1,"exec failed\n",12); global.debug("exec failed",HelperBin); _exit(2); // eek } else { ::close(n2h[0]); ::close(h2n[1]); memset(firstline,0,256); p=firstline; // send xboard/protover before anything else, to handle // gnu chess 5.04 if (! handshake.empty() ) { int wr,j,n; char hs[256]; g_strlcpy(hs,handshake.c_str(),256); n=strlen(hs); j=0; do { wr=write(n2h[1],&hs[j],n); if (wr<0) break; n-=wr; j+=wr; } while(n); } fcntl(h2n[0],F_SETFL,O_NONBLOCK); int rs; double elapsed; struct timeval ref, now; gettimeofday(&ref,NULL); while(1) { rs = read(h2n[0],p,1); if (rs==1) { if (*p=='\n') break; ++p; } if (rs==-1) { if (errno==EAGAIN) { usleep(10000); // 10 msec gettimeofday(&now,NULL); elapsed = (1000.0*now.tv_sec - 1000.0*ref.tv_sec) + (now.tv_usec/1000.0 - ref.tv_usec/1000.0); // MaxWaitTime msecs with no output from the process ? give up. if (elapsed > MaxWaitTime) { kill(-pid,SIGKILL); g_strlcpy(errorMessage,_("No output from program."),128); ::close(h2n[0]); ::close(n2h[1]); return -1; } } else { kill(-pid,SIGKILL); g_strlcpy(errorMessage,_("Read error from program."),128); ::close(h2n[0]); ::close(n2h[1]); return -1; } } // rs=-1 // should fix splange's crashing bug if ( (last_dead_pid == pid) || (waitpid(pid, 0, WNOHANG) != 0) ) { last_dead_pid = 0; g_strlcpy(errorMessage,_("Program exited too soon"),128); ::close(h2n[0]); ::close(n2h[1]); return -1; } } *p=0; if (!strcmp(firstline,"exec failed")) { g_strlcpy(errorMessage,_("Failed to run helper program"),128); ::close(h2n[0]); ::close(n2h[1]); return -1; } } pin=h2n[0]; pout=n2h[1]; Connected=1; fcntl(pin,F_SETFL,O_NONBLOCK); global.TheOffspring.push_back(-pid); netring.add(this,pid); global.zombies.add(pid,&netring); switch(opmode) { case 0: g_strlcpy(z,_("Engine running"),256); case 1: snprintf(z,256,_("Connected to %s (%s)"),HostName,HostAddress); break; } if (!Quiet) global.status->setText(z,300); if (opmode==1) global.getChannels(HostAddress); return 0; } void PipeConnection::close() { global.debug("PipeConnection","close"); cleanUp(); ::close(pin); ::close(pout); netring.remove(this); if (pid) kill(-pid,SIGKILL); pid=0; Connected=0; } int PipeConnection::readLine(char *tbuffer,int limit) { return(Connected?innerReadLine(tbuffer,limit,pin):-1); } void PipeConnection::writeLine(char *obuffer) { int ew,rem,ec,tol=0; fd_set wfd; struct timeval tv; FD_ZERO(&wfd); FD_SET(pout,&wfd); tv.tv_sec=2; tv.tv_usec=0; if (select(pout+1,0,&wfd,0,&tv)<=0) { global.debug("PipeConnection","writeLine","write would block"); close(); return; } // cerr << "writing [" << obuffer << "]\n"; if (Connected) { char *tmp; tmp = global.filter(obuffer); rem=strlen(tmp); for(ew=0;rem;) { ec=write(pout,tmp+ew,rem); if (ec<0) { usleep(50000); ++tol; if (tol==4) break; } else { ew+=ec; rem-=ec; } } write(pout,"\n",1); if (global.CommLog) { char z[4096]; snprintf(z,4096,"WROTE: %s",tmp); global.LogAppend(z); } if (tmp!=obuffer) free(tmp); } } char * PipeConnection::getError() { return(errorMessage); } void PipeConnection::farewellPid(int dpid) { consume(pin,1536); netring.remove(this); // wait for data on the pipe before shutting down toid=gtk_timeout_add(2000,sched_close,(gpointer)this); } int PipeConnection::getReadHandle() { return(Connected?pin:-1); } gboolean sched_close(gpointer data) { PipeConnection *pc; pc=(PipeConnection *)data; pc->close(); pc->toid=-1; pc->sendReadNotify(); // cause disconnection to be detected return FALSE; } // =========================================================== // FALLBACK // =========================================================== FallBackConnection::FallBackConnection() { current=candidates.end(); Connected=0; } FallBackConnection::~FallBackConnection() { for(current=candidates.begin();current!=candidates.end();current++) delete(*current); } void FallBackConnection::append(NetConnection *nc) { candidates.push_back(nc); if (!Connected) current=candidates.begin(); } int FallBackConnection::isConnected() { if (Connected) Connected=(*current)->isConnected(); return(Connected); } int FallBackConnection::open() { int r; if (candidates.empty()) return 0; for(current=candidates.begin();current!=candidates.end();current++) { r=(*current)->open(); if (!r) { Connected=1; strcpy(HostName,(*current)->HostName); strcpy(HostAddress,(*current)->HostAddress); TimeGuard=(*current)->TimeGuard; return 0; } g_strlcpy(errorMessage,(*current)->getError(),128); } return -1; } void FallBackConnection::close() { if (Connected) { (*current)->close(); Connected=(*current)->isConnected(); } } int FallBackConnection::readLine(char *tbuffer,int limit) { if (Connected) return( (*current)->readLine(tbuffer,limit) ); else return -1; } void FallBackConnection::writeLine(char *tbuffer) { if (Connected) (*current)->writeLine(tbuffer); } int FallBackConnection::readPartial(char *tbuffer,int limit) { if (Connected) return( (*current)->readPartial(tbuffer,limit) ); else return -1; } int FallBackConnection::bufferMatch(char *match) { if (Connected) return( (*current)->bufferMatch(match) ); else return 0; } char * FallBackConnection::getError() { return(errorMessage); } int FallBackConnection::getReadHandle() { if (Connected) return( (*current)->getReadHandle() ); else return -1; } void FallBackConnection::notifyReadReady(IONotificationInterface *target) { if (Connected) (*current)->notifyReadReady(target); } void FallBackConnection::sendReadNotify() { if (current != candidates.end()) (*current)->sendReadNotify(); } eboard-1.1.1.orig/toscratch.xpm0000644000175000017500000000110210757567572016012 0ustar patrikpatrik/* XPM */ static char * toscratch_xpm[] = { "24 16 5 1", " c None", ". c #226BE8", "+ c #000000", "@ c #FFFFFF", "# c #6B6B6B", "................ ", ".+++++++@@@@@@@. ", ".+++++++@@@@++@. ++ ", ".+++++++@@@@@@+. + + ", ".+++++++@@@@@@@++ + ", ".+++++++@@@@@@@. + ", ".+++++++@@@@@@@. +++++++", ".+++++++@@@@@@@. +@@#@@+", ".@@@@@@@+++++++. +@@#@@+", ".@@@@@@@+++++++. +++++++", ".@@@@@@@+++++++. +@@@@@+", ".@@@@@@@+++++++. +@@@@@+", ".@@@@@@@+++++++. +@@@@@+", ".@@@@@@@+++++++. +++++++", ".@@@@@@@+++++++. ", "................ "}; eboard-1.1.1.orig/text.h0000644000175000017500000001040610757567572014436 0ustar patrikpatrik/* $Id: text.h,v 1.25 2008/02/22 14:34:30 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_TEXT_H #define EBOARD_TEXT_H 1 #include "eboard.h" #include "widgetproxy.h" #include "ntext.h" #include "notebook.h" #include "history.h" #include "util.h" #include "stl.h" class OutputPane { public: virtual ~OutputPane(); virtual void append(char *msg,int color,Importance imp=IM_NORMAL)=0; virtual void append(char *msg,char *msg2,int color,Importance imp=IM_NORMAL)=0; virtual void updateScrollBack()=0; virtual void updateFont()=0; virtual void setBackground(int color)=0; }; class Searchable { public: virtual ~Searchable() {} virtual void execSearch()=0; string SearchString; }; class TextFilter { public: TextFilter(); ~TextFilter(); void set(const char *t); const char *getString(); bool accept(char *textline); private: string FilterString; bool AcceptedLast; void cleanUp(); vector thefilter; }; class Text : public NText, public NotebookInsider, public OutputPane, public Searchable { public: Text(); virtual ~Text(); void append(char *msg,int color,Importance imp=IM_NORMAL); void append(char *msg,char *msg2,int color,Importance imp=IM_NORMAL); void pageUp(); void pageDown(); void setBackground(int color); void updateScrollBack(); void updateFont(); void saveBuffer(); void findText(); void findTextNext(); void execSearch(); TextFilter Filter; private: int linecount; int LastMatch; }; class TextSet : public OutputPane { public: TextSet(); ~TextSet(); void addTarget(Text *target); void removeTarget(Text *target); void append(char *msg,int color,Importance imp=IM_NORMAL); void append(char *msg,char *msg2,int color,Importance imp=IM_NORMAL); void pageUp(); void pageDown(); void updateScrollBack(); void updateFont(); void setBackground(int color); private: list targets; }; class DetachedConsole : public WidgetProxy { public: DetachedConsole(TextSet *yourset, ConsoleListener *cl); virtual ~DetachedConsole(); const char *getFilter(); void show(); void setFilter(char *s); void setPasswordMode(int pm); private: Text *inner; TextSet *myset; GtkWidget *inputbox; ConsoleListener *listener; History::iterator hcursor; int focus_sig_id; string basetitle; GtkWidget *flabel; static int ConsoleCount; void injectInput(); void historyUp(); void historyDown(); void clone(); void updateFilterLabel(); friend gint detached_delete (GtkWidget * widget, GdkEvent * event, gpointer data); friend void detached_destroy (GtkWidget * widget, gpointer data); friend int dc_input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); friend void dc_set_filter(GtkWidget *w,gpointer data); friend void dc_new_console(GtkWidget *w,gpointer data); }; gint detached_delete (GtkWidget * widget, GdkEvent * event, gpointer data); void detached_destroy (GtkWidget * widget, gpointer data); int dc_input_key_press (GtkWidget * wid, GdkEventKey * evt, gpointer data); void dc_set_filter(GtkWidget *w,gpointer data); void dc_new_console(GtkWidget *w,gpointer data); class TextFilterDialog : public ModalDialog { public: TextFilterDialog(Text *target, GtkWidget *label2update); private: GtkWidget *pattern; Text *obj; GtkWidget *ulabel; friend void tfd_ok(GtkWidget *w, gpointer data); }; void tfd_ok(GtkWidget *w, gpointer data); #endif eboard-1.1.1.orig/protocol.h0000644000175000017500000000575510757567572015326 0ustar patrikpatrik/* $Id: protocol.h,v 1.29 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_PROTOCOL_H #define EBOARD_PROTOCOL_H 1 #include #include #include #include "eboard.h" #include "util.h" #include "tstring.h" #include "position.h" typedef enum { PV_premove } ProtocolVar; class Protocol { public: virtual ~Protocol(); virtual void receiveString(char *netstring)=0; virtual void sendMove(int x1,int y1,int x2,int y2,int prom)=0; virtual void sendDrop(piece p,int x,int y); virtual void finalize(); virtual int hasAuthenticationPrompts(); virtual bool requiresLegalityChecking(); virtual void sendUserInput(char *line); virtual void resign()=0; virtual void draw()=0; virtual void adjourn()=0; virtual void abort()=0; virtual void retractMove(); virtual void exaForward(int n); virtual void exaBackward(int n); virtual void discardGame(int gameid); virtual void queryGameList(GameListConsumer *glc); virtual void queryAdList(GameListConsumer *glc); virtual void observe(int gameid); virtual void answerAd(int adid); virtual void refreshSeeks(bool create); virtual void updateVar(ProtocolVar pv); // meant for right-click menu on the clock area virtual vector * getPlayerActions(); virtual vector * getGameActions(); virtual void callPlayerAction(char *player, string *action); virtual void callGameAction(int gameid, string *action); }; class NullProtocol : public Protocol { public: void receiveString(char *netstring); void sendMove(int x1,int y1,int x2,int y2,int prom); virtual void resign(); virtual void draw(); virtual void adjourn(); virtual void abort(); }; class EngineBookmark; class EngineProtocol : public Protocol { public: // both run methods should return 0 in case of failure, anything // else in case of success // should open a dialog asking parameters for the engine virtual int run()=0; // should run the engine with parameters from the bookmark virtual int run(EngineBookmark *bm)=0; virtual void setInitialPosition(Position *p)=0; }; #include "proto_fics.h" #include "proto_p2p.h" #include "proto_xboard.h" #endif eboard-1.1.1.orig/hammer.xpm0000644000175000017500000000073510757567572015304 0ustar patrikpatrik/* XPM */ static char * hammer_xpm[] = { "16 16 7 1", " c None", ". c #000000", "+ c #8E8E8E", "@ c #565656", "# c #3A3A3A", "$ c #D8A2A2", "% c #910808", " ", " ........... ", " .++++++++++. ", " .+@@@@@@@@@@. ", " .+@.##@@..@@@. ", " .+. .#@. .... ", " .. ... ", " . .$%%. ", " . .$%%. ", " .$%%. ", " .$%%. ", " .$%%. ", " .$%%. ", " .$%%. ", " .$%%. ", " ..... "}; eboard-1.1.1.orig/dead.xpm0000644000175000017500000000200210757567572014715 0ustar patrikpatrik/* XPM */ static char * dead_xpm[] = { "20 20 33 1", " c None", ". c #020202", "+ c #7E7A0E", "@ c #BE9612", "# c #D2B60A", "$ c #EADE06", "% c #FE5656", "& c #BD9212", "* c #DAC20A", "= c #C29E0E", "- c #E6D606", "; c #F3EE02", "> c #C6A20E", ", c #E2CE06", "' c #CAAA0E", ") c #EEE206", "! c #D6BE0A", "~ c #FEFE02", "{ c #DAC60A", "] c #EEE606", "^ c #FAF602", "/ c #CEAE0E", "( c #DECA0A", "_ c #EADA06", ": c #C29A11", "< c #D6BA0A", "[ c #E4D206", "} c #C8A60E", "| c #F6F202", "1 c #F2EA02", "2 c #D0B20E", "3 c #F2E602", "4 c #DEC60A", " ....... ", " ..._-,(*... ", " ..])$$-,{!<.. ", " ..1;;1)_-({<2.. ", " ..;|^|1]_-,{!2'.. ", " .];.~^.]$-.{!./}. ", "..)1|+.1]$[,.+#'>.. ", "._)1;.+1)_-(+.2/}:. ", ".-_).])._-,.!<.'>:. ", ".[-__$$_-,(*!#/}>@. ", ".(,-[-[-[({!<2/>=@. ", ".{{(...........::&. ", "..***{***.%%%.@:&.. ", " .>>=:@@&.. ", " ...=::@&... ", " ....... ", " "}; eboard-1.1.1.orig/seekgraph.h0000644000175000017500000000456510757567572015434 0ustar patrikpatrik/* $Id: seekgraph.h,v 1.17 2008/02/12 18:39:20 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SEEKGRAPH_H #define SEEKGRAPH_H #include "stl.h" #include "eboard.h" #include "widgetproxy.h" #include "notebook.h" class SeekAd { public: SeekAd(); int operator==(int v); SeekAd &operator=(const SeekAd &b); int getRating(); float getEtime(); variant getKind(); int distance(int px,int py); bool isComputer(); const char **getListLine(); int id; int clock; int incr; bool rated; bool automatic; bool formula; string color; string rating; string player; string range; string kind; string flags; int x,y,lx,ly,lw,lh,sw; }; class SeekGraph2 : public WidgetProxy, public NotebookInsider { public: SeekGraph2(); virtual ~SeekGraph2(); void remove(int id); void add(SeekAd *ad); void clear(); void updateFont(); void draw(); private: vector ads; LayoutBox L; GdkGC *gc; GdkPixmap *pix; int lw,lh,boxid,mx,my; SeekAd *getAd(int id); void rehover(); void placeAds(); bool rectFree(int x,int y,int w,int h); bool rectOverlap(int rx,int ry,int rw, int rh, int sx,int sy,int sw, int sh); bool intervalOverlap(int a1, int a2, int b1, int b2); friend gboolean skg2_hover(GtkWidget *w, GdkEventMotion *ee,gpointer data); friend gboolean skg2_click(GtkWidget *w, GdkEventButton *be,gpointer data); friend gboolean skg2_expose(GtkWidget *w, GdkEventExpose *ee,gpointer data); friend gboolean skg2_cfg(GtkWidget *w, GdkEventConfigure *ee,gpointer data); }; #endif eboard-1.1.1.orig/global.cc0000644000175000017500000011045110757567572015051 0ustar patrikpatrik/* $Id: global.cc,v 1.98 2008/02/22 07:32:16 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define GLOBAL_CC 1 #include "global.h" #include "text.h" #include "config.h" #include "chess.h" #include "tstring.h" #include "notebook.h" #include "board.h" #include "quickbar.h" #include "pieces.h" #include "eboard.h" /* Global variables needed to cleanly close the driver */ extern int (*dgtnixClose)(); extern bool DgtInit; extern void *dgtnix_dll_handle; Global global; // stream ops ostream & operator<<(ostream &s, WindowGeometry w) { s << '(' << w.X << ',' << w.Y << ','; s << w.W << ',' << w.H << ')'; return(s); } ostream & operator<<(ostream &s, Desktop d) { s << d.wMain << ',' << d.wGames << ',' << d.wLocal << ','; s << d.wAds << ',' << d.PanePosition ; return(s); } ostream & operator<<(ostream &s, TimeControl tc) { TimeControl x; x = tc; if (x.mode == TC_SPM) x.value[1] = 0; if (x.mode == TC_NONE) x.value[0] = x.value[1] = 0; s << '/' << ((int)(x.mode)) << '/' << x.value[0]; s << '/' << x.value[1]; return(s); } ostream & operator<<(ostream &s, EngineBookmark b) { s << b.caption << '^'; if (b.directory.empty()) s << "NULL"; else s << b.directory; s << '^'; if (b.cmdline.empty()) s << "NULL"; else s << b.cmdline; s << '^' << b.humanwhite << '^' << b.timecontrol << '^'; s << b.maxply << '^' << b.think << '^'; s << b.proto << '^' << ((int)b.mode); return(s); } ostream & operator<<(ostream &s, TerminalColor t) { s.setf(ios::hex,ios::basefield); s << t.TextDefault << ','; s << t.TextBright << ','; s << t.PrivateTell << ','; s << t.NewsNotify << ','; s << t.Mamer << ','; s << t.KibitzWhisper << ','; s << t.Shouts << ','; s << t.Seeks << ','; s << t.ChannelTell << ','; s << t.Engine << ','; s << t.Background; s.setf(ios::dec,ios::basefield); return(s); } Global::Global() { int i; input=0; output=0; network=0; status=0; protocol=0; chandler=0; promotion=0; ebook=0; skgraph2=0; inputhistory=0; bmlistener=0; qbcontainer=0; quickbar=0; killbox=0; lowernotebook=0; mainpaned=0; bugpane=0; pieceset=0; toplevelwidget=0; LastScratch = 0; Quitting=0; Version=VERSION; SelfInputColor = 0xc0c0ff; HilightLastMove=0; AnimateMoves=0; Premove=1; PasswordMode = 0; TabPos=0; CommLog=0; DebugLog=0; PauseLog=0; MainLevel=0; QuitPending=0; ScrollBack=1000; FicsAutoLogin=1; BeepWhenOppMoves=0; EnableSounds=0; PopupSecondaryGames=1; SmartDiscard=0; ShowCoordinates=0; PlainSquares=0; LightSqColor=0xe7cf93; DarkSqColor=0x9e8661; ShowTimestamp = 0; ShowRating=1; SpecialChars = 3; UseVectorPieces=0; CheckLegality=0; DrawHouseStock=1; AppendPlayed=0; AppendObserved=0; strcpy(AppendFile,"~/.eboard/mygames.pgn"); IcsSeekGraph=1; HideSeeks=0; SplitChannels=0; ChannelsToConsoleToo=0; SmootherAnimation=0; // chess machine had this and FICS admins didn't like it // if you turn it on, you may be committing abuse. // this is DAV's fault for not implementing a decent // way of tracking game observers. // I'm not going to delete the code. I'm just removing the // user-friendly controls from the config dialog and setting // the defaults to safe values. IcsAllObPlayed = 0; IcsAllObObserved = 0; JoystickFD = -1; JSCursorAxis = 0; JSBrowseAxis = 2; JSMoveButton = 0; JSNextTabButton = 5; JSPrevTabButton = 4; JSMode = 1; JSSpeed = 4; joycapture = NULL; ShowQuickbar=1; LowTimeWarningLimit=5; RetrieveChannelNames=1; sndevents[1].Pitch=650; sndevents[1].Duration=350; sndevents[2].Pitch=900; sndevents[2].Duration=80; sndevents[3].Pitch=444; sndevents[3].Duration=40; sndevents[3].Count=3; sndevents[4].Pitch=740; sndevents[4].Duration=120; for(i=5;i::iterator gi; for(gi=GameList.begin();gi!=GameList.end();gi++) if ( (*(*gi)) == cg->GameNumber ) renumberGame(*gi,nextFreeGameId(8000)); } void Global::deleteGame(ChessGame *cg) { list::iterator gi; for(gi=GameList.begin();gi!=GameList.end();gi++) if ( (*gi) == cg ) { GameList.erase(gi); return; } } void Global::appendGame(ChessGame *cg,bool RenumberDupes) { if (RenumberDupes) clearDupes(cg); GameList.push_back(cg); } void Global::prependGame(ChessGame *cg, bool RenumberDupes) { if (RenumberDupes) clearDupes(cg); GameList.push_front(cg); } void Global::renumberGame(ChessGame *cg,int id) { int oldid; oldid=cg->GameNumber; cg->GameNumber=id; // renumber notebook references if (ebook) ebook->renumberPage(oldid,id); } void Global::removeBoard(Board *b) { for(BLi=BoardList.begin();BLi!=BoardList.end();BLi++) if ( (*BLi) == b ) { BoardList.erase(BLi); return; } // cerr << " ** board not found\n"; } bool Global::effectiveLegalityChecking() { if (CheckLegality) return true; if (protocol != NULL) return(protocol->requiresLegalityChecking()); return false; } void Global::statOS() { FILE *p; p=popen("uname -s","r"); if (!p) p=popen("/bin/uname -s","r"); if (!p) p=popen("/sbin/uname -s","r"); if (!p) p=popen("/usr/bin/uname -s","r"); if (!p) p=popen("/usr/sbin/uname -s","r"); if (!p) { strcpy(SystemType,"unknown"); return; } SystemType[63]=0; fgets(SystemType,64,p); pclose(p); if (SystemType[strlen(SystemType)-1]=='\n') SystemType[strlen(SystemType)-1]=0; } void Global::ensureDirectories() { char z[256]; DIR *tdir; if (env.Home.empty()) { cerr << _("[eboard] ** no $HOME") << endl; return; } else if (strlen(env.Home.c_str()) > 230) { cerr << _("[eboard] ** $HOME is too long") << endl; return; } snprintf(z,256,"%s/.eboard",env.Home.c_str()); tdir=opendir(z); if (tdir==NULL) PopupHelp = true; else closedir(tdir); if (createDir(z)) return; snprintf(z,256,"%s/.eboard/craftylog",env.Home.c_str()); createDir(z); snprintf(z,256,"%s/.eboard/eng-out",env.Home.c_str()); createDir(z); snprintf(z,256,"%s/.eboard/scripts",env.Home.c_str()); createDir(z); } int Global::createDir(char *z) { DIR *tdir; tdir=opendir(z); if (tdir) closedir(tdir); else if (mkdir(z,0755)) { cerr << _("[eboard] ** failed to create directory ") << z << endl; return -1; } return 0; } void Global::readRC() { tstring t; string *p; char line[512],rev[128]; static char *sep=" \n\t,:\r^"; static char *sep2="\n\t,:\r"; static char *sep3=" \n\t:\r"; static char *sep4=",\n\r"; static char *sep5="\n\t:\r"; HostBookmark *hbm; EngineBookmark *ebm; int i,j; QButton *qb; if (env.Config.empty()) return; ifstream rc(env.Config.c_str()); if (!rc) return; memset(rev,0,128); rev['R']=0; rev['L']=1; rev['T']=2; rev['B']=3; t.setChomp(true); memset(line,0,512); while(rc.getline(line,511,'\n')) { t.set(line); memset(line,0,512); p=t.token(sep); if (!p) continue; if (p->at(0)=='#') continue; for(j=0;j<=55;j++) { if (! p->compare(RCKeys[j]) ) { switch(j) { case 0: HilightLastMove =t.tokenvalue(sep); break; case 1: AnimateMoves =t.tokenvalue(sep); break; case 2: Premove =t.tokenvalue(sep); break; case 3: setPieceSet(*(t.token(sep3)),true,true); break; case 4: p=t.token(sep); TabPos=rev[p->at(0)]; break; case 5: p=t.token(sep2); memset(ClockFont,0,96); p->copy(ClockFont,95); break; case 6: p=t.token(sep2); memset(PlayerFont,0,96); p->copy(PlayerFont,95); break; case 7: p=t.token(sep2); memset(InfoFont,0,96); p->copy(InfoFont,95); break; case 8: PlainSquares =t.tokenvalue(sep); break; case 9: LightSqColor =t.tokenvalue(sep,16); break; case 10: DarkSqColor =t.tokenvalue(sep,16); break; case 11: hbm=new HostBookmark(); p=t.token(sep4); p->copy(hbm->host,128); hbm->port=t.tokenvalue(sep4); p=t.token(sep4); p->copy(hbm->protocol,64); HostHistory.push_back(hbm); break; case 12: break; // deprecated (antialias) case 13: ShowRating =t.tokenvalue(sep); break; case 14: ScrollBack =t.tokenvalue(sep); break; case 15: FicsAutoLogin =t.tokenvalue(sep); break; case 16: BeepWhenOppMoves=t.tokenvalue(sep); break; case 17: i=t.tokenvalue(sep); if (i < N_SOUND_EVENTS) sndevents[i].read(t); break; case 18: EnableSounds =t.tokenvalue(sep); break; case 19: UseVectorPieces =t.tokenvalue(sep); break; case 20: CheckLegality =t.tokenvalue(sep); break; case 21: AppendPlayed =t.tokenvalue(sep); break; case 22: AppendObserved =t.tokenvalue(sep); break; case 23: p=t.token(sep); memset(AppendFile,0,128); p->copy(AppendFile,127); break; case 24: p=t.token(sep2); memset(ConsoleFont,0,96); p->copy(ConsoleFont,95); break; case 25: IcsSeekGraph =t.tokenvalue(sep); break; case 26: HideSeeks =t.tokenvalue(sep); break; case 27: SplitChannels =t.tokenvalue(sep); break; case 28: ChannelsToConsoleToo=t.tokenvalue(sep); break; case 29: DrawHouseStock =t.tokenvalue(sep); break; case 30: p=t.token(sep3); if (p->compare(pieceset->getSquareName())) setPieceSet(*p,false,true); break; case 31: PopupSecondaryGames =t.tokenvalue(sep); break; case 32: SmartDiscard =t.tokenvalue(sep); break; case 33: ShowCoordinates =t.tokenvalue(sep); break; case 34: Colors.read(t); break; case 35: Desk.read(t); break; case 36: Desk.readConsole(t); break; case 37: ShowQuickbar =t.tokenvalue(sep); break; case 38: qb=new QButton(); qb->icon=t.tokenvalue(sep5); qb->caption=*(t.token(sep5)); qb->command=*(t.token(sep5)); QuickbarButtons.push_back(qb); break; case 39: LowTimeWarningLimit =t.tokenvalue(sep); break; case 40: RetrieveChannelNames=t.tokenvalue(sep); break; case 41: SmootherAnimation =t.tokenvalue(sep); break; case 42: ebm=new EngineBookmark(); ebm->read(t); EnginePresets.push_back(ebm); break; case 43: p=t.token(sep2); memset(SeekFont,0,96); p->copy(SeekFont,95); break; // default: cerr << "ignored [" << (*p) << "]\n"; case 44: IcsAllObPlayed =t.tokenvalue(sep); break; case 45: IcsAllObObserved =t.tokenvalue(sep); break; case 46: p=t.token(sep2); memset(P2PName,0,64); p->copy(P2PName,63); break; case 47: ShowTimestamp =t.tokenvalue(sep); break; case 48: SpecialChars =t.tokenvalue(sep); break; case 49: JSCursorAxis = t.tokenvalue(sep); break; case 50: JSBrowseAxis = t.tokenvalue(sep); break; case 51: JSMoveButton = t.tokenvalue(sep); break; case 52: JSNextTabButton = t.tokenvalue(sep); break; case 53: JSPrevTabButton = t.tokenvalue(sep); break; case 54: JSMode = t.tokenvalue(sep); break; case 55: JSSpeed = t.tokenvalue(sep); break; } // switch } // compare } // for j 0..55 } // while getline rc.close(); } void Global::writeRC() { string div; list::iterator bi; list::iterator ei; static char *tabpos="RLTB"; unsigned int i; if (env.Config.empty()) return; div="::"; ofstream rc(env.Config.c_str()); if (!rc) return; rc << RCKeys[0] << div << HilightLastMove << endl; rc << RCKeys[1] << div << AnimateMoves << endl; rc << RCKeys[2] << div << Premove << endl; rc << RCKeys[3] << div << pieceset->getName() << endl; rc << RCKeys[4] << div << tabpos[TabPos%4] << endl; rc << RCKeys[5] << div << ClockFont << endl; rc << RCKeys[6] << div << PlayerFont << endl; rc << RCKeys[7] << div << InfoFont << endl; rc << RCKeys[8] << div << PlainSquares << endl; rc.setf(ios::hex, ios::basefield); rc << RCKeys[9] << div << LightSqColor << endl; rc << RCKeys[10] << div << DarkSqColor << endl; rc.setf(ios::dec, ios::basefield); for(bi=HostHistory.begin();bi!=HostHistory.end();bi++) rc << RCKeys[11] << ',' << (*bi)->host << ',' << (*bi)->port << ',' << (*bi)->protocol << endl; // 12: antialias deprecated rc << RCKeys[13] << div << ShowRating << endl; rc << RCKeys[14] << div << ScrollBack << endl; rc << RCKeys[15] << div << FicsAutoLogin<< endl; rc << RCKeys[16] << div << BeepWhenOppMoves << endl; for(i=0;i< N_SOUND_EVENTS;i++) rc << RCKeys[17] << div << i << ',' << sndevents[i] << endl; rc << RCKeys[18] << div << EnableSounds << endl; rc << RCKeys[19] << div << UseVectorPieces << endl; rc << RCKeys[20] << div << CheckLegality << endl; rc << RCKeys[21] << div << AppendPlayed << endl; rc << RCKeys[22] << div << AppendObserved << endl; rc << RCKeys[23] << div << AppendFile << endl; rc << RCKeys[24] << div << ConsoleFont << endl; rc << RCKeys[25] << div << IcsSeekGraph << endl; rc << RCKeys[26] << div << HideSeeks << endl; rc << RCKeys[27] << div << SplitChannels << endl; rc << RCKeys[28] << div << ChannelsToConsoleToo << endl; rc << RCKeys[29] << div << DrawHouseStock << endl; rc << RCKeys[30] << div << pieceset->getSquareName() << endl; rc << RCKeys[31] << div << PopupSecondaryGames << endl; rc << RCKeys[32] << div << SmartDiscard << endl; rc << RCKeys[33] << div << ShowCoordinates << endl; rc << RCKeys[34] << div << Colors << endl; rc << RCKeys[35] << div << Desk << endl; Desk.writeConsoles(rc,RCKeys[36]); rc << RCKeys[37] << div << ShowQuickbar << endl; for(i=0;i::iterator gi; for(gi=GameList.begin();gi!=GameList.end();gi++) if ( (*(*gi)) == num ) return(*gi); return NULL; } int Global::nextFreeGameId(int base) { int v; for(v=base;getGame(v)!=0;v++) ; return v; } void Global::WrappedMainIteration() { MainLevel++; gtk_main_iteration(); MainLevel--; if ((!MainLevel)&&(QuitPending)) Global::WrappedMainQuit(); } void Global::WrappedMainQuit() { if (MainLevel) { QuitPending++; return; } QuitPending=0; signal(SIGCHLD,SIG_DFL); // prevent the crash reported by gcp /* close dgtnix driver and dll */ if(DgtInit) { dgtnixClose(); dlclose(dgtnix_dll_handle); } gtk_main_quit(); } void Global::addAgent(NetConnection *ag) { Agents.push_back(ag); ag->notifyReadReady(iowatcher); } void Global::removeAgent(NetConnection *ag) { list::iterator ni; for(ni=Agents.begin();ni!=Agents.end();ni++) if ( (*ni) == ag ) { Agents.erase(ni); return; } } void Global::agentBroadcast(char *z) { list::iterator ni; if (Agents.empty()) return; for(ni=Agents.begin();ni!=Agents.end();ni++) if ((*ni)->isConnected()) (*ni)->writeLine(z); } int Global::receiveAgentLine(char *dest,int limit) { list::iterator ni; global.debug("Global","receiveAgentLine"); if (Agents.empty()) return 0; for(ni=Agents.begin();ni!=Agents.end();ni++) if ( (*ni)->isConnected()) if ((*ni)->readLine(dest,limit)==0) return 1; return 0; } void Global::opponentMoved() { if (BeepWhenOppMoves && sndevents[0].enabled) { if (AnimateMoves) SoundStack.push(0); else sndevents[0].safePlay(); } } /* void Global::clearSoundStack() { while(!SoundStack.empty()) SoundStack.pop(); } */ void Global::flushSound() { if (!SoundStack.empty()) { sndevents[SoundStack.top()].safePlay(); SoundStack.pop(); } } void Global::drawOffered() { playOther(1); } void Global::privatelyTold() { playOther(2); } void Global::challenged() { playOther(3); } void Global::timeRunningOut() { playOther(4); } void Global::gameWon() { playOther(5); } void Global::gameLost() { playOther(6); } void Global::gameStarted() { playOther(7); } void Global::gameFinished() { playOther(8); } void Global::moveMade() { if (EnableSounds && sndevents[9].enabled) { if (AnimateMoves) SoundStack.push(9); else sndevents[9].safePlay(); } } void Global::playOther(int i) { if (i>=N_SOUND_EVENTS) return; if (EnableSounds && sndevents[i].enabled) sndevents[i].safePlay(); } void Global::repaintAllBoards() { respawnPieceSet(); } bool Global::hasSoundFile(string &p) { int i,j; j=SoundFiles.size(); for(i=0;i::iterator i; PasswordMode = pm; for(i=Consoles.begin();i!=Consoles.end();i++) (*i)->setPasswordMode(pm); } void Global::debug(char *klass,char *method,char *data) { char z[256]; time_t now; string rm; if (!DebugLog) return; if (env.Home.empty()) return; snprintf(z,256,"%s/DEBUG.eboard",env.Home.c_str()); ofstream f(z,ios::app); if (!f) return; rm="+ "; rm+=klass; rm+="::"; rm+=method; if (data) { rm+=" ["; rm+=data; rm+=']'; } now=time(0); strftime(z,255,"%Y-%b-%d %H:%M:%S",localtime(&now)); f << z << " [" << ((int) getpid()) << "] " << rm << endl; f.close(); } void Global::LogAppend(char *msg) { char z[256],*p; static char hexa[17]="0123456789abcdef"; time_t now; string s; if (env.Home.empty()) return; if (PauseLog) msg=_("(message obfuscated -- password mode ?)"); if (CommLog) { snprintf(z,256,"%s/LOG.eboard",env.Home.c_str()); ofstream f(z,ios::app); if (!f) return; for(p=msg;*p;p++) switch(*p) { case '\n': s+="\\n"; break; case '\r': s+="\\r"; break; default: if (*p < 32) { s+="(0x"; s+=hexa[(*p)>>4]; s+=hexa[(*p)&0xf]; s+=')'; } else s+=*p; } now=time(0); strftime(z,255,"%Y-%b-%d %H:%M:%S",localtime(&now)); f << z << "[ " << ((int) getpid()) << "] " << s << endl; f.close(); } } void Global::dumpGames() { cerr.setf(ios::dec,ios::basefield); cerr << " GAME LIST (" << GameList.size() << " elements)\n"; cerr << "--------------------------------------------------------------------------\n"; for(GLi=GameList.begin();GLi!=GameList.end();GLi++) (*GLi)->dump(); cerr << "--------------------------------------------------------------------------\n"; } void Global::dumpBoards() { cerr.setf(ios::dec,ios::basefield); cerr << " BOARD LIST (" << BoardList.size() << " elements)\n"; cerr << "--------------------------------------------------------------------------\n"; for(BLi=BoardList.begin();BLi!=BoardList.end();BLi++) (*BLi)->dump(); cerr << "--------------------------------------------------------------------------\n"; } void Global::dumpPanes() { cerr.setf(ios::dec,ios::basefield); cerr << " PANE LIST\n"; cerr << "--------------------------------------------------------------------------\n"; ebook->dump(); cerr << "--------------------------------------------------------------------------\n"; } void Global::addHostBookmark(HostBookmark *hbm) { list::iterator bi; for(bi=HostHistory.begin();bi!=HostHistory.end();bi++) if ( (*(*bi)) == hbm ) { delete hbm; return; } HostHistory.push_front(hbm); if (HostHistory.size() > 16) { delete(HostHistory.back()); HostHistory.pop_back(); } writeRC(); if (bmlistener != 0) bmlistener->updateBookmarks(); } void Global::addEngineBookmark(EngineBookmark *ebm) { list::iterator ei; for(ei=EnginePresets.begin();ei!=EnginePresets.end();ei++) if ( (*(*ei)) == ebm ) { delete ebm; return; } EnginePresets.push_front(ebm); if (EnginePresets.size() > 16) { delete(EnginePresets.back()); EnginePresets.pop_back(); } writeRC(); if (bmlistener != 0) bmlistener->updateBookmarks(); } void Global::updateScrollBacks() { output->updateScrollBack(); updateChannelScrollBacks(); } Notebook * Global::getNotebook() { return(ebook); } char * Global::filter(char *s) { int i,j; string t; gunichar uc; char *c; if (SpecialChars==0) return s; // no filtering j = strlen(s); for(i=0;i 128) { switch(tmp[i]) { case 0x300: tmp[i] = '`'; break; // grave case 0xb4: case 0x301: tmp[i] = '\''; break; // acute case 0x302: tmp[i] = '^'; break; // circumflex case 0x303: tmp[i] = '~'; break; // tilde case 0xb8: case 0x327: tmp[i] = ','; break; // cedil case 0x2d9: case 0x307: tmp[i] = '.'; break; // dot above case 0x308: tmp[i] = '\"'; break; // diaeresis case 0x323: tmp[i] = '.'; break; // dot below default: //cout << "not found: " << ((int) tmp[i]) << endl; tmp[i] = '_'; } } dest.append( 1, (char) (tmp[i]&0x7f) ); } g_free(tmp); } void Global::gatherConsoleState() { list::iterator i; // please make Desk.consoles empty before calling this. Thanks. for(i=Consoles.begin();i!=Consoles.end();i++) Desk.addConsole(*i); } // malloc has the stupid idea of segfaulting when // allocating a word-incomplete size void * Global::safeMalloc(int nbytes) { return(malloc(nbytes + (nbytes % 4))); } void Global::setPieceSet(string &filename,bool chgPieces,bool chgSquares) { string oldp,olds; PieceSet *oldset=0; if (pieceset) { oldp=pieceset->getName(); olds=pieceset->getSquareName(); oldset=pieceset; } else { chgPieces=true; chgSquares=true; } pieceset=new PieceSet(chgPieces?filename:oldp,chgSquares?filename:olds); if (oldset) delete oldset; respawnPieceSet(); } void Global::respawnPieceSet() { list::iterator i; // notify all objects that use the pieceset for(i=PieceClients.begin();i!=PieceClients.end();i++) (*i)->pieceSetChanged(); } void Global::addPieceClient(PieceChangeListener *pcl) { global.debug("Global","addPieceClient"); PieceClients.push_back(pcl); } void Global::removePieceClient(PieceChangeListener *pcl) { list::iterator i; global.debug("Global","removePieceClient"); for(i=PieceClients.begin(); i!=PieceClients.end(); i++) if ( (*i) == pcl ) { PieceClients.erase(i); return; } } // ---------- HostBookmark::HostBookmark() { memset(host,0,128); memset(protocol,0,64); port=0; } int HostBookmark::operator==(HostBookmark *hbm) { if (strcmp(host,hbm->host)) return 0; if (port!=hbm->port) return 0; if (strcmp(protocol,hbm->protocol)) return 0; return 1; } int EngineBookmark::operator==(EngineBookmark *ebm) { if (humanwhite != ebm->humanwhite) return 0; if (timecontrol != ebm->timecontrol) return 0; if (maxply != ebm->maxply) return 0; if (think != ebm->think) return 0; if (proto != ebm->proto) return 0; if (mode != ebm->mode) return 0; if (directory.compare(ebm->directory)) return 0; if (cmdline.compare(ebm->cmdline)) return 0; return 1; } void EngineBookmark::read(tstring &t) { static char *sep="^\n\r"; string *p; caption = *(t.token(sep)); directory = *(t.token(sep)); cmdline = *(t.token(sep)); humanwhite = t.tokenvalue(sep); p = t.token(sep); if (p) timecontrol.fromSerialization(p->c_str()); maxply = t.tokenvalue(sep); think = t.tokenvalue(sep); proto = t.tokenvalue(sep); mode = (variant) t.tokenvalue(sep); if (!directory.compare("NULL")) directory.erase(); if (!cmdline.compare("NULL")) cmdline.erase(); } // -------------------------------- channel splitting IcsChannel::IcsChannel(char *s) { static char *sep="\t\r\n"; tstring t; t.set(s); number = t.tokenvalue(sep); name = * (t.token(sep)); } void ChannelSplitter::getChannels(char *ipaddr) { char destname[512], url[512]; struct stat age; time_t now, d; pid_t kid; global.debug("ChannelSplitter","getChannels",ipaddr); channels.clear(); if (! global.RetrieveChannelNames) return; snprintf(destname,512,"/tmp/eboard-chlist-%s-%d.tmp", ipaddr, getuid() ); chlist=destname; if (stat(destname, &age)==0) { now=time(0); d = now - age.st_mtime; // list expires after 8 hours if (d < 28800) goto cs_gc_use_current; } snprintf(url,512,"http://eboard.sourceforge.net/ics/%s.txt",ipaddr); kid=fork(); if (kid==0) { execlp("wget","wget","-q","-O",destname,url,0); _exit(0); } else { global.zombies.add(kid, this); } cs_gc_use_current: parseChannelList(); } void ChannelSplitter::ZombieNotification(int pid) { parseChannelList(); } void ChannelSplitter::parseChannelList() { char s[512]; global.debug("ChannelSplitter","parseChannelList"); channels.clear(); ifstream f(chlist.c_str()); if (!f) { global.debug("ChannelSplitter","parseChannelList","can't read file"); return; } if (memset(s,0,512), f.getline(s,511,'\n')) { if (strstr(s,"text/ics-channel-list")) { while( memset(s,0,512), f.getline(s,511,'\n') ) { if (!isdigit(s[0])) break; channels.push_back( IcsChannel(s) ); } } } f.close(); } const char * ChannelSplitter::getChannelTitle(int n) { int i,j; static char z[128]; j=channels.size(); for(i=0;ishow(); nb->addPage(op->widget,z,-200-ch,true); op->setNotebook(nb,-200-ch); numbers.push_back(ch); panes.push_back(op); } void ChannelSplitter::channelPageUp(int ch) { int i,j; j=panes.size(); for(i=0;ipageUp(); return; } } void ChannelSplitter::channelPageDown(int ch) { int i,j; j=panes.size(); for(i=0;ipageDown(); return; } } void ChannelSplitter::appendToChannel(int ch,char *msg,int color,Importance im) { int i,j; ensurePane(ch); j=panes.size(); for(i=0;iappend(msg,color,im); panes[i]->contentUpdated(); return; } } void ChannelSplitter::removeRemovablePage(int n) { int rn; int i,j; Notebook *nb; rn= -n; rn-=200; nb=getNotebook(); j=panes.size(); for(i=0;iremovePage(n); delete panes[i]; panes.erase(panes.begin() + i); numbers.erase(numbers.begin() + i); } } void ChannelSplitter::updateChannelScrollBacks() { int i,j; j=panes.size(); for(i=0;iupdateScrollBack(); } void ChannelSplitter::updateFont() { int i,j; j=panes.size(); for(i=0;iupdateFont(); } TerminalColor::TerminalColor() { TextDefault = 0xeeeeee; TextBright = 0xffffff; PrivateTell = 0xffff00; NewsNotify = 0xff8080; Mamer = 0xffdd00; KibitzWhisper = 0xd38fd3; Shouts = 0xddffdd; Seeks = 0x80ff80; ChannelTell = 0x3cd9d1; Engine = 0xc0ff60; Background = 0; } void TerminalColor::read(tstring &t) { static char *comma=",:\n\r \t"; TextDefault = t.tokenvalue(comma,16); TextBright = t.tokenvalue(comma,16); PrivateTell = t.tokenvalue(comma,16); NewsNotify = t.tokenvalue(comma,16); Mamer = t.tokenvalue(comma,16); KibitzWhisper = t.tokenvalue(comma,16); Shouts = t.tokenvalue(comma,16); Seeks = t.tokenvalue(comma,16); ChannelTell = t.tokenvalue(comma,16); Engine = t.tokenvalue(comma,16); Background = t.tokenvalue(comma,16); } // ---- desktop saving WindowGeometry::WindowGeometry(int a,int b,int c,int d) { X=a; Y=b; W=c; H=d; } WindowGeometry::WindowGeometry() { setNull(); } void WindowGeometry::print() { cout << "X,Y,W,H = " << X << "," << Y << "," << W << "," << H << endl; } void WindowGeometry::retrieve(GtkWidget *w) { gint a[7]; gdk_window_get_geometry(w->window,a,a+1,a+2,a+3,a+4); gdk_window_get_origin(w->window,a+5,a+6); X=a[5]-a[0]; Y=a[6]-a[1]; W=a[2]; H=a[3]; } bool WindowGeometry::isNull() { return( (X==0)&&(Y==0)&&(W==0)&&(H==0) ); } void WindowGeometry::setNull() { X=Y=W=H=0; } void WindowGeometry::read(tstring &t) { static char *sep=":,()\n\t\r "; X=t.tokenvalue(sep); Y=t.tokenvalue(sep); W=t.tokenvalue(sep); H=t.tokenvalue(sep); } // -------- Desktop::Desktop() { clear(); } void Desktop::clear() { vector::iterator i; vector::iterator j; wMain.setNull(); wGames.setNull(); wLocal.setNull(); wAds.setNull(); for(i=consoles.begin();i!=consoles.end();i++) delete(*i); for(j=cfilters.begin();j!=cfilters.end();j++) delete(*j); consoles.clear(); cfilters.clear(); PanePosition = 0; } void Desktop::read(tstring &t) { static char *sep=":,()\n\t\r "; wMain.read(t); wGames.read(t); wLocal.read(t); wAds.read(t); global.Desk.PanePosition = t.tokenvalue(sep); } void Desktop::writeConsoles(ostream &s, const char *key) { int i,j; j=consoles.size(); for(i=0;iread(t); p=t.token(sep); s=new string(); if (p) (*s)=(*p); consoles.push_back(wg); cfilters.push_back(s); } void Desktop::addConsole(DetachedConsole *dc) { WindowGeometry *wg; wg=new WindowGeometry(); wg->retrieve(dc->widget); consoles.push_back(wg); cfilters.push_back(new string(dc->getFilter())); } void Desktop::spawnConsoles(TextSet *ts) { int i,j; char tmp[512]; DetachedConsole *dc; j=consoles.size(); for(i=0;ishow(); dc->restorePosition(consoles[i]); if (cfilters[i]->size()) { g_strlcpy(tmp,cfilters[i]->c_str(),512); dc->setFilter(tmp); } } } // ------- ah, the zombies ZombieHunter::ZombieHunter() { signal(SIGCHLD,zh_sigchild_handler); } ZombieHunter::~ZombieHunter() { pids.clear(); handlers.clear(); } void ZombieHunter::add(int pid, SigChildHandler *sigh) { pids.push_back(pid); handlers.push_back(sigh); } void ZombieHunter::handleSigChild() { pid_t epid; unsigned int i; int s; while ( ( epid = waitpid(-1,&s,WNOHANG) ) > 0 ) { for(i=0;iZombieNotification(epid); pids.erase(pids.begin() + i); handlers.erase(handlers.begin() + i); break; } } } void zh_sigchild_handler(int sig) { if (sig == SIGCHLD) global.zombies.handleSigChild(); } Environment::Environment() { char *p; p=getenv("HOME"); if (p) { Home=p; } else { Home.erase(); cerr << _("** eboard ** warning: HOME environment variable not set\n"); } p=getenv("USER"); if (p) { User=p; } else { User=_("Human"); } if (!Home.empty()) { Config=Home; Config+="/.eboard/eboard.conf"; } else { Config.erase(); } } eboard-1.1.1.orig/qb3.xpm0000644000175000017500000000110610757567572014511 0ustar patrikpatrik/* XPM */ static char * qb3_xpm[] = { "18 16 12 1", " c None", ". c #000000", "+ c #FFF100", "@ c #F2E401", "# c #E5D603", "$ c #D9C805", "% c #CCBA06", "& c #C0AC08", "* c #B39E09", "= c #A7900B", "- c #9A820D", "; c #8E740E", " ", " ", " ........... ", " .+++++@#$%&. ", " .++++@#$%&*. ", " .+++@#$%&*=. ", " .++@#$%&*=-. ", " .+@#$%&*=-;.", " .++@#$%&*=-. ", " .+++@#$%&*=. ", " .++++@#$%&*. ", " .+++++@#$%&. ", " ........... ", " ", " ", " "}; eboard-1.1.1.orig/qb5.xpm0000644000175000017500000000110610757567572014513 0ustar patrikpatrik/* XPM */ static char * qb5_xpm[] = { "18 16 12 1", " c None", ". c #000000", "+ c #00FE1D", "@ c #01EE22", "# c #03E218", "$ c #05D618", "% c #06C918", "& c #08BD14", "* c #09B014", "= c #0BA412", "- c #0D9610", "; c #118B0E", " ", " ", " ........... ", " .+++++@#$%&. ", " .++++@#$%&*. ", " .+++@#$%&*=. ", " .++@#$%&*=-. ", " .+@#$%&*=-;.", " .++@#$%&*=-. ", " .+++@#$%&*=. ", " .++++@#$%&*. ", " .+++++@#$%&. ", " ........... ", " ", " ", " "}; eboard-1.1.1.orig/icon-games.xpm0000644000175000017500000000732610757567572016060 0ustar patrikpatrik/* XPM */ static char * icon_games_xpm[] = { "48 48 83 1", " c None", ". c #020202", "+ c #6A4E3A", "@ c #684A36", "# c #5F4333", "$ c #503A2A", "% c #B2966B", "& c #AE926A", "* c #AA8E66", "= c #A48A63", "- c #A28662", "; c #9E865F", "> c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #FFFFFF", "B c #8D8D8D", "C c #1C1C1C", "D c #000000", "E c #717171", "F c #545454", "G c #383838", "H c #C6C6C6", "I c #E2E2E2", "J c #727272", "K c #555555", "L c #E3E3E3", "M c #8E8E8E", "N c #AAAAAA", "O c #1D1D1D", "P c #393939", "Q c #C7C7C7", "R c #A9A9A9", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzBCDDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzFGHzIFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzBGzzzzzKAALJKMAAMNMKNLJKLAAMKJLAANKJLAA", "zzzzzzzzzGHzzzzzAAAOMNKJAKOMMOKNKKAKJNKPAQONJOAA", "zzzzzzzzzDzzIFFFMALQAQJKAOMAQOLAJJNPNNNDAQOQANAA", "zzzzzzzzzDzzIRRGMANDPKOMADAANKAAKNKPKKKKAANPPLAA", "zzzzzzzzzGRzzzzGNADLAAOQNKAAKNAADLKNAAQQAKAAMKAA", "zzzzzzzzzRDBRBGCAAOMNPDAMKAAPNALDAQONMOLAPKNKJAA", "zzzzzzzzzzHEFFRzAALKKQKAMQAAKAAQMAANKJLAALJKMAAA", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}; eboard-1.1.1.orig/flip.xpm0000644000175000017500000000103710757567572014761 0ustar patrikpatrik/* XPM */ static char * flip_xpm[] = { "24 16 3 1", " c None", ". c #000000", "+ c #777777", " ", " ........ . ", " ...++++++... .+ ", " ...+++ +....+ ", " ..+++ ...+ ", " .++ .....+ ", " + +++++ ", " ", " ..... . ", " ...+++ ..+ ", " .... ...++ ", " .++... ...+++ ", " .+ +........+++ ", " + ++++++++ ", " ", " "}; eboard-1.1.1.orig/TODO0000644000175000017500000000101010757567572013760 0ustar patrikpatrikeboard TODO ----------- TODO and KNOWN BUGS: - FICS recently introduced Thematic games which don't provide the initial moves, but rather an ECO code. You can play and watch those, but moving forward/backward, PGN saving and move list are still nuts. - engine vs. engine mode - show engine search (thinking) (you can get it on the console by typing "post" after the engine has been started) - allow variants and takebacks in direct connection mode. - support xboard protocol v1 engines (like phalanx) eboard-1.1.1.orig/chess.cc0000644000175000017500000010740510757567572014723 0ustar patrikpatrik/* $Id: chess.cc,v 1.93 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include "eboard.h" #include "chess.h" #include "movelist.h" #include "tstring.h" #include "util.h" #include "global.h" // --- stream operators ostream &operator<<(ostream &s, PGNheader h) { unsigned int i; for(i=0;iname << " \"" << h.header[i]->value << "\"]\n"; return(s); } // --- classes bool ChessGame::GlyphsInited = false; vector ChessGame::Glyphs; ChessGame::ChessGame() { int i; for(i=0;i<8;i++) protodata[i]=0; GameNumber=-1; Rated=0; Variant=REGULAR; memset(PlayerName[0],0,64); memset(PlayerName[1],0,64); Rating[0][0]=Rating[1][0]=0; last_half_move=-1; myboard=0; clock_regressive=1; info0[0]=0; cursor=moves.end(); mymovelist=0; over=0; MyColor=WHITE; StopClock=0; LocalEdit=false; Loaded=true; PGNSource[0]=0; SourceOffset=0; source=GS_Other; source_data="n/a"; AmPlaying=false; } ChessGame::ChessGame(int _number,int _tyme,int _inc, int _rated, variant _variant, char *p1,char *p2) { int i; GameNumber=_number; timecontrol.setIcs(_tyme,_inc); Rated=_rated; Variant=_variant; PlayerName[0][63]=PlayerName[1][63]=0; g_strlcpy(PlayerName[0],p1,64); g_strlcpy(PlayerName[1],p2,64); last_half_move=-1; myboard=0; cursor=moves.end(); mymovelist=0; over=0; MyColor=WHITE; StopClock=0; Rating[0][0]=Rating[1][0]=0; LocalEdit=false; Loaded=true; PGNSource[0]=0; SourceOffset=0; source=GS_Other; source_data="n/a"; AmPlaying=false; for(i=0;i<8;i++) protodata[i]=0; } ChessGame::ChessGame(ChessGame *src) { list::iterator i; int j; bool cset=false; GameNumber = src->GameNumber; Rated = src->Rated; Variant = src->Variant; strcpy(PlayerName[0],src->PlayerName[0]); strcpy(PlayerName[1],src->PlayerName[1]); last_half_move = src->last_half_move; myboard=0; mymovelist=0; over=0; MyColor=WHITE; StopClock=0; Rating[0][0]=Rating[1][0]=0; LocalEdit=false; timecontrol = src->timecontrol; Loaded=true; PGNSource[0]=0; SourceOffset=0; for(j=0;j<8;j++) protodata[j] = src->protodata[j]; // clone move list for(i=src->moves.begin();i!=src->moves.end();i++) { moves.push_back(Position(*i)); if (src->cursor == i) { cursor = moves.end(); cursor--; cset = true; } } if (moves.empty()) moves.push_back(Position()); if (!cset) { cursor = moves.end(); cursor--; } source=src->source; source_data=src->source_data; AmPlaying=src->AmPlaying; } ChessGame::~ChessGame() { moves.clear(); } int ChessGame::operator==(int gnum) { return(gnum==GameNumber); } void ChessGame::setFree() { if (myboard) myboard->FreeMove=true; } void ChessGame::acknowledgeInfo() { char s[64],tz[128]; if (myboard==NULL) return; myboard->freeze(); // P2P and engine games if (GameNumber > 7000 && GameNumber < 9000) { timecontrol.toString(s,64); } else if (GameNumber >= 9000) { // client-side games - rated/unrated unknown timecontrol.toShortString(tz,128); snprintf(s,64,_("Game #%d - %s"), // TRANSLATE GameNumber,tz); } else { // live ICS games timecontrol.toShortString(tz,128); snprintf(s,64,_("Game #%d - %s - %s"), // TRANSLATE? GameNumber,tz, Rated?_("rated"): _("unrated")); } myboard->setInfo(0,s); strcpy(s,variantName(Variant)); myboard->setInfo(1,s); if (!moves.empty()) myboard->setInfo(4,moves.back().getMaterialString(Variant)); if (over) showResult(); myboard->invalidate(); myboard->thaw(); myboard->updateClock(); } void ChessGame::showResult() { char str[256]; if ((!over)||(!myboard)) return; switch(result) { case WHITE_WIN: strcpy(str,"1-0 "); break; case BLACK_WIN: strcpy(str,"0-1 "); break; case DRAW: strcpy(str,"1/2-1/2 "); break; default: strcpy(str,"(*) "); break; } if (strlen(ereason)>2) g_strlcat(str,ereason,256); myboard->setInfo(3,str); } void ChessGame::updateStock() { if (over) return; if (!myboard) return; if (!moves.empty()) myboard->setInfo(5,moves.back().getHouseString()); // bughouse partner game if (protodata[2]) global.bugpane->setPosition(moves.back()); } bool ChessGame::isFresh() { return((bool)(moves.empty())); } // usually called to remove an illegal move from the movelist void ChessGame::retreat(int nmoves) { for(;nmoves;nmoves--) if (!moves.empty()) moves.pop_back(); cursor=moves.end(); cursor--; } void ChessGame::fixExamineZigZag(Position &suspect) { list::iterator i; for(i=moves.begin();i!=moves.end();i++) if ( (*i) == suspect ) if (! suspect.getLastMove().compare( (*i).getLastMove() ) ) { moves.erase(i,moves.end()); return; } } // updates clocks and just-below-clocks strings void ChessGame::updateClockAndInfo2(int wclockms, int bclockms, int blacktomove, char *infoline, bool sndflag) { if (myboard) { myboard->freeze(); if (StopClock) myboard->setClock2(wclockms,bclockms,blacktomove?2:-2,clock_regressive); else myboard->setClock2(wclockms,bclockms,blacktomove?1:-1,clock_regressive); if (infoline) myboard->setInfo(2,infoline); if (!moves.empty()) { myboard->setInfo(4,moves.back().getMaterialString(Variant)); myboard->setInfo(5,moves.back().getHouseString()); } myboard->update(sndflag); myboard->thaw(); myboard->contentUpdated(); } } void ChessGame::updatePosition2(Position &p,int movenum,int blacktomove, int wclockms,int bclockms,char *infoline, bool sndflag) { global.debug("ChessGame","updatePosition"); if (over) return; // bughouse partner's game if (protodata[2]) { global.bugpane->freeze(); global.bugpane->setPosition(p); if (StopClock) global.bugpane->setClock2(wclockms,bclockms,blacktomove?2:-2,clock_regressive); else global.bugpane->setClock2(wclockms,bclockms,blacktomove?1:-1,clock_regressive); global.bugpane->thaw(); } if (last_half_move>=0) if (! moves.empty() ) if (p == moves.back() ) { updateClockAndInfo2(wclockms,bclockms,blacktomove,infoline, sndflag); return; } Position np; np=p; np.setLastMove(infoline); // cerr << "LastMove = [" << infoline << "]\n"; fixExamineZigZag(np); moves.push_back(np); cursor=moves.end(); cursor--; last_half_move=(movenum*2)+(blacktomove?0:1); updateClockAndInfo2(wclockms,bclockms,blacktomove,infoline, sndflag); if (mymovelist) mymovelist->updateList(moves); } void ChessGame::incrementActiveClock(int secs) { ChessClock *c; if (myboard) { c = myboard->getClock(); c->incrementClock2(0,secs*1000); } } void ChessGame::fireWhiteClock(int wval,int bval) { myboard->setClock2(wval*1000,bval*1000,-1,clock_regressive); } void ChessGame::setBoard(Board *b) { myboard=b; if (myboard) myboard->setGame(this); } Board * ChessGame::getBoard() { return(myboard); } Position & ChessGame::getLastPosition() { if (moves.empty()) return(startpos); return(moves.back()); } Position & ChessGame::getCurrentPosition() { if (moves.empty()) return(startpos); if (cursor!=moves.end()) return(*cursor); else return(moves.back()); } Position & ChessGame::getPreviousPosition() { list::iterator pv; if (moves.empty()) return(startpos); if (cursor!=moves.end()) { pv=cursor; if (pv!=moves.begin()) pv--; return(*pv); } else { pv=moves.end(); pv--; if (pv!=moves.begin()) pv--; return(*pv); } } void ChessGame::goBack1() { if (moves.empty()) return; if (cursor!=moves.begin()) cursor--; } void ChessGame::goBackAll() { if (moves.empty()) return; cursor=moves.begin(); } void ChessGame::goForward1() { if (moves.empty()) return; cursor++; if (cursor==moves.end()) cursor--; } void ChessGame::goForwardAll() { if (moves.empty()) return; cursor=moves.end(); cursor--; } void ChessGame::openMoveList() { if (mymovelist) { gtk_window_activate_focus(GTK_WINDOW(mymovelist->widget)); } else { mymovelist=new MoveListWindow(PlayerName[0],PlayerName[1], GameNumber,moves,over,result,ereason); mymovelist->setListener(this); mymovelist->show(); } } void ChessGame::closeMoveList() { if (mymovelist) mymovelist->close(); } void ChessGame::moveListClosed() { delete mymovelist; mymovelist=0; } void ChessGame::editEmpty() { Position p; int i,j; if (!LocalEdit) return; moves.clear(); last_half_move=1; for(i=0;i<8;i++) for(j=0;j<8;j++) p.setPiece(i,j,EMPTY); p.sidehint=true; moves.push_back(p); cursor=moves.end(); cursor--; if (myboard) { myboard->setInfo(2,(*cursor).getLastMove()); myboard->setInfo(4,p.getMaterialString()); myboard->update(); } } void ChessGame::editStartPos() { Position p; if (!LocalEdit) return; moves.clear(); startpos.setStartPos(); // sidehint might need to be fixed last_half_move=1; moves.push_back(p); cursor=moves.end(); cursor--; if (myboard) { myboard->setInfo(2,(*cursor).getLastMove()); myboard->setInfo(4,p.getMaterialString()); myboard->update(); } } void ChessGame::sendDrop(piece p, int x, int y) { list::iterator z; if (LocalEdit) { Position o; o = *cursor; o.setPiece(x,y,p); z=cursor; z++; moves.erase(z,moves.end()); moves.push_back(o); last_half_move++; cursor=moves.end(); cursor--; if (myboard) { myboard->setInfo(2,(*cursor).getLastMove()); myboard->update(); } } else { if (global.protocol) global.protocol->sendDrop(p&PIECE_MASK,x,y); } } void ChessGame::sendMove(int x1,int y1,int x2,int y2) { int promote=0; piece q; list::iterator z; char v[16]; if (!moves.empty()) { Position p; p=moves.back(); if ((p.getPiece(x1,y1)==(PAWN|WHITE))&& (y1==6)&&(y2==7)) promote=1; if ((p.getPiece(x1,y1)==(PAWN|BLACK))&& (y1==1)&&(y2==0)) promote=1; } // ====================== BEGIN SCRATCH BOARD ONLY =============================== if (LocalEdit) { Position p; p = *cursor; q=p.getPiece(x1,y1)&COLOR_MASK; if (p.isMoveLegalCartesian(x1,y1,x2,y2,q,REGULAR)) { p.stdNotationForMove(x1,y1,x2,y2, promote ? q | global.promotion->getPiece() : EMPTY, v, REGULAR); p.setLastMove(v); p.moveCartesian(x1,y1,x2,y2,REGULAR); if (promote) p.setPiece(x2,y2, q | global.promotion->getPiece() ); } else { p.setPiece(x2,y2,p.getPiece(x1,y1)); p.setPiece(x1,y1,EMPTY); } z=cursor; z++; if (z!=moves.end()) moves.erase(z,moves.end()); moves.push_back(p); last_half_move++; cursor=moves.end(); cursor--; if (myboard) { myboard->setInfo(2,(*cursor).getLastMove()); myboard->update(); } } // ====================== END SCRATCH BOARD ONLY =============================== else { if (global.protocol) global.protocol->sendMove(x1,y1,x2,y2,promote); } } bool ChessGame::getSideHint() { return (getCurrentPosition().sidehint); } void ChessGame::setSideHint(bool white) { getCurrentPosition().sidehint = white; } void ChessGame::flipHint(int flip) { if (myboard) myboard->setFlipped(flip!=0); } void ChessGame::enableMoving(bool flag) { if (!myboard) return; myboard->setCanMove(flag); } void ChessGame::endGame(char *reason,GameResult _result) { if (over) return; // can't end twice result=_result; // bughouse partner game if (protodata[2]) global.bugpane->stopClock(); if (myboard) myboard->stopClock(); over=1; g_strlcpy(ereason,reason,128); showResult(); if (myboard) myboard->setCanMove(false); if (pgn.empty()) guessPGNFromInfo(); if (mymovelist) mymovelist->updateList(moves,1,result,ereason); } int ChessGame::isOver() { return(over); } void ChessGame::updateGame(list &gamedata) { list::iterator li; Position startpos; int hmn=-1; moves.clear(); for(li=gamedata.begin();li!=gamedata.end();li++) { Position p; p = *li; moves.push_back(p); ++hmn; } // should fix the adding of FEN fields on followed games if (moves.empty() && IS_NOT_WILD(Variant)) { moves.push_back(Position()); hmn=0; } cursor=moves.end(); cursor--; last_half_move=hmn; if (mymovelist) mymovelist->updateList(moves); } void ChessGame::dump() { cerr.setf(ios::hex,ios::basefield); cerr.setf(ios::showbase); cerr << "[game " << ((uint64_t) this) << "] "; cerr.setf(ios::dec,ios::basefield); cerr << "game#=" << GameNumber << " "; cerr << "rated=" << Rated << " "; cerr << "white=" << PlayerName[0] << " "; cerr << "black=" << PlayerName[1] << " "; cerr << "over=" << over << " "; cerr.setf(ios::hex,ios::basefield); cerr.setf(ios::showbase); cerr << "board=[" << ((uint64_t)myboard) << "]" << endl; } char * ChessGame::getPlayerString(int index) { index%=2; PrivateString[0]=0; if ((global.ShowRating)&&(strlen(Rating[index]))) snprintf(PrivateString,96,"%s (%s)",PlayerName[index],Rating[index]); else strcpy(PrivateString,PlayerName[index]); return(PrivateString); } // ---- PGN void ChessGame::guessInfoFromPGN() { const char *cp; cp=pgn.get("White"); if (cp!=NULL) g_strlcpy(PlayerName[0],cp,64); cp=pgn.get("Black"); if (cp!=NULL) g_strlcpy(PlayerName[1],cp,64); cp=pgn.get("Result"); result = UNDEF; if (cp!=NULL) { if (cp[0]=='0') result=BLACK_WIN; else if (cp[1]=='/') result=DRAW; else if (cp[0]=='1') result=WHITE_WIN; } timecontrol.mode = TC_NONE; cp=pgn.get("TimeControl"); if (cp!=NULL) { int a,b; ExtPatternMatcher FischerClock, XMoves, SecsPerMove; FischerClock.set("%N+%N*"); XMoves.set("%N/%N*"); SecsPerMove.set("0+%N*"); if (SecsPerMove.match(cp)) { a = atoi(SecsPerMove.getNToken(0)); timecontrol.setSecondsPerMove(a); } else if (FischerClock.match(cp)) { a = atoi(FischerClock.getNToken(0)); b = atoi(FischerClock.getNToken(1)); timecontrol.setIcs(a,b); } else if (XMoves.match(cp)) { a = atoi(FischerClock.getNToken(0)); b = atoi(FischerClock.getNToken(1)); timecontrol.setXMoves(a,b); } } cp=pgn.get("Variant"); if (cp!=NULL) Variant = variantFromName(cp); } void ChessGame::guessPGNFromInfo() { time_t now; struct tm *snow; char z[64],y[256],x[128]; Position startpos; char rz[64]; int i,j; now=time(0); snow=localtime(&now); pgn.set("Event","?"); switch(source) { case GS_ICS: strcpy(x,variantName(Variant)); x[0] = toupper(x[0]); // ICS Rated Chess Match snprintf(y,256,"ICS %s %s Match", Rated?"Rated":"Unrated", x); pgn.set("Event",y); break; case GS_Engine: strcpy(x,variantName(Variant)); x[0] = toupper(x[0]); // Engine Chess Match snprintf(y,256,"Engine %s Match",x); pgn.set("Event",y); break; case GS_Other: case GS_PGN_File: default: pgn.set("Event","?"); break; } pgn.set("Site","?"); snprintf(z,64,"%d.%.2d.%.2d",1900+snow->tm_year, 1+snow->tm_mon,snow->tm_mday); pgn.set("Date",z); pgn.set("Round","?"); if (strlen(PlayerName[0])) pgn.set("White",PlayerName[0]); if (strlen(PlayerName[1])) pgn.set("Black",PlayerName[1]); // get rating, but prevent strings like (1967), (----), (UNR)... memset(rz,0,64); j=strlen(Rating[0]); for(i=0;i::iterator li; int xp,lm,mn; tstring t; string sp, path, *p; if (moves.size() < 4) { global.status->setText(_("savePGN failed: Won't save game with less than 2 moves"),5); return false; } // FIXME ~username won't work, only ~/something if (filename[0]=='~') { path=global.env.Home; path+='/'; path+=(&filename[2]); } else path=filename; ofstream f(path.c_str(),append? ios::app : ios::out); if (!f) { snprintf(z,512,_("savePGN failed: %s"),filename); global.status->setText(z,10); return false; } if (pgn.empty()) guessPGNFromInfo(); f << pgn << endl; lm=0; xp=0; for(li=moves.begin();li!=moves.end();li++) { sp=(*li).getLastMove(); if (sp.empty()) continue; t.set(sp); mn=t.tokenvalue("."); if (!mn) continue; if (mn>lm) { f << mn << ". "; lm=mn; xp+=(lm>9)?4:3; // MINOR BUG FOR GAMES WITH 100+ MOVES } p=t.token("(). \t"); f << (*p) << ' '; xp+=1+p->length(); if (xp>70) { xp=0; f << endl; } } if (strlen(ereason) > 5) { if (xp) f << endl; f << '{' << ereason << "} "; } cp=pgn.get("Result"); if (cp) f << cp; else f << '*'; f << endl << endl; f.close(); snprintf(z,512,_("--- %s game to PGN file %s"), append?_("Appended"): _("Wrote"),filename); global.output->append(z,0xc0ff00); return true; } // indexonly: do not load the move text now bool ChessGame::ParsePgnGame(zifstream &f, char * filename, bool indexonly, int gameid, variant v, ChessGame *updatee) { /* ok, now (0.4.x) we do this in a DFA-like manner 0 = state 0 (whitespace before movetext) PGN header states: 1 = found [, consuming PGN field name 2 = consuming whitespace between field name and field data 3 = found " , consuming field data 4 = found ending " , waiting ] 6 = reading token 7 = inside { comment 8 = like level 0, but can't have headers 9 = got result, waiting end of line (== end of game) 10 = initial state ;-) whitespace (and comments like in twic pgns) between games 11 = inside alternate line */ int state = 10; int halfmove = 0; int altmoves = 0; piece color = WHITE; tstring t; list gl; ChessGame *game=0; ExtPatternMatcher Legacy0, Legacy1, Legacy2, Result; PatternBinder Binder, Binder2; char alpha[256], beta[256], omega[256]; int ap=0, bp=0; char line[512], *p; long pstart; GameResult r; static char *whitespace = " \t\n\r"; static char *token = "1234567890*/KQBNRP@kqbnrp=+#abcdefgh-Ox$"; static char *digits = "1234567890"; static char *resultset = "01*"; Legacy0.set("%%eboard:variant:%s*"); Legacy1.set("%%eboard:clock/r:%n:%n:%n*"); Legacy2.set("%%eboard:clue:*"); Binder.add(&Legacy0,&Legacy1,&Legacy2,NULL); Result.set("*%N-%N*"); Binder2.add(&Result,NULL); ChessGame::initGlyphs(); pstart=f.tellg(); if (!updatee) { game = new ChessGame(); game->Variant = v; game->GameNumber = gameid; game->source = GS_PGN_File; game->source_data = filename; if (indexonly) { game->Loaded=false; g_strlcpy(game->PGNSource,filename,256); game->SourceOffset = pstart; } } omega[0]=0; // #define PGN_DEBUG 1 #ifdef PGN_DEBUG cerr << "entering new game\n"; #endif while( memset(line,0,512), f.getline(line,510,'\n') ) { line[strlen(line)]='\n'; #ifdef PGN_DEBUG cerr << "state = " << state << ", current line is: " << line; #endif // %-comments if (line[0]=='%') { Binder.prepare(line); if (Legacy0.match()) { p=Legacy0.getSToken(0); v=variantFromName(p); if (v!=REGULAR) if (game) game->Variant=v; continue; } // match Legacy0 if (Legacy1.match()) { if (game) { int a,b; a = atoi(Legacy1.getNToken(0)); b = atoi(Legacy1.getNToken(1)); game->timecontrol.setIcs(a,b); game->Rated=atoi(Legacy1.getNToken(2)); } continue; } // match Legacy1 if (Legacy2.match()) { g_strlcpy(omega,Legacy2.getStarToken(0),128); if (omega[strlen(omega)-1]=='\n') omega[strlen(omega)-1]=0; continue; } continue; } for(p=line;*p;p++) { switch(state) { // whitespace case 10: if (*p == '[') { state=1; memset(alpha,0,256); ap=0; } break; case 0: if (*p == '[') { state=1; memset(alpha,0,256); ap=0; break; } case 8: if (*p == '{') { state=7; memset(alpha,0,256); ap=0; break; } if (*p == '(') { state=11; ap=0; altmoves++; break; } if (strchr(token, *p)) { state=6; memset(alpha,0,256); alpha[0]=*p; ap=1; break; } break; // case 0/8 // header case 1: if (strchr(whitespace, *p)) { state=2; memset(beta,0,256); bp=0; break; } alpha[ap++]=*p; break; // case 1 case 2: if (*p == '\"') state = 3; break; // case 2 case 3: if (*p == '\"') state = 4; else beta[bp++]=*p; break; // case 3 case 4: if (*p == ']') { if (game) { game->pgn.set(alpha,beta); if (!strcmp(alpha,"Variant")) { v=variantFromName(beta); game->Variant=v; } } if (!indexonly) if (!strcmp(alpha,"FEN")) { Position g; g.setFEN(beta); gl.clear(); gl.push_back(g); } state = 0; } break; // case 4 // token case 6: if (strchr(whitespace,*p)) { Binder2.prepare(alpha); #ifdef PGN_DEBUG cerr << "state 6 parsing token " << alpha << endl; #endif // move number token (1. , 1...) if ( strchr(digits, alpha[0]) && strchr(alpha, '.') ) { state=8; // Account for PGNs where Black moves first if (strstr(alpha, "...") && !halfmove) { color = BLACK; halfmove = 1; } #ifdef PGN_DEBUG cerr << "v: movenumber\n"; #endif break; } // end game token (1-0, 0-1, 1/2-1/2, *) if (strchr(resultset, alpha[0])) if ((alpha[0]=='*') || Result.match() ) { #ifdef PGN_DEBUG cerr << "v: end of game\n"; #endif if (!strlen(omega)) strcpy(omega," "); if (alpha[0]=='*') r=UNDEF; else if (alpha[1]=='/') r=DRAW; else if (alpha[0]=='1') r=WHITE_WIN; else r=BLACK_WIN; if (game) { game->updateGame(gl); game->endGame(omega,r); game->guessInfoFromPGN(); } else updatee->updateGame(gl); if (game) global.GameList.push_back(game); state=9; break; } if (alpha[0]=='$') { int i; t.set((char *) alpha); if (! gl.empty() ) { if (! global.annotator.isOpen() ) { i = t.tokenvalue("$"); if (i < Glyphs.size()) { gl.back().addAnnotation( global.annotator.open() ); global.annotator.append(* (Glyphs[i])); global.annotator.close(); } } else { i = t.tokenvalue("$"); if (i < Glyphs.size()) { global.annotator.append(* (Glyphs[i])); } } } state = 8; break; } #ifdef PGN_DEBUG cerr << "v: move text\n"; #endif if (indexonly) { state=8; break; } // move tokens if (gl.empty()) gl.push_back(Position()); { Position g; g = gl.back(); g.clearAnnotation(); g.moveAnyNotation(alpha,color,game ? game->Variant : v); snprintf(beta,256,"%d%s %s",1+halfmove/2, (color==WHITE)?".":". ...",alpha); g.setLastMove(beta); gl.push_back(g); } color^=COLOR_MASK; halfmove++; state=8; } else { // non whitespace char // ignore move number in PGNs like 1.e4 (no space between . and move) if ( ap && alpha[ap-1] == '.' ) if (strchr(token,*p)) { memset(alpha,0,256); ap=0; } alpha[ap++]=*p; if (game) if ( (*p == '@') && (game->Variant == REGULAR) ) { f.seekg(pstart); gl.clear(); delete game; game=0; return(ParsePgnGame(f,filename,indexonly,gameid,CRAZYHOUSE)); } } break; // case 6 // { comments case 7: if (*p == '}') { global.annotator.close(); state=8; break; } if (! gl.empty() ) { if (! global.annotator.isOpen() ) gl.back().addAnnotation( global.annotator.open() ); global.annotator.append(*p >= ' ' ? *p : ' '); } break; // case 7 case 9: // game over, waiting end of line if (*p == '\n') { gl.clear(); return true; } break; // case 9 case 11: // Temporarily ignore alternate moves if (*p == ')') if (!(--altmoves)) state = 8; if (*p == '(') altmoves++; break; } // switch state } // for p } // while getline // avoid issues with files whose last char belongs to a token if (state == 9) { gl.clear(); return true; } if (!gl.empty()) gl.clear(); if (game) delete game; return false; } // method bool ChessGame::loadMoves() { char z[512]; if (Loaded) return true; zifstream f(PGNSource); if (!f) { snprintf(z,512,_("can't load PGN move text from %s (error opening file)"),PGNSource); global.output->append(z,0xc0ff00); return false; } if (!f.seekg(SourceOffset)) { snprintf(z,512,_("can't seek to offset %lu of %s"),SourceOffset,PGNSource); global.output->append(z,0xc0ff00); f.close(); return false; } if (!ParsePgnGame(f,PGNSource,false,-1,Variant,this)) { g_strlcpy(z,_("error parsing PGN data"),512); global.output->append(z,0xc0ff00); f.close(); return false; } f.close(); Loaded = true; return true; } void ChessGame::LoadPGN(char *filename) { UnboundedProgressWindow *pw; int nextid,count=0; vector g_ids; vector::iterator ii; list::iterator gi; bool id_space_empty=false; zifstream f(filename); if (!f) return; // cerr << "reading " << filename << endl; pw=new UnboundedProgressWindow(_("%d games read")); // grab a list of existent game ids for(gi=global.GameList.begin();gi!=global.GameList.end();gi++) g_ids.push_back( (*gi)->GameNumber ); sort( g_ids.begin(), g_ids.end() ); nextid = 10000; for(ii=g_ids.begin(); ii != g_ids.end(); ii++) { if ( *ii > nextid ) break; if ( *ii == nextid ) ++nextid; } if ( ii == g_ids.end() ) id_space_empty = true; while(!f.eof()) { if (ParsePgnGame(f,filename,true,nextid)) { ++count; ++nextid; if (!id_space_empty) { for( ; ii != g_ids.end(); ii++) { if ( *ii > nextid ) break; if ( *ii == nextid ) ++nextid; } if ( ii == g_ids.end() ) id_space_empty = true; } } else break; if (! (count%5) ) pw->setProgress(count); } f.close(); g_ids.clear(); delete pw; } GameResult ChessGame::getResult() { return(over?result:UNDEF); } variant ChessGame::variantFromName(const char *p) { variant v=REGULAR; variant allv[10] = {CRAZYHOUSE, BUGHOUSE, WILD, SUICIDE, LOSERS, GIVEAWAY, ATOMIC, WILDFR, WILDCASTLE, WILDNOCASTLE}; int i; for(i=0;i<10;i++) if (!strcmp(p,variantName(allv[i]))) v = allv[i]; return v; } const char * ChessGame::variantName(variant v) { switch(v) { case REGULAR: return("chess"); case CRAZYHOUSE: return("crazyhouse"); case SUICIDE: return("suicide"); case BUGHOUSE: return("bughouse"); case WILD: return("wild"); case LOSERS: return("losers"); case GIVEAWAY: return("giveaway"); case ATOMIC: return("atomic"); case WILDFR: return("fischerandom"); case WILDCASTLE: return("wildcastle"); case WILDNOCASTLE: return("nocastle"); default: return("unknown"); } } char *ChessGame::getEndReason() { if (strlen(ereason)>2) return(ereason); else return 0; } // --------------- PGN classes PGNpair::PGNpair() { name="none"; value="empty"; } PGNpair::PGNpair(const char *n, char *v) { name=n; value=v; } PGNpair::PGNpair(const char *n, string &v) { name=n; value=v; } PGNheader::~PGNheader() { header.clear(); } void PGNheader::set(const char *n,char *v) { vector::iterator li; for(li=header.begin();li!=header.end();li++) if ( (*li)->name == n ) { (*li)->value = v; return; } header.push_back(new PGNpair(n,v)); } void PGNheader::set(const char *n,string &v) { vector::iterator li; for(li=header.begin();li!=header.end();li++) if ( (*li)->name == n ) { (*li)->value = v; return; } header.push_back(new PGNpair(n,v)); } void PGNheader::setIfAbsent(const char *n,char *v) { vector::iterator li; for(li=header.begin();li!=header.end();li++) if ( (*li)->name == n ) return; header.push_back(new PGNpair(n,v)); } void PGNheader::remove(const char *n) { vector::iterator li; for(li=header.begin();li!=header.end();li++) if ( (*li)->name == n ) { delete(*li); header.erase(li); break; } } int PGNheader::empty() { return(header.empty()); } int PGNheader::size() { return(header.size()); } PGNpair * PGNheader::get(int index) { return(header[index]); } const char * PGNheader::get(const char *n) { vector::iterator li; for(li=header.begin();li!=header.end();li++) { if ( (*li)->name == n ) return((*li)->value.c_str()); } return 0; } // -- PGN info edit dialog ------ PGNEditInfoDialog::PGNEditInfoDialog(ChessGame *src) : ModalDialog(N_("PGN Headers")) { GtkWidget *v,*sw,*hb,*hb2,*l[2],*setb,*hs,*bb,*closeb; obj=src; gtk_window_set_default_size(GTK_WINDOW(widget),270,300); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); sw=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); clist=gtk_clist_new(2); gtk_widget_set_style(clist, gtk_widget_get_default_style() ); gtk_clist_set_column_min_width(GTK_CLIST(clist),0,64); gtk_clist_set_column_min_width(GTK_CLIST(clist),1,64); gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE); gtk_clist_set_column_title(GTK_CLIST(clist),0,_("Key")); gtk_clist_set_column_title(GTK_CLIST(clist),1,_("Value")); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_box_pack_start(GTK_BOX(v),sw,TRUE,TRUE,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(sw),clist); hb=gtk_hbox_new(FALSE,0); del=gtk_button_new_with_label(_(" Remove Field ")); gtk_box_pack_end(GTK_BOX(hb),del,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(v),hb,FALSE,FALSE,4); hb2=gtk_hbox_new(FALSE,0); l[0]=gtk_label_new(_("Key:")); l[1]=gtk_label_new(_("Value:")); en[0]=gtk_entry_new(); en[1]=gtk_entry_new(); setb=gtk_button_new_with_label(_(" Set ")); gtk_box_pack_start(GTK_BOX(hb2),l[0],FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(hb2),en[0],TRUE,TRUE,4); gtk_box_pack_start(GTK_BOX(hb2),l[1],FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(hb2),en[1],TRUE,TRUE,4); gtk_box_pack_start(GTK_BOX(hb2),setb,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(v),hb2,FALSE,FALSE,4); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,4); bb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bb), 5); gtk_box_pack_start(GTK_BOX(v),bb,FALSE,FALSE,2); closeb=gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(closeb,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bb),closeb,TRUE,TRUE,0); gtk_widget_grab_default(closeb); Gtk::show(closeb,bb,hs,l[0],l[1],en[0],en[1],setb,hb2, hb,del,sw,clist,v,NULL); setDismiss(GTK_OBJECT(closeb),"clicked"); populate(); gtk_widget_set_sensitive(del,FALSE); Selection=-1; gtk_signal_connect(GTK_OBJECT(setb),"clicked", GTK_SIGNAL_FUNC(pgnedit_set),(gpointer)this); gtk_signal_connect(GTK_OBJECT(del),"clicked", GTK_SIGNAL_FUNC(pgnedit_del),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"select_row", GTK_SIGNAL_FUNC(pgnedit_rowsel),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"unselect_row", GTK_SIGNAL_FUNC(pgnedit_rowunsel),(gpointer)this); } void PGNEditInfoDialog::populate() { int i,j; const char *p[2]; PGNpair *pp; gtk_clist_freeze(GTK_CLIST(clist)); gtk_clist_clear(GTK_CLIST(clist)); j=obj->pgn.size(); for(i=0;ipgn.get(i); p[0]=pp->name.c_str(); p[1]=pp->value.c_str(); gtk_clist_append(GTK_CLIST(clist),(gchar **)p); } gtk_clist_thaw(GTK_CLIST(clist)); Selection=-1; gtk_widget_set_sensitive(del,FALSE); } void pgnedit_set(GtkWidget *w, gpointer data) { PGNEditInfoDialog *me; me=(PGNEditInfoDialog *)data; char a[64],b[64]; g_strlcpy(a,gtk_entry_get_text(GTK_ENTRY(me->en[0])),64); g_strlcpy(b,gtk_entry_get_text(GTK_ENTRY(me->en[1])),64); if (strlen(a) && strlen(b)) { me->obj->pgn.set((const char *)a,b); me->populate(); } } void pgnedit_del(GtkWidget *w, gpointer data) { PGNEditInfoDialog *me; const char *k; me=(PGNEditInfoDialog *)data; if (me->Selection >= 0) { k=(me->obj->pgn.get(me->Selection))->name.c_str(); me->obj->pgn.remove(k); me->populate(); } } void pgnedit_rowsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data) { PGNEditInfoDialog *me; PGNpair *pp; me=(PGNEditInfoDialog *)data; me->Selection=row; gtk_widget_set_sensitive(me->del,TRUE); pp=me->obj->pgn.get(row); if (pp) { gtk_entry_set_text(GTK_ENTRY(me->en[0]),pp->name.c_str()); gtk_entry_set_text(GTK_ENTRY(me->en[1]),pp->value.c_str()); } } void pgnedit_rowunsel(GtkCList *w, gint row, gint col, GdkEventButton *eb,gpointer data) { PGNEditInfoDialog *me; me=(PGNEditInfoDialog *)data; me->Selection=-1; gtk_widget_set_sensitive(me->del,FALSE); } void ChessGame::initGlyphs() { if (GlyphsInited) return; EboardFileFinder eff; string nag, nagpath; char line[512]; int i; // fix to look for NLS versions nag = "NAG.en.txt"; if (!eff.find(nag, nagpath)) { failGlyphs(); return; } ifstream nagf(nagpath.c_str()); if (!nagf) { failGlyphs(); return; } memset(line,0,512); while(nagf.getline(line,511,'\n')) { if (!strlen(line)) break; Glyphs.push_back(new string(line)); } nagf.close(); GlyphsInited = true; } void ChessGame::failGlyphs() { int i; string *oops; oops = new string("PGN NAG file missing"); for(i=0;i<140;i++) Glyphs.push_back(oops); GlyphsInited = true; } eboard-1.1.1.orig/quickbar.cc0000644000175000017500000002535010757567572015415 0ustar patrikpatrik/* $Id: quickbar.cc,v 1.16 2007/01/20 15:58:43 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "quickbar.h" #include "global.h" #include "stl.h" #include "tstring.h" #include "script.h" #include "eboard.h" #include "qb1.xpm" #include "qb2.xpm" #include "qb3.xpm" #include "qb4.xpm" #include "qb5.xpm" #include "qb6.xpm" #include "qbr.xpm" #include "qbl.xpm" #include "hammer.xpm" void qbsetup(GtkWidget *w, gpointer data) { (new QuickBarSetupDialog())->show(); } void qbhide(GtkWidget *w, gpointer data) { global.ShowQuickbar=0; global.writeRC(); global.qbcontainer->update(); } QuickBar::QuickBar(GtkWidget *parent) { GtkStyle *style; GdkPixmap *d0; GdkBitmap *m0; GtkWidget *config, *hide; widget = gtk_hbox_new(FALSE,0); style=gtk_widget_get_style(parent); d0 = gdk_pixmap_create_from_xpm_d (parent->window, &m0, &style->bg[GTK_STATE_NORMAL], (gchar **) hammer_xpm); config = CommandButton(d0,m0,_("Setup Buttons")); hide = gtk_button_new_with_label(_("Hide!")); gtk_box_pack_start(GTK_BOX(widget), config, FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(widget), hide, FALSE,FALSE,0); Gtk::show(config,hide,NULL); QuickBarIcons::loadIcons(parent); gtk_signal_connect(GTK_OBJECT(config), "clicked", GTK_SIGNAL_FUNC(qbsetup), 0); gtk_signal_connect(GTK_OBJECT(hide), "clicked", GTK_SIGNAL_FUNC(qbhide), 0); build(); } void QuickBar::update() { clear(); build(); } void QuickBar::clear() { unsigned int i; for(i=0;icommand.c_str(), 256); if (global.protocol == 0) return; if (global.network == 0) return; if (!global.network->isConnected()) return; if (strstr(z,"script.") == z) { strcpy(y,z+7); snprintf(a,2048,_("> [script run from shortcut] %s"),y); global.output->append(a, global.SelfInputColor); new ScriptInstance(y); return; } t.set(z); while((p=t.token(";"))!=0) { g_strlcpy(y,p->c_str(),2048); global.protocol->sendUserInput(y); g_strlcpy(y,_("> [issued from shortcut] "),2048); g_strlcat(y,p->c_str(),2048); global.output->append(y, global.SelfInputColor); } } } void QuickBar::build() { unsigned int i; int j; GtkWidget *b; char caption[64]; for(i=0;iicon; g_strlcpy(caption, global.QuickbarButtons[i]->caption.c_str(), 64); b=CommandButton(arrow[j],mask[j],caption); gtk_box_pack_start(GTK_BOX(widget), b, FALSE, FALSE, 0); buttons.push_back(b); gshow(b); gtk_signal_connect(GTK_OBJECT(b), "clicked", GTK_SIGNAL_FUNC(qb_shortcut), (gpointer) (& numbers[i%10])); } } // --------------------------------------------- void qbsetup_ok(GtkWidget *w, gpointer data) { QuickBarSetupDialog *me; int i; QButton *b; const char *x, *y; me=(QuickBarSetupDialog *) data; global.dropQuickbarButtons(); for(i=0;i<10;i++) { x= gtk_entry_get_text(GTK_ENTRY(me->bcap[i])); y= gtk_entry_get_text(GTK_ENTRY(me->bcom[i])); if (strlen(x) && strlen(y) ) { b=new QButton(x,y, me->iconValue[i]); global.QuickbarButtons.push_back(b); } } me->release(); global.writeRC(); global.quickbar->update(); } void qbsetup_left(GtkWidget *w, gpointer data) { QuickBarSetupDialog *me; int i,j; me=(QuickBarSetupDialog *) data; i=me->whichButton(w); if (i<0) return; me->iconValue[i]--; if (me->iconValue[i] < 0) me->iconValue[i]=5; j=me->iconValue[i]; gtk_pixmap_set(GTK_PIXMAP(me->bpix[i]), me->arrow[j], me->mask[j]); gtk_widget_queue_resize(me->bpix[i]); } void qbsetup_right(GtkWidget *w, gpointer data) { QuickBarSetupDialog *me; int i,j; me=(QuickBarSetupDialog *) data; i=me->whichButton(w); if (i<0) return; me->iconValue[i]++; if (me->iconValue[i] > 5) me->iconValue[i]=0; j=me->iconValue[i]; gtk_pixmap_set(GTK_PIXMAP(me->bpix[i]), me->arrow[j], me->mask[j]); gtk_widget_queue_resize(me->bpix[i]); } QuickBarSetupDialog::QuickBarSetupDialog() : ModalDialog(N_("Shortcut Button Setup")) { GtkWidget *v, *t, *hs, *hb, *ok, *cancel, *l1, *l2, *l3, *mc; GtkWidget *bh[10]; unsigned int i; QuickBarIcons::loadIcons(widget); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); t=gtk_table_new(11,14,TRUE); l3=gtk_label_new(_("Button Icon")); l1=gtk_label_new(_("Button Caption")); l2=gtk_label_new(_("Command")); gtk_table_attach_defaults(GTK_TABLE(t), l3, 0, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(t), l1, 2, 6, 0, 1); gtk_table_attach_defaults(GTK_TABLE(t), l2, 6, 14, 0, 1); for(i=0;i<10;i++) { bh[i]=gtk_hbox_new(FALSE,0); bl[i]=CommandButton(qbl, mqbl, 0); bpix[i]=gtk_pixmap_new(arrow[0],mask[0]); br[i]=CommandButton(qbr, mqbr, 0); gtk_box_pack_start(GTK_BOX(bh[i]),bl[i],FALSE,TRUE,0); gtk_box_pack_start(GTK_BOX(bh[i]),br[i],FALSE,TRUE,0); gtk_box_pack_start(GTK_BOX(bh[i]),bpix[i],TRUE,TRUE,4); gtk_table_attach_defaults(GTK_TABLE(t), bh[i], 0, 2, i+1, i+2); bcap[i]=gtk_entry_new(); bcom[i]=gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(t), bcap[i], 2, 6, i+1, i+2); gtk_table_attach_defaults(GTK_TABLE(t), bcom[i], 6, 14, i+1, i+2); Gtk::show(bcap[i],bcom[i],br[i],bl[i],bpix[i],bh[i],NULL); gtk_signal_connect(GTK_OBJECT(bl[i]), "clicked", GTK_SIGNAL_FUNC(qbsetup_left), (gpointer) this); gtk_signal_connect(GTK_OBJECT(br[i]), "clicked", GTK_SIGNAL_FUNC(qbsetup_right), (gpointer) this); } gtk_box_pack_start(GTK_BOX(v),t,TRUE,TRUE,2); mc=gtk_label_new(_("To run multiple commands with one shortcut, separate "\ "the commands with ; (semicolon).\n"\ "To run a script from a shortcut, set command to script.ScriptName, e.g.: script.myscript.pl .")); gtk_box_pack_start(GTK_BOX(v),mc,TRUE,TRUE,2); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,TRUE,TRUE,2); hb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(hb), 5); gtk_box_pack_start(GTK_BOX(v), hb, FALSE, TRUE, 2); ok=gtk_button_new_with_label(_("Ok")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); cancel=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(cancel,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(hb),cancel,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,cancel,hb,hs,mc,l1,l2,l3,t,v,NULL); setDismiss(GTK_OBJECT(cancel),"clicked"); for(i=0;i<10;i++) iconValue[i]=0; for(i=0;icaption.c_str()); gtk_entry_set_text(GTK_ENTRY(bcom[i]), global.QuickbarButtons[i]->command.c_str()); iconValue[i]=global.QuickbarButtons[i]->icon % 6; gtk_pixmap_set(GTK_PIXMAP(bpix[i]),arrow[iconValue[i]],mask[iconValue[i]]); } gtk_signal_connect(GTK_OBJECT(ok),"clicked", GTK_SIGNAL_FUNC(qbsetup_ok),(gpointer)this); focused_widget = bcap[0]; } int QuickBarSetupDialog::whichButton(GtkWidget *w) { int i; for(i=0;i<10;i++) if ( (w == bl[i]) || (w == br[i]) ) return i; return -1; } // ------------- QButton::QButton() { caption="none"; command="none"; icon=0; } QButton::QButton(const char *a, const char *b, int c) { caption=a; command=b; icon=c; } ostream &operator<<(ostream &s, QButton q) { s << q.icon << ':' << q.caption << ':' << q.command; return(s); } // ------------------------------ GdkPixmap * QuickBarIcons::arrow[6]={0,0,0,0,0,0}; GdkPixmap * QuickBarIcons::qbl=0; GdkPixmap * QuickBarIcons::qbr=0; GdkBitmap * QuickBarIcons::mask[6]={0,0,0,0,0,0}; GdkBitmap * QuickBarIcons::mqbl=0; GdkBitmap * QuickBarIcons::mqbr=0; bool QuickBarIcons::IconsLoaded = false; int QuickBarIcons::numbers[10]={0,1,2,3,4,5,6,7,8,9}; void QuickBarIcons::loadIcons(GtkWidget *parent) { GtkStyle *style; if (!IconsLoaded) { style=gtk_widget_get_style(parent); arrow[0] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[0], &style->bg[GTK_STATE_NORMAL], (gchar **) qb1_xpm); arrow[1] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[1], &style->bg[GTK_STATE_NORMAL], (gchar **) qb2_xpm); arrow[2] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[2], &style->bg[GTK_STATE_NORMAL], (gchar **) qb3_xpm); arrow[3] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[3], &style->bg[GTK_STATE_NORMAL], (gchar **) qb4_xpm); arrow[4] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[4], &style->bg[GTK_STATE_NORMAL], (gchar **) qb5_xpm); arrow[5] = gdk_pixmap_create_from_xpm_d (parent->window, &mask[5], &style->bg[GTK_STATE_NORMAL], (gchar **) qb6_xpm); qbl = gdk_pixmap_create_from_xpm_d (parent->window, &mqbl, &style->bg[GTK_STATE_NORMAL], (gchar **) qbl_xpm); qbr = gdk_pixmap_create_from_xpm_d (parent->window, &mqbr, &style->bg[GTK_STATE_NORMAL], (gchar **) qbr_xpm); IconsLoaded = true; } } GtkWidget * QuickBarIcons::CommandButton(GdkPixmap *pix, GdkBitmap *mask, char *caption) { GtkWidget *b, *h, *p, *t=0; b=gtk_button_new(); h=gtk_hbox_new(FALSE,2); gtk_container_add(GTK_CONTAINER(b),h); p=gtk_pixmap_new(pix, mask); if (caption) t=gtk_label_new(caption); gtk_box_pack_start(GTK_BOX(h),p,FALSE,TRUE,0); if (caption) gtk_box_pack_start(GTK_BOX(h),t,FALSE,TRUE,2); gshow(p); if (caption) gshow(t); gshow(h); return b; } eboard-1.1.1.orig/config.h0000644000175000017500000000236610757567572014725 0ustar patrikpatrik#ifndef CONFIG_H #define CONFIG_H 1 #define HAVE_STDIO_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_UNISTD_H 1 #define HAVE_TIME_H 1 #define HAVE_STDARG_H 1 #define HAVE_CTYPE_H 1 #define HAVE_ERRNO_H 1 #define HAVE_FCNTL_H 1 #define HAVE_DIRENT_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_WAIT_H 1 #define HAVE_SIGNAL_H 1 #define HAVE_MATH_H 1 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_IOCTL_H 1 #define HAVE_BSDBUGSYS_SOCKET_H 1 #define HAVE_BSDBUGNETDB_H 1 #define HAVE_BSDBUGNETINET_IN_H 1 #define HAVE_BSDBUGARPA_INET_H 1 #define HAVE_IOSTREAM 1 #define HAVE_DEQUE 1 #define HAVE_LIST 1 #define HAVE_VECTOR 1 #define HAVE_STACK 1 #define HAVE_STRING 1 #define HAVE_STRINGS_H 1 #define HAVE_SYS_SOUNDCARD_H 1 #undef HAVE_SYS_AUDIOIO_H #define HAVE_LINUX_JOYSTICK_H 1 #define HAVE_IPPROTO_TCP_ON_IN_H 1 #undef HAVE_TCP_NODELAY_ON_IN_H #undef HAVE_SOL_TCP_ON_IN_H #undef HAVE_IPPROTO_TCP_ON_TCP_H #define HAVE_TCP_NODELAY_ON_TCP_H 1 #define HAVE_SOL_TCP_ON_TCP_H 1 #define NEED_TCP_H 1 #define USE_SOCK_OPTS 1 #define USE_IPPROTO_TCP 1 #define HAVE_GTK_GTK_H 1 #define HAVE_GDK_GDKKEYSYMS_H 1 #define DATADIR "/usr/local/share" #define EBOARD_PREFIX "/usr/local" #define VERSION "1.1.1" #define ENABLE_NLS 1 #endif eboard-1.1.1.orig/Documentation/0000755000175000017500000000000010757567572016111 5ustar patrikpatrikeboard-1.1.1.orig/Documentation/GNUChess5.txt0000644000175000017500000000156310757567572020363 0ustar patrikpatrik GNU Chess 5 This document discusses the issues related to running the GNU Chess 5.0 (or newer) engine together with eboard. Felipe Bergo 1. What is GNU Chess 5 ? 2. Getting GNU Chess 5 3. Compiling and Installing 4. Playing --- 1. What is GNU Chess 5 ? GNU Chess 5 is a Free Software chess engine, that can be modified under the terms of the GNU General Public License. I strongly recommend version 5.04 or later. 2. Getting GNU Chess Go to any GNU ftp repository, like ftp.gnu.org and look for the 'chess' directory. 3. Compiling and Installing Just build it as instructed in the documentation and copy the resulting 'gnuchess' binary to anywhere in your PATH (e.g.: /usr/local/bin). 4. Playing For GNU Chess 5, use the Peer -> Play against Engine -> Generic Engine command. The "GNU Chess 4" command is meant and optimized for GNU Chess 4.x only. eboard-1.1.1.orig/Documentation/FICS-Timeseal.txt0000644000175000017500000000360110757567572021137 0ustar patrikpatrik FICS-Timeseal This document describes the configuration of FICS's timeseal program to work with eboard. Felipe Bergo 1. What is FICS timeseal ? 2. Getting timeseal 3. Naming and Location --- 1. What is FICS timeseal ? It is a program that attaches timestamps to line-oriented communcations over a TCP stream to reduce the impact of network-lag on the chess clocks when playing on an ICS server. FICS timeseal is the program related to FICS You can play without timeseal, but you will have transmission time accounted and be in disadvantage against timesealed players (almost all). In fact, playing anything faster than 5 0 without timeseal is foolish. 2. Getting timeseal The Linux Timeseal is available from the FICS Download page (http://www.freechess.org => Download) People on X86_64 can use the 32-bit timeseal without problems. 3. Naming and Location eboard will only use timeseal if it finds it (d'oh), and the timeseal must be named and located strictly. Also, the timeseal file must have execution permission (x). Locations (pick one!): . (current directory) ~/.eboard ~/share/eboard /share/eboard /usr/local/share/eboard /usr/share/eboard (prefix is configured with --prefix in the configure script, the default is /usr/local) Naming: timeseal.YOURSYSTEMNAME where YOURSYSTEMNAME is the EXACT string returned by uname -s Also, uname must be in the path when eboard is run. For GNU/Linux systems, the timeseal program should be named timeseal.Linux for FreeBSD: timeseal.FreeBSD and so on. This allows you to place timeseals for different OSs in a NFS-mounted /home and have eboard run the correct one automatically. Remember to set its permission so that eboard can run it: chmod u+x timeseal.YOURSYSTEM (if installing for a single user) chmod uog+x timeseal.YOURSYSTEM (if installing one copy of timeseal for all system users) eboard-1.1.1.orig/Documentation/Makefile0000644000175000017500000000025010757567572017546 0ustar patrikpatrik DOCS = Makefile DGTboard.txt FICS-Timeseal.txt GNUChess5.txt Sjeng.txt Crafty.txt GNUChess4.txt Scripts.txt Themes.txt dist: cp -f $(DOCS) ../$(DIST)/Documentation eboard-1.1.1.orig/Documentation/Themes.txt0000644000175000017500000000713510757567572020105 0ustar patrikpatrik Themes This document describes the format for piece sets and sounds and how eboard searches for them. Felipe Bergo 1. File format 2. Location 3. Sound Files --- 1. File format Each piece set is a graphic file in the PNG format. I Recommend indexed PNG images without alpha channel, which will provide good, lossless compression. (RGB-color can be used instead on indexed, but will often produce larger files) The file must have an aspect ratio of exactly 7:2 (the width must be a multiple of 7, the height must be a multiple of 2, and the resulting aspect must be 7:2 -- other arrangements _may_ work or not, and will not be officially supported). The graphic is logically divided in 14 squares of same size, which contain the pieces and squares in the following order: First Row, left to right: White Rook, White Knight, White Bishop, White Queen, White King, White Pawn, Light Square. Second Row, left to right: Black Rook, Black Knight, Black Bishop, Black Queen, Black King, Black Pawn, Dark Square. The color of pixel (0,0) (the topmost, leftmost pixel in the image file) is taken to be the transparent color for the pieces. Any format-dependent alpha information is not considered (thus using PNGs with alpha channel only wastes memory and disk usage). Transparent color information is not considered for the board squares, which are taken to be fully opaque. 2. Location Theme configuration is read on startup from one or more files called eboard_themes.conf, these file are looked for in the following directories (in this order): . (current directory) ~/.eboard ~/share/eboard /share/eboard /usr/local/share/eboard /usr/share/eboard (prefix is configured with --prefix in the configure script, the default is /usr/local) next, any files named themeconf.* (where * can be anything) in the datadir directory are loaded (usually /share/eboard , to check what your datadir is type 'eboard-config --datadir' after ebaord is installed). The eboard_themes.conf should contain one theme per line, lines started by '#' are considered comments. Lines started with '+' are considered sound files, sound files are described later in this document. Example: ------------------------------------- # eboard themes basic_y.png,Simple Pieces on Wood 1 basic_w.png,Simple Pieces on Wood 2 basic_g.png,Simple Pieces on Metal rock.png,Stone Cold +Move.wav,whatever follows the comma is discarded ------------------------------------- The first field in the line is the filename of the graphics file, the second field is the name that will be shown in the Settings -> Bitmapped Piece Sets menu. The fields are separated by a comma. The contents of all eboard_theme.conf files are merged and this becomes the set of available themes. If two files with same name are listed in different .conf files with different descriptions, the first seen is used (according to the order listed above). Each graphic file must be in one of the directories listed above, not necessarily the same directory eboard_themes.conf or the other themes are. There's a script to help adding themes, eboard-addtheme, but it's syntax is still subject to changes and we do not encourage anyone to use this script in any package until we decide on a stable syntax for it. 3. Sound Files Lines starting with a '+' can be used to list sound files. The syntax is +filename, whatever follows the comma (which must be present) is disconsidered. The sound files listed will be available in the eboard's sound configuration interface. We strongly advise the use of the following suffixes: .wav --> WAV audio file .mid or .midi --> MIDI sequencer files eboard-1.1.1.orig/Documentation/Sjeng.txt0000644000175000017500000000350210757567572017720 0ustar patrikpatrik Sjeng This document describes the issues related to running the Sjeng chess engine together with eboard. Felipe Bergo 1. What is Sjeng ? 2. Getting Sjeng 3. Compiling and Installing 4. Running --- 1. What is Sjeng ? Sjeng is a chess engine developed by Gian-Carlo Pascutto, based on previous work by Adrien Regimbald. It is Free Software that can be distributed and modified under the terms of the GNU General Public License (the same license eboard is under) The greatest feature of Sjeng is that it can play some chess variants besides regular chess. As of this writing (Sjeng 9.1), it supports crazyhouse, bughouse, suicide, giveaway and losers. eboard allows you to play all of them except bughouse. Help about variants will be available in the eboard web site soon, but you can look for help in the ICC pages at . 2. Getting Sjeng The Sjeng homepage is at , and the FTP directory with source tarballs is at I'm also keeping a Sjeng tarball in eboard's public FTP directory, . 3. Compiling and Installing Sjeng is quite standard to compile and install, from the toplevel directory you run ./configure make (become root) make install It provides reasonable documentation, in fact it is the best distribution of a chess engine I have found so far. Cheers to Gian-Carlo. 4. Running To play againt Sjeng use the Peer -> Play against Engine -> Sjeng command in eboard. Select the desired variant in the Variant notebook pane. Sjeng tries to open a book file from the directory it is run from. The default directory will be ~/.eboard/eng-out, but you can change this in the dialog box. See Sjeng's documentation for information on building book files for the different variants. eboard-1.1.1.orig/Documentation/DGTboard.txt0000644000175000017500000000553410757567572020307 0ustar patrikpatrik DGT board support This document describes eboard's DGT board support. Felipe Bergo 1. What is a DGT Board ? 2. Setting Up DGTNIX 2.1 Step-by-step Instructions for compiling and installing dgtnix 1.7 2.2 Known Issues with dgtnix 3. Using eboard with the DGT Board --- 1. What is a DGT Board ? The DGT Board is an electronic chess board that can be connected to the computer and can be used for move input, so that you can play with real pieces on a real chessboard. It connects to a USB or serial port on the PC. See http://www.dgtprojects.com/eboard.htm for details. 2. Setting Up DGTNIX DGTNIX is an open source driver library for the DGT board, developed by Pierre Boulenguez. It can be downloaded from http://dgtnix.sourceforge.net. eboard's DGT support depend on dgtnix, and you need to compile and install dgtnix before compiling eboard, otherwise eboard will be compiled without DGT board support. eboard 1.0.3 requires dgtnix 1.7 or later. 2.1: Step-by-step Instructions for compiling and installing dgtnix 1.7: - download dgtnix-1.7.tar.gz from http://dgtnix.sourceforge.net - to unpack, type in a terminal: tar zxvf dgtnix-1.7.tar.gz - to enter the unpacked directory, type: cd dgtnix - to compile dgtnix, type: make - to install dgtnix, become root (via su) and type these commands: cp dgtnix.h /usr/include cp libdgtnix.so* /usr/lib /sbin/ldconfig 2.2 Known Issues with dgtnix a) As of dgtnix-1.7, it lacks a "make install" target, requiring the above cp commands for installation. b) To compile dgtnix on x86_64 (AMD64) platforms, you need to add -fPIC to CFLAGS, CXXFLAGS and LFLAGS in its Makefile. The lines that define these variables in the Makefile become: CFLAGS = -O2 -Wall -ansi -fPIC CXXFLAGS = -O2 -Wall -ansi -fPIC LFLAGS = -fPIC -shared -Wall,-soname,libdgtnix.so.1 dgtnix was released before eboard had DGT board support, so it includes an old version of eboard with patches. It is recommended that you ignore the eboard provided there and use eboard 1.0.3 or later. 3. Using eboard with the DGT board To compile eboard >= 1.0.3 with DGT support, just configure and compile it as usual: tar jxvf eboard-1.0.3.tar.bz2 cd eboard-1.0.3 ./configure make (become root) make install The configure step will indicate whether dgtnix was found. Once eboard is installed, connect the DGT board and run eboard with eboard -dgtport device where device is the port the DGT board is attached to. If you are using a serial connection on Linux, it will be something like /dev/ttyS0 ... /dev/ttyS3. The output of the "dmesg" command issued right after connecting the board may show the device name to be used. The DGT board will be assigned to eboard's main board. eboard-1.1.1.orig/Documentation/Crafty.txt0000644000175000017500000000543510757567572020111 0ustar patrikpatrik Crafty This document describes the issues related to running the Crafty chess engine together with eboard. Felipe Bergo 1. What is Crafty ? 2. Getting Crafty 3. Compiling and Installing 4. Book files --- 1. What is Crafty ? Crafty is a chess engine developed by Robert M. Hyatt. It runs on several platforms (Linux, *BSD, Win32, OS/2, etc.). A chess engine is, in a nutshell, a piece of software that turns CPU cycles into chess moves. It is quite a challenging kind of software to write, so good chess engine programmers focus on the chess playing, not on the user interface, which is usually a text interface. Crafty is no exception. eboard can serve as a graphical chess board interface for crafty. Crafty is distributed under a proprietary license. Its main points are: - you can get the source code - reproduction and usage of source and binaries allowed for personal use only (this is detailed in the license text) - usage on chess competitions requires written permission from the author - copies of the source must keep the copyright notice intact - changes to the code must be made public The full terms are found in Crafty's main.c file. 2. Getting Crafty Crafty can be downloaded from If this link ever breaks, try searching for crafty on 3. Compiling and Installing To unpack crafty, mkdir crafty cd crafty tar zxvf crafty-xx.yy.tar.gz After unpacking it, you must find a Makefile target that matches your system. For Linux-i386 the most common is "make linux-elf". There is a linux-i686-elf target, but it may not work on your machine if it doesn't support all optimizations. After compiling with "make {mytarget}", you'll have a "crafty" binary in your current dir. Check if the build worked by running it "./crafty" and play a couple of moves (type "e2e4" at the White(1): prompt, use "display" to show the board) -- if it doesn't ends abnormally with a message like "Illegal Instruction" you're fine. The binary must be placed in your PATH to work properly. If you have root access you may wish to place it in /usr/bin or /usr/local/bin. Else you can place it in ~/bin (~ is your home dir) and make sure this is added to your path. The crafty binary must be called just "crafty" (don't rename it), else eboard won't find it. 4. Book files Crafty can (and should) use book files with openings and analysed games. These are found in crafty's ftp site under the names books.bin and book.bin. eboard will look for these in the following places (in this order -- and both files should be placed in the same directory): ~/.eboard ~ /usr/local/share/eboard /usr/share/eboard /usr/local/share/crafty /usr/share/crafty The ~ means your home directory. Crafty's output files will the placed in the ~/.eboard/craftylog directory. eboard-1.1.1.orig/Documentation/Scripts.txt0000644000175000017500000000671110757567572020306 0ustar patrikpatrik Scripts This documents describes how to use scripts to automate tasks within eboard. Felipe Bergo 1. Language and Location 2. Requirements and I/O 3. FICS auto login --- 1. Language and Location Scripts must be placed in ~/.eboard/scripts, must be owned by the user and must be readable and executable by him (mode u+rx). To run a generic script, select Windows -> Run Script, all scripts found will be listed. Scripts can be in any scripting language you prefer. I recommend expect for the very simple scripts and Perl for the trickier ones. 2. Requirements and I/O After the script is running, every line of text received from the peer (either ICS server or chess engine) is sent to the scripts STDIN (standard input). The script must not buffer its output, else eboard will lock up. *The script must write a line to STDOUT (terminated by \n) as soon as it starts* -- this is used to detect that the script is running and this first line is discarded (not sent to the eboard peer). Any further output written to the script's STDOUT will be sent to the peer (ICS server / chess engine). The Script List window is capable of retrieving a description line for the script. Such a description is recognized if (a) the first character of the file is '#' (b) there is a comment line started by '#' from the file's second line on. The first requirement if meant to avoid reading data from files that do not start with '#!/usr/bin/perl' (in the future other languages may be supported). 3. FICS auto login Whenever a connection to FICS is accomplished with the Peer -> Connect to FICS command, eboard will try to run a script named 'autofics.pl'. If you want to perform an automatic login, write an autofics.pl that provides your handle and password. *Notice*: the .pl extension is reminiscent from previous eboard versions where all scripts must be written in Perl. You can write autofics.pl in whatever language you desire, but the file name must still be autofics.pl. *Notice*: this can be quite a security flaw, because the password will be stored in cleartext in the script. I take no responsibility for it. If someone else have access to your password and abuses your FICS account (someone else connecting with your login is already abuse), it is your fault and your responsibility. Be sure to chmod 700 the autofics.pl file if you use this facility. Here are two sample login scripts for user 'foo' with password 'bar', first in expect, next in Perl. Notice the description comment and the initialization to prevent STDOUT buffering. --------8<-----------------8<---------------- #!/usr/bin/expect -f # my fics auto login script in expect send "hello\n" expect ogin: send "foo\n" expect word: send "bar\n" --------8<-----------------8<---------------- --------8<-----------------8<---------------- #!/usr/bin/perl # my fics auto login script in perl # set autoflush on stdout select(STDOUT); $| = 1; # proof of life to avoid hanging print "hello\n"; # while there is input in STDIN, read a line while(<>) { print "foo\n" if /login:/; if (/password:/) { print "bar\n"; exit 0; } } --------8<-----------------8<---------------- Please don't bug me with questions about the Perl language -- for help with it see the 'man perl' man page, especially 'man perlipc' about I/O flushing and 'man perlre' about regular expressions (the patterns /login:/ and /password:/ above are a very simple example), and 'man perlfunc' for a list of built-in functions. eboard-1.1.1.orig/Documentation/GNUChess4.txt0000644000175000017500000000260110757567572020354 0ustar patrikpatrik GNU Chess 4 This document discusses the issues related to running the GNU Chess 4.x engine together with eboard. Felipe Bergo 1. What is GNU Chess 4 ? 2. Getting GNU Chess 4 3. Compiling and installing 4. Playing --- 1. What is GNU Chess 4 ? GNU Chess 4 is a Free Software chess engine, that can be modified under the terms of the GNU General Public License. It is the predecessor of GNU Chess 5 and newer versions. 2. Getting GNU Chess 4 You may be able to find GNU Chess 4.x in some GNU FTP mirrors or in old source code CDs of operating system distributions. I'm keeping the last GNU Chess 4 version, 4.0pl80 in eboard's anonymous FTP directory at ftp://ftp.seul.org/pub/chess Note that GNU Chess 4 and 5 may conflict with each other (you can have only one of them installed, or eboard will be confused) 3. Compiling and Installing Directions about installing are in the src/README and src/INSTALL files. More likely you'll just cd src ./configure make (become root) make install 4. Playing The 'gnuchessx' binary must be in the PATH. The book location is defined in compile time, if you didn't change the prefix, it'll be /usr/local/lib/gnuchess.data To play against GNU Chess 4, use the "Peer -> Play against Engine -> GNU Chess 4" command. gnuchessx will be run without change to the current directory. If you want to change bookfile location, recompile GNU Chess. eboard-1.1.1.orig/eboard-addtheme0000755000175000017500000000466210757567572016243 0ustar patrikpatrik#!/bin/sh # # eboard-addtheme # adds a new sound or piece set to the eboard # config files. # # sound info is not yet supported by eboard, but will # be. this script is intended for use in theme-packs # # $Id: eboard-addtheme,v 1.3 2001/06/30 01:57:41 bergo Exp $ # DATADIR=`eboard-config --datadir` usage() { cat <&1; fi DESTINATION="$DATADIR" if test ! -w $DATADIR; then echo "** warning **: installing to ~/.eboard since $DATADIR isn't writeable" DESTINATION="$HOME/.eboard" fi CONFIGFILE="$DESTINATION/eboard_themes.conf" TMPFILE="/tmp/temp_themes_conf.$$" case "$1" in P) # do we have the correct number of parameters ? if test $# -ne 3; then usage 1; fi # is the file to be installed readable ? if test ! -r $2; then echo "$2: not found" exit 3 fi # will we overwrite anything ? if test -r $DESTINATION/$2; then if diff -q $2 $DESTINATION/$2; then echo "skipping $2: same file already installed" exit 4 else echo "existing $2 will be overwritten" # remove existing entry from config file fgrep -v "$2" $CONFIGFILE > $TMPFILE if test -r $TMPFILE; then cp -f $TMPFILE $CONFIGFILE fi fi fi # install it echo "installing piece set \"$3\" ($2)" if sh -c "cp -f $2 $DESTINATION/$2"; then echo "$2,$3" >> $CONFIGFILE echo "ok" else echo "installation of $2 failed" exit 1 fi exit 0 ;; S) # do we have the correct number of parameters ? if test $# -ne 2; then usage 1; fi # is the file to be installed readable ? if test ! -r $2; then echo "$2: not found" exit 3 fi # will we overwrite anything ? if test -r $DESTINATION/$2; then if diff -q $2 $DESTINATION/$2; then echo "skipping $2: same file already installed" exit 4 else echo "existing $2 will be overwritten" # remove existing entry from config file fgrep -v "$2" $CONFIGFILE > $TMPFILE if test -r $TMPFILE; then cp -f $TMPFILE $CONFIGFILE fi fi fi echo "installing sound file $2" if sh -c "cp -f $2 $DESTINATION/$2"; then echo "+$2,sound file" >> $CONFIGFILE echo "ok" else echo "installation of $2 failed" exit 1 fi exit 0 ;; *) usage 1 ;; esac eboard-1.1.1.orig/board.h0000644000175000017500000002302110757567572014536 0ustar patrikpatrik/* $Id: board.h,v 1.61 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2003 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef BOARD_H #define BOARD_H #include "stl.h" #include "eboard.h" #include "widgetproxy.h" #include "pieces.h" #include "position.h" #include "chess.h" #include "clock.h" #include "notebook.h" // foreign classes referenced here class ChessGame; class AnimatedPiece { public: virtual void create(GdkWindow *parent,PieceSet *set,int sqside)=0; virtual void lemming()=0; virtual void destroy()=0; virtual void step()=0; int over(); int getX(); int getY(); piece getPiece(); bool getSoundHold(); protected: piece Piece; int X0,Y0,X,Y,XF,YF,DX,DY; int steps,ower; int square; bool SoundHold; }; class FlatAnimatedPiece : public AnimatedPiece { public: FlatAnimatedPiece(piece p,int x0,int y0,int xf,int yf,int s,bool sndhold); virtual void create(GdkWindow *parent,PieceSet *set,int sqside); virtual void lemming(); virtual void destroy(); virtual void step(); }; class Rect { public: Rect() { x=0; y=0; w=0; h=0; } Rect(int a,int b,int c,int d) { x=a; y=b; w=c; h=d; } void translate(int dx,int dy) { x+=dx; y+=dy; } int x,y,w,h; }; class DropSource { public: DropSource(piece p, int x1,int y1,int w,int h, bool d=true); bool hit(int x,int y); int X,Y,X2,Y2; piece P; bool dragged; }; class TargetManager { public: void cleanTargets(); void addTarget(DropSource *ds); DropSource *hitTarget(int x,int y); private: vector targets; }; class RootBoard { protected: void clockString(int val,char *z,int maxlen); }; // I just can't work out the correct syntax to put the // bodies of methods in the .cc file, if you know, email me template class mblock { public: mblock(int _sz=0) { data=0; sz=0; if (_sz) ensure(_sz); } ~mblock() { if (sz) g_free((gpointer) data); sz=0; data=0; } bool ensure(int _sz) { if (_sz <= sz) return true; // never shrink if (sz==0) data=(T *) g_malloc(_sz * sizeof(T)); else data=(T *) g_realloc((gpointer) data, _sz * sizeof(T)); sz=_sz; if (!data) cerr << "eboard ** mblock error, expect oddities\n"; return(data!=0); } T * data; int sz; }; class Board : public WidgetProxy, public ClockHost, public RootBoard, public NotebookInsider, public TargetManager, public PieceChangeListener { public: Board(); virtual ~Board(); void repaint(); void setSensitive(bool state); void setPartnerGame(); void setSelColor(int color); void clearSel(); void setFlipped(bool flip); void setFlipInversion(bool v); bool getFlipInversion(); ChessClock *getClock(); int getClockValue2(bool white); void setClock2(int wmsecs,int bmsecs,int actv,int cdown); void setInfo(int idx,char *s); void setInfo(int idx,string &s); void setCanMove(bool value); void stopClock(); void reset(); void setGame(ChessGame *game); ChessGame *getGame(); void reloadFonts(); void freeze(); void thaw(); void queueRepaint(); void invalidate(); virtual void show(); void update(bool sndflag=false); virtual void updateClock(); virtual void pieceSetChanged(); void walkBack1(); void walkBackAll(); void walkForward1(); void walkForwardAll(); void openMovelist(); bool hasGame(); bool effectiveFlip() { return(FlipInvert?(!flipped):flipped); } void dump(); void supressNextAnimation(); bool FreeMove; // editing positions, examining games bool EditMode; // explicit edit mode (with pieces to drop and additional commands) static Board * PopupOwner; virtual void renderClock(); void joystickCursor(int axis, int value); void joystickSelect(); protected: GdkPixmap *clkbar; GdkGC *clkgc; LayoutBox C; int clock_ch; ChessGame *mygame; // inline calculations int Width() { return( (sqside<<3) + (borx<<1) ); } int Height() { return( (sqside<<3) + (bory<<1) + morey); } private: GtkWidget *yidget; PieceSet *cur; GdkPixmap *buffer; GdkGC *wgc; rgbptr scrap; mblock M[2]; bool canselect; bool allowMove; bool FlipInvert; bool flipped; bool repaint_due; bool update_queue; bool UpdateClockAfterConfigure; int sel_color; int frozen_lvl; int LockAnimate; vector LastMove; list animes; int gotAnimationLoop; int AnimationTimeout; Position position; Position currently_rendered; Position fake; ChessClock clock; int hilite_ch; // selection/highlight int ax[2],ay[2],sp; int jx,jy,jpxv,jpyv; // discrete joystick cursor int jsx,jsy,jsvx,jsvy,jstid,jsnt; // smooth joystick cursor // premove int premoveq; int pmx[2],pmy[2]; piece pmp; // dragged piece info bool dr_active; bool dr_fromstock; int dr_ox, dr_oy, dr_c, dr_r; piece dr_p; int dr_step; int dr_dirty[2]; bool dr_fto; // animation list adirty; // info lines string info[6]; int dropsq[2]; int sqside; int sqw, sqh; /* canvas size */ int borx, bory; // borders (when coordinates are shown) int morey; // extra y space for extruded sets stack UpdateStack; void popupDropMenu(int col,int row,int sx,int sy,guint32 etime); void popupProtocolMenu(int x,int y, guint32 etime); void sendMove(); void outlineRectangle(GdkGC *gc, int x,int y,int color,int pen); void drawJoystickCursor(GdkGC *gc); void drawBall(GdkGC *gc, int x,int y,int color,int radius); void drop(piece p); void drawCoordinates(GdkPixmap *dest,GdkGC *gc,int side); void composeVecBoard(GdkGC *gc); void pasteVecBoard(); void shadyText(int x,int y, int f, char *z); friend gboolean board_animate(gpointer data); friend gboolean board_joycursor(gpointer data); friend gboolean vec_board_animate(gpointer data); friend gboolean board_expose_event(GtkWidget *widget,GdkEventExpose *ee, gpointer data); friend gboolean board_configure_event(GtkWidget *widget, GdkEventConfigure *ce, gpointer data); friend gboolean board_button_press_event(GtkWidget *widget, GdkEventButton *be, gpointer data); friend gboolean board_button_release_event(GtkWidget *widget, GdkEventButton *be, gpointer data); friend gboolean board_motion_event(GtkWidget *widget, GdkEventMotion *em, gpointer data); friend gboolean gtkDgtnixEvent(GIOChannel* channel, GIOCondition cond, gpointer data); friend void drop_callbackP(GtkMenuItem *item,gpointer data); friend void drop_callbackR(GtkMenuItem *item,gpointer data); friend void drop_callbackN(GtkMenuItem *item,gpointer data); friend void drop_callbackB(GtkMenuItem *item,gpointer data); friend void drop_callbackQ(GtkMenuItem *item,gpointer data); friend void menu_whitep(GtkMenuItem *item, gpointer data); friend void menu_blackp(GtkMenuItem *item, gpointer data); friend void menu_gamep(GtkMenuItem *item, gpointer data); #if MAEMO friend void tap_and_hold_cb(GtkWidget *widget, gpointer user_data); #endif }; class EditBoard : public Board { public: EditBoard(ChessGame *cg); virtual ~EditBoard() {} void popRunEngine(int x,int y); void flipSide(); void getFEN(); void applyFEN(string &s); virtual void renderClock(); private: friend void eb_runengine_bm(GtkMenuItem *item,gpointer data); friend void eb_runengine_nobm(GtkMenuItem *item,gpointer data); }; class GetFENDialog : public ModalDialog { public: GetFENDialog(EditBoard *_owner); private: EditBoard *owner; GtkWidget *e; friend void getfen_ok(GtkWidget *w, gpointer data); }; /* friend declarations for GCC 4.x */ gboolean board_animate(gpointer data); gboolean vec_board_animate(gpointer data); gboolean board_expose_event(GtkWidget *widget,GdkEventExpose *ee,gpointer data); gboolean board_configure_event(GtkWidget *widget,GdkEventConfigure *ce,gpointer data); gboolean board_button_press_event(GtkWidget *widget,GdkEventButton *be,gpointer data); gboolean board_button_release_event(GtkWidget *widget,GdkEventButton *be,gpointer data); gboolean board_motion_event(GtkWidget *widget,GdkEventMotion *em,gpointer data); void drop_callbackP(GtkMenuItem *item,gpointer data); void drop_callbackR(GtkMenuItem *item,gpointer data); void drop_callbackN(GtkMenuItem *item,gpointer data); void drop_callbackB(GtkMenuItem *item,gpointer data); void drop_callbackQ(GtkMenuItem *item,gpointer data); void menu_whitep(GtkMenuItem *item, gpointer data); void menu_blackp(GtkMenuItem *item, gpointer data); void menu_gamep(GtkMenuItem *item, gpointer data); void eb_runengine_bm(GtkMenuItem *item,gpointer data); void eb_runengine_nobm(GtkMenuItem *item,gpointer data); void getfen_ok(GtkWidget *w, gpointer data); gboolean board_joycursor(gpointer data); #endif eboard-1.1.1.orig/ChangeLog0000644000175000017500000015460410757567572015064 0ustar patrikpatrikhey, emacs, got something for you: -*- fundamental -*- eboard ChangeLog ---------------- [fics] - applies to fics [craf] - applies to crafty [gnuc] - applies to gnu chess [sjen] - applies to sjeng [ics] - applies to all networked servers [eng] - applies to all engines [all] - applies to all * [all] Text search (Ctrl-F) no longer requires a modal dialog box, the search text is typed in the input box (similar to the Firefox search behavior). * [ics] Added ICS filtering options for Non-ASCII characters. * [all] Fixed some "invalid UTF-8 string" warnings related to the text console. * [ics] added an option to show timestamps for each text line * [ics] eboard no longer sets the seek variable when logging in to an ICS * [all] Fixed promotion bug in P2P mode (capture promotions such as exf8=Q did not work due to bad notation parsing). Closes SF ticket #1832106. * [ics] Seek graph positioning now avoids text and marker overlaps. 1.1.0a: * [all] Fixed compilation issue with GCC 4.1 1.1.0: * [ics] The seek graph do not become red after updates (FICS sometimes sends bogus updates that are annoying to check). * [ics] added seek graph, removed seek table * [ics] eboard now displays clocks and move times with milisecond precision, on servers that support ivar ms * [all] slightly faster console (less frivolous buffer formattings) * [all] minor simplification of eboard-config script, patch from Han Boetes 1.0.4: * [all] fixed minor text selection bug (last character in line would disappear if selection ended in the previous character). * [all] added Hungarian translation (contributed by Bajusz Tamás) * [all] fixed a couple of memory leaks (patches sent by Tom Vijlbrief) * [all] fixed some text-console relates crashes (closes SF#1664848) * [eng] added some diagnostic to the console when running an engine fails. * [all] eboard will no longer execvp gibberish (even though it wasn't doing any harm when it did) (closes SF#1642023) * [all] Some dialogs now have automatic scrollbars, which should make eboard usable on small screen mobile devices. Patch sent by Peter Cox. 1.0.3: * [all] eboard no longer writes the debug3.ppm file to the homedir (leftover debug code) (closes SF#1640523) * [all] make install now accepts DESTDIR (mostly for binary packagers) (closes SF#1640162) * [all] fixed console selections and treatment of UTF-8 content (closes SF#1633394). The console is also faster. * [all] safer string operations (SF#1639041, SF#1639841, SF#1640126) * [all] added joystick support under Linux * [fics] eboard now remembers the column and direction of sorting set for the Seek Table. (closes Feat.Req. SF#1112351) * [eng] Game->Resign should now work with any xboard-protocol engine. (applied patch SF#1637343) * [all] Added DGT board support through dgtnix (http://dgtnix.sf.net) 1.0.2: * [fics] Fixed movelist retrieval of mass observation (such as when observing a relay or a tourney on FICS). (closes SF#1626824) * [all] Fixed (as much as possible) the layout of the scratch board controls when there is not enough room to display all the controls (closes SF#1631707) * [fics] Added scrollbars to help navigating when there are too many board tabs. (closes SF#1634485) * [fics] Annoying seek table "Ads Removed" messages no longer shown in the console (closes SF#1634772) * [fics] Fischer Random games are now distinguished from generic wild games (closes SF#1632083) Wild 0/1/2 are also tagged according to the winboard standard (applied patch SF#1634678) * [fics] observed wild games on FICS are now reconstructed from the start, so that the user can browse moves made before observation started. (closes SF#1631873) * [all] updated french and italian translations. * [all] fixed the text layout of PGN annotations on the board clock area (closes SF#1631563) * [fics] the board positions on observed crazyhouse are now accurate for moves before the user started observing it. (closes SF#1631559) * [all] the 3D piecesets work again (closes SF#1630790) * [fics] now games unobserved while in progress can be properly discarded in the local games dialog (closes SF#1626570, SF#1631567) * [eng] games played against engines now have the TimeControl tag properly written when saved to PGN. (closes SF#1630745) * [all] the Getting Started dialog was editable by accident. Fixed. (closes SF#1630847) 1.0.1: * [all] focus and cursor position of input box are back to normal (changing panes won't select the input field, moving through the history keeps the cursor at the end of the field). (closes SF#1626448) * [fics] observed game removal fixed: when smart discard is turned off, games will pile up until the user removes them manually, as expected. (closes SF#932920) * [fics] material for suicide/losers will be correctly shown when a game starts being observed (closes SF#1179796) * [all] (peer-to-peer) eboard now enforces legality checking when playing in peer-to-peer mode. (closes SF#836146) * [eng] eboard should no longer leave background processes when interrupted with Ctrl+C (SIGINT). (closes SF#1480964) * [all] removed usages of index and rindex, should fix compilation problems on Solaris and other platforms (closes SF#993896) * [fics] fixed crazyhouse-related bug that displayed incorrect stock pieces when moving along a FICS crazyhouse game (closes SF#1628990). (this bug was caused by a change in the FICS server output) * [all] fixed hanging and UI misbehavior when attempting to load an invalid PGN file from the Games on Client dialog. (closes SF#1628320) * [fics] disabling the seek table while connected to FICS will no longer output the table protocol garbage to the console(s) (closes SF#1628114) * [all] the theme used to draw crazyhouse stock is now correctly changed even on finished games (closes SF#1628111) * [all] fixed some graphics artifacts during piece dragging (below and to the extreme right of the board limits). (closes SF#1627374) * [fics] when the console font is changed, the separate channel tabs will also be updated, as expected (closes SF#1627871). * [all] substituted more GTK1 deprecated calls for the proper GTK2 ones. * [eng] fixed bug in en passant information in FEN positions (this affected engines when playing from a set position - noticeably crafty) * [eng] the Run Engine... button on the scratch board works again. * [gnuc] eboard no longer crashes when it runs GNU Chess 5 thinking it's GNU Chess 4. (closes SF#1480962/B). * [eng] eboard will no longer freeze or crash when the user tries to play against a missing chess engine. (closes SF#1480962/A) * [eng] eboard now detects xboard protocol v1-only engines and gracefully closes the connection on them instead of crashing (proto v1 still unsupported by eboard) (closes SF#911486) * [eng] fixed a bug that made eboard crash when a game against an engine was interrupted (such as after being aborted) (closes SF#1107752). * [eng] eboard now respects the engine usermove setting. (closes SF#1017917) * [all] added more path options to the configure script to help packagers. * [all] fixed the placement of the piece counts in the crazyhouse stock (closes SF#1626472/A) * [all] fixed geometry saving/restore - now the bughouse divider should be placed where it was saved. (closes SF#1626472/C) * [all] fixed occasional warnings/crashes when selecting a font in the preferences dialog * [all] fixed libpng detection in the configure script for FreeBSD (now checks for libpng12 and libpng13 is libpng is not found) * [all] fixed bug in PNG reading code that made eboard crash when reading the Chap set from eboard extras pack 1. 1.0.0: * [all] eboard now uses GTK+ 2.x * [all] eboard now compiles properly with GCC 4.x * [all] Fixed crashes on x86_64 (NULL / 0 problem on vararg calls, SF patch #1534453) * [all] Added French translation (SF patch #931431 by Khanh-Dang) * [all] The weird configure error related to socket.h on BSD and Mac OS X should be gone now. * [all] Added Japanese translation. * [all] Mouse scroll wheel now works on the text consoles. 0.9.5: * [all] Completely changed the compilation process and internationalization support, no longer depending on GNU autoconf/automake or gettext. * [ics] Quite revamped the code that colorizes and parses ICS output, I hope nothing is broken. * [ics] Non-move updates to observed games (setting the clock, player names, ratings in a relay, for example) will not play the "Move Made" sound. (closes bug ticket #786179). * [fics] Fixed detection of ratings in game relays, where player names can contain underscores, like GM_Anand. (closes bug ticket #786177) * [all] The sound event dialog would incorrectly show "Beep" when the event was configured to run an external program, fixed. (closes bug ticket #785847) * [ics] Fixed a bug that would make eboard crash when the connection was closed bu the ICS server on some special rare occasions. (closes bug ticket #775154) * [ics] Fixed a translation bug in the FICS protocol that would translate the command 'games' sent to get rating information. * [ics] Fixed a bug that would cause eboard to crash when an observed game ended with a movement and move animation was on. * [all] Fixed the vectorized piece set, which was full of bugs. (would crash on board resizes, appear with gray bars and other oddities) 0.9.0 * [ics] Fixed incompatibility with servers that allow digits in player handles (such as Gustav998). * [all] Changed the way new input is detected, will probably make lightning playing on ICS less sluggish. * [eng] Added the Retract Move command to the Game menu, allowing to take back a move in a game against an engine. It does nothing on ICS or P2P modes. * [all] Added peer-to-peer (P2P) connection (one eboard connects to other eboard to allow network play). * [eng] Fixed a bug in the time control edit dialog, the control type selection would always show up as Fixed Time per Move regardless of the current setting. * [all] Atomic games loaded from PGN will now be browsed correctly (with explosions). (as long as the Variant key in the PGN is set to "atomic", which is already ok in games saved by eboard itself). * [ics] The seek table will now be cleared after the connection with the server is lost. * [all] Fixed font encoding problem on tab labels, color selection buttons, [chat]/[cmd] button, bug pane action buttons. This problem only affected translations (non-english). * Local Game List may still have the problem, mail Ales about it * * [all] Save desktop geometry will now save the position of the pane division in the main window, thanks to Tristan Colgate for the patch. 0.8.0 * [all] Changed behavior of PageDown/ PageUp keys: they'll act only on the current window (instead of paging all consoles at the same time). * [fics] Added proper handling of the Atomic Chess variant. * [fics] As of Feb 16 2003 FICS changed its output on game terminations, so previous versions of eboard would discard game boards even with Smart Discard on. Fixed. * [sjen] illegal move behavior has been fixed. This was an issue on Sjeng due to the variants it plays, for the other engines, having eboard's legality check on is the most safe behavior. (if you turn legality checking off with GNU chess 5, for example, it won't complain about illegal moves, and will just sit waiting for a new move, and the game will be broken). * [eng] now 3 types of time controls can be chosen for playing against engines: fixed time per move, given number of moves in given period of time or Fischer Clocks (increment clocks like FICS's -- and move 1, both white and black -- do not count for the time control, so don't be surprised by the clock being reset until white makes move 2). * [eng] the max depth setting was being sent completely wrong to engines, fixed . * [fics] the undocumented pause/unpause flag on examined games is now taken into account: relayed games (like Kasparov vs. Deep Junior) will show up with clocks running correctly. As a consequence, in the first two moves of every game the clocks will not be shown running (because the first move, both white and black, are always 0:00). FICS says the clock is paused at those moves, and eboard behaves accordingly. * [all] rewrote the text console code from scratch, should fix a lot of issues regarding selection/copy/paste. * [all] applied a patch to po/Makefile.in.in (NLS support) to fix compilation/installation with DESTDIR. Thanks to Federico Schwindt for sending the patch. * [all] fixed a crash on PGN game display when the PGN contained illegal NAG codes ($140 and above). 0.7.1pl1 * [n/a] missed a required namespace option with the changes. I love gcc 3 soooo much. 0.7.1 * [all] when saving to a PGN file, the game will be APPENDED if the file already exists. * [all] eboard can now read .pgn.gz files (only read, not write). However, the implementation is somewhat dumb: it decompresses the file, indexes games, deletes the file. Each game you ask to display requires a new decompression (gzip -d). "gzip" and "cp" must be on the PATH for all this to work. * [all] Status bar messages won't stay there forever, but rather expire after a given timeout. * [n/a] Fixed iostream inclusions to compile without warnings on gcc 3.2 * [all] Fixed a bug in the PGN parser. (PGN files that had no newline char at the end of the last line would make eboard crash). Thanks to Hicks@FICS for spotting it. * [ics] Fixed the misplaying of an "opponent moved" sound event on game starts. * [eng] Fixed long standing bug in move display, engine pawn checks (like 'g4+') were incorrectly displayed as '+'. * [all] 5 new sound events added (game started (user playing), game won and game lost (by the user, does not apply to observed games on ICS), game over (observed games), and move (observed games)). Sound preferences pane revamped accordingly. * [ics] Clock updates will now be shown immediately (like when you or the opponent issues a 'moretime' or when the examiner sets the values of the clocks) * [eng] Fixed a bug in the xboard protocol that wouldn't allow users to play against the engine with thinking output on (by typing 'post' after the engine has started). * [ics] A bug in animation code that would make eboard crash when the position changed radically (a forw 999 in examination or when lecturebot rewinds the variation, for example) was fixed. (animation calculation rewritten to fix it) * [all] More code size optimization, especially regarding sequences of gtk_widget_show()'s , dlg_about.cc/.h removed, content moved to help.cc/.h. animate.cc/.h content moved to board.cc/.h * [all] Font configuration GUI code has been simplified (accomplishes the same as before with less code) * [all] Added an option to select the font of the seek table. Thanks to Michael G. Lane for the patch. * [all] Fixed a bug that would cause eboard to segfault when a title in the Local Games dialog list was clicked. Thanks to Michael G. Lane for the patch. * [all] PGN reading now correctly reads PGN files with variations in parenthesis (but those variations are ignored). Thanks to Michael G. Lane for the patch. 0.7.0 * [fics] eboard will now correctly set/unset the premove ivar according to the setting in the Options menu. * [all] Added translations to brazilian portuguese (pt_BR), German (de), Spanish (es) and Italian (it_IT). To set the language, make sure you did 'make install' to get message catalogs installed and do something like 'export LANGUAGE=de' to set current language. You can't change language after eboard has started. * [all] Code cleanups: destructors made virtual, many unused declarations removed, default method argument syntax changed to make it fit with pedantic ISO C++ compilers (gcc 3.1 and above). Thanks to David Fries (destructors, vars) and Rich Churcher (default args) for the patches above. Also ensured that it compiles without a single warning with -Wall in egcs 2.91.66 and gcc 3.0.4. (there are some warnings in the implementation of the STL deque<> template that comes with egcs 2.91.66, I can't do anything about that, sorry) * [all] eboard should now allow itself to be resized fullscreen on large resolutions (1280x1024 and up). Thanks to David Fries for the patches. * [all] The PGN "Event" Header is now set to values like "ICS Rated Chess Match" and "Engine Chess Match" for games played on ICS and vs. engines, respectively. * [fics] Added Var command to board right-click menu. The original idea was making the whole menu user-customizable, but it's all too messy, I'll postpone customization to some future. * [all] Described some of the latest undocumented syntaxisms in Help -> Keys. * [all] scripts can be run from the input box with %do scriptname , where scriptname is exactly the name shown in the left column of the Windows -> Run Script dialog. %do and %prefix commands are not stored in the typing history. * [all] changed key binding: F8 now toggles shortcut bar visibility. * [all] added "Plain Beep" sound event. It just sends a bell character to stdout, on PCs it'll probably be a beep on the internal speaker, no idea what happens elsewhere. * [all] fixed 0.6.2's compilation issue on *BSD, where SOL_TCP isn't defined. 0.6.2 * [all] shortcuts now can issue multiple commands, just separate them with ; * [all] shortcuts can now programmatically call scripts, just set the command to script.filename , where filename is exactly the name shown in the left column of Windows -> Run Script dialog. 0.6.1 * [all] scripts in the current directory (like ./timeseal.Linux) should now be properly run when . is not in the PATH. * [ics] added a "chat mode", as many have requested. it'll probably deceive some of you at first, if you have better ideas, email eboard-devel / eboard-users about it. mode is what eboard always was: what you type is sent as typed to ICS uses the prefix on its right side. to switch modes use the ESC key or click the button at the side of the input box. enter (without quotes) '%prefix whatever' to set a custom prefix. Notice that receiving tells and says will change the prefix in the console window. all this documentation will be placed in the webpage sometime soon, and probably next versions will add a new pane in the Preferences dialog to configure the behavior of this feature. Currently available in the main window only. The console pane has its idyosyncrasies over others (%prefix is not sticky in it) * [ics] now it'll recognize your name even in different capitalization. * [all] Changed a little the look of the graphical zhouse stock. * [ics] Fixed zhouse stock count update bug (some pieces wouldn't show up sometimes) * [all] Minor fix to PGN parsing (reading), should now correctly read TWIC's (http://www.chesscenter.com/twic/twicp.html) PGNs which have event names between game data. * [ics] Fixed drawing the little mouse icon in crazyhouse games, now it won't be drawn over the stock. 0.6.0 * [all] The crazyhouse stock will now be shown in the same pieceset used for playing. The non-black background was needed to prevent all-black pieces from disappearing. Pieces will appear the same size as they are used on the board, and there may be overlapping. The real click target region is delimited by the darker vertical lines. * [all] added Makefile.simple, a Makefile totally independent of automake, to ease the life of people trying to compile eboard on unexplored platforms. The INSTALL has some hints about it. * [all] scratch boards can be set up from a FEN string. * [eng] engines can be started from arbitrary positions (from a scratch board) * [all] faster (more responsive) piece dragging * [sjen] the variant is now correctly saved in the engine bookmark. * [all] compatibility fix for compilation on Solaris (strings.h header) 0.5.2 * [all] minor speed hack on piece drag. Some may notice, others may not. * [eng] Added a dialog box to edit the engine bookmarks. (Peer -> Engine Bookmarks -> Edit Bookmarks...) * [craf] minor fix to engine bookmark naming, now it correctly extracts crafty's program name. * [eng] minor fix to xboard protocol implementation, will now work correctly with engines with bad I/O flushing, like GNU Chess 5.04. * [all] fixed font fallback when creating the bughouse pane. * [all] upgraded to autoconf 2.53 and automake 1.6.1 If you want to develop/make changes to eboard, you're likely to need both. * [all] looks like SuSE has a broken imlib RPM that won't load PNGs, I've added a fallback low-res theme, but if you use SuSE yo should update the RPM, SuSE told me they fixed the issue already and that an update is available. * [all] fixed another compilation issue with gcc 3.0.x * [all] added beeping support for OpenBSD (possibly to NetBSD too, but that's untested). Thanks to Federico Schwindt for the code. 0.5.1 * [eng] promotion vs. engines was still broken, I hope it's fixed now. * [ics] Absence of wget in the $PATH won't make eboard crash when trying to connect anymore. * [ics] Channel list retrieval will work with non-timeseal connections too. 0.5.0 * [all] Fixed a minor misfunction of the input history in the detached consoles. * [all] Removed the antialias option since the new scaling algorithm doesn't need it. * [fics] Renamed the Seek Graph to Seek Table since it isn't really what most interfaces call a seek graph. * [eng] Added engine bookmarks. * [all] Engine promotion fixed on engines that use uppercase in promotion notation (like Yace). * [all] Fixed display of one-line annotations. * [all] Variants (the ones supported, of course) are correctly detected in PGN files. * [all] X11 GC caching (should leak less memory). * [all] substituted many C char arrays for C++ dynamic strings, and a a many C streams for C++ streams. * [all] Fixed yet another segfault situation when dragging with extruded (3D) piece sets. * [all] Decent piece scaling algorithm (taken from Gimp 1.0.4) Pieces look better when magnified. * [fics] Bughouse support (in the bughouse pane) works. * [all] Lots of changes in class structures regarding pieces, boards, bugpane. * [all] The console snippet/bughouse pane can now be seen together with observed/examined games, not just the main board. * [all] added an option to increase animation framerate (Smoother animation in the Appeareance pane of the preferences dialog). Will eat more CPU if turned on. * [all] removed the script popup and made it a control next to the input box. * [all] the icon selection in the shortcut bar setup dialog had some glitches when buttons were set up for the first time. Fixed. * [ics] the bughouse/console pane below the main board will no longer be hidden/reduced when a new game is started. * [all] squeezed graphics code (bitblt) again by producing assembly output and optimizing C++ code accordingly. Better than this, only coding straight in assembly (and yes, would get better, gcc is not particularly wise here) 0.4.3 * [ics] Now channel names (Help, Chat, Tourneys, etc.) will appear on the channel tabs. The channel list is retrieved by HTTP from eboard's website. You must have wget installed else it won't work. Currently only FICS channels are listed there, feel free to contribute channel lists from other sites. Cache is stored in /tmp/eboard-chlist-* and expires after 8 hours (remove the file to force a reload). * [ics] Added a button on the channel panes to reove the panes at will. * [all] Added a Hide button to the shortcut bar. * [all] Added a console snippet to the main board (drag up the small square in the bottom left of the main board) * [all] Changed the look of the Local Game List dialog to display games in a tree hierarchy. (ability to double click a game to display it is disabled for the time being) * [ics] Added a sound warning to announce that time is running out. 0.4.2 * [fics] As a side effect of the change below, some FICS lines that included the user name but were not highlighted as personal (yellow) now will be. * [fics] Hotfixed the treatment of LectureBot announcements when channel splitting is on. Notice that the :LectureBot(TD)(67) lines aren't really channel tells, but xtells pretending to be channel tells. Now eboard is credulous and will send these to the ch 67 channel pane. (translation: it is LectureBot's fault, not mine) * [all] Added the shortcut bar below the board. If you don't like it, disable it from the Settings -> Preferences : Appearance dialog. * [all] Modified the antialias algorithm again, now it does a regular gaussian smoothing as a 3x3 convolution in RGB-space instead of the previous oddball. * [all] Beeping code now calls SNDCTL_DSP_POST, which should prevent unwanted noise after the beep with some audio drivers (especially on AC'97 devices). * [all] Revamped the Sound pane in the Preferences dialog so that it becomes able to handle more sound events. * [ics] Added a sound event to be played when the user is challenged. * [all] Changed button disposition in the Games on Client dialog. * [fics] Now eboard works correctly when the FICS examine variable is set (automatically start examination when game finishes) * [all] Minor corrections to network connection opening code (more accurate reporting of connection failures) * [ics] Added the bookmarks submenu in the Peer menu. * [ics] The Connect to Other Server... dialog will no longer take empty host names (which would lead to startup failure on previous versions) 0.4.1 * [eng] Fixed bug that made eboard crash after a game against an engine ended or was interrupted. (the "game not found: 7777" message on the console) * [sjen] Fixed bug that prevented crazyhouse playing (incorrect piece drop processing). 0.4.0 * [all] Added the Help : Getting Started dialog, which will pop up when the user runs eboard for the first time (no ~/.eboard directory) * [fics] Games observed with "follow" now are saved correctly (untested with wild) * [eng] En passant captures in crazyhouse/bughouse now correctly add a pawn to the stock. (fixes bug ticket #493844) * [all] Double-click selection on the first word of a line in the console now behaves correctly (previously it would not select the word's first character) (fixes bug ticket #495103) * [all] PGN annotations (between { }) are now shown in the clock pane of the board (as long as there is enough space) * [all] eboard will no longer write % comments in its PGN files, but still understands %eboard when reading them, for backward compatibility. Many chess programs are confused by those comments, even though they are legal PGN. There is a Perl script on the eboard website that will convert your old PGN files removing the old %eboard comments and adding the new-style PGN fields, see the downloads section. * [eng] Now the user (human player) can correctly promote on games against engines. (fixes bug ticket #508092) * [all] PGN code now can cope with bad move syntax (e.g. a8Q instead of a8=Q. a8Q is _wrong_, but some large PGN files around use it) * [all] To save memory, the movetext section of PGNs is _not_ loaded with the "Load PGN" command (Windows->Games on Client dialog). It is only loaded when the game is selected and the "Display" button is hit (and the PGN file must still exist to load the moves from it) * [all] Rewrote PGN-reading code from scratch. Should be simpler to maintain and does not crash on situations where the old code crashed. * [eng] Fixed eboard hanging when engine crashed before outputting a complete text line (e.g., running GNU chess 4 with "gnuchess -t") * [all] Added the Help -> Debug Info dialog. ********************************************** Please report everything in it when you report any kind of eboard crash. ********************************************** * [ics] Fixed the mess on the movelist when going back and forth in an exmined game in FICS. * [all] Added the --enable-debug configure option to compile with -ggdb instead of -O6 when desired * [all] Added Scratch/Edit Board Feature * [all] Fixed crashing when saving the desktop geometry (bug observed in FreeBSD only) * [all] Minor typecasting bug solved, fixes compilation some incarnation of gcc 2.95.2 somewhere. 0.3.5 * [all] Several little code cleanups suggested by Matt Zimmerman: error reporting upon fork() failure, correct closing of pipes when spawning child processes, no script path fallback to /tmp when HOME is not set, warning message (on stderr) if HOME is not set. * [all] Now scripts can be in any language. That makes writing autologin scripts easier with tools like 'expect'. * [all] Added support for "extruded" piece sets (pieces can take up a portion of the square right above it, good for 3D sets. Please notice that such sets are even slower to render than the regular bitmapped sets) * [all] Fixed (at last ?) the bug that made eboard segfault when dragging pieces off the board's limits. 0.3.4 * [fics] Added context menu with operations on games and players (right-click anywhere in the clock region of a game while conencted to FICS). Will be be extended to engines soon. * [all] Modified "Show Coordinates" format to a more sane one. * [all] Added text search on the console (Ctrl+F, Ctrl+G, the commands are currently in the Windows menu, but will be relocated to a new "Edit" menu or elsewhere soon). * [all] Added a Dismiss button to the "Run Script" dialog, since some window managers (Sawfish) will make it non-trivial to close a modal dialog box from the window mamager. * [all] Added menu command to save the contents of the main console to a file (Windows -> Save Text Buffer). * [all] Added common C++ code for file dialogs, instead of scattered GTK+ C code (smaller code, possibly smaller binaries, possibly faster compilation) * [ics] Yet another issue of password-showing on detached consoles was fixed. (typing in the username, opening a detached console then typing the password on that console wouldn't masquerade it. Now it's fixed.) 0.3.3 * [ics] Now ratings, seek id and time control columns are sorted correctly (numerically) on the seek graph. * [eng] Crashes and weird behavior when engine is not found were fixed. * [all] Better fallback fonts, should work even if only the 100 dpi package is installed, and better message if that still fails. If you still have problems loading eboard due to lack of fonts, mail me the output of your 'xlsfonts' command. * [ics] The input boxes of detached consoles now go to password mode upon ICS login, as they should. * [all] Fonts with embedded spaces in their names are now accepted. * [all] Fixed crashes when dragging pieces way out of the board. * [all] Added desktop state saving (Windows -> Save Desktop Geometry) 0.3.2pl1 * [all] Last-minute bugfix on eboard-extras loading. 0.3.2 * [all] Selecting a bitmapped theme while in Vector mode will switch to bitmapped mode with the selected theme. (this was causing confusion to some users) * [all] Added customization of console colors (please note that after you change foreground colors, new text will come out in the new colors but the current (old) content of the buffer will remain in the previous setting. * [all] Multi-line strings pasted in the input box will have the line breaks stripped. * [fics] Added the Refresh button to the seek graph. * [fics] The seek graph is now sorted on the variant column, clicking on the column titles changes sort column, clicking on currently-selected column flips sort direction. * [all] The opponent-moved sound will be only played after the piece animation ends, if animation and sound-on-move are turned on. * [all] theme configuration files called DATADIR/themeconf.* will now be loaded too (this is to keep theme packaging easy). * [all] DATADIR is now used to determine the location of datafiles. (this should only make a difference if the --datadir option is passed to configure) * [all] eboard-config now uses the configure datadir and bindir variables to determine paths (this allows these variables to be modified without breaking things) 0.3.1 * [all] PGN reading should be much faster now. * [all] PGN files with comments inside { } should now be read correctly. PGN files with black move numbers like 14... should be read correctly too. IMPORTANT: if you have a PGN file that can't be read or is read incorrectly by eboard _please_ email me it so I can fix eboard to read it. * [all] Added a button in the detached console to spawn more consoles. * [all] Better behavior of Page Up and Page Down keys in the detached console. * [all] Fixed bug in dragging (old position was drawn if you were holding a piece while waiting for the opponent to move). But remember: piece holding and animation don't mix. * [all] Added 'Show Coordinates' option. * [fics] Clocks won't tick when observing examined games. 0.3.0 * [ics] Added output filtering for detached console. * [ics] Added input box to detached console window. * [ics] Added option to control automatic discarding of observed games. * [ics] Added option to control whether new games are brought to front upon observation or examination. * [all] Keyboard focus will always remain in the inputbox. * [all] Fixed legality checking and move reproduction code for double pawn pushes with a doubled pawn in 3rd or 6th rank. * [all] The Sound Event dialog will list sound themes. (but the controls are only created if at least one file is found in the eboard_themes.conf files) * [all] Sound files can be listed as themes, syntax described in Documentation/Themes.txt, eboard-addtheme is already compliant. * [all] Several fixes to eboard-addtheme script. * [all] The game/board navigation buttons will be disabled whenever they have no use (text panes, boards without games) * [all] Cosmetic changes to the preferences dialog. * [fics] 'say' lines will be recognized as personal tells even if after a game. * [fics] When examining a game the exmining pane will be brought to front. * [all] Modified eboard_themes.conf search path semantics. (all files in the search path are merged, instead of loading just the first found) * [all] Fixed bug related to unexpected use of the 'discard board' button. * [all] Added button to flip the board to the main window button bar. * [all] Fix for segfaults that happened when closing eboard. * [all] Modified theme loading to allow having separated pieces and squares. 0.2.5 * [all] More fallback fonts if default fonts aren't present. * [all] Added eboard-config and eboard-addtheme scripts for future theme packs. * [all] Fixed a bug that would prevent any sub-process (timeseal, scripts, engines) from communicating correctly in some systems. (Detected, fixed and tested in FreeBSD 4.2; Linux's select() syscall is wise enough and was not fooled by this bug) * [ics] Added support for the 'sposition' command (and theoretically any other commands that make use of the -3 code for isolated positions in style 12) * [fics] Board windows will be removed despite of server response (useful for removing sticky game windows after a disconnection or server crash) * [all] Games will have the WhiteElo and BlackElo fields saved if possible. * [all] Added support for C++ libraries that enforce the std:: namespace for STL (GCC 3.0) * [all] Fixed the 'ghost piece' problem when dragging pieces with bitmapped piece sets. * [all] Added double buffering for piece dragging to reduce flicker. * [fics] Fixed FICS support when ptime=1 on the server (but since eboard supresses the prompts, why would you have it set anyway ?) * [all] Introduced a delay between the button press event and the start of dragging animation , to prevent the dragging flicker when you're just clicking the piece. * [ics] Fixed crashes due to reuse of game ids. * [all] Minor include file fixes for FreeBSD 0.2.4 * [fics] FEN saving fix for observed games. * [eng] Fixed FEN position field when saving games played with engines. * [all] Fixed awful bug in FEN position generation. 0.2.3 * [all] Sound-handling process will be spawned with exec, to prevent it from inheriting X file handlers from a mere fork. * [all] Memory leak fixed when disposing board panes. * [all] Added key bindings for backward and forwards (Ctrl Left, Ctrl Right) * [all] Wild games will be saved with a FEN tag to indicate starting position. And FEN tags on PGN files will be accepted as starting positions. * [all] Bug fixed in chess moving code. (1. e4 c5 2. d4 c4 3. b4 cxb3 against an engine would segfault due to an infinite loop) * [all] En passant legality detection added. 0.2.2 * [fics] Fixed the showing of provisional ratings on the seek graph (all ratings with RD > 80.0 were being shown as ++++) * [all] It's now possible to drop pieces in bug/crazyhouse by dragging the piece from the stock to the board. * [all] Added option to show crazy/bughouse stock graphically. * [all] Added a count field for beep events. * [all] Reworked the sound routines so that it won't require launching a new process for every beep (but it will still launch a new process for every WAV played). * [ics] Channel tells can now be split to one window per channel (must be configured via Preferences dialog) * [fics] Better prompt removal * [fics] Lines that contain the prompt on the middle (e.g. 'help iv_defprompt') will now be shown correctly instead of cut. * [ics] Finally tracked down and really solved the script freezing bug. * [all] Implemented animation of piece dragging. * [fics] Fixed freezes related to bad parsing of ill-located FICS prompts. 0.2.1 * [ics] Fixed race condition in script I/O that would freeze the whole application. * [fics] Added dynamic seek graph, and options related to it. * [fics] Fixed move permissions when examining a game. * [all] Fixed interpreation of games with moves O-O+ and O-O-O+ (which caused previous versions to segfault with WHAT YOU SAY!!! message) 0.2.0pl1 * [all] Fixed a bug introduced in 0.2.0 where connections to FICS without timeseal would fail. 0.2.0 * [all] Page Up/Down work on detached console even if the main console isn't shown in the main window. * [all] Added font selection for console windows. * [all] Added error message to stderr to help people debug problems running timeseal and chess engines. * [fics] Fixed parsing of Examination status strings (variant is detected correctly when examining a game) * [fics] Support for Losers variant on FICS added. * [all] Changed Material calculation for Suicide,Losers and Giveaway variants (every piece is worth 1 material point in these variants) * [eng] Added toggle for thinking on opponent's time (xboard protocol hard/easy commands) * [ics] Minor change to premove on *ICS: you'll be able to schedule the premove even before FICS acknowledges the current move. * [eng] Added checkmate detection (will place # instead of + in notation) * [all] Internal improvements to pattern matching classes. * [fics] Added colorization to shouts, cshouts, whispers, kibitzes, channel tells, notifications... * [fics] Fixed wild variant detection and game creation. * [all] Fixed a bug in legality checking (some castlings were being inhibited by flawed en passant code, which assumed a pawn on fifth row could take to a square in 8th row) 0.1.10 * [fics] Fixed treatment of adjourned games (ignores duplicated "Creating" string, gets the move list for the moves that occurred prior to adjournment) * [fics] Castling permissions are taken from FICS data. * [all] Added icons to most of the windows. * [all] Fixed clearing of excess space when resizing board in vector-pieces mode. * [all] Added keybindings to detached console window (same as the ones already existent on the main window) * [all] Fix to piece selection semantics, the rule implemented in 0.1.9 is made void for premove, to allow premove queueing of recaptures. * [all] Fixed castling checking for suicide (castling never allowed), losers and giveaway (castling allowed). 0.1.9 * [all] Fixed one more bug in move interpretation: SAN notation was been ignored for pawn pushes that resulted in a check (e.g. "g5+"). * [all] Better vectorized piece set (reduced from 611 to 376 vertices, fixed manually the polygons) * [all] Minor change to piece selection semantics: if a square with a piece is selected and you select a a square with another piece of the same color, selection is transferred instead of trying to move from the first to the second square. * [all] Added castling legality checking * [fics] Fixed the use of non-initialized color (appeared as dark green to me :-) for some FICS strings such as when starting the observation of a game. * [fics] Added colorization for mamer (the FICS tourney bot) messages. * [all] Remodelled Client-side game list window, with more columns. * [all] Fixed updating of crazyhouse stock when navigating thru the game. * [all] A scheme has been implemented to correctly detect variants, time controls and ratedness (these last two for ICS only) in PGN files (but only on games saved with eboard 0.1.9 or later) A hack was added to detect crazyhouse games saved with previous versions of eboard or other programs as such. (a drop move must exist) * [all] Inhibited saving PGN games without moves (e.g., when a game is aborted on FICS before a move is made) * [all] More optimizations on bitmap piece drawing 0.1.8 * [all] Supressed animation of own move on FICS (which was annoying) * [all] Added autosave (auto-append games to a PGN file when games end) * [all] Added option to check legality before sending moves. (Use it if you play against GNU Chess 5!) * [eng] The myname string given by the engine now will be used as opponent name. * [all] PGN: better PGN read/write: will skip escape sequences, and will always fill the mandatory STR (seven tag roster) (but PGN support is not yet complete) * [eng] fixed notation translation error (you won't see things like 22. bxc8=Q+=Q anymore) * [all] many fixes, optimizations and improvements in piece animation code. * [all] added vectorized piece drawing option (much faster rendering of board, meant for lightning games and/or slower computers) * [all] added F3,F4 and F7 key bindings (to move across panes) * [all] faster board updates. 0.1.7 * [all] minor bugs fixed in move checking code and legality checking code. * [all] speed and size optimizations on pattern matching code. * [all] attached PGN information to games, and added dialog to edit PGN headers. * [all] fixed enbling state of the "Discard" button on the Games on Client window. * [all] added capability to save PGN games * [all] added capability to read PGN games (Windows -> Games on Client) * [all] added sound notification for opponent moves, private tells and draw offers. * [fics] disabled closing the ad and server game windows during refreshes (which would cause segfaults) * [fics] Fixed bug in Ad Window when only 1 game ad was available. 0.1.6 * [fics] Style 12 strings won't be mistakenly taken as game ad lines. * [all] Added document about theme construction. * [all] Changed directory lookup priority to allow local (`pwd`, ~/.eboard, ~/share/eboard) to override system-default values. * [fics] Fixed segfaults when discarding observed games. * [fics] Examination support added. (The move list is ot retrieved correctly yet, though) * [all] Changed font querying method, won't lock if font dialog is called while connected. * [fics] Added option to show the rating next to the player's name. * [ics] Added scroll back limitation, made autofics.pl usage optional (via Preferences dialog) * [all] Added toggle for piece antialiasing. * [all] Added plain color toggle for board squares. * [ics] Generic ics prompt parsing (*ics% instead of fics%), for portability across servers. * [eng] Compilation fix for const typecasting + GCC >=2.95 0.1.5 * [fics] Whenever a connection to FICS is made eboard will try to run a script named autofics.pl to login automatically. * [all] added scripting support. scripts go under ~/.eboard/scripts , must be written in Perl and must follow some convetions. More info in the Documentation/Scripts.txt file. * [all] added preferences dialog, with options to change tab position and fonts. * [eng] added maximum search depth field. * [eng] the clock will retain the time of the previous move until the opponent moves. * [eng] position objects now keep track which pieces are result of promotion. Only useful when playing crazyhouse against local engines. * [sjen] added support for Sjeng, a nice multi-variant GPL'd engine. * [fics] fixed detection of observed game removal when the protocol line was prefixed by a fics prompt. * [all] now correctly discards local (client-side) game panes. * [all] (notation-only) translation coordinate -> SAN notation now correctly adds promotion suffix (e.g., =Q) and check sign (+). Many improvements in move notation code. * [eng] kills the engine process after the game is finished. * [gnuc] added support for GNU Chess 4.x (which has some idyosyncrasies about the xboard protocol) * [eng] added generic xboard protocol (v2) support, runs crafty, GNU Chess 5.x and should run others too. Support is not full. If you know of any Free Software engine that comply with the protocol but fail to work with eboard, contact me and I'll try to fix that. 0.1.4 * [ics] added the game ad window (interface to FICS 'sough' command) * [all] added man page (section 6, eboard) * [all] fixed search path (when using unusual prefixes, prefix/share/eboard will be searched too) * [all] fixed autoconf script to detect GTK+ correctly when the FreeBSD port of GTK+ is installed. * [all] added help menu (with help for keybindings) and moved "about..." from the Peer to Help menu. * [all] added key shortcuts (F5,F6,F8,PgUp,PgDn). * [ics] added a history for the most recent hosts used, in the Connect to other server... dialog * [all] implemented moving (and premoving too) by drag-and-drop. * [all] implemented premove (ability to queue the next move before the opponent plays). Warning: move correctness checking is barely implemented. It may send an illegal move to the server (specifically, it won't check whether castling is allowed) 0.1.3 * [all] added the Local Game List window, which holds the list of games stored locally, which in the future will allow loading and saving PGN files. * [all] added the Detached console command to allow ICS/Engine output on a separate window in addition to the Console notebook pane. * [all] fixed segfaulting when disconnected by user request thru the Peers menu. * [craf] locked square selection when it's crafty's turn. * [all] now it paints square selection _over_ last move highlight * [fics] fixed some bugs on list insertion of chess boards, list removal of notebook pages and game object updates that would cause unstable behavior when observing several games at once or when discarding game pages from the notebook. * [ics] added game list dialog (interface to the 'games' command on FICS) * [all] better debugging facilities (-log and -debug write to ~/LOG.eboard and DEBUG.eboard, SIGUSR1 will dump internal tables to stderr) 0.1.2 * [ics] better handling of data after a connection is closed (it waits for data on the pipe before closing it, you'll see the FICS farewell ASCII art, for example). * [fics] added crazyhouse support. (right-click square to drop a piece). bughouse works, but you must observe your partner's game manually (bughouse is untested) * [all] fixed animation code -- still a wee bit flashy, but won't do the annoying cross-desktop trick. * [fics] fixed game variant detection (it would always think your game was regular chess, now it checks correctly) * [eng] corrected wrong end-game status after engine disconnection. * [fics] fixed segfaulting when opening the move list for the game being played by the user. 0.1.1 * first public release eboard-1.1.1.orig/notebook.h0000644000175000017500000000612610757567572015276 0ustar patrikpatrik/* $Id: notebook.h,v 1.25 2007/02/01 21:30:27 pierrebou Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef NOTEBOOK_H #define NOTEBOOK_H 1 #include "stl.h" #include "eboard.h" #include "widgetproxy.h" class Page { public: Page(); Page(int _number,GtkWidget *_content, char *_title, bool _removable=false); void setTitle(char *_title); char *getTitle(); int operator==(int n); int under(Importance imp); int above(Importance imp); void setLevel(Importance imp); int number; bool naughty; bool removable; GtkWidget *content,*label,*labelframe; void dump(); void renumber(int newid); private: Importance level; char title[256]; }; class Notebook : public WidgetProxy { public: Notebook(); virtual ~Notebook() {} void addPage(GtkWidget *what,char *title,int id,bool removable=false); void removePage(int id); unsigned int getCurrentPage(); int getCurrentPageId(); void setTabColor(int pageid,int color,Importance imp=IM_TOP); void setTabPosition(GtkPositionType pos); void goToPageId(int id); void goToLastVisited(); void goToNext(); void goToPrevious(); void setNaughty(int pageid, bool val); void getNaughty(vector &evil_ids); bool isNaughty(int pageid); bool hasNaughty(); void dump(); void renumberPage(int oldid,int newid); void setListener(PaneChangeListener *listener); void pretendPaneChanged(); static void ensurePixmaps(); static GdkPixmap *trashface; static GdkBitmap *trashmask; static GtkWidget *swidget; private: vector pages; PaneChangeListener *pcl; void setTabColor(int page_num,int color,int poly,Importance imp=IM_TOP); void addBombToTab(Page *pg); friend void notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer data); friend gboolean gtkDgtnixEvent(GIOChannel* channel, GIOCondition cond, gpointer data); }; void notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer data); class NotebookInsider { public: NotebookInsider(); void setNotebook(Notebook *nb,int pageid); void contentUpdated(); void pop(); int getPageId(); protected: void pushLevel(Importance imp); private: Notebook *mynotebook; int pgid; stack impstack; }; #endif eboard-1.1.1.orig/langs.cc0000644000175000017500000001244110757567572014715 0ustar patrikpatrik/* $Id: langs.cc,v 1.4 2007/01/20 15:58:43 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "langs.h" #include "tstring.h" TEntry::TEntry(const char *K, const char *D) { int i,j; key = 0; data = 0; i = strlen(K); j = strlen(D); key = (char *) malloc(i + 1); data = (char *) malloc(j + 1); if (!key || !data) { cerr << "langs.cc: malloc error\n"; return; } strcpy(key, K); strcpy(data, D); } TEntry::~TEntry() { if (data) free(data); if (key) free(key); } bool TEntry::match(const char *testkey) { return(strcmp(key, testkey)==0); } int TEntry::calcHash() { return(TEntry::hashOf(key)); } char * TEntry::getData() { return(data); } int TEntry::hashOf(const char *x) { int i,j,k; j = strlen(x); k = 0; for(i=0;i::iterator li; for(i=0;i<128;i++) { for(li=dict[i].begin();li!=dict[i].end();li++) delete(*li); dict[i].clear(); } ready = false; } void Translator::setContext(const char *language, const char *package, const char *searchpath) { tstring t; string *s; FILE *f; char fname[64], fname2[64], dicfile[512]; if (language == 0) guessLanguage(); else setLanguage(language); if (strlen(package) > 31) return; strcpy(Package, package); snprintf(fname2,64,"%s.%s.dict",Package,Lang); if (SubLang[0] != 0) snprintf(fname,64,"%s.%s_%s.dict",Package,Lang,SubLang); else strcpy(fname, fname2); t.set(searchpath); while((s=t.token(":"))!=0) { snprintf(dicfile,512,"%s/%s",s->c_str(), fname); f = fopen(dicfile,"r"); if (f==0) { snprintf(dicfile,512,"%s/%s",s->c_str(), fname2); f = fopen(dicfile,"r"); } if (f!=0) { ready = loadDictionary(f); fclose(f); return; } } } void Translator::guessLanguage() { char *lang; lang = getenv("LC_MESSAGES"); if (!lang) lang = getenv("LC_ALL"); if (!lang) lang = getenv("LANGUAGE"); if (!lang) lang = getenv("LANG"); if (!lang) lang = "C"; setLanguage(lang); } void Translator::setLanguage(const char *locale) { if (strlen(locale) >= 2) { Lang[0] = locale[0]; Lang[1] = locale[1]; Lang[2] = 0; } else strcpy(Lang, locale); SubLang[0]=0; if (strlen(locale) >= 5) if (locale[2] == '_') { SubLang[0] = locale[3]; SubLang[1] = locale[4]; SubLang[2] = 0; } } bool Translator::loadDictionary(FILE *f) { TEntry *e; char *tmpk = 0, *tmpd = 0; int tmpsz; int i,j,k; int m; char c; tmpsz = 4096; tmpk = (char *) malloc(tmpsz); tmpd = (char *) malloc(tmpsz); if (!tmpk || !tmpd) return false; for(;;) { c = fgetc(f); if (c!='L') break; k = 0; i = 0; j = 0; for(;;) { c = fgetc(f); if (c == ' ') { ++k; continue; } if (c == '\n') { break; } if (c >= '0' && c <= '9') { if (k==0) i = 10*i + (c-'0'); else j = 10*j + (c-'0'); } } if (i==0 || j==0) return false; if ( (i > (tmpsz-1)) || (j > (tmpsz-1)) ) { tmpsz = i > j ? (i+1) : (j+1); tmpk = (char *) realloc(tmpk, tmpsz); tmpd = (char *) realloc(tmpd, tmpsz); if (!tmpk || !tmpd) return false; } if (fread(tmpk,1,i+1,f) != (i+1)) return false; if (fread(tmpd,1,j+1,f) != (j+1)) return false; tmpk[i] = 0; tmpd[j] = 0; /* substitute \n for real line breaks */ for(m=0;mcalcHash(); dict[i].push_back(e); } free(tmpk); free(tmpd); return true; } const char * Translator::translate(const char *key) { int h; list::iterator li; if (!ready) return key; h = TEntry::hashOf(key); for(li=dict[h].begin();li!=dict[h].end();li++) if ( (*li)->match(key) ) return ( (*li)->getData() ); return key; } Translator T; void langs_prepare(const char *language, const char *package, const char *searchpath) { T.setContext(language, package, searchpath); } char * langs_translate(const char *key) { return( (char *) ((void *) (T.translate(key))) ); } eboard-1.1.1.orig/spiral1.xpm0000644000175000017500000000327410757567572015407 0ustar patrikpatrik/* XPM */ static char * spiral1_xpm[] = { "16 16 90 1", " c None", ". c #2A2A2A", "+ c #161616", "@ c #000000", "# c #808080", "$ c #BFBFBF", "% c #959595", "& c #3A3A3A", "* c #020202", "= c #F1F1F1", "- c #C4C4C4", "; c #999999", "> c #101010", ", c #E5E5E5", "' c #1A1A1A", ") c #535353", "! c #DADADA", "~ c #828282", "{ c #313131", "] c #C1C1C1", "^ c #ACACAC", "/ c #2D2D2D", "( c #040100", "_ c #662212", ": c #BCBCBC", "< c #CDCDCD", "[ c #2C2C2C", "} c #A7A7A7", "| c #E2E2E2", "1 c #909090", "2 c #541C0E", "3 c #030100", "4 c #211A19", "5 c #42160B", "6 c #040404", "7 c #6C6C6C", "8 c #060606", "9 c #5E5E5E", "0 c #939393", "a c #1D1D1D", "b c #946135", "c c #93321A", "d c #4A190D", "e c #50281E", "f c #49180C", "g c #250C06", "h c #7D2A16", "i c #612111", "j c #AAAAAA", "k c #D6D6D6", "l c #4B4B4B", "m c #868686", "n c #363636", "o c #371309", "p c #463B39", "q c #303030", "r c #3D140A", "s c #75573D", "t c #C0C0C0", "u c #D9D9D9", "v c #EBEBEB", "w c #080808", "x c #020000", "y c #CFCFCF", "z c #F9F9F9", "A c #33302F", "B c #4E1A0D", "C c #1E1E1E", "D c #5F5F5F", "E c #4B2015", "F c #282828", "G c #DBDBDB", "H c #898989", "I c #0A0301", "J c #6A2412", "K c #737373", "L c #E4E4E4", "M c #676767", "N c #8A2F18", "O c #0D0402", "P c #46170C", "Q c #F0F0F0", "R c #361C15", "S c #903119", "T c #BA7A43", "U c #865830", "V c #270D07", "W c #0E0502", "X c #842D17", "Y c #792916", " .+@ ", " #$%&@ ", " @+@ *=-;> ", " @,'@@@)!~@ ", " {]^/(_:<[@ ", " @}]|,12345@ ", " 67890abcde@@ @ ", " @fghic@jklmn@", " @copqrs c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #FFFFFF", "B c #8D8D8D", "C c #000000", "D c #A9A9A9", "E c #E3E3E3", "F c #555555", "G c #545454", "H c #AAAAAA", "I c #717171", "J c #1C1C1C", "K c #383838", "L c #727272", "M c #393939", "N c #1D1D1D", "O c #8E8E8E", "P c #C7C7C7", "Q c #E2E2E2", "R c #C6C6C6", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzzzzzzBCDzzAAAAAAAAAAAAAAAAAAAAAAAAAECFAAAA", "zzzzzzzzzzzGCzzzAAAAAAAAAAAAAAAAAAAAAAAAAHCHAAAA", "zzzzzICCIzzJCKCKEAELCCMEAALCCNHAFCOCOEMCMFCPAAAA", "zzzzGCBGCBzCCBGCLAFCOOCMALCOHNCAFCMHENNHFCCAAAAA", "zzzQCGzzCGRCIzzCFECFAAFCAAAPHMCACNEAOCHAECMAAAAA", "zzzDCCCCCGDCDzQCFHCHAAMCALCNFCFACFAAFCAAPCFAAAAA", "zzzRCBzzRzGCBzBCHHCOAECFHCOAPCLHCHAAFCEALCHAAAAA", "zzzzJCGJJQKCCGCKAANCFNNEPCNFCCHOCPAAOCNMCCHAAAAA", "zzzzQIGIQzGBRGIzAAELFLEAAHFLHFPOFAAAAOFOOFAAAAAA", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}; eboard-1.1.1.orig/ghouls.png0000644000175000017500000005341310757567572015315 0ustar patrikpatrik‰PNG  IHDRv$õ¾eÃPLTEÆÆÆ†††ZZZ666FFFŽ>>>êêê²²²vvvÞÞÞ¢¢¢ÒÒÒbbb"""ŽŽŽúúúRRR&&&fff’’’***¾¾¾jjjzzzòòòšššÊÊÊÚÚÚJJJªªª222ææænnn~~~ ÎÎκººÖÖÖîîîBBB:::NNN...VVVâââ^^^rrr–––‚‚‚ŠŠŠžžžÂ¶¶¶®®®¦¦¦öööþþþŽVóù pHYs  ­#½utIMEÓ 1g¦11 IDATxÚì½éz›Ú-jº ‰F@è¦ DB€Ñ dåýŸêT츑³²öÝû»çÇ!‰íÈj`ŽYUcTÕœ<|ûÇÿøØï÷±çÅkøîî]w¿†ðÓz ÿ×q ¿$Îç3< Æ¿õÃû\:‹1¦ û?|‡†ŒÚÿøã Õþ¿ @‡~Â×E”æ%@Ä%|À¹Á?¬÷÷ÐiÚîÞ§(dó‡s¨´ðÛ7?««ŒÑá¹V®±Êp)‘®ëVÍIfôDä§iEþ'¯ä]ùÚŒ5Œüž@ë˜líÆ%\Dg²ž½»Ÿ-jBl-†ÿÞAÇh¹Ôú𘠇.éá×ø¬~¬hÆ”ÓJ•µòúð$Ê©ÿ\ŠÍ…ºÄhšÉÚ•Jÿ«—^ç#¥Í€‘þ-BŦiÆýÐAx&ûÙOÖ1y8Dcòf €1Öo϶õÊêºF‰¤47õß8D¹ŠèÔR'UúW~£zx’5YÓÄÒ—ÍŸ?~®d3ø„ñ?JAq ocš¹¯2é_z³ˆTàteYNµUɦtÉìš¿uˆQÆ& ›²Ôdxߺ?øð\:^<ᲞðA;ÛxÜ ‘õdIèÚnÆ3ù¶‡wÆÍVQ­SLhy’àØ4]$¢YÔ–Õ./]–1™ý•éÈ&æb)˦¼*eÍÌó¼ø—×êç‰_®DQåYÛ­Ùœñ7†ÓRYáû,Í2 óo › DɆ ÎàáGògÏ6£³~‡@l&x¦‡'xÜéwÈ&;ûŽ¡S™ÏÐ~–¤& ±££f`,©iÒ‡ñ _“›Ê¦#j€NøL®i¥à)èÜüWžœyZifÊXT˜M³t÷è´[Ê”*: é§}½Š0O¤º¶u‹¡ô¿ÀÆÖÙ$ òã1MêßP°Ö4ɪÂgØàçÌÏî+tf{˜B=‚3Êá9ÏáfönÏžÑDé^Ñi"KR6È&02(Y&‘TÆ÷}5`8®pj¦µû¡¾’W¢øQ$£™"í',næ)·,îoÿ·6»‚ÕI­aYIž2iú3?ŠtÃP¸f98F?›~U¨…T0ÿL#»h5³=Û4ù7¡Ò‡Ï è‚Rˆ´O«U©e÷Ñ8¼—`ò‚ÅÝt =ëÉ™MÇMmë7:dÄI¹)ËIQl}GÑlš]–NÓD•UGãr+p¬™gõ}Ï­‰t¦¶Fésä‚ã2&å§2W+{ŽÚÿ,t¢.Kšê[@ÇL³äŸY­×mÔ’ §¦€Ž–«j–”e@·[ª*Jböz ‘eD‡ö©¿÷lF`¨cT&3¯?>Ér(_Æoÿ‰5O泟À9c°™š”Îz2¯›ŸûN N"´@ç¸SÜØ¶*%Ö°O£®V5W;q¸´>Äöî„Îd­È«_ÑÃU–+E‘˜RËÕ*©,˶ÿâ¢:ºU®T‡³ª OÓ¿p‹ah‡í8ŒŠAVÀIÌ¢P™ò©4«0¬ÚŽ” L‹18«þÒ Ð—Å@ 6ûk5[í£3.²3&_•0¡ì¯<Û$`f²†P`ÌŸÐA JLDn=©Öýí (‹Þz¶6Š@*°‘Òí<Ì]§ÂÁãwq]éœm;ç3±ÀñåæZ²×‡?5­h\¯¡êP5„KKøxZ•eêS¡Ýý³Hª >ɼ2à4r™ù£gîß…\X÷ãòдN°¹–2Œö´zÕ‚ £H©h‰¤Ú(´BÝŽ¾:ŽòÍãëá§õ_¢C#:šÌÀˆ‘ö$ÒØ»BùÙìÕ0¶ÌnlNÓá‚è¹T¥û™9Lé„7¬ Ò!6ª¤ãœN£Ñµ!×xüéDôQdôÍ<áaëƒaÈ{LX|øñp}õ.šÎèbâ pâõ 9Í æŸ.¹+T_¥Mh¥ºu/~„Ü”Ãûƒœoisv…µZ)N?y ž—OO?®Ä2g‹Œ«¹£tC×Ãвj+¬ªûïÖeIÒ¾€Ó¦¬ÿ:››¨UQÛ(9ÌJ”W÷39˜hC¶¾¥&C™5éDÞÃ3=õ6W X>Ãèʸ<íÖîæ|Æçòž»9œ×§)46…˜V÷Hj`®~üüq}Ðtç@ †ï¼aÔàfòëµúE«ŽÎUÊ&tRTA ­¬ á)Dj ÕLuçÓJM†ª¨L³#ª°”6cá‘€^•×pÇk@×,j“2½ã¬Ê2µJZ}ᢀºÏž­mó\¥¿4PíAN[éîÁí/Ç:½‹Ž»7¡3âNø P„{sl3/˜˜Á‹cÃߺïru‘Š•@œOüœƒC†ŽïÆó; óàD@ß ýs4a¢ËàÅžd=röÄe³;ÆÑ‡˜fÀª¢ª& ÑÕ4Y«žF)ÂÀ_Bü”x5é\ÿD(²Z^É2Àá©HÊ€ÜaÔÌ eWWÓœ5U° Ø$³,=¤ü¬PU?ûÊQ†0-òÑB#ŠË °t꓎{Zœ6Ã0’xý‚³Å¯è Ãº©Mbïžá@ˆˆÙ`fZíÎ(ïlçW˜O¦³Þó|<¥¦ÔöÞ™ßíàÍûVgƒ”¹ã[³$à•®?eÕ! z‹£Ç¯®C”®W´,³…þÁƒÏ ΢ ‰ëœ~}"”P¢e ©rÉtŸÑ©üL'uM Ò†ËRx40M'敦MÆ€hiVCQ,«“¤^|Í–C6't R–éßf÷Z@'aU…ç»íEØ:¡¦Ýõlë‰ð·|Àœøœ]¦rP7V½žYñ’Ç~‡Ž_^Í3oq>Üù‰ Ý³§ä$´¢J}&ǹøƒ‚”g¶1¸€%Zw'žoÛNPjŠeʨþ×)T¸ÈÜl˜36.¼ÃÞ¸Ì|Z]Áy}|ºÕ@È”Šù[wLÂÊ©,j˜HÍ,¹T¥iŠZ"…¯RzF'aät…߼Ϭý¶¤˜÷„ÎÓOìá/Ñ©3?fHðqÌŽá„,Èð/õÎwÖÀ^ÐYOy¶Í”1¸eCgx&Ž=ÙÇ[tB­¼–¬í4†‘séÇ IÃúÞ!»N“Ë•˜§wœ7õãJUj&uãyèœv»ãBìPZ숋Mûà»Ø/]†Ï@,޲uïÀQ,vçýq7(dW²ú§Ì¾hµz6™æ)›ut—L tXÎnñBRw»EÈ€³¡‹¹;¦Ó¨¤/vÁO¬½ÓÞs×§{)€ͳê]ì5ÀñÌ<É|ÖÂÈ´Y¢B (‹ªlû*—Ö`SV!U•êÓi`Y,SÕ+Ùb}Õ„ óãÇ«ùÀ/N #®H´$ɵL—¤B»šY©ä_(bQº=­l‡ÍfÎ¥.ä"IüBj?ÚŽº7+žW0§©Q‘"<Ä?â—tΞÞWßDù2p/Qµ›íÁÒëV1úíÞi°T"·,3Å=÷Ôùt KýrÙ€©!:ÎbçJÓq$TFY?¥ï%¸õ ðKÖäÂw§x¿q`:'o4ZȘœ¦ï^'@í3ghlNLetay)Ò´–Z6§“¹(j\C™*íE’§~*UŒª¾bœ¹ÉJÐÊ?ŸJQ|0Rª»–#CN/|–…$™c…¢(š©}×â;®2Œ¨!…ÍysÎë³7 Ž%I,£VóxÇSªm=%¥ß sþ/˜KÖ“hýȨiS“¯+° Št„N­B»b¿l8´DÚœ¹›çˆ‚§ÂVÎî¹Ñë%‚³;aÜuór ¡f0…Mçä½L/0nIŠC‰OÈÝÏQ4 <¼ü¬Dª¶Á+¾›Á¢,£õ˜™Ž†°Ì++ÓL10™šlC x1uI 6 3:­-E¿sáͲà%€æ`, ‰Ú‹Âµ#p”TQ ¨W‰6i;”e3ÈîÚ{§3™_èý°Ù6ñBe¼áå*ëSö'½3âWÛÁ$è\©žò³sç\ü|àw†Y–'•f¢sÑ|9|'òÓS™Órp_òÓ?eCqö±ëDÊxDxÖÞâæÔÀÍ!N‡&×öŽñ ;M-¥ÂÃù`x cÞn |26½¹’sí}áDåɲ‰fBüH-­d¨fú¶ãعVÊzËÑÀªMà*%§ÍÛgrC9`³³*RæônhÚˆÆFRoƒk M®¤Â̺¾k<Ãø™}™³ŸãëiXŽŽT¨‰½<*ñ­ˆ0¡òb:û©úF¸3:ûøm;Î'F²Y6ͧr%§:ÙK4gJ:ÛLKåŸOZÀ°÷%eðóê Æ6öÖ‡åÞ›è@ìíæ˜s³a0¦‰¹3QïÅJÊþxðÃpX[òæQgwÜ­¼A›fù16KE–e´¬êA æ¦×^ÎÚ ŒPm¶šÓµRÀ2¾Ÿ™ÅjùÛëX3çÐrä”±"2JÍ@¯œåÐØµ³¼€”blNq.BëÈÀëÞçm€N’)Â} °<1,/¶ª‚\ï> 3[C|3ž)/03æÉvܛ݊·¦œ{耠JÑâ¥Þõ\ʲg¹_Y•ü¼Š´ªßåÄÖõ)WucØñ¼z 6ûIò6È©ñôO\eÊy —êÇ ÍÝf¥Ñtxâb(ê¥S Úñ±vÞ&”µ’þ@£:¬*F£CKƒÀ!²ªsˆ30²D÷ —JÚÌ,²ÌîUˆr 0É™&C…5„t#Š ÌÔãyäšqéXUeo·–“÷#§& ¨÷"M1,›5àÔ&vн?,· •U×~´×AŸ û—”Ž;Ãsch·ÂxâI«~@§ÖÒ÷´’•åÙã ©6ÝuVøÀ>ýún®Ì?’¦NOaæ4aï½5LýxökÓé7ðSZ.?8eŠfxÑ™M¶ÞúÜYI*‘UÕ\øŽ7\¦}¢ñJÛڜͲœ-iWà™1 @'k¶çÆ„Xá,u‚Np!„d™ÿ:'L-g}½ôÖQÚÈØ¸çG¡Únξ¸ëHê¬ç) ·¾c<‘å³~½$â‰-ð/O–}‘Áh>y¶×òè­„pë+pçêÎa¿´ãܺB>öä <µYë‰~ܵw\ó8°ÇE¥&“Qwƒ™ãbu§?Íg1îI ½ãîÌO/LJwpÊ,h’OY&+ªÊ"‰¹ì¾±ŸIW·#*Yo½´˜ä^Ñ$$WP¡›¹¯íè.51§„å†KÙ":‘ÔÙR ¡U¤þêkTÑÔ­Ӄ“çOë¶îë¡n/ÞŽÜÀéï÷?‹i¾QYPKwòs­Í0j½=¬fž&^ îœØ\²Ïé^4÷eì×{÷Ÿ¹¿pú:kÏÉîo’gÊ(<|ªãú?®@cjÂ]/flŽG#cÁ{ÜíÆ‹€hûYúh:Û¥,¼"³ÆõÈßÏqqrÏËVMÒàSÖŒ,(I²Â- ïÖÃ¥WÀŸ.  ]L€{õgÅ%½é9•Õ-Ëñv„TØÆfép¾Ñ€|ï9RQúͲ±RÚüa3À†ŽCà„çwÓ  ë±7œÃ%¬G¼hðS®cq:­k ä÷ è¤ ¤@¿,7Þd;ÓHíxÂ)Öú”+˜ Ö·¸2gö·âA/Ö³¾¹´[n½¾×©K>ˆ4Û®·xµ… E±>S(÷´ ƒWúÞC·vº% NuFY\­ð·ÿÃHœ‰ÃEJï ó­ +5´Œ ±.€óçb\6ûŽÑÉÛEBçù½’‹ÒKT¡pv¶6ïv±B:ÄÐD¾Ò»KÁ±m.ÚÂŒ@ýæ|!p¼*2ÖÈú1&yœ:Ïm[§µšaW.zrǧ˜3óü^/Eg[Bßàýw3Æ“zØ·8ŸûT}鿏±µ¹eê<õä¼ÏÜè6G¨õ͆îô‚þÌŒç$ ÒÚ7 õs«¡ŠJ0‡ c #;Ï øë9™*…–ª»yRÁeºûóÀ¾#˜Z‰ õ®!óâ„%¥‹rÙÔ<ÊëžÍ©‰éý4d’‘½Ó“¡Å¹|Lô‘ARå¶£ÓÀÈñ°Ù‚”ýíØŠ”j’{N ¼Ú-ÙÓ@à"r ˆõ”們ÞM‚Í3Àqß›J­/z8㳊‹i*íøÝ¹‚Ã0ÅǾ‚Ùm½[~z <³é`cÁ,Rgm…ŽA¦>‡‚6œ½é‰ÊÕ§‘e‚48Z²ëAGînäyá¹EÞ*QˆÝ|Ýîà,Ö4?ø Ίê"$#K€ù ä€8lÀéœÖÄá@lõ Hèì^~b‚_ÔM/(–®ø=!´ä¸Ú è‹Ñ–Å]Æñ­4ë÷G&­ÉTE®á“¼Ó²`D`€ëÉYLŠà8Ç’“Sã¿CU ޶\~¶qxþa Vž&ɇÞYxÞ:@çêÛ ó«g»Ež¹oê¥7'ö>¡Ór¾+8ñÍ`Ä=ÏÑë*õï¹6#a5gÓùÅâfâ'˜üVჰõÝÓͳí Ëå6eËþØÔE–^YXÛ0ý<œ‰gâæ0€%Ð K@Bwzi’À·j§ßö6Euxºˆ#{%)E&RÀ%8/§M®å&BB§%½ƒéÉï£sâׇÆvâÝîu6Á•€±ÐYɽNƒ§Ó:Îà¡Ýx€æé,Ød¤LZVôǾ׽ѵ·«¦â1‹ÑYí×ûßMÔ÷âN­SdgðÇÌî†ÍÚ;űë^$ߤsúNe'JKˈº"ú-8°ž[2EYl_/#D)/Ë\ý`>|¤¥¦A塺´[óð~Þp8 Ìg¤¨¹Ãšr‰"EQZ2c«qìÛȮ뻴üª* « ²ÀÞï¢G$%ä¬ñC¿žü;ŸGû2QµÅüàø[²bÒ;¥l%@)j]cÊiÇ#ïQ*ŸÍóÕêI~«~1G=µãNòÿ· ê*UI6¾äããÉ[r¬¬­V+ížsI4^¿æÕܹãfþù 'À.ªß"ûÏ««T:õõP·ã\ÝõÀãÍz¯Ô4m&Ÿ§Â0‰ÚEN|Úl Æ‚À·ß ÿS³…Íœ }…çm”ZÓLYÎ>&ãëŒÎ¶Žœ~ª“ƒÛÁ“Þ6FSWAþU?Qû¾Oç,JÎfO,²k„3±µ))ÄÆbÊ"Z¯ù–êjUÙ=Ó=v_-8å‚h§9ñ4?Œ,l·Ñ)?ÏÃ.JT=c¨v»ž•ÎÍw§mÂ$e)3ÔGÎæ¾¦¥Ï·Êç„ÎyN‚ÞXv‚L¼Û»-¯zN"ôöÂUEí&LFÆe¹? ¥A±´ù¹zƱidGÊ2^;#\Ún³Ü¸›VJ4:-¹‹ãþnÓ?W*®-È£Âß®i“.2›JB¬YÐáî§ISz®‰ô— L$örÐtªý_»ahG$yñÖCHéaÈõãøˬÈ÷Íkàò2a ÆÃ¯_Nl×€ ?´Ÿxà%sác}÷zi+NÿÔ+i`O°š…ÂàÝ€y<[) !úêtæ•3Y{±¤·.êº8ñzjàAjð!ÏV\µ¼¯-ªÈÚ‡×À§Â¨ïÂÆé§¦òçõŒôvØܽƒnr±Ljô4PJ:=ÿƱÃ×¾PÅ•l¦AnºÊ_¯Àp«¨k:2ÔCëÇUÌ“ëU.”?tq&IJûÝöièVÇÅ%jQ÷Â8lLÊ|h6éÔ,£˜K¿D¢5ég°¢>êâena¬ÎbƒŒÈÐpØŒª-»ýÀ3ë×ÐdKÞ›+ô/µ`˜¤u‘Ë*ß–çöŽý¬bæRŽ»ÿíæfB}ÓBk÷¼1žø:Š “•ʤJ¯¨RÔµ((«&A¹[GÕ€õ~¬ð—bÎYÝvÜž»qO<Ú†”äTu[ټȉ9›³°‹"¿Šÿ™ zB3TšráÃ0(}C2*°¢–þa ŽA§X”è.K×¢œf–æz£¡ŠËy³9o¶‰I',µ`˜ª^ö¤€Ê5ïÉœ6ì ¥‚÷Ù @—{ ÜïŽMݪ–E~ÔFÅ$´lÖÿ¢¾Q!/ jÒ°¤tm¿eÔîm•ÎÜHóš[s÷ÄLá^òpyð™Þ-ô<¼ËNÔV|]%[’˲¬Âîôí¸Ý€ˆÇf²ðÃb2°(,œFã M³Œ]#âØ.ó©NPìn?'¨_"í¢(*¿Ô˜êNËlk1:C3¤ÑÃEh:¿ÐUV,“?õÇck;p‚°Ý.—•Tw¤Cœ7‡ƒ‡ÌDXFš&\oTûõ·v±í8r½Îk˜ä¡'9*ŠTn<àUdz»öøÓúQ”¯ßiÀ£²&çÁ“ní˜%‘#óggt 3Ñ™—å"g÷MÁ}%·Û¼ ç¶Øç=:V…kŒŠ®%Û¨5úFéûÃfDþéí#)ŒNö‡Êà™%ŒÄI\ËÕâlèU·N§,AžM]9ÇYF¥cÉñ^{§Á… ) .GÅQÛ¢™"aW×?®! r3 ª»là⌓Âpš tËs‡†Òäò^–!9î ®².‡ÍºG®gØ*“©~Õ:[¥‹úõÚY`„™¯Þ[¨hè:U1ì€ùø[jñ%¿»1©Áä²òAïÌMë¹™àü _@›ÃkpÉÈK¶úáµ­ô,ÍsÊ Éîr¹A¶£;BÔß{ë¥Ñ‘Š ÿÝL”*Ÿ5_HUb]'­PÕ°2~»›ö·Áu…dé,˜ý½Eë0}6-@N‚F§#5ÓÔñúÇî2Re¨ÎàÆî~vÛÉ¡ÔWqLHšøtS¤?VrÀ÷çMm·¶U0æÓ•N…SYœ…¶Ê|ÿîÊJ[—jK'/Sþwú ½7¶w*†êç¢úí“g{‰6¯¬à…JÇ/ðLKGP Þ‚Ð[tl»ðq¹ZPèEVÔWs5D£³ìK/ôv¾3ÕûÕÌu†ýè&Ä(T†K§`#zl„ËO¶R¬ÂŽT‡€Mgo ›Qù ˆµÈR&jÆ 2þŸæ«ª)¯®ÚŸÐQÊ•¬Éjw؇áÒËí¥9Òn¦Ž–¥ ’øn#£á Ó•F0@Ë%ÝÒ_²BÎà F猶 }6I¬»ý«œhQ>l&ItË^Í5`~ï’¢«ûÆÇ¬_¹ñh÷¦@o¨¹¿—ùÞzy_ú;ß0êØ'Ð~ n¼£YŽA¶æ³®=,EJ>tŠsØîl¢(_S©`ƒ ÕÂfJ?y Dç4%äw' ²aè§9ýFbB$—å4Q)PNY×o—±ÙâÊï®#&͵?-ÌÕ®×^vÑƒÕ GÝ>ÊÀ{]”éûÅö*a‚Ü4Ë2g¨ˆZ)¬£Ã¨ÔpP´˜²l’Þ[µ’3çBį„|qc= ‘ø6´I €~³$æ¶ä…ÜŠ:·ôÍþ7c› ìeâTê~xa–i»8é9j¼†Í×$À^㨠Íß[yšé9‰,W¸œÅÔ€lrlçÄÖì ½•v‹ý¥ikŸÖ^ÖïQ0pmÈ€mi2T Ãä…°ã8½avhÙµÊúiP½Ù硺>=•š,û¶°UÆÃgÅ›åe³5¶ÃR0jÉ ‚/ºëCànL.šY«ï[KÙnìáÜ“uÍÙc^µ40ïMŒ—#rÎÅãÅK*¢òšŸøùB%2>½ól³¹Üva¹ÙÌlI³E­g)t[ó»¾m1ñ6WN f¾Þ9—Íz?œáý€$o°Mþt:a~2nB6¿3³ MA}^µ KQ6)ÞÝjCÇ×=Êq8[<’ IDATG´Òº™‘é$#Ê¢Æd×+eëz¨W:gAØMi&K0mK*](IVÛ)Jħ+¼Öv€êy'ˆo±yuv:Gè¶`R3ÿb-›EIàÜ|p¶ÍÅhsº¨@×)Q±ÇÊ fõ$–å½õX*MË+Û ¦¾t€±+bª:(Uh%ÁÛrª;/¯&æ¥!ë—V)Y÷†Ð¬ToÁgZ4:·!<¼äœN3\[8\‹tñˆY;ωß_z²’Œ­üq…W„˃§•”WPIfÒ¼å17·<¥åãó–ÓdqZÛ¨@i}lÚ­-æØyöóI¦B÷‚€1¥Á©áª¬Œª¹6²@xQzhTí£•å•5„ËöÔ=»‡í¥o@-) s8eM³øB+áeö}Vo=Qk £ÛN¢ ö²ZƒKª{5Ãüx;ÚÌÆÂOiõ[ =FGQtðv£„3ñš^›Ø+#˜”Ï´Ëïzè$~â—Eñ¿Ñ˜“¤~´ÅŽxB8€­Æ—ͰĜ‚ †b«7âð~˜ÁtšJß8+ÓV¦)‹êåÕ\nM·ƒ¶½ Q Œ°R}6Oð5ì• ´O\­LVÇnxøG§~!H]+ªRÓ4aXP‘ÜGtlŸ¦2Ù–Ä¥’ Rˆj ^æ«UmS9.Ñÿji”Èb q)4–}A…¤Ñ4NÄáÒŠ5až ïÌ‹àá °f:1W½yo7¡²›rÞ |?×ß [•ÍE¶¿µLÍÆCÜ·Uð·• ·u"ñ›¸Ó„Z ?<­ß á<9b%ÖuÔ4ÖI ŽaÓ$+tûçÃø¡|LÞ#Ò)l«5Ãó«í,0Ï{Ë÷•ŒˆrY&ßœH€íiYKÁJKV÷V¤¦)©CJ·,©¢Š¢2<älaYïщ€Ï×Ëv*RÂ!E›X&¶ .橵8Å„ÊWàQÆ·6ÒAFÂiR¿=½ †bqR(~ª2n6¤$4»Ùn»¶å Z”söC¬‘•HÊÜetšÖÚ-<…¼ Ûq¼8Q %ûjapˆ{ <%:|F^j9›™ªRÀ8“ ð‹L¼Š_lóc>üüùô`R:7@—–¥Ö‡a¹ßó§óØ€>¤ŠöÍyν7îþee›;|^ØÁ-ð¬_7þzQ§øÐ„ŽÙv¦Q´L©E"L·À|ÆQQZ‰±ÖÄúØB³í9Þû +iðóá™çñ°÷¨qˆ×1¿ØÅûCU>‰§»ˆbáɲ)5Ã&v‰¡Ͳ†e¶m•3­p>wd‡½f›31€Új¤àùЗi¤0‡“[./Ûf¾áy¥>ïÏ#}Ájyôõrȇןp1i!QR „Ã*Þo:-Oï¦_ë‡?®?JU·#>²Ûï‚Øj6#°Å¦ CŠÉÞË¿½TqÖ¯{³Í™êý¼ 1ç ~ïÊ6›ûºONEQ­¦¦†®¤Ê +RšÖ ;²U™,ÞŸ—0Iàì;Ò¹œ˜§_¬šÀγÕ5¡*]Âlìúti£.>M Â7ÂׯZ­JsšŠ9¨Bã \øâ´i9kx2±ÔV%[a·KÿA½ôE.ƒRþ0ÚšLKÀ[§»ŠQë—a}é°v3l/†È_oõa?ü|Z]Eä,Sƒþ[! ²®T\u·º¿tGt~¬ž®bÀeQ©#{´kŠ©õBÒ 71HÞ6(Nk§^2j7pöîK7A¼®«šlæâµS·‰€Ãú¬,b£s`¾§–(ÒdM{EQlÝ +©&mNK³/bÅd²¸¢+SU–„XÛ9ãv{F ÙñÉ•ÊR'½£g›šr “ÛM¼qN…ø_ÕŽ»¾mÓ*.Œ—)ºîæ°9 mj,-”£Z¨¸ÇÌ~Ž“TRÙn—ÂÝ-ؽf~½5„øã t/—ô: -I áŠ9øÑn9Iª*æZÒ÷w驯àÚÁ²dšÉÀͤAĪu?•T6 ²¼už¼]Š Ò†úìÞ6›|‰;îˆîK·Ô ¯žÄ®9Ïq§Õ«ŒIqeÕª|úqÍYPÊL|&ŠoDaUe Â43Åų™ôEÚ¸HS6CIÔv»m¬ÄWÁÌk²S¥3Ž»„I^æù¤/k‹"ŠƒtúF²¤ÌÇžÐÊg8E4å2`p Š~Ü6Nß’M4J •“üΚfµbM\3³JÆ9x ³˜Ù×›XH¢(kÀ›×oáöRjQGõ¸Æ@ÓLíþ®7ߘú=9gàé,pgÛ.(¤YšÓtžú>.|x·Šl®‰žo:9o[°¿­ªºÁ³Ÿ÷þz 9“qÝÐù¦« 6õ™ZIç \ü †AžG|0M:HÁlÖú—Uá£fbŸ!Û®*eøM³`ÿ¨V¤ â-t5%&9Ž VO¦ÉVV ¡8Õ·e¾öãÇS‰Ûx=É ¥×6¨Eõ&K€U÷Úì :_‰0Ôr™‹e 3B·@êXÀ×ÓÀþCùÁðz5Z ®|¸â¢P e—NÒ˜/\SÂéÉy&_KŸ“˜Ë9¾JÖrÙÄ®ýS·áÜ(u#o– Ü:u×î\Cøw&ó¹¡Ó¥P]z{·¬P§ÔŸ?~à1YªÁxýhӗ΂ u 4î‰U5Áˆ”ZI˜œ§þ « ¨¹Oʶä?E!jÌ`®p>Í|úù³Ôh†õÃF¨*5€=ÓïL NŸ®+8Ê@–°@&PIðkYBÿÖ75›£Ž†hfYúãš“R€ÌÌ}ßT¿Þ†üûºŽ åhT± ƒË]¢Á]®rã}·áK=çVÒq_2û׸ó²=ÎMð¼,˜xíÅ!¿5¾™wvÉj„{´*6V>î]öÓ0 ¸ÅUüzK•6²9˜å £-æ Œg©q!£Ð:¡ÑaÂ3¦p‹‰dEM¬¢ðÕ:8rÚòiY“¯Oð†”©l®ðMp>ú=GÅiùOà¸O@ôiÖW! ‰b`´Q–þÓÖ}5˜è<'Ɉ«- xÂ"O³:ãþ´±O"Ê*×’QHùAÓ*ß8†âRÓ´0Ñ„&ÿØ©{+NÏÔ}msŸÿ{ƽí]tÛôcóáýîÿ°Ï…aþa™ÈŽlI*€žê’Rãfo”N=›E¸°60ÑšÂñÆ-±><ßV@è¬*zI—tpÝA¾ú‰,†„¢ª!(øþŸ7OS¬$€Ñf$)Ѧ~¡Ú9)J˜/ižàz7(™0pMæ7P¦Ö}j5ûê·’Îúw‚à5ýI¼ÆYóÌ»å¸/àíÿ‹ûQCèoq¿bÎõˆïßE¤]jê»>°‚‚Øþ6Ï×FÚ ò·¦,`P6†ˆü"…H’AêM ‘ F2û§Sàšþû|m˜,Á»x|‹Œõ kÿ{サÐó{£@l¦/›ÛRÞóË…ÓÂøó”u›3Ù/ñˆø/ïÞ(d„3ñµS¢ø§­¹Ð~Õ$ =ºÎˆ¥.|)²C3šîwX¨˜Ž¿Øe”K¢ÿ¯× X’eÿ÷¦>€È^ŽãrÜâ—% åq¹6Ìaþü(‡ÃævÀÿ‡ÿú^îÿïø”á"#\JU™ ’¾S:G¶ 4@îCÄ -½¢$+Ïq˜ìkŒ~Šàøï£³ónßÿÿ‹íÿuèXpï $¦ÚýLUÕ H,î.Çz¥£Øn Èä"à(¶…áײþkè<‡/ߟ¿íøqéž÷½;Œ›ý·ãé?< ¡Søÿì•ñÿj:I…á>ZéÄ|ž¢+vGâêqøý„\†¨ŒŽìZª ÜÖô>:‹ýOÇ?ÿ¯_ß¿ÿz~>.v<ÿëׯç݉ÿOF¸í¬ðüîÛbÿ«—N-z^ÜÃfýïZeâÿ'è014AFåtâ•êØ“.Iz(©˜bpGàIn`R„Iˆ OªzÎŽ¿}ÛíÞNüÇãÌ íýóékÓAxžŸ'>~üþýq‡ûöüë+ù¾$‡=îe†9íÓ¿³>žßwC¼6È-ÄT÷ß;dÜêa@0îA`r”N ëa¨W•DQÈYuJÊ ×c±N¯‚&žÜ ¿®Þ¡Ãìé],dí ÷6“ŽßOž»‰6+¸ãóãã—¦óë× K`¼‡KZØP/þ-8ß÷.­ÁZ,Ð_¡s„êÁrÖG1Úá°%pO.â›ôoh×£3­ºÃ:ðb¿ñÓdøõ:ØO vC'¸y‹Ö! ¾$Ix55Ãnh†ð;LÇâ8Ð '¦PoÑÁ¾fÞzªöññØ6þñqÁŸÏF¨w›çÇãó¦óýx„ë[ãÊéøxZcÃã¿»Vx—çïÇ·Û ›õ鄽ª‡Îš£qÅ çBµ ý÷ð» €Ñþ+sÅÖ;Dèä|ƒÞãî³RÖ÷Áu1€‚ZHØ$ˆ!ÇàPº¥S> Ïɦ kà m O‘¨B-¨7è,v^|p‡á¼ÛáOk——ì}:­{ ~cŒgï ÛHóëø 3~3 {°™…·&6çØûwŽâ;Ì„ø|h8gók;©\ÊÅqÅp¶ÃEñøópIM2e”þʹNhÂõ*œNÿê„qi'­Fîcí÷ï÷ãŽ÷+`q§8)ä8l]°¹Zî¦bżÖq7T0&NÝNµ6ÄÞt\Rw½9¯½·>‡M?ˆ¥·éðÒ¥ÙNjǯÂÎ÷ʼn Û~^|Ú ‚]žüî4ÿâr=/p‹åºi6p*…Ž= {Ç€ÓzÛ ýa»íºµõ¬ …¿òP¸ï)¢³[\þÅÙž¦ýð¶ÛåÙ{þþ|ü´èÞÓÀBXPÒàË0âÛ8ü@ʺE«í 5‹ð¨`Xü:Dîû™Ÿ½ólwøÍöB%:·ÝŸ‰e‘/Fܼ¦ºW‘~÷ü%g‹‡1²ô¨Y€ƒØvÊpXŸvpÞÿžÝÎ*ÐñÜóß°.B,´ÑÁ"4á KZKÑmdaóø7à@й¡óý_™‡åaé-žŸŸùçû®MõL°3 '¬*À†²ì©;€G°­YÁñÐÙ;$)šzK.ûsÃäf™ ƒ`tŽ÷׈þøµkƒ9ÔH™ßþ:ò§¾®ûv·<ÏKþï·[Œz×ôîÚ]üÅÀ ~šÐ²(BÐ- c¹ªS»»ýF?‘´¯8sb'ûƒ;@Cø]¯Ñiwú{xS¾ßÛdD.‡ýâ´¸N†à`eEÛ©k}š0ëpBO‡cp}¸-¢Ž…Ydr“À~Þq6ˆé›–ãV2Õ¶†s1­\iŠÐd«£^ò \ÍvÇz%Žçmõ@Ö/в )ªÝ.ÊGˆ·‹£óW¡8øÿã™jˆë§Çç©¡bMth3mœÁUÂzÜy'½gN窑Ñ@-¢*ûSº¸ûõõø"´ß“¯X*óN0b5G:ýÁ{\Ü}­Ï€â™Ô¦á^Ç´…UTÞ° Ð±Š„¥q;'twŽ€yÞÉØ9I*Å,¬£¦³4¹,i w Ô}SI1ìwmg·†yóýøwl“±ê3é„êN<'€ôŸÙ×ìì÷±^,Uº@y|1’R¡cG·Újnjr¦Ž°°EøèíwgRšŠII•åÑØ·ºÊôÂ~ýåG¿Cç—ð—ðð¿ç½\M‘­ux~¼ -Þ²,I@É.iµIé˜HCm~ÎÂÛ…á*,~a•¶Â ê;ÛÁE/N¨feiÒ6î¸-k9ˤ¸§#6X`Ï÷=0ÄÄ_Ç_^£3´JæJ.iKÙŽÜ>cD{ó^"öN`eÄzÏ/*Õêåz·{þu¼KƒâB"62†˜h¬Žôƒ@Šª®ˆÝh§Giƒ+ןÍ,5`FÅPÈPЉÃðÀùÅ‚€ž-àʼn(ïõÚÅ^À e(_UÖwÑÁ€®Êg|J×£aÚSšúj@yâ’KW§ÛÑ"°̸á.øïmNs'TiŠõqÌ;˜š¦á61²ŒÅd-‘Úq÷ü|¼ãØÖàÏ‹GÞiu“¦Øö²J¾ \.Û%îżÿ£x_ãÍiN»Ø“!À+úeaœùçãâùøë×gŽë%çô]ñøð ë »¹ ãHœÜXØz‡Ãe0È imËÏÚ^¸tЕÍðUàã^¯DÇÇ/x×}tÑÚöã>жpßv&{Pý$x&é*¤Ö˜g«ÁŠÐH°{-¸?58U‘}ˆ; þÑ“Ì@”Mì/ɱ/%§ñ–IåJ–Í*j‚ü=Çöxp»ã³7J¸ó«v½jrÎúåBD øÝþ|øƒsÃ;g¬×Û®¹,/ §W¹H‡FÏïÁÙÝ-|„äþaØßš¨S–Ãa¹\n6›1V”Ðq—Às¥ÃYÀ¯›åE¥Ÿö_}þLnígƒÐ÷ü÷‚‚*±CY¼®T˜éºr¼‹ZNÆd¸/¿jq6‚ ¨0g!HÕ$l|YºbÜò×àaÁ÷™wèOÇ8ÍÉ&´fbMB§¸.þtøÀBî Ÿ~ Ká%24+¹¼^W¥(E©B¥¿¸‹õ~svþ¿IY­aR–°A¹ouËÌñŽk;§ ² k=¼'!C;n¶çÃåÒ]t;6Ëõ0[û¼uûøÜÈ$5ƒê7bxÜyˆÎ ÀYü=:¸Ñ`§xOŒ³YßG'C5Ê`‘<¡jN×+ªÒáéÀ›±˜àã„:ò ˜0ÅͲU}‡Žƒ‹Qo– ÌMÇ<xFä2sÏÃ%ï sü~¼Ëe_g¬ÈâªÄ½ž |¿®‚‚t÷˜cü#ày¾…8)a_X  Óüi凶 ØŸ¾aR?ñ}•Heù-ŽD݇Kï4Ψ«î):CTÆaï}Û8£ S-·›þÝgŸß„ÿÅYpÝóãûÜëŸ2QÏ~šµ>ƒ:¶.N·ôx\fêÃWQF‰ ‹jóÈ{v¢r~¿^oHRh :Ï–ŽòŽ!.0ÆÀ±øµ,«u îìpÓÙ:@ë!ß¼“ÇÿɱtŒ:èsÆón·ûô‰QO=N’amCþtÇ„¬ø€Äñ±ë{°æ*=šRúðÞ‚}w#Ò+Få8V•àâÁr«\˜ÿÀÀîIÑïüú0|:Gi×UùÊO¢'°$ãÀOÞã·ÅÌtñÜ‹)Ù h¢hâ=¬Ê2ÃÎj5Ó{ÛY:ðXe»ˆÞmdÝÆžèfÙ¨L¡Òi<œ}‘¥|ÜÔ¨ÁÖø~ã´vÿÊãiÃìçye)½ÒvÛónCìN‡u Ôø—7àrä¯Ý\ïvLÈ‘5_6 $»V¶üvƒK/>Æ4œ©»{!1ÞO` WðUl¥À”1©R1±·SÚ`CïÑyöx vlA5M‡»Kd©™L³]ºû5n s_ã¯]§×3ßS“Á™]§ö?qú ¾<ÑÛ†øãî¶;\r´Žã¾…˜g®DVtà "A\Ÿ¹Çãû9±Qê¶3¶[Cl†Ám êBœel}–õé~³¹°yq‘zG0úC*jÑÕõkàó°… ÔØó/ÌŠ·hN0ꨳÎÙÄ&þ –˜¾„ç1 [‹£’iØMVË(½qúýîøñ“ôÆ–Y@U&šÌ”F›«Ø…,½˜ÌªÀûíšå§ ÿγ=?ž<ÁGokë· 2¢|6÷õntq›õÝî C‡¸C†iZŽ’­™ëx`€£)UÝf·Ã­×î¼»·Ghk‹ƒrHG­ïËðò”kG7M~ÿ² v² ËeW;l·}¯2áp9+—SõþaynÓœ#¶Ü\~¨l2aì7|ú„Û<ò§i=î&ö®‹¨ºÃÔ0yþ]0ÌnL´Í´²í o '±m$˜ £Áõb{s¥ãéS*™ <(G‘SS¸g91%0¡qˆÂå9*6ÿâ­¢LÜE>}øXO:=âN„‡ŒüšØ8$§óñ~ªò<~•–üõ¼ k)Ðh½­U´›«&®Ð«­& ’±ÖÓ¦Ç{¹Ä8v/Ø}x½š {ÕuDCôp-VòŽàÛÞ[ìy\z\•;c›ÑpÆýÙqÑŽ §¦É^Æó’¡YÅÙC?$uPòå»lïyïâ¾­‹µ;€Ãv»†ó-»íªBo„­ÐB3¶Ù:6ƒ¸þBÁAË)æœ 2ë¢È¦Ì3‘ktmý #ÈúÇÝ‚'»êÝaÛ“¶®ŽÞùôø¼ûþý‹¼ä÷Çã@Y…¦™I–‹“/“å)ê€g›OýJ[oÚ=üŸÖ®lú0ÁàD -¹Á³"D6¿ÊÖž?}¢Õ'[ÃÎ’oË͸mZZ.·®£ŒHçì<¸€Î;Ô­¸F4ôo»HùxÝmð~ÄÁh¹–¯,H>£wJåSа:²– J?œí2ö¼û¼mËVjùò_E0Ú‚G÷ã%&OFG2 ˜-GØÀÔ‚&4Q„ ·$ PlwÐéyÞÅ%ÄBEkô¥!ë*ËWÕRØ<uú~ßÈ{Ì£ú¥(ËèËðl5ê§é†3JW±âÓ´ÃF°_{ëýúÜg²(®Ä´°ê±àj5ÍåÕ3 Þÿù×§>¨óa#l.ŒÁÛÙ’Y>éûƒÃÁ«4a&i9—RÚ»ˆQI¥+Þ”RùÃÖVâx¸`W#¶d£ôÊf]Xø–Ñ_HogcjyFއs|Z|a;çóh%ÚÓ,àoÎøj½6Ѥ'L÷ŽM§¥7 ü—ŒçMòd34È«“€žn ¯ûØ“ãvÝqçÕ~*‹¡Ó…éêéj./Ããî‹Êß·goqr]IB®†÷å˜À1e ÌÆ¼ù54"«swý)‡º›î1 :6X¤Öv¹³k²é»pÚÈÃL”ÿþ«¿› nÓ4»xçFö]½ž‹«\¸8º)úíVáïÀ0*.¨øMÞ‹scGN$Õv²AŠì¶HðQ™ª“d˜ Hj8ÊR«{÷ôøEÜÙ,•Œ6™§iŠ)ãWÛÍæc±ùñ$è'|hlj›Ñ)æ–>¦h‚žÐÁŸ;¦¾wÎÙ¡’@“¯¹8‰–U?n¼Íú tðnY®£Kâ ‰Æ3-)[{*Yqvkø`¢J=?ºT“ïË‘m6CÚ¤e8åÜoΛÝÝÜ•PTg—‹•Q©xǃ£‚Ͳd¤ÓåŠÎ‚4sÃPF¿}“XœúBªS–Å øX´É(m‘°Œ¥Ø,LªõÓ”îзn|¼Ïa3*j’Üš¯|µ’Ó¤X~N÷úÓ*'˜Â ©'xÐl²) ‡©žÙtTÝó:ßûØé‚\{U-áò|:÷O×aØHR2;±Ù]åËØ¨¦*¢Ý?!^eúÑÖóyMÍŽ÷„Æ(rpmZ©ù¸×‘že´ˆ¯’Óª?÷Kb¹Xd¦ÆR-\—yý±ò©4/E­ó¼Ä½`,´R4³a÷Ö1žN'C×é úۉϤPg Řî7VÞÜ3 “+gþ‹BÆ0Œå'"zï§ÛûÐÖH|°Uá'.Ã=þ˜/˜M&Þ¶Œ¹¥&t¦çÝé6üÅ»Dâí]_;%ÄæîÚá°îÀU’6-pzšá•åÅèºZ~ÁNœNŠ>^ßAÑŒ&¤R`%na@…‹Œ·eÃí9~|¾›ÒÔJ½': ®?^Á` i+×V¢l‚cHqV§Dü&ýÕó§“W‡NxÒc8 ÄD ¢HŠÝ7'Ë¿9hÀºÛñûÇçû…?‰K`L¢a5 ¼Un@ò>À‚xLƒÙrž³S­`rqQÈ^üæzBÔÑt¾ÇÃ2Ó¦L &ÌÊ•¬JÝïîtÏžpmDzürV6<𾣦|zšn2®©$÷ñú^[ÅiÓ8œÎ…ôµÔ4Q+ÂÀ±jaVѰ_ßÍ…â]D¢0ÐL-`|?XtÊœ–XY„AHÔ‚ÆÝ<”ý÷õ›0U0ìH¡\^_8 |Õ‘¶OÃ; -L¶ƒk!ˆ±Ý]Ö¶¸JvHk‰T–b™F.ÿI"ÕRÆN9ŸÖÕM!…z0±êl"Ö·¨3I¢‰Þ’}×v¼¡ÓµÛù•+pKÙ6›‘¸Så÷1Ÿ&‘ ¤Iœ•'Ú‰FoìºïÒÃIDAT——¾ß,U»!†£ÆøáÅ÷ºÐ½V¹\ÛTp…x_W&Á=¾MÔêì÷›Ýãݶ€Å–«¬rÀu‚Õ®´”K]z£—jÀ4ØÝ¾˦=žß v¾ÂÁ\Í'÷„¾‰HÛœ/’¯3B¥nì÷wUÞpqÛðfœ|ðÜÄÌ«æ„{K|hLÉzºŸ<™fp+µwC5Z¼$ª_8Rê Çdègt?…'91E˜VR£çå]ׯ{'+át‰Ö~ƒ#Êjhl‡øÄAy3'¼ý°§åŽ?ß+”qit-8eNBÁ»ÉxúºMxÄ0|AjùÚÇE¸ZZD7pÕ´–sÄ&„ëËŠ,€‘ »ïü[Ãp\Ç©§dL½ÛeâžExkærJ N!gŠ?²FÕÍþ«Ê”éº/ã…Ë2xs¶j¹%?mmòî>;·¸O÷Ã2Û\¨öUŠ*æäÁ :sàa'Wø™³9qÕ¡|]’^ú h.MõËx¿»«Ew;#ŒjF©³šD¸$–)ì=îÇ•/4#H$=(ô;^üø½‰½ anMÄÝŒp‰¬ìƒkÖ;'†ýñ‹Æi;T-EêiÒ„M†“ëX*ˆr$ ]¹˜ë|ƒèéÔuN†UùúÂ(á¼S6k©)Ãñ*¯¸oba ç» Ç{ÆjÛP¢@~ãFÞS ÷C{äß…ÉtºÅ:ŠÁ™TO:/ÂÏpï,ÌÌùƒ)òÌ ˜Ù©ZúÇïkb©´Úu¹m¢7G0“”f'þ.:ý÷Å9Œl¼ûÚl;XDMÔïÕÂÉm.bðá¼*eƒ›>~îU\ŽîéŠx#cp9SP+Ò íšózí}Q·óˆPlp‰Î`ë¨#À5×-Šª,]ÊÌRô!ª?¿SK»ÓÔ” †!j¡œ­E˜[nÓéé…³uã2ö÷R—KOF¾,¾Ä.ðYGð˜Æß½{Åo¦€LW†l³;¨°0—s“ðv|@çÈŸ¤®¹ŒËöˆÒƒó™S,I’ì-Á?ßéÝ|®Z܈=Ðñàe®ú’õÞ‰'[¯n©‚›£¸VÛåéÈïî°cçø¼8[—’³j»šæùxZžÿÔ¿Ôrv«XFækîO„}VU$ÀÌMµá#G„S»¨*ƒ¹¤½h|)â´LRT˜4¡Y½•¬cL,ciìï®{ðÖËL–ßÔ‘¬š’²]óüéÝŒš,gNk³Ѹâ+Ó³Æa&«ÁîÜ œ)âL™œy¶Å‰¿,û¾.»“·—¡Qlà¬ñÎZ6¼Egp*pF Da)SgÙýã³K[d¼:¶ùyÙ®»»Ò{±Ûy{×í°SLœ«,n3 îyñç.l¥#;G¢Ñù‹io´v„µ„œªdT¶+Y8¹ŸÓÛnod´ž)"_ñõH±ÃP¨).ð°”d:³”hØÞal`Ï{/îRô„ÓÜC‰'§Îjœóâ™cÎm[‘[á&ñqAªRv.üÌÉi‚M}½“wûw„w8oíÈ&—ËQhmN/2•/ eÆbqj>ÃãB†:]…z&aÛÜúñÄQukçåêú;ð\¯ÛK?ìŽ÷Ç{½ó\âà>›Q!¥×Ë­3žîÖŒ¾éI\¯,Š&LÌIb˜Ë51ݯÏÛdœcׂëlÓÇ­gÀÿ3•­\Zr$³$¥$+B2Ö,Èíöp¾×úèç˜ÔfÓ™®oºR ^“¥Û|ÿþž9æÐé '@xftÐ~¦¼AÂNèÌ„œ{ÓÎ]¯Ï[.Â6RK²ÂªJXUþ)ä¥iÅ;´6Þãf¤ÝuEš†ÿ¸àã1’8Ð"HÀfçAo/Nïw_´ó-6Äœðk½æÈƶ›óâñ¶Ãã 4ÎU ãÜÍ“4‡†ºýÇOܦ1—p]ͽjáµ ;¡¡Ö„G1a»=,·ƒ`KEȵUnÊ¥ÈZÍ@î Qþys9œ}¤Ñ/¶ÛO(£(¥ß¿KèÏtÖ¦õ£ˆÉYænvÆ(a_þ!ã¦?r¶c³t!ãÚE”I’Nj…¾–kffÕ\ýélx§©ÃÖé7dÍqÂîÿ´w¥MŠjItmA@dy,êÓB½üÿ¿j2/XmÙeÕDÌÌ·1º#ºk³¸y3óäv2Eoîẋí~;›ÍHaФy.m™Ûåw_ø‚ã*ª¥Í ¶M./¼‰“‘ÿ½t~Õ”çÕÙÜt5)¡E{›õÄ9Ó³[Â×7v± äɾ ƒkÎéq’8:æ5Û¦½ŽÖóÃ%ðøE<ˆy¾_¼ã hó”\ä?j,¢£ï!AŸ¤9¾ÏÑ¡ï1$ã;ƒx&=­Iï{žzAu Gl¯ñº( ESÌŒ·iær‘Õh”pÊ Çób¡¾9 ‰•‚“b6yŒÀ|“Ž68°÷·÷«Wj9Eá¨Ë´ y«¢«zœ@´3ÛûqM#߃ä>‹¸HÞb)c¥Àdl–$™¯é쾘ҽÝ, Ð`jæž^s5vÂEu™+ÅŽö"›†N‹Çu¾´?.pŽ½Ã¹G$ñ³Þò|–{ùc8ºí_£!OM<>fr@:}-Ž ™å!Ù¶?¤ã`¶9t8¥¸@,Ç€¿93¥ÒWƒYdmü|—q¾ÔEJäÄ)=`iÇ{8#iÁ)º€!L}óÚ\Q¢}ÖŽP#בî5¼|>n“3¯f¸È:Ò…î[é4±K5ÑuŒ ,,uÃ{áv,l&Å„Ý&–¤âYX ŽÝûR¤ÑüNÞ™™ªhÁø˜ŠR´Ž€Ü5_«­/¸®.3‡Õúýý+Ó†oÿ(WS«íö“tF¤8J ž˜@¥!¯}_F?Hˆdßö}Ï£tÞ¨ªê€ß¬O‡ÍÛþÖˆðŽÇÞZÀÏ–¹ø9鳉D¶ù¤¬K®à;ޤœG$½À¤Íú|:=«Å–±sP²HÖŠ1×Èê µœÎ9·³’ïÄ#¤BØè¿‡`È 9CÆBp«ÓþØÀex5e·HC)•¸|'//rgç =>ÈR´ʼnëÝ×o™¦B¡2£Õü®4ðŒk’‚g¢FkQýˆÂ·Ä|a/ÇèÞ‹°v@ªÖcRð!ò¹gBQ–¿¥ƒM^Nmg*³_¯á³‡Ñ'íAÌÄnÌV+C©â/,MŠÒ°Q€§eYA ËÕïtÕô®ýý(j-—.Û•ý˜¿„@MZÄ“âºG‡KÑ.rQ¬)G§b\ uï‹ý"Oí¸¾éÜa hàoâl¦$e¼Þ®çpÇäL§ªWÍ‚7 îTmŠÁì‚òZÍPw‡ÌÉMS³IúµQMR0‰´ÁŒæóéÐQ€Wp~o±ÌD«¤>OˆLÏüKÿßñ08´{`(Jt‡¤tŸ-®CqšŒÈ›Ö§Õqtš&FäZ=1²YÚ»åíö|§B <¸e¥d'€+éÆôwŒsG±x½Z–EêŤA—Ä£aé4Æ]x€Î[-¢¨Ð©¤Ø‰©ª=ø’ªÑÀ;„éWJÖEIW„jp“ÿÆ[<ÇfÒ5‰·÷f¡Tú«vÁÄCLÕµn«Œ]5Å5س²õ8½ŠÃÐÙHÁ&·…Ò×}ß}„Ýô<·Ll´}š®šr¥ûµç^ßé[?j£¨CC*ô!¸¬õé!#Lù|ÍÀOÀ€^³³Ëè¦-Žxž²‘!IbÏr@xç÷{nñSRñ}6^^h'}1î°\Á)M v4ë†d›w\å•„«àžÔ^éå¹ç`aÜqàãø«q…Qku4›b›Æj{l~U‘¼ïÜæóª·JÜHµùnsÅáw†!_ixim³pÙºîëªRZ;½ê%ó¾ü†=.¤k<ã$ûóüqýû^÷1AÓû»l†\Ûx(h/IÃáõ›/ À‹±Áü4¶÷÷¿þ9]ã½:m÷ŒQ”eM½ï°n‰åÚõÂà–.3€4 ï Qó äÃÿ‰ÛÅM̱5àFXÓÕv»á {«¦™õù¡"Mú¦FdN‡ ‚ i^¤d¿éÛ܈…#÷ß] aÚᶸÂ\£_¯™¡Øy´j–].€¡*\Ða+4Ò&¼š/LIˆŠÕÛ‡T†*ð…ó¶ñšpjì4ƒæÚòòp”éÒ³íÂÎKnG#TÚR 4×´Ðêy™™fá…V×öY:Úñ̘Æz(¸žíÌØ·ÕÈÌ5êe‚ÛN7+‰ì²´¥Ô )ðž×Öº®‡aíq`Ù:û¿ÁýŠÛœ>î—*o¬°,µž ;˜¿Žêè˜q5ýм'ù3Ìn’·´aýH&x†AÒ6¢2} ȸwLÒaÓ6 Î{Õ¨>Gí-# °Áz;9ªH°ˆª¸-n¯"ÄDrâØÓö3<ª6àÛ)is›­Ám®OûÖï†B“ i\"<Ù˜EàÊF…;,ƺɌ_àRÁÃlPÞ2f“?è¢F^îD, ÍgÆoýu¦'¤^_èèªÅ¢K –(¯lË™ÂwF–]é‚4ó[É+fœI:¿)‹@•wW·ÎÆg٘ϓ3\ª¼a?ö‚.!¦'k6¢ƒ÷!ô¨ýÄ"RIÈZt&Э¯!ì$$}°lIÇhKDÉü Gé.ª×'¸G93 ž—†¾½œ¬ô«NPoKÛÆšñé ®Ùúí„c‚†g“<é†BD"¤a,„¢¶›ÀM?AÎçòú µM^UM0^âlر·ãåùâIiü‡tj®9š2:mqÄuœÏÞW[´q >'lýV:Ì›LSáÃd™¹3ÞNüdñJu‹€ª9bWž¿0&­4n‰°½(Fàúiº ý ºy’þÜÁ ‘ød5„ð’9âŸÉ'ÝáàG²>¥Sa膄͚&z¶èºq¶Äùàk™kbY˜Eq{9ÑÏêœú|¥FºêL1Ç—Ëó~¿Aý]϶- ‡Á²á6VAmþ|XOÔ¬ðpŽ"oOŒ6¯,´«äK”À’ªÂç·æ8¿(\c0cø²óet%¼Ñt>:òß‘(-C®“l[És[5¤Fr:o%Ѝéâ•T‰Ö¥NÄquMµApÃ[VaÙT¡Øèd´á1ÊkF‹Ô:{@Ui„^ ªãù²#ÂÁ«>EMj£‡OÒÁµy.¸œÎb­EW¸Þp”»¸-êÝUóZ.„³t™¾¬—†º+šiKšˆÈQ1Vð¼Qø9\w÷¶àß${5¯Ê†¨ÙMß'ÖQ±Ã…~R-jW¤úQeùjª×e ²úªí0^ x3ÖC—qÍTœ3›7“‘ZSßD²Èìãc Å!×Ñ£¦qB«%!Ž¡°Ý ÁúV×Y¾«G:’Ìk<ŠŠCIÀYŠºvqîSׇÇN"É: l†ªŠjKÄs>bÕpÒ#;$ýã×GðẀ#-@¼IŠ\¯‘^Q -K Ä0•"ÉÅ…„)ಗӹÈF;TE‘ð¢/0†à…óêºál;¢\Ü÷»/NJ¬8¦Ä\ %x<Ö¥àËÜîÖÁEIýNн¼ µÂÜ5‘qW:þW†*-ì$ÆCfÊ¡Ínt˜Œ—9Uý@Õ-,¿_ªÏâØ6…Ãß±+€3‚~e"¤ÿaó%„)ðW×á:yø A¾Þgél6=B‘¸>ÏÖs„ž— ˆGUe"å0ý;é‡å~[6k?Féßn>xÐw/"ACk¥%åf»}GTÂÁÁƒxªº,lw¥d[®0ÆbYjЬߣ{iw[¤T«Ù>H'ôS$4OÀ¨û¬‹èǘYÒ F½÷‚¸þ—i™*7Ð-p›#s'_xÏØÎëÿH€@:!ŒDÛ¡~%‹™‰ê(ý&7Žé€ ò†¹½%¯‘«„%Ì@Ÿû¨û6¨>-MúzÍ!ÃUˆ •‡çÍ=*"ÑG?/ëÏþ œÝõ"wjb‘IRÌ餿|d˵OÖYâ3ÇÑÙE±%·ÏÙ<ÚðD*ÓÄÕC ¨©]6ñ‘»EÀ±ÎÔ-’âÐ+ж3+|3«„~üóÖ–y&Ëy Ü Ÿè'fE~x§¾uÓ¦Hí–J®KýÀü >“ ¼S—‚Ÿ Òöù«{žˆ'ªsøx&¤,Šc¼H0ià`¢<¯LpT穟íGž‹ÛtQ òl&.«- ï— Î>2±CTPPžÇ6p¢­˜0“š Q06VbY„´#d–`ÌA¤”âG6=©ÉŒ#XâØ~z˜_¨8¸óðS›2XI?ù*'ù³%y©lý°;J„ìíè±ô˜pz ªC¨YP8gBS°'s×Jç?~¡Æ_»+†–ÿäÉ7Aóx@wŒQj +›œ¨(¢L:¢²±„w»ß»õ3ec—õ¿ÿÛbºð¡ðÔxàûìóLÆÃDüaXùÏ~@LJÏ¥»&óñˆïˆ'‡ÿs¹ÿÏ_$¹yM†"™b´3C,ÎÂ÷×Gø 2¨í_ÇNi–¢ê’IEND®B`‚eboard-1.1.1.orig/NAG.en.txt0000644000175000017500000001213410757567572015050 0ustar patrikpatriknull annotation good move (traditional "!") poor move (traditional "?") very good move (traditional "!!") very poor move (traditional "??") speculative move (traditional "!?") questionable move (traditional "?!") forced move (all others lose quickly) singular move (no reasonable alternatives) worst move drawish position equal chances, quiet position equal chances, active position unclear position White has a slight advantage Black has a slight advantage White has a moderate advantage Black has a moderate advantage White has a decisive advantage Black has a decisive advantage White has a crushing advantage (Black should resign) Black has a crushing advantage (White should resign) White is in zugzwang Black is in zugzwang White has a slight space advantage Black has a slight space advantage White has a moderate space advantage Black has a moderate space advantage White has a decisive space advantage Black has a decisive space advantage White has a slight time (development) advantage Black has a slight time (development) advantage White has a moderate time (development) advantage Black has a moderate time (development) advantage White has a decisive time (development) advantage Black has a decisive time (development) advantage White has the initiative Black has the initiative White has a lasting initiative Black has a lasting initiative White has the attack Black has the attack White has insufficient compensation for material deficit Black has insufficient compensation for material deficit White has sufficient compensation for material deficit Black has sufficient compensation for material deficit White has more than adequate compensation for material deficit Black has more than adequate compensation for material deficit White has a slight center control advantage Black has a slight center control advantage White has a moderate center control advantage Black has a moderate center control advantage White has a decisive center control advantage Black has a decisive center control advantage White has a slight kingside control advantage Black has a slight kingside control advantage White has a moderate kingside control advantage Black has a moderate kingside control advantage White has a decisive kingside control advantage Black has a decisive kingside control advantage White has a slight queenside control advantage Black has a slight queenside control advantage White has a moderate queenside control advantage Black has a moderate queenside control advantage White has a decisive queenside control advantage Black has a decisive queenside control advantage White has a vulnerable first rank Black has a vulnerable first rank White has a well protected first rank Black has a well protected first rank White has a poorly protected king Black has a poorly protected king White has a well protected king Black has a well protected king White has a poorly placed king Black has a poorly placed king White has a well placed king Black has a well placed king White has a very weak pawn structure Black has a very weak pawn structure White has a moderately weak pawn structure Black has a moderately weak pawn structure White has a moderately strong pawn structure Black has a moderately strong pawn structure White has a very strong pawn structure Black has a very strong pawn structure White has poor knight placement Black has poor knight placement White has good knight placement Black has good knight placement White has poor bishop placement Black has poor bishop placement White has good bishop placement Black has good bishop placement White has poor rook placement Black has poor rook placement White has good rook placement Black has good rook placement White has poor queen placement Black has poor queen placement White has good queen placement Black has good queen placement White has poor piece coordination Black has poor piece coordination White has good piece coordination Black has good piece coordination White has played the opening very poorly Black has played the opening very poorly White has played the opening poorly Black has played the opening poorly White has played the opening well Black has played the opening well White has played the opening very well Black has played the opening very well White has played the middlegame very poorly Black has played the middlegame very poorly White has played the middlegame poorly Black has played the middlegame poorly White has played the middlegame well Black has played the middlegame well White has played the middlegame very well Black has played the middlegame very well White has played the ending very poorly Black has played the ending very poorly White has played the ending poorly Black has played the ending poorly White has played the ending well Black has played the ending well White has played the ending very well Black has played the ending very well White has slight counterplay Black has slight counterplay White has moderate counterplay Black has moderate counterplay White has decisive counterplay Black has decisive counterplay White has moderate time control pressure Black has moderate time control pressure White has severe time control pressure Black has severe time control pressure eboard-1.1.1.orig/eboard-addtheme.10000644000175000017500000000324210757567572016370 0ustar patrikpatrik.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection .\" other parms are allowed: see man(7), man(1) .\" .\" This template provided by Tom Christiansen . .\" .TH EBOARD-ADDTHEME 1 .SH NAME eboard-addtheme \- a program to easily install new eboard board and sound themes. .SH SYNOPSIS .B eboard-addtheme \fIP graphics-file description\fR .B eboard-addtheme \fIS sound-file\fR .SH "DESCRIPTION" This manual page briefly documents the .B eboard-addtheme command. This manual page was contributed by the developers of the Debian GNU/Linux distribution. eboard-addtheme installs the given theme for eboard. If it has sufficient permissions, it will install the theme in the system themes directory; otherwise, it will install it in \fI~/.eboard\fR. eboard-addtheme's behavior depends on its first argument. If this argument is \fIP\fR, a graphics file in the proper format should be provided as the second argument, and the third argument should be a description of the theme. The graphics file will be installed as a new piece/board set. If, on the other hand, this argument is \fIS\fR, a sound file should be provided as the second argument; it will be installed as a new sound theme. eboard must be restarted after a new theme has been added to notice the addition. Graphics become available in the \fBSettings | Bitmapped Piece Sets\fR submenus, sound files become available in the Sound Event configuration dialog boxes. .SH AUTHOR This manual page was written by Daniel Burrows (for the Debian GNU/Linux system) and by Felipe Bergo . .SH "SEE ALSO" \fBeboard\fR(6), \fBeboard-config\fR(1) eboard-1.1.1.orig/promote.cc0000644000175000017500000001111110757567572015267 0ustar patrikpatrik/* $Id: promote.cc,v 1.8 2003/06/30 16:55:42 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2003 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "promote.h" #include "eboard.h" #include "q18.xpm" #include "r18.xpm" #include "b18.xpm" #include "n18.xpm" #include "k18.xpm" UglyHack::UglyHack(PromotionPicker *a,int b) { picker=a; index=b; } PromotionPicker::PromotionPicker(GdkWindow *window) { GtkWidget *l,*pm; GdkPixmap *d; GdkBitmap *b; GtkStyle *style,*dstyle; GtkWidget *h; GdkColor red,red2; int i; widget=gtk_frame_new(0); gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_OUT); h=gtk_hbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),h); l=gtk_label_new(_("Promotion Piece ")); gtk_box_pack_start(GTK_BOX(h),l,FALSE,TRUE,0); gshow(l); style=gtk_widget_get_style(h); // 0 button button[0]=gtk_toggle_button_new(); d = gdk_pixmap_create_from_xpm_d (window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) q18_xpm); pm=gtk_pixmap_new(d,b); gtk_container_add(GTK_CONTAINER(button[0]),pm); gshow(pm); // 1 button button[1]=gtk_toggle_button_new(); d = gdk_pixmap_create_from_xpm_d (window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) r18_xpm); pm=gtk_pixmap_new(d,b); gtk_container_add(GTK_CONTAINER(button[1]),pm); gshow(pm); // 2 button button[2]=gtk_toggle_button_new(); d = gdk_pixmap_create_from_xpm_d (window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) b18_xpm); pm=gtk_pixmap_new(d,b); gtk_container_add(GTK_CONTAINER(button[2]),pm); gshow(pm); // 3 button button[3]=gtk_toggle_button_new(); d = gdk_pixmap_create_from_xpm_d (window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) n18_xpm); pm=gtk_pixmap_new(d,b); gtk_container_add(GTK_CONTAINER(button[3]),pm); gshow(pm); // 4 button button[4]=gtk_toggle_button_new(); d = gdk_pixmap_create_from_xpm_d (window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) k18_xpm); pm=gtk_pixmap_new(d,b); gtk_container_add(GTK_CONTAINER(button[4]),pm); gshow(pm); dstyle=gtk_style_copy( gtk_widget_get_style(button[0]) ); red.red=0xffff; red.green=0x6000; red.blue=0x0000; red2.red=0xffff; red2.green=0xadad; red2.blue=0x7c7c; dstyle->bg[GTK_STATE_ACTIVE]=red; dstyle->bg[GTK_STATE_SELECTED]=red; dstyle->bg[GTK_STATE_PRELIGHT]=red2; /* GTK_STATE_NORMAL, GTK_STATE_ACTIVE, GTK_STATE_PRELIGHT, GTK_STATE_SELECTED, GTK_STATE_INSENSITIVE */ for(i=0;i<5;i++) { gtk_widget_set_style( button[i], dstyle ); gtk_box_pack_start(GTK_BOX(h),button[i],FALSE,FALSE,0); gshow(button[i]); gtset(GTK_TOGGLE_BUTTON(button[i]),!i); gtk_signal_connect(GTK_OBJECT(button[i]),"toggled", GTK_SIGNAL_FUNC(promote_toggle), new UglyHack(this,i)); } gshow(h); promotion=0; } void PromotionPicker::setPromotion(int index) { int i; promotion=index; for(i=0;i<5;i++) gtset(GTK_TOGGLE_BUTTON(button[i]),(i==promotion)); } int PromotionPicker::getPromotion() { return(promotion); } piece PromotionPicker::getPromotionPiece() { switch(promotion) { case 1: return ROOK; case 2: return BISHOP; case 3: return KNIGHT; case 4: return KING; default: return QUEEN; } } piece PromotionPicker::getPiece() { return(getPromotionPiece()); } void promote_toggle(GtkWidget *widget,gpointer data) { UglyHack *uh; int ia,i; uh=(UglyHack *)data; ia=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); if (ia) { // activated uh->picker->promotion=uh->index; for(i=0;i<5;i++) if (i!=uh->index) gtset(GTK_TOGGLE_BUTTON(uh->picker->button[i]),0); } else { // deactivated if (uh->picker->promotion != uh->index) return; gtset(GTK_TOGGLE_BUTTON(uh->picker->button[uh->index]),1); } } eboard-1.1.1.orig/n18.xpm0000644000175000017500000000227310757567572014440 0ustar patrikpatrik/* XPM */ static char * n18_xpm[] = { "18 18 51 1", " c None", ". c #777777", "+ c #1A1A1A", "@ c #000000", "# c #383838", "$ c #111111", "% c #585858", "& c #A6A6A6", "* c #484848", "= c #9C9C9C", "- c #626262", "; c #696969", "> c #C6C6C6", ", c #3B3B3B", "' c #2E2E2E", ") c #353535", "! c #FFFFFF", "~ c #F8F8F8", "{ c #EAEAEA", "] c #B8B8B8", "^ c #1D1D1D", "/ c #AAAAAA", "( c #636363", "_ c #E3E3E3", ": c #D4D4D4", "< c #121212", "[ c #A3A3A3", "} c #959595", "| c #555555", "1 c #808080", "2 c #1E1E1E", "3 c #8E8E8E", "4 c #CDCDCD", "5 c #717171", "6 c #787878", "7 c #878787", "8 c #BFBFBF", "9 c #BDBDBD", "0 c #6B6B6B", "a c #DCDCDC", "b c #B1B1B1", "c c #2A2A2A", "d c #5F5F5F", "e c #1C1C1C", "f c #1B1B1B", "g c #999999", "h c #4E4E4E", "i c #929292", "j c #686868", "k c #404040", "l c #202020", " ", " .. + ", " @#@$%& ", " *=-;>,'@ ", " )>>!~{!]^. ", " +/(_!!!!!:<& ", " @[/!!!:!!!}@ ", " |!!!!!1!!!~23 ", " $4!!!!~5!!!!6@ ", " @7!!!!>@@!!!!8@ ", " @}>!~@@90!!!!~@ ", " @a_b@.9<:!!!!!cd ", " &ef@.9@g!!!!!!h@ ", " &.9+i!!!!!!!(@ ", " &j!!!!!!!!1@ ", " @a!!!!!!!!1@ ", " @kkkkkkkkkl@ ", " "}; eboard-1.1.1.orig/snd_test.xpm0000644000175000017500000000043410757567572015652 0ustar patrikpatrik/* XPM */ static char * snd_test_xpm[] = { "16 10 2 1", " c None", ". c #000000", " . ", " .. ", " ... ", " .... ", " ..... ", " ..... ", " .... ", " ... ", " .. ", " . "}; eboard-1.1.1.orig/pieces.h0000644000175000017500000000654610757567572014734 0ustar patrikpatrik/* $Id: pieces.h,v 1.25 2004/12/27 15:16:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2005 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PIECES_H #define PIECES_H 1 #include "stl.h" #include "eboard.h" #include "util.h" #include "cimg.h" class PReq { public: PReq(piece a, rgbptr b, int c, int d, int e, bool f); int operator< (PReq * a); int operator> (PReq * a); piece p; rgbptr dest; int x, y, dwidth; bool onlytop; }; class PieceSet : public ColorSpace, public Blitter { public: PieceSet(string &name, string &sqname); PieceSet(PieceSet *src); ~PieceSet(); string &getName(); string &getSquareName(); int side; bool extruded; // pieces can be taller than one square int height; // in extruded sets only void scale(int newside); void drawPiece(piece p,rgbptr dest,int x,int y,int dwidth); void drawSquare(int dark,rgbptr dest,int x,int y,int dwidth); // much faster than calling the previous two, since this class will // keep a cache of square+piece void drawPieceAndSquare(piece p,rgbptr dest,int x,int y,int dwidth, int sqdark); // fast fully masked draw void drawPiece(piece p,GdkPixmap *dest,GdkGC *gc,int x,int y); void drawOutlinedPiece(piece p,GdkPixmap *dest,GdkGC *gc, int x,int y,bool white); // for extruded sets void beginQueueing(); void endQueueing(); private: string Name; string SqName; int bgcolor; CImg *isrc; rgbptr alphamask; bool bottom_only, top_only, queuef; list myq; // looks like a list but it's a queue ;-) rgbptr xxcache[24]; piece cacheindex[256]; void initCache(); void buildCache(); void clearCache(); CImg *FallbackLoad(); void loadSquares(string &path); void calcAlphaMask(); void rect_outline(rgbptr img,int x,int y,int w,int h,int iw); int getPixel(int x,int y); void setPixel(int x,int y,int v); void xSetPixel(rgbptr img,int x,int y,int v); int alpha(int x,int y); void queueRequest(PReq *r); }; class VecDetail { public: void add(int a,int b,int c,int d); void draw(GdkPixmap *dest, GdkGC *gc,int x,int y,int sz1,int sz2); private: vector x1, y1, x2, y2; }; class VectorPieces { public: VectorPieces(); void drawSquares(GdkPixmap *dest,GdkGC *gc,int sqside, int dx=0, int dy=0); void drawPiece(GdkPixmap *dest,GdkGC *gc,int sqside,int x,int y,piece p); private: static GdkPoint srcpiece[376]; GdkPoint vec[376]; int orig_sqside; int cur_sqside; void rescale(int newsqside); int np[6]; int offset[6]; VecDetail details[6]; }; #endif eboard-1.1.1.orig/cimg.cc0000644000175000017500000003240210757567572014527 0ustar patrikpatrik/* $Id: cimg.cc,v 1.4 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "cimg.h" CImg::CImg(int w,int h) { data = 0; ok = 0; alloc(w,h); } CImg::CImg(CImg *src) { data = 0; ok = 0; alloc(src->W,src->H); if (!ok) return; memcpy(data,src->data,H*rowlen); ok = 1; } CImg::CImg(const char *filename) { FILE *f; png_byte header[8]; png_structp pngp=NULL; png_infop infp=NULL, endp=NULL; int i; png_uint_32 width, height; int bpp, ct, it, zt, ft; data = NULL; ok = 0; f = fopen(filename, "r"); if (f==NULL) return; fread(header, 1, 8, f); if (png_sig_cmp(header,0,8)!=0) { fprintf(stderr, "** not a PNG image: %s\n\n",filename); fclose(f); return; } pngp = png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0); if (pngp!=NULL) { infp = png_create_info_struct(pngp); endp = png_create_info_struct(pngp); } if (infp==NULL || endp==NULL) { fclose(f); return; } png_init_io(pngp, f); png_set_sig_bytes(pngp, 8); png_read_info(pngp,infp); png_get_IHDR(pngp, infp, &width, &height, &bpp, &ct, &it, &zt, &ft); if (ct == PNG_COLOR_TYPE_PALETTE) { png_set_palette_to_rgb(pngp); png_set_strip_alpha(pngp); } if (bpp == 16) png_set_strip_16(pngp); if (ct & PNG_COLOR_MASK_ALPHA) png_set_strip_alpha(pngp); if (ct == PNG_COLOR_TYPE_GRAY || ct == PNG_COLOR_TYPE_GRAY_ALPHA) png_set_gray_to_rgb(pngp); alloc(pngp->width,pngp->height); if (!ok) { fclose(f); return; } ok = 0; for(i=0;iheight;i++) { png_read_row(pngp, (png_bytep) (&data[i*rowlen]), NULL); } png_read_end(pngp, endp); png_destroy_read_struct(&pngp, &infp, &endp); ok = 1; } void CImg::crop(int x,int y,int w,int h) { CImg *tmp; tmp = new CImg(w,h); if (!tmp) return; if (!tmp->ok) return; bitblt(data, tmp->data, x,y, W, 0,0, w, w, h); if (w>W || h>H) return; if (x!=0 || y!=0) data = (hati *) realloc(data, w*h*3); W = w; H = h; rowlen = 3 * W; memcpy(data, tmp->data, w*h*3); delete tmp; } void CImg::writeP6(const char *path) { FILE *f; int i,j; hati *p; f = fopen(path,"w"); if (!f) return; fprintf(f,"P6\n%d %d\n255\n",W,H); j = 3 * W * H; p = data; for(i=0;idata; i=W * H; for(;i;i--) { p= *(s++) << 7; *(d++) = p; *(d++) = p; *(d++) = p; } R=G=B=0x80; bgcolor=triplet(R,G,B); // substitute bgcolor i=W * H; d=data; z=triplet(*d,*(d+1),*(d+2)); for(;i;i--) { q=triplet(*d,*(d+1),*(d+2)); if (q==z) *d=*(d+1)=*(d+2)=R; d+=3; } img=scale(nw,nh); b=a->scale(nw, nh); delete(a); // fix the last column before the squares d=img->data + 3* ((nw/7)*6 - 1); for(i=0;idata; d=img->data; i=nw * nh * 3; for(;i;i-=3) { if ( (*s) > 0x60 ) { *(d) = R; *(d+1) = G; *(d+2) = B; } s+=3; d+=3; } // fix annoying border (d)effect on extruded sets if (extruded) { ew=nw/7; eh=nh/2; i=ew-1; missing=0; d=img->data+ 3* (nw*i + 6*ew + 2); while(i>0) { q=triplet(*d,*(d+1),*(d+2)); if (q!=bgcolor) break; ++missing; --i; d-=3*nw; } if (missing < ew/2) { bitblt( img->data, img->data, // !!! 6*ew, ew-(2*missing), nw, // src 6*ew, ew-missing , nw, // dest ew, missing ); bitblt( img->data, img->data, // !!! 6*ew, eh+ew-(2*missing), nw, //src 6*ew, eh+ew-missing, nw, //dest ew, missing ); } } delete(b); return(img); } // taken from gimp 1.0.4, scale_region(...) from app/paint_funcs.c CImg * CImg::scale(int nw, int nh) { unsigned char * src_m1, * src, * src_p1, * src_p2; unsigned char * s_m1, * s, * s_p1, * s_p2; unsigned char * dest, * d; double * row, * r; int src_row, src_col; int bytes, b; int width, height; int orig_width, orig_height; double x_rat, y_rat; double x_cum, y_cum; double x_last, y_last; double * x_frac, y_frac, tot_frac; float dx, dy; int i, j; int frac; int advance_dest_x, advance_dest_y; int minus_x, plus_x, plus2_x; int scale_type; CImg *img; int stride; orig_width = W; orig_height = H; width = nw; height = nh; img = new CImg(nw, nh); if (!img) return 0; if (!img->ok) return 0; /* Some calculations... */ bytes = 3; stride= orig_width*bytes; /* the data pointers... */ src_m1 = (unsigned char *) g_malloc (orig_width * bytes); src = (unsigned char *) g_malloc (orig_width * bytes); src_p1 = (unsigned char *) g_malloc (orig_width * bytes); src_p2 = (unsigned char *) g_malloc (orig_width * bytes); dest = (unsigned char *) g_malloc (width * bytes); /* find the ratios of old x to new x and old y to new y */ x_rat = (double) orig_width / (double) width; y_rat = (double) orig_height / (double) height; /* determine the scale type */ if (x_rat < 1.0 && y_rat < 1.0) scale_type = 0; // MagnifyX_MagnifyY else if (x_rat < 1.0 && y_rat >= 1.0) scale_type = 1; // MagnifyX_MinifyY else if (x_rat >= 1.0 && y_rat < 1.0) scale_type = 2; // MinifyX_MagnifyY else scale_type = 3; // MinifyX_MinifyY /* allocate an array to help with the calculations */ row = (double *) g_malloc (sizeof (double) * width * bytes); x_frac = (double *) g_malloc (sizeof (double) * (width + orig_width)); /* initialize the pre-calculated pixel fraction array */ src_col = 0; x_cum = (double) src_col; x_last = x_cum; for (i = 0; i < width + orig_width; i++) { if (x_cum + x_rat <= (src_col + 1 + EPSILON)) { x_cum += x_rat; x_frac[i] = x_cum - x_last; } else { src_col ++; x_frac[i] = src_col - x_last; } x_last += x_frac[i]; } /* clear the "row" array */ memset (row, 0, sizeof (double) * width * bytes); /* counters... */ src_row = 0; y_cum = (double) src_row; y_last = y_cum; /* Get the first src row */ memcpy(src, data + src_row * stride, stride); /* Get the next two if possible */ if (src_row < (orig_height - 1)) memcpy(src_p1, data + (src_row + 1) * stride, stride); if ((src_row + 1) < (orig_height - 1)) memcpy(src_p2, data + (src_row + 2) * stride, stride); /* Scale the selected region */ i = height; while (i) { src_col = 0; x_cum = (double) src_col; /* determine the fraction of the src pixel we are using for y */ if (y_cum + y_rat <= (src_row + 1 + EPSILON)) { y_cum += y_rat; dy = y_cum - src_row; y_frac = y_cum - y_last; advance_dest_y = TRUE; } else { y_frac = (src_row + 1) - y_last; dy = 1.0; advance_dest_y = FALSE; } y_last += y_frac; s = src; s_m1 = (src_row > 0) ? src_m1 : src; s_p1 = (src_row < (orig_height - 1)) ? src_p1 : src; s_p2 = ((src_row + 1) < (orig_height - 1)) ? src_p2 : s_p1; r = row; frac = 0; j = width; while (j) { if (x_cum + x_rat <= (src_col + 1 + EPSILON)) { x_cum += x_rat; dx = x_cum - src_col; advance_dest_x = TRUE; } else { dx = 1.0; advance_dest_x = FALSE; } tot_frac = x_frac[frac++] * y_frac; minus_x = (src_col > 0) ? -bytes : 0; plus_x = (src_col < (orig_width - 1)) ? bytes : 0; plus2_x = ((src_col + 1) < (orig_width - 1)) ? bytes * 2 : plus_x; switch (scale_type) { case 0: // MagnifyX_MagnifyY for (b = 0; b < bytes; b++) r[b] += ((1 - dy) * ((1 - dx) * s[b] + dx * s[b+plus_x]) + dy * ((1 - dx) * s_p1[b] + dx * s_p1[b+plus_x])) * tot_frac; break; case 1: // MagnifyX_MinifyY for (b = 0; b < bytes; b++) r[b] += (s[b] * (1 - dx) + s[b+plus_x] * dx) * tot_frac; break; case 2: // MinifyX_MagnifyY for (b = 0; b < bytes; b++) r[b] += (s[b] * (1 - dy) + s_p1[b] * dy) * tot_frac; break; case 3: //MinifyX_MinifyY for (b = 0; b < bytes; b++) r[b] += s[b] * tot_frac; break; } if (advance_dest_x) { r += bytes; j--; } else { s_m1 += bytes; s += bytes; s_p1 += bytes; s_p2 += bytes; src_col++; } } if (advance_dest_y) { tot_frac = 1.0 / (x_rat * y_rat); /* copy "row" to "dest" */ d = dest; r = row; j = width; while (j--) { b = bytes; while (b--) *d++ = (unsigned char) (*r++ * tot_frac); } /* set the pixel region span */ memcpy(img->data + (width * 3) * (height-i), dest, width * 3); /* clear the "row" array */ memset (row, 0, sizeof (double) * width * bytes); i--; } else { /* Shuffle pointers */ s = src_m1; src_m1 = src; src = src_p1; src_p1 = src_p2; src_p2 = s; src_row++; if ((src_row + 1) < (orig_height - 1)) memcpy(src_p2, data + (src_row + 2) * stride, stride); } } /* free up temporary arrays */ g_free (row); g_free (x_frac); g_free (src_m1); g_free (src); g_free (src_p1); g_free (src_p2); g_free (dest); return img; } // ----------- RGB <-> YCbCr transform int ColorSpace::lighter(int triplet) { int a,b; a=RGB2YCbCr(triplet); b=pixr(a); b=(256+b)/2; b=YCbCr2RGB(pixel(b,pixg(a),pixb(a))); return b; } int ColorSpace::darker(int triplet) { int a,b; a=RGB2YCbCr(triplet); b=pixr(a); b/=2; b=YCbCr2RGB(pixel(b,pixg(a),pixb(a))); return b; } int ColorSpace::RGB2YCbCr(int triplet) { float y,cb,cr; y=0.257*(float)pixr(triplet)+ 0.504*(float)pixg(triplet)+ 0.098*(float)pixb(triplet)+16.0; cb=-0.148*(float)pixr(triplet)- 0.291*(float)pixg(triplet)+ 0.439*(float)pixb(triplet)+ 128.0; cr=0.439*(float)pixr(triplet)- 0.368*(float)pixg(triplet)- 0.071*(float)pixb(triplet)+ 128.0; return(pixel((int)y,(int)cb,(int)cr)); } int ColorSpace::YCbCr2RGB(int triplet) { float r,g,b; r=1.164*((float)pixr(triplet)-16.0)+ 1.596*((float)pixb(triplet)-128.0); g=1.164*((float)pixr(triplet)-16.0)- 0.813*((float)pixb(triplet)-128.0)- 0.392*((float)pixg(triplet)-128.0); b=1.164*((float)pixr(triplet)-16.0)+ 2.017*((float)pixg(triplet)-128.0); return(pixel((int)r,(int)g,(int)b)); } int ColorSpace::pixr(int triplet) { return((triplet>>16)&0xff); } int ColorSpace::pixg(int triplet) { return((triplet>>8)&0xff); } int ColorSpace::pixb(int triplet) { return(triplet&0xff); } int ColorSpace::pixel(int r,int g,int b) { int v=((r&0xff)<<16)|((g&0xff)<<8)|(b&0xff); return(v); } void Blitter::bitblt(rgbptr src,rgbptr dest,int sx,int sy,int sw, int dx,int dy,int dw,int w,int h) { register rgbptr d, s; register int wcd; static int slg,dlg, wcd0; d=dest+3*(dw*dy+dx); s=src+3*(sw*sy+sx); dlg=3*(dw-w); slg=3*(sw-w); wcd0=3*w; while(h) { wcd=wcd0; while(wcd--) *(d++)=*(s++); d+=dlg; s+=slg; --h; } } void Blitter::bitblt_a(rgbptr src,rgbptr dest,int sx,int sy,int sw, int dx,int dy,int dw,int w,int h, rgbptr alpha) { register rgbptr d, s, a; static int wcd,slg,dlg,alg; s=src+3*(sw*sy+sx); d=dest+3*(dw*dy+dx); a=alpha+(sw*sy+sx); slg=3*(sw-w); dlg=3*(dw-w); alg=sw-w; while(h) { wcd=w; while(wcd--) { if (*a) { d+=3; s+=3; } else { *(d++)=*(s++); *(d++)=*(s++); *(d++)=*(s++); } ++a; } d+=dlg; s+=slg; a+=alg; --h; } } eboard-1.1.1.orig/goc_display.xpm0000644000175000017500000000150510757567572016324 0ustar patrikpatrik/* XPM */ static char * goc_display_xpm[] = { "32 20 4 1", " c None", ". c #1525D3", "+ c #FFFFFF", "@ c #000000", " .................... ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .+++@@@+++@@@+++@@@. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .@@@+++@@@+++@@@+++. ", " .................... "}; eboard-1.1.1.orig/movelist.xpm0000644000175000017500000000121510757567572015667 0ustar patrikpatrik/* XPM */ static char * movelist_xpm[] = { "24 16 10 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #141414", "# c #606060", "$ c #F4F4F4", "% c #232323", "& c #E2E2E2", "* c #5B5B5B", "= c #D6D6D6", " ", " ................... ", " .+++++++++++++++++. ", " .+@++@@@@++@@@@@++. ", " .+++++++++++++++++. ", " .+#++#####+#####++. ", " .+++++++++++++++++. ", " .+@++@@@@++@@@@+++. ", " .$$$$$$$$$$$$$$$$$. ", " .+@++@@@@++@@@@+++. ", " .$$$$$$$$$$$$$$$$$. ", " .+@++@@@@++@@@@+++. ", " .$$$$$$$$$$$$$$$$$. ", " %&#&&###&&&####&&&% ", " *=================* ", " "}; eboard-1.1.1.orig/seekgraph.cc0000644000175000017500000003443410757567572015570 0ustar patrikpatrik/* $Id: seekgraph.cc,v 1.31 2008/02/12 18:39:20 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "seekgraph.h" #include "global.h" #include "eboard.h" gboolean skg2_expose(GtkWidget *w, GdkEventExpose *ee,gpointer data); gboolean skg2_click(GtkWidget *w, GdkEventButton *be,gpointer data); gboolean skg2_cfg(GtkWidget *w, GdkEventConfigure *ee,gpointer data); gboolean skg2_hover(GtkWidget *w, GdkEventMotion *ee,gpointer data); bool seekcmp_id(const SeekAd *a, const SeekAd *b); bool seekcmp_pos(const SeekAd *a, const SeekAd *b); bool seekcmp_id(const SeekAd *a, const SeekAd *b) { return (a->id < b->id); } bool seekcmp_pos(const SeekAd *a, const SeekAd *b) { if (a->y > b->y) return true; if (a->y < b->y) return false; return (a->x < b->x); } static void skg_refresh(GtkWidget *w, gpointer data) { if (global.protocol!=NULL) global.protocol->refreshSeeks(false); } static gint skg_sort_num(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) { char *t1, *t2; int i1, i2; GtkCListRow *row1 = (GtkCListRow *) ptr1; GtkCListRow *row2 = (GtkCListRow *) ptr2; t1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; t2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; i1 = atoi(t1); i2 = atoi(t2); if (i1i2) return 1; return 0; } static gint skg_sort_time(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) { char t1[20], t2[20]; char *p; int i1, i2, j1, j2; GtkCListRow *row1 = (GtkCListRow *) ptr1; GtkCListRow *row2 = (GtkCListRow *) ptr2; g_strlcpy(t1, GTK_CELL_TEXT (row1->cell[clist->sort_column])->text, 20); g_strlcpy(t2, GTK_CELL_TEXT (row2->cell[clist->sort_column])->text, 20); p=strtok(t1, " \t"); if (p) { i1=atoi(p); p=strtok(0," \t"); if (p) j1=atoi(p); else j1=0; } else i1=j1=0; p=strtok(t2, " \t"); if (p) { i2=atoi(p); p=strtok(0," \t"); if (p) j2=atoi(p); else j2=0; } else i2=j2=0; if (i1i2) return 1; if (j1j2) return 1; return 0; } SeekAd::SeekAd() { id=32767; rated=false; automatic=false; formula=false; clock=incr=0; x=y=sw=lx=ly=lw=lh=-1; } SeekAd & SeekAd::operator=(const SeekAd &b) { id = b.id; clock = b.clock; incr = b.incr; rated = b.rated; automatic = b.automatic; formula = b.formula; color = b.color; rating = b.rating; player = b.player; range = b.range; kind = b.kind; flags = b.flags; x = b.x; y = b.y; return(*this); } int SeekAd::operator==(int v) { return(id==v); } int SeekAd::getRating() { return(atoi(rating.c_str())); } float SeekAd::getEtime() { return(clock + (2.0f*incr)/3.0f); } bool SeekAd::isComputer() { return(flags.find("(C)",0)!=string::npos); } int SeekAd::distance(int px,int py) { return((int)(sqrt( (px-x)*(px-x) + (py-y)*(py-y) ))); } variant SeekAd::getKind() { if (!kind.compare("blitz") || !kind.compare("lightning") || !kind.compare("standard")) return REGULAR; if (!kind.compare("crazyhouse")) return CRAZYHOUSE; if (!kind.compare("suicide")) return SUICIDE; if (!kind.compare("giveaway")) return GIVEAWAY; if (!kind.compare("losers")) return LOSERS; if (!kind.compare("atomic")) return ATOMIC; return WILD; } SeekGraph2::SeekGraph2() { boxid = -1; widget = gtk_drawing_area_new(); gc = NULL; pix = NULL; lw=lh=mx=my=-1; gtk_widget_set_events(widget,GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK| GDK_POINTER_MOTION_MASK); gtk_signal_connect (GTK_OBJECT (widget), "expose_event", (GtkSignalFunc) skg2_expose, (gpointer) this); gtk_signal_connect (GTK_OBJECT (widget), "configure_event", (GtkSignalFunc) skg2_cfg, (gpointer) this); gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", (GtkSignalFunc) skg2_click, (gpointer) this); gtk_signal_connect (GTK_OBJECT (widget), "motion_notify_event", (GtkSignalFunc) skg2_hover, (gpointer) this); } SeekGraph2::~SeekGraph2() { clear(); if (pix!=NULL) gdk_pixmap_unref(pix); if (gc!=NULL) gdk_gc_destroy(gc); } void SeekGraph2::rehover() { GdkEventMotion em; em.x = mx; em.y = my; boxid = -2; placeAds(); skg2_hover(widget,&em,(gpointer)this); } void SeekGraph2::remove(int id) { unsigned int i,n; n = ads.size(); for(i=0;iid == id) { delete(ads[i]); ads.erase(ads.begin() + i); break; } // contentUpdated(); rehover(); repaint(); } void SeekGraph2::add(SeekAd *ad) { ads.push_back(ad); // contentUpdated(); rehover(); repaint(); } void SeekGraph2::clear() { unsigned int i,n; n = ads.size(); for(i=0;isw = -1; repaint(); } gboolean skg2_click(GtkWidget *w, GdkEventButton *be,gpointer data) { SeekGraph2 *me = (SeekGraph2 *) data; char z[64]; if (me->boxid >= 0 && global.protocol && be->button==1) { snprintf(z,64,"play %d",me->boxid); global.protocol->sendUserInput(z); snprintf(z,64,_("Replied to seek #%d"),me->boxid); global.status->setText(z,10); } else if (global.protocol && be->button==3) { global.protocol->refreshSeeks(false); } return TRUE; } gboolean skg2_cfg(GtkWidget *w, GdkEventConfigure *ee,gpointer data) { int ww,wh; SeekGraph2 *me = (SeekGraph2 *) data; LayoutBox *L; gdk_window_get_size(w->window, &ww, &wh); L = &(me->L); if (me->lw != ww || me->lh != wh) { if (me->pix != NULL) { gdk_pixmap_unref(me->pix); me->pix = NULL; } if (me->gc != NULL) { gdk_gc_destroy(me->gc); me->gc = NULL; } } if (me->pix == NULL) { me->pix = gdk_pixmap_new(w->window,ww,wh,-1); me->lw = ww; me->lh = wh; me->gc = gdk_gc_new(me->pix); L->prepare(w,me->pix,me->gc,0,0,ww,wh); L->setFont(0,global.SeekFont); } me->draw(); return TRUE; } void SeekGraph2::placeAds() { unsigned int i,n; int j,lx,ly,qw,qh; int fh=0; n = ads.size(); sort(ads.begin(),ads.end(),&seekcmp_id); for(i=0;ilx = ads[i]->lw = ads[i]->ly = ads[i]->lh = -1; if (gc!=NULL) fh = L.fontHeight(0); for(i=0;igetEtime(); rat = ads[i]->getRating(); if (etime > 60.0f) etime = 60.0f; if (rat > 3000) rat = 3000; if (rat < 200) rat = 200; ads[i]->y = lh - ((lh * rat) / 3000); ads[i]->x = (int)((sqrt(etime)*lw) / 8.0); // avoid dot overlaps for(j=0;j<(int)i;j++) if (ads[i]->distance(ads[j]->x,ads[j]->y) < 12) { ads[i]->y -= 12; j = -1; } } sort(ads.begin(),ads.end(),&seekcmp_pos); for(i=0;isw < 0) qw = ads[i]->sw = L.stringWidth(0,ads[i]->player.c_str()); else qw = ads[i]->sw; qh = fh; lx = ads[i]->x + 8; ly = ads[i]->y - fh/2; for(j=0;j<=200;j+=10) if (rectFree(lx,ly-j,qw,qh)) { ads[i]->lx = lx; ads[i]->ly = ly-j; ads[i]->lw = qw; ads[i]->lh = qh; break; } else if (rectFree(lx,ly+j,qw,qh)) { ads[i]->lx = lx; ads[i]->ly = ly+j; ads[i]->lw = qw; ads[i]->lh = qh; break; } if (ads[i]->lx < 0) { ads[i]->lx = lx; ads[i]->ly = ly; ads[i]->lw = qw; ads[i]->lh = qh; } } } sort(ads.begin(),ads.end(),&seekcmp_id); } bool SeekGraph2::rectFree(int x,int y,int w,int h) { unsigned int i,n; n = ads.size(); for(i=0;ix-4,ads[i]->y-4,9,9)) return false; if (ads[i]->lx >= 0) if (rectOverlap(x,y,w,h,ads[i]->lx,ads[i]->ly,ads[i]->lw,ads[i]->lh)) return false; } return true; } bool SeekGraph2::rectOverlap(int rx,int ry,int rw, int rh, int sx,int sy,int sw, int sh) { return (intervalOverlap(rx,rx+rw,sx,sx+sw)&& intervalOverlap(ry,ry+rh,sy,sy+sh)); } bool SeekGraph2::intervalOverlap(int a1, int a2, int b1, int b2) { return ((a1 >= b1 && a1 <= b2) || (a2 >= b1 && a2 <= b2) || (b1 >= a1 && b1 <= a2) || (b2 >= a1 && b2 <= a2)); } void SeekGraph2::draw() { int W,H,RW,x,y,lb,bs,lx; int a,fh,r; char z[32]; unsigned int i,n; SeekAd *j; int bg[6] = { 0xffd0d0, 0xeec0c0, 0xffe0d0, 0xeed0c0, 0xffffe0, 0xeeeed0 }; int bg2[6] = { 0xddb0b0, 0xeec0c0, 0xddc0b0, 0xeed0c0, 0xddddc0, 0xeeeed0 }; W = lw; H = lh; RW = W; fh = L.fontHeight(0); // main panes L.setColor(0xffffff); L.drawRect(0,0,W,H,true); lb = (int)((sqrt(2.0) * RW)/8.0); bs = (int)((sqrt(15.0) * RW)/8.0); // lightning L.setColor(bg[0]); L.drawRect(0,0,lb,H,true); // blitz L.setColor(bg[2]); L.drawRect(lb,0,bs-lb,H,true); // standard L.setColor(bg[4]); L.drawRect(bs,0,RW-bs,H,true); for(a=500;a<3000;a+=1000) { y = H - ((a*H) / 3000); x = (H*500)/3000; L.setColor(bg[1]); L.drawRect(0,y,lb,x,true); L.setColor(bg[3]); L.drawRect(lb,y,bs-lb,x,true); L.setColor(bg[5]); L.drawRect(bs,y,RW-bs,x,true); } for(a=100;a<3000;a+=100) { y = H - ((a*H) / 3000); L.setColor(bg2[ (a/500)%2 != 0 ? 1 : 0 ]); L.drawLine(0,y,lb,y); L.setColor(bg2[ (a/500)%2 != 0 ? 3 : 2 ]); L.drawLine(lb,y,bs,y); L.setColor(bg2[ (a/500)%2 != 0 ? 5 : 4 ]); L.drawLine(bs,y,RW,y); } // box it // vertical scale L.setColor(0x444444); lx = 0; int hval[12] = { 1, 2, 3, 5, 10, 15, 20, 25, 30, 40, 50, 60 }; for(a=0;a<12;a++) { x = (int)((sqrt(hval[a]) * RW)/8.0); if (x > lx) { snprintf(z,32,"%dm",hval[a]); L.drawString(x+2,H-fh,0,z); L.drawLine(x,H,x,H-fh); lx = x + L.stringWidth(0,z) + 10; } } // horizontal scale L.setColor(0x444444); for(a=500;a<3000;a+=500) { y = H - ((a*H) / 3000); snprintf(z,32,"%d",a); x = L.stringWidth(0,z); L.drawString(W-x-10,y-fh-2,0,z); L.drawLine(W-20,y,W,y); } L.setColor(0x884444); L.drawString(10,1,0,_("Left click to play, right click to refresh.")); L.setColor(0); L.drawRect(0,0,RW,H,false); placeAds(); n = ads.size(); for(i=0;ix,ads[i]->y,ads[i]->lx,ads[i]->ly + fh/2); L.drawString(ads[i]->lx+2,ads[i]->ly,0,ads[i]->player.c_str()); } for(i=0;igetKind(); switch(v) { case REGULAR: L.setColor(0x2222ee); break; case CRAZYHOUSE: L.setColor(0x00eedd); break; case SUICIDE: L.setColor(0xff2222); break; case LOSERS: case GIVEAWAY: L.setColor(0x882222); break; case ATOMIC: L.setColor(0x22ff22); break; case WILD: L.setColor(0xffff00); break; default: L.setColor(0x888888); } r = (ads[i]->id == boxid) ? 6 : 4; bool isac = ads[i]->isComputer(); if (isac) L.drawRect(ads[i]->x-r,ads[i]->y-r,2*r+1,2*r+1,true); else L.drawEllipse(ads[i]->x-r,ads[i]->y-r,2*r+1,2*r+1,true); L.setColor(ads[i]->rated ? 0 : 0xffffff); if (isac) L.drawRect(ads[i]->x-r,ads[i]->y-r,2*r+1,2*r+1,false); else L.drawEllipse(ads[i]->x-r,ads[i]->y-r,2*r+1,2*r+1,false); } if (boxid < 0) return; j = getAd(boxid); if (j==NULL) return; int bx,by,bw,bh; char lines[3][100]; snprintf(lines[0],100,"%s%s %s", j->player.c_str(), j->flags.c_str(), j->rating.c_str()); snprintf(lines[1],100,"%d %d %s %s (%s)", j->clock,j->incr, j->rated ? _("rated") : _("unrated"), j->kind.c_str(), j->range.c_str()); snprintf(lines[2],100,"%c/%c %s", j->automatic ? '-' : 'm', j->formula ? 'f' : '-', j->color.c_str()); x = L.stringWidth(0,lines[0]); y = L.stringWidth(0,lines[1]); if (x < y) x = y; y = L.stringWidth(0,lines[2]); if (x < y) x = y; bw = x+20; bh = 3*(fh+2)+2; if (j->x < RW/2) bx = j->x + 20; else bx = j->x - 20 - bw; by = j->y - bh/2; if (by < 0) by = 0; if (by + bh > H) by = H - bh; L.setColor(0); L.drawLine(j->x,j->y,bx+bw/2,by+bh/2); L.setColor(0x888877); L.drawRect(bx+5,by+5,bw,bh,true); L.setColor(0xffffff); L.drawRect(bx,by,bw,bh,true); L.setColor(0); L.drawRect(bx,by,bw,bh,false); L.drawString(bx+10,by+2,0,lines[0]); L.drawString(bx+10,by+2+(fh+2),0,lines[1]); L.drawString(bx+10,by+2+2*(fh+2),0,lines[2]); } SeekAd *SeekGraph2::getAd(int id) { unsigned int i,n; n = ads.size(); for(i=0;iid == id) return(ads[i]); return NULL; } gboolean skg2_expose(GtkWidget *w, GdkEventExpose *ee,gpointer data) { SeekGraph2 *me = (SeekGraph2 *) data; if (me->pix == NULL) return FALSE; gdk_draw_pixmap(w->window,w->style->black_gc, me->pix, ee->area.x, ee->area.y, ee->area.x, ee->area.y, ee->area.width, ee->area.height); return TRUE; } gboolean skg2_hover(GtkWidget *w, GdkEventMotion *ee,gpointer data) { SeekGraph2 *me = (SeekGraph2 *) data; int id,md,d,x,y; unsigned int i,n; if (me->ads.empty()) { id = -1; if (id != me->boxid) { me->boxid = id; me->repaint(); } return TRUE; } x = me->mx = (int) (ee->x); y = me->my = (int) (ee->y); md = me->ads[0]->distance(x,y); id = me->ads[0]->id; n = me->ads.size(); for(i=0;iads[i]->distance(x,y); if (d < md) { md = d; id = me->ads[i]->id; } } if (md > 100) id = -1; if (id != me->boxid) { me->boxid = id; me->repaint(); } return TRUE; } eboard-1.1.1.orig/langs.h0000644000175000017500000000346710757567572014567 0ustar patrikpatrik/* $Id: langs.h,v 1.3 2007/01/01 14:38:58 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef LANGS_H #define LANGS_H 1 #include #include "stl.h" class TEntry { public: TEntry(const char *K, const char *D); virtual ~TEntry(); bool match(const char *testkey); int calcHash(); char *getData(); static int hashOf(const char *x); private: char *key, *data; }; class Translator { public: Translator(); virtual ~Translator(); /* language = 0 will guess based on the environment */ void setContext(const char *language, const char *package, const char *searchpath); const char *translate(const char *key); private: bool ready; char Lang[3]; char SubLang[3]; char Package[32]; void guessLanguage(); void setLanguage(const char *locale); bool loadDictionary(FILE *f); list dict[128]; }; void langs_prepare(const char *language, const char *package, const char *searchpath); char * langs_translate(const char *key); #endif eboard-1.1.1.orig/qb4.xpm0000644000175000017500000000110610757567572014512 0ustar patrikpatrik/* XPM */ static char * qb4_xpm[] = { "18 16 12 1", " c None", ". c #000000", "+ c #FE7100", "@ c #F06C01", "# c #E46203", "$ c #D85E05", "% c #CB5506", "& c #BF4D08", "* c #B24909", "= c #A6420B", "- c #983B0D", "; c #8D320E", " ", " ", " ........... ", " .+++++@#$%&. ", " .++++@#$%&*. ", " .+++@#$%&*=. ", " .++@#$%&*=-. ", " .+@#$%&*=-;.", " .++@#$%&*=-. ", " .+++@#$%&*=. ", " .++++@#$%&*. ", " .+++++@#$%&. ", " ........... ", " ", " ", " "}; eboard-1.1.1.orig/fallback.xpm0000644000175000017500000003247710757567572015602 0ustar patrikpatrik/* XPM */ static char * fallback_xpm[] = { "210 60 49 1", " c None", ". c #030303", "+ c #D5D7D7", "@ c #979898", "# c #888B89", "$ c #141414", "% c #626463", "& c #242424", "* c #5A5A5A", "= c #525654", "- c #2B2B2B", "; c #4C4C4C", "> c #424242", ", c #CACCCB", "' c #3E3E3E", ") c #323332", "! c #BEC0C0", "~ c #8E908E", "{ c #DEE0E1", "] c #80807F", "^ c #B2B4B3", "/ c #3B3B3A", "( c #6E6B6A", "_ c #363636", ": c #A7A8A8", "< c #929292", "[ c #9E9E9E", "} c #695142", "| c #777877", "1 c #E4E6E5", "2 c #0E120E", "3 c #0D0E0D", "4 c #565656", "5 c #563202", "6 c #62564E", "7 c #755A48", "8 c #1C1C1C", "9 c #624C3E", "0 c #81624F", "a c #AE896F", "b c #675247", "c c #EDF1F1", "d c #5D483A", "e c #0A0A0A", "f c #B3977D", "g c #B09076", "h c #886F5C", "i c #725644", "j c #625246", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ggfffggggagggggggffaagggffffff", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fgffffggfggagggggfffggggfffffg", "55555555555555555555555555555555555555&-)_-&-5555555555555555555555555555$--2-555555555555555555555555558855555555555555555555555555555555555555555555555555555555555555555555555555fgffffggffgggaaggffgggggfffffg", "555555&3333-&3333&&3332555555555555558->$-&8$&55555555555555555555555555&/,+;85555555555555555555588555&|;855585555555555555555555555588555555555555555555555555555&8885555555555555ggfffffgffggaagggffgfggfggffgg", "555555&>!^_&84!!>&8>!^_55555555555555-',|$8#~$-5555555555555555555555555&>114&55555555555555555558=)85&*1^&5584-&555555555555555555555$$-55555555555555555555555558&(()2555555555555fgffffggfffgaaaggggffffffgfggg", "555555&%11;33|cc%33%c1=555555555555555&!{>e^,-ee25555555555555555555555558^!&5555555555555555555541^&55-|>&5&*1:855555555555555555555....8555555555555555555555558&!1c+>$55555555555fgfffffgffffgaaggggffffgggfggg", "555555&*cc+,,{cc+,,{c145555555555555558!c~*{{|!^%885555555555555555555552),+>3&555555555555-8$&55-#*&55&&8555-~=855888555555555555555-$2-5555555555555555555555558*cccc@255555555555fgfffffggfffgaagggggggffgffgag", "555555&4{1{{1{{{1{1{{+>555555555555558$@c11c1^cc1!'855555555555555555583*,cc+%28555555555558#[&55&8)&558()555&&8558(^-55555555555555558255555555555555555555555558;1ccc]$55555555555fgf:ffgggfffggaaagggggffggggag", "555555&$_;4444444444;)255555555555558-^{{ccccccccc,>855555555555555558&<1cccc1[-$55555555558^,-5558]-55&@>55&('5558~{;555555555555555&$$85555555555555555555555555$~1c^8855555555555ffffffgaagfffgaaaaggggfffgggag", "55555558e(,,,,,,,,,,*e&55555555555552#+**1ccccccccc!-855555555555555&8:1cc11ccc^-8555555555-_/&-558#%858:;&5-:-5558)>&555555555555558/:^=8555555555555555555555558(!1c,]&85555555555ffffffgaggfffgaaagggggffffgggg", "5555555588|~~~~~~~~($855555555555555$!^8#ccccccccccc<2555555555555553#1ccc[#1ccc[2-5555555555$|-55&(:85&!%8$*^8558|-55555555558$$$858^^[!--&$2$855555555555555558@1ccccc^&8555555555ffgfffgaggfffgaaagagfffffffggg", "55555555588|]]]]]]($8555555555555555&{,#1ccccc1ccccc{>8555555555555--+cc1+|*+1cc+/&55555555555>[85&>+'2_+]$$:[258*#85555555552/][#=8-+(*+>$;][#>255555555555555&;1ccccccc|8555555555fffgffggggfggggaaggggfffffffgg", "5555555555>1cccccc{)5555555555555558=1cccccccc^cccccc:35555555555558;1cc@)$2-|ccc%855555555555$:#$&)+<.>1@./{|$8>,)555555555$({cccc!=*,,|;^1ccc1]355555555555558(cccccccc:$555555555ffgffffgggggaggaaggggffffffggg", "5555555555>1cccccc+)5555555555555553@cccccccc{|1ccccc{)855555555555&=1cc+^*;^,cc1%8555555555558;{(2$!+&41:$<1=e),[$55555555&'{cccccc+*(<;,cccccc1;85555555555558*cccccccc@$555555555ffggfffgggfgagaaagggfffgffgggf", "5555555555>1cccccc+)55555555555555$_+ccccccc1<'{cccccc#355555555555&'{cccc~|1ccc1;85555555555553^+;e^c*41:-+{_8:{>$555555558(cccccccc,)-^cccccccc#$5555555555555&!cccccc{;8555555555fgggggfgggfgaagaagggggfffffgff", "5555555555>1cccccc+)5555555555555&2^ccccccc+#8_1cccccc,$55555555555-$[cccc{+cccc^8-555555555555$41!8*!>8|>$[@$]c:35555555558|cccccccc1%;1cccccccc<$55555555555558',cccc+%$5555555555fggffggggfggaaaaagggggfffffgff", "5555555555>1cccccc{)5555555555555$%{{cccc1:>$$*ccccccc{_8555555555558&#,ccccc1+@-$55555555555555$:!)_|#@@@<];&#,>2555555555&41cccccccc[]ccccccccc(855555555555588|+cccc{<-$555555555fgafgggaaggggaaaagggfggffffggf", "5555555558&[^:^::^@8&555555555555$!#[ccc!*885$#cccccccc%855555555555583&;*%(*;-3$555555555555555$8|^{c1111111,@'$5555555555-8!cccccccc:#cccccccc+&&55555555555&&:cccccccc!/$55555555fgggfgggaggggaaaggggggggffffff", "55555555&$>44444444'2-55555555555&+:{cc[&$558-,cccccccc~25555555555555$|@@@@<@#855555555555555555&!,^~||]||]:!+*&555555555558',ccccccc[]ccccccc+*25555555555558[cccccccccc!&&5555555ggagffgaaagggaaaggggggggfffffg", "5555555-e%{11111111+=3555555555552@1!^+)85588[^,1cc,;35555555555558;1ccccccccccc|$5555555ggggfffgaaggggagggggfffgggffff", "555555538>**********'$25555555555&&*_^]$558&~1ccccccccc,$5555555555555$|!,,,,!]8555555555555555558@+,:<~#~~[^+,)555555555555558&]@(*=(##|**(~#-$5555555555555$[cccccccccccc!85555555ggagggggaagggggggffgggggaagfff", "555555&;!,,,,,,,,,,,,!'55555555555&&8/8-58):ccccccccccc+855555555555558(,{{{{,]$55555555555555555&'<^,++++++![(8555555555555555&8]!,,,,!,,,,~&&555555555555558!cccccccccccc{'5555555ggaggggggagggagggfffgggffgggfg", "555555&%ccccccccccccc1;55555555555555&55$-!cccccccccccc+855555555555555$8/''/&$555555555555555555&*{{!^[[[[!+1:85555555555555555-@]]######]]@'&55555555555555)+cccccccccccc1*5555555ggaagggggggggaagggffgfggffgfff", "5555533-%%(%%%(%((%%(%&22555555555555555$[ccccccccccccc,85555558$$888$28e;*;*e8288888$85555555555&8%|]<@@@@#|(/85555555555555555-:+,!!^^!!,,^'&55555555555555_+cccccccccccc1%5555555ggaagfggaggggaaggggfffggffffff", "55555e]~#~~~~~#~~~~~~~~|.555555555555555-+ccccccccccccc,$55555&e],{+,:|*#+(=+@*([,+{+~2855555555558!ccccccccc{*85555555555555555&(%(]]]]]](%()&555555555555558^,,,,,+++,,,,!'5555555aaggffgggggggaaagggfffffgffgff", "55555e]@@@@@@@@@@@@@@@@|.555555555555558-,{{{111111111{^255555-2>>>;>>/83555555&$%/-)*#[|&$88|[<%_-/%8&5555555555558$8$$88$$$8&55555555555555555$8832222223$8$55555555555555555555555555555555555555ggaaggggggggggaaaggggffgffggaa", "55555555555555555555555555555555555555555555555555555555555555558$&55&8$$&55&8$8&55&885555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555fgggffggggggggaaaggggfffggffgg", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ggggggggggfgfggaggfgffgggggggg", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ggggggfgagagfgggggffffgffgfffg", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555h0679d}i}}0hh00077}ii00hhh0700", "5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555557ijdddi777000007ii9d}}0hhh0070", "5555555555555555555555555555555555555555555555555555555555555555555555555$ee$5555555555555555555555555558&55555555555555555555555555555-555555555555555555555555555555555555555555559jddd}i0h000007i77b76i00hh0000", "555555&333355333355333355555555555555&32858385555555555555555555555555555e...&555555555555555555558&5558*)8555855555555555555555555555$2555555555555555555555555555555555555555555556%6i070h00h00i7h0i9760hhhh077i", "555555&....5$....$5....55555555555555&...$8..8555555555555555555555555555e...&5555555555555555555$;&85&'1#855$;&&55555555555555555555$ee$&55555555555555555555555553...8555555555555%6j70hhhhh0ii00hh7ib60hhh0iiii", "555555&................555555555555555e..e3..e8&5555555555555555555555555$..255555555555555555555){~855$)885&'1|$55555555555555555555$ee$8555555555555555555555555e.....855555555555%jj9i0h070070hhhh0ibb700077i7i", "555555&................555555555555555e.e48...--e2-5555555555555555555558....25555555555555-82&55$;&&55&.$555$;&8558$85555555555555555$255555555555555555555555555......855555555555b67660000070hhhh0hi99iiii70007", "5555558.e2$2222$2$2$23.55555555555555-e.2;3...$%#'3&55555555555555555552......3&555555555558(~855-2.&558.2555e.855$=[85555555555555555$355555555555555555555555555......&55555555555677%670h0700000007}9b}}}77707i", "555555&._@[[[:[[[[[[@'e555555555555553..........-]*2&55555555555555555e.........&55555555558|[$5558.255$.e558.35558%^85555555555555552--$55555555555555555555555553....e-555555555557*66bih070007iiiiii}b}bbbi77ii", "55555558e8&&&&&&&&&&8385555555555555$..>=e.......$|425555555555555555e....ee....e8555555555-82e-558..852..&5e.25552e8855555555555555$4^^($55555555555555555555555$......35555555555566jb}}70077iii7i777i700i9jbb9}", "555555558.&%%%%%%%*$.855555555555555e.'{^3........&:)255555555555555$.....*(e....$555555555558.e55&..35e..88..2558.e555555555832882$$^;)^&$$$8$3$555555555555555$........355555555556jj6i}i07iiii77i0000700i9ddd99", "555555555$$%||||||*3$555555555555555..;,>..........4[3&5555555555555e...38#[83....&55555555555e.e5&...$...$e..258..$555555558$|^[^@;2#~|<8_<^:^#&255555555555555e.........&5555555556j6}}}70iii777077707iiii9j9d9}", "5555555555..........5555555555555558..38......$....$:42555555555555&....%,11,]....&555555555552..3&...........88...5555555553<#)8&4:]8<:&%^%-$-|^285555555555555..........8555555555jb9ddd}}iii77777iiiiiii7i9999}", "5555555555.........e555555555555555$..........>e....>:e&555555555555e...8'@^>&....&555555555558...e...........e...255555555&_:2....$@|&&*[&....e[485555555555555..........8555555555i}dd99d9}iii777ii777i777ijj9}i", "5555555555.........e55555555555555&..........3(e....2^'$555555555555e.....(|e....e&555555555555...................$555555558=~......&!-8:/......||$55555555555553.........5555555555079d99dd9iii777i7777iiii}9jd9i", "5555555555..........555555555555552..........3_......(#e5555555555552.....$$.....355555555555558..................5555555558>[e......~*>[3......#($5555555555555&........855555555550}9d99ddd999i77077777iiii9499i", "5555555555..........5555555555555&...........e.......-!3555555555555&e..........e&55555555555555.................$555555555&8!)......*]*|......8!)855555555555552........3&55555555599dd99d99ij9}i707i7777i77j6699", "5555555558$>;;;;;;>385555555555553.'>......e8$.......3^-855555555555553eeeeeeee3&5555555555555558e..e8-_//)83...$555555555552%:-....3%]*|3....8<]355555555555553..........e&55555555ddddd9dd9d6b}i7077777777i966j9", "55555555&e_[[:[::[@&e&55555555555e.]_....e8553........~4$5555555555555$'|(%((|4$555555555555555553$4[!+++++,^|-e&5555555555553(^;)4<:^*'^:[*->[]35555555555555$............355555555d99db9dddj76iiii7777777}99j9jb", "5555555&3e3333333333e355555555555e.2....25558.........*]3555555555555523&--&&&2355555555555555555$(^]*>)))/;(::&-55555555555583>:^@*_8e.8)4~^:=3$555555555555&..............&5555555ddd99dddd9i6jiiiiiiiiiiii}9dbb", "5555555e/<[[[[[[[[[[]835555555555$.....e-55$.........._@355555555555558-:,,,,^/8555555555555555558$/*]@[[[[~(>&255555555555555-$3$e$&/>>/-8322$&5555555555555$..............355555559d9}9dd9d9b6b9b}i7}}}}}}ii}99j", "555555&.8------------3.5555555555582...85-3...........&:35555555555555&e&;;;>-e855555555555555555&>^[(*444*%#!]85555555555555555e;#:^^^^^^^<=38555555555555552...............55555559}}9999i}99bj67777iii}}i7i}999", "5555558................5555555555555&$&553............&^2555555555555558e.....8555555555555555555-$->(##]##|4)8$5555555555555555$(;-&&&&&&&;(&&555555555555553..............e5555555}}}b}}}ii}ij7777777i77iiiii}99", "555553$;#~~~~#~#~~~~~#>225555555555555552.............&^25555555$222$38&3....e&82$232255555555555-8:+^<]]]#[,,;85555555555555555e>][!,,,,!:~;3&55555555555555e...............5555555i66677}}}i}b77777777i7777iii}}", "55555e8%%%%%%%%%%%%%%%*e.555555555555555e.............-^3555555e......................e-55555555552-$.......e&8855555555555555558|%)$$23$$-4]-&555555555555552..............e5555555i7i}999}i}}i777070007i777ii}i}", "55555....................55555555555555&..............>:35555552......................355555555555$...........e&55555555555555553............e55555555555555582222222222$22285555555707}99}77b999}i7000077i77iii}}", "555558$$$$$$$$$$$$$$$$$$8555555555555555..............->355555553.e33.....8&e....33e.e-555555555555&$$33333228-55555555555555555&8&85555555&8&55555555555555555555555555555555555555i7i}}}}i}b9}}ii0007077ii}}b}}}", "5555555555555555555555555555555555555555$22222222233322285555555&85555&&&&55-&8&5555&&5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555ii}i}}}i999}i7770007007i}}b}}i", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555i77}6b}i}}i}ii700000077ii}b}}}", "555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555i}i9}bb}}i777770000007777ib}}}"}; eboard-1.1.1.orig/b18.xpm0000644000175000017500000000221610757567572014421 0ustar patrikpatrik/* XPM */ static char * b18_xpm[] = { "18 18 48 1", " c None", ". c #373737", "+ c #2A2A2A", "@ c #000000", "# c #959595", "$ c #717171", "% c #5F5F5F", "& c #3A3A3A", "* c #262626", "= c #8E8E8E", "- c #111111", "; c #F8F8F8", "> c #F1F1F1", ", c #CDCDCD", "' c #FFFFFF", ") c #B1B1B1", "! c #121212", "~ c #080808", "{ c #AAAAAA", "] c #D4D4D4", "^ c #8A8A8A", "/ c #777777", "( c #555555", "_ c #6A6A6A", ": c #BFBFBF", "< c #C6C6C6", "[ c #A6A6A6", "} c #878787", "| c #808080", "1 c #838383", "2 c #1A1A1A", "3 c #9C9C9C", "4 c #7C7C7C", "5 c #0D0D0D", "6 c #787878", "7 c #1B1B1B", "8 c #616161", "9 c #747474", "0 c #5B5B5B", "a c #2E2E2E", "b c #929292", "c c #171717", "d c #4C4C4C", "e c #404040", "f c #0F0F0F", "g c #242424", "h c #444444", "i c #484848", " ", " .+ ", " @#$@ ", " %&*= ", " -@;>@@ ", " *,';'')! ", " ~)''{]''^/ ", " @''{(_:']@ ", " @>''{]''<@ ", " %@'';'''@[ ", " -#}||=1@ ", " 23;''>4@ ", " 56||||_@ ", " 786||90- ", " %@@@@a{b7@@@@/ ", " c3]]]]>9b>]]],#@ ", " ~d5@aef=%7eg@2hi ", " "}; eboard-1.1.1.orig/backn.xpm0000644000175000017500000000102110757567572015076 0ustar patrikpatrik/* XPM */ static char * backn_xpm[] = { "24 16 2 1", " c None", ". c #000000", " ", " ", " ... . . ", " ... .. .. ", " ... ... ... ", " ... .... .... ", " ... ..... ..... ", " ... ............ ", " ... ............ ", " ... ..... ..... ", " ... .... .... ", " ... ... ... ", " ... .. .. ", " ... . . ", " ", " "}; eboard-1.1.1.orig/q18.xpm0000644000175000017500000000240610757567572014441 0ustar patrikpatrik/* XPM */ static char * q18_xpm[] = { "18 18 56 1", " c None", ". c #777777", "+ c #8E8E8E", "@ c #A6A6A6", "# c #454545", "$ c #3A3A3A", "% c #6D6D6D", "& c #585858", "* c #7C7C7C", "= c #606060", "- c #080808", "; c #373737", "> c #000000", ", c #494949", "' c #3D3D3D", ") c #4C4C4C", "! c #F8F8F8", "~ c #BDBDBD", "{ c #323232", "] c #444444", "^ c #6B6B6B", "/ c #474747", "( c #484848", "_ c #404040", ": c #5F5F5F", "< c #1C1C1C", "[ c #B1B1B1", "} c #707070", "| c #1B1B1B", "1 c #A3A3A3", "2 c #181818", "3 c #6A6A6A", "4 c #D4D4D4", "5 c #C6C6C6", "6 c #9C9C9C", "7 c #AAAAAA", "8 c #DCDCDC", "9 c #929292", "0 c #CDCDCD", "a c #B8B8B8", "b c #E3E3E3", "c c #EAEAEA", "d c #202020", "e c #2E2E2E", "f c #242424", "g c #787878", "h c #878787", "i c #808080", "j c #717171", "k c #555555", "l c #FFFFFF", "m c #959595", "n c #2F2F2F", "o c #666666", "p c #616161", "q c #1A1A1A", " ", " .+ @#$ .+ ", " .%& .*= .%& ", "-;>@,' >> @); ->>", ">!>~{> ;> > ;!>", ">>>~>]@ ^/ (_: >>>", " ><~>[>++} |1{@2( ", " >3>>4/>56:^7{<> ", " >^>89>!0>a[>+> ", " >b-c0{[5<40d!e ", " fg/h6i5[i1jkg> ", " >>lb077774c!>@ ", " >>6[44447m>> ", " @>+iiiiiim> ", " ->miiiiiim>> ", " n68llllll4+2 ", " {>f_ooop_q>: ", " "}; eboard-1.1.1.orig/elifekam0000644000175000017500000001044610757567572015005 0ustar patrikpatrik ### here starts the fixed Makefile section DIST = eboard-$(version) INSTALL = install SRCS = board.cc bugpane.cc chess.cc cimg.cc clock.cc dgtboard.cc dlg_connect.cc dlg_gamelist.cc dlg_prefs.cc global.cc help.cc history.cc main.cc mainwindow.cc movelist.cc network.cc notebook.cc ntext.cc p2p.cc pieces.cc position.cc promote.cc proto_fics.cc proto_p2p.cc proto_xboard.cc protocol.cc quickbar.cc script.cc seekgraph.cc sound.cc status.cc text.cc tstring.cc util.cc widgetproxy.cc langs.cc OBJS = board.o bugpane.o chess.o cimg.o clock.o dgtboard.o dlg_connect.o dlg_gamelist.o dlg_prefs.o global.o help.o history.o main.o mainwindow.o movelist.o network.o notebook.o ntext.o p2p.o pieces.o position.o promote.o proto_fics.o proto_p2p.o proto_xboard.o protocol.o quickbar.o script.o seekgraph.o sound.o status.o text.o tstring.o util.o widgetproxy.o langs.o HEADERS = board.h bugpane.h chess.h cimg.h clock.h config.h dgtboard.h dlg_connect.h dlg_gamelist.h dlg_prefs.h eboard.h global.h help.h history.h mainwindow.h movelist.h network.h notebook.h ntext.h p2p.h pieces.h position.h promote.h proto_fics.h proto_p2p.h proto_xboard.h protocol.h quickbar.h script.h seekgraph.h sound.h status.h stl.h text.h tstring.h util.h widgetproxy.h langs.h XPMS = addcons.xpm goc_open.xpm qb1.xpm spiral1.xpm b18.xpm goc_refresh.xpm qb2.xpm spiral2.xpm back1.xpm goc_save.xpm qb3.xpm spiral3.xpm backn.xpm hammer.xpm qb4.xpm toscratch.xpm dead.xpm icon-ads.xpm qb5.xpm trash.xpm fallback.xpm icon-console.xpm qb6.xpm trash2.xpm flip.xpm icon-eboard.xpm qbl.xpm treeeng.xpm forward1.xpm icon-games.xpm qbr.xpm treegam.xpm forwardn.xpm icon-local.xpm r18.xpm treeics.xpm gnupiece.xpm icon-moves.xpm sealoff.xpm treeoth.xpm goc_discard.xpm k18.xpm sealon.xpm treepgn.xpm goc_discardall.xpm movelist.xpm snd_edit.xpm treepgnf.xpm goc_display.xpm n18.xpm snd_test.xpm goc_edit.xpm q18.xpm spiral0.xpm MANS = eboard.6 eboard-addtheme.1 eboard-config.1 DATA = classic.png plastic.png ghouls.png NAG.en.txt eboard_themes.conf BUILDTOOLS = configure elifekam eboard-config.in eboard.spec.in eboard-addtheme TEXT = ChangeLog README INSTALL AUTHORS COPYING TODO all: eboard nls-dicts eboard: $(OBJS) $(CXX) $(LDFLAGS) -o eboard $(OBJS) .cc.o: $< $(HEADERS) $(XPMS) $(CXX) $(CXXFLAGS) -c $< -o $@ nls-dicts: $(MAKE) -C multilang dicts clean: rm -f $(OBJS) eboard *~ distclean: rm -f $(OBJS) eboard *~ config.h config.make Makefile $(DIST).tar.gz $(DIST).tar.bz2 eboard.spec eboard-config install: install-bin install-man install-data install-nls install-bin: eboard $(INSTALL) -d $(bindir) $(INSTALL) -m 0755 eboard $(bindir)/eboard $(INSTALL) -m 0755 eboard-config $(bindir)/eboard-config $(INSTALL) -m 0755 eboard-addtheme $(bindir)/eboard-addtheme install-man: $(INSTALL) -d $(mandir)/man1 $(INSTALL) -d $(mandir)/man6 $(INSTALL) -m 0644 eboard.6 $(mandir)/man6 $(INSTALL) -m 0644 eboard-addtheme.1 $(mandir)/man1 $(INSTALL) -m 0644 eboard-config.1 $(mandir)/man1 install-data: $(INSTALL) -d $(datadir) $(INSTALL) -m 0644 classic.png $(datadir)/classic.png $(INSTALL) -m 0644 ghouls.png $(datadir)/ghouls.png $(INSTALL) -m 0644 plastic.png $(datadir)/plastic.png $(INSTALL) -m 0644 eboard_themes.conf $(datadir)/eboard_themes.conf $(INSTALL) -m 0644 NAG.en.txt $(datadir)/NAG.en.txt install-nls: $(MAKE) -C multilang install-nls INSTALL=$(INSTALL) datadir=$(datadir) uninstall: rm -f $(bindir)/eboard rm -f $(bindir)/eboard-config rm -f $(bindir)/eboard-addtheme rm -f $(mandir)/man1/eboard-addtheme.1 rm -f $(mandir)/man1/eboard-config.1 rm -f $(mandir)/man6/eboard.6 rm -f $(datadir)/classic.png rm -f $(datadir)/ghouls.png rm -f $(datadir)/plastic.png rm -f $(datadir)/eboard_themes.conf rm -f $(datadir)/NAG.en.txt $(MAKE) -C multilang uninstall-nls datadir=$(datadir) dist: rm -rf $(DIST) $(DIST).tar.bz2 $(DIST).tar.gz mkdir $(DIST) mkdir $(DIST)/Documentation mkdir $(DIST)/multilang cp -f $(SRCS) $(DIST) cp -f $(HEADERS) $(DIST) cp -f $(XPMS) $(DIST) cp -f $(MANS) $(DIST) cp -f $(DATA) $(DIST) cp -f $(BUILDTOOLS) $(DIST) cp -f $(TEXT) $(DIST) $(MAKE) -C multilang dist DIST=$(DIST) $(MAKE) -C Documentation dist DIST=$(DIST) tar cf $(DIST).tar $(DIST) gzip $(DIST).tar tar cf $(DIST).tar $(DIST) bzip2 -9 $(DIST).tar rm -rf $(DIST) @echo wrote $(DIST).tar.gz and $(DIST).tar.bz2 eboard-1.1.1.orig/ntext.cc0000644000175000017500000005647110757567572014766 0ustar patrikpatrik/* $Id: ntext.cc,v 1.23 2008/02/22 14:34:29 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include "ntext.h" #include "global.h" NLine::NLine() { Text = NULL; NBytes = 0; Color = 0; Width = -1; time(&Timestamp); } NLine::NLine(const char *text, int color, int maxlen) { if (maxlen < 0) Text = g_strdup(text); else Text = g_strndup(text,maxlen); NBytes = strlen(Text); Color = color; Width = -1; time(&Timestamp); } NLine::~NLine() { if (Text!=NULL) free(Text); } FLine::FLine() { Text = NULL; NBytes = 0; Color = 0; makeStamp(); } FLine::FLine(const char *text, int color, int maxlen, time_t stamp) { if (maxlen < 0) Text = g_strdup(text); else Text = g_strndup(text, maxlen); NBytes = strlen(Text); Color = color; if (stamp == 0) time(&Timestamp); else Timestamp = stamp; makeStamp(); } FLine::FLine(NLine *src) { if (src->Text != NULL) Text = strdup(src->Text); else Text = NULL; NBytes = src->NBytes; Color = src->Color; Timestamp = src->Timestamp; makeStamp(); } void FLine::setSource(int src,int off) { Src = src; Off = off; } void FLine::makeStamp() { struct tm *lt; lt = localtime(&Timestamp); snprintf(stamp,11,"[%.2d:%.2d:%.2d] ",lt->tm_hour,lt->tm_min,lt->tm_sec); } TPoint::TPoint() { LineNum = ByteOffset = 0; } TPoint & TPoint::operator=(TPoint &src) { LineNum = src.LineNum; ByteOffset = src.ByteOffset; return(*this); } int TPoint::operator<(TPoint &src) { if (LineNum < src.LineNum) return 1; if (LineNum > src.LineNum) return 0; if (ByteOffset < src.ByteOffset) return 1; return 0; } int TPoint::operator>(TPoint &src) { if (LineNum > src.LineNum) return 1; if (LineNum < src.LineNum) return 0; if (ByteOffset > src.ByteOffset) return 1; return 0; } int TPoint::operator==(TPoint &src) { return(LineNum == src.LineNum && ByteOffset == src.ByteOffset); } int TPoint::operator<(int i) { return(LineNum(int i) { return(LineNum>i); } int TPoint::operator>=(int i) { return(LineNum>=i); } int TPoint::operator==(int i) { return(LineNum==i); } NText::NText() { fmtw = 1; lw = lh = 0; cw = ch = 0; leftb = rightb = 1; tsskip = -1; IgnoreChg = 0; WasAtBottom = true; MaxLines = 0; bgcolor = 0; havesel = false; dropmup = 0; toid = -1; lfl = -1; createGui(); } NText::~NText() { int i; for(i=0;i::iterator i; L.setFont(0,f); fh = 2 + L.fontHeight(0); fmtw = -1; /* invalidate current wrapping */ // invalidate cached line widths for(i=lines.begin();i!=lines.end();i++) (*i)->Width = -1; } void NText::setBG(int c) { bgcolor = c; if (canvas) repaint(); } void NText::append(const char *text, int len, int color) { int i; NLine *nl; char *p; if (len < 0) { discardExcess(); return; } p = strchr(text, '\n'); if (p!=NULL) { *p = 0; i = strlen(text); nl = new NLine(text, color); *p = '\n'; lines.push_back(nl); formatLine(lines.size()-1); append(&p[1], len-(i+1), color); return; } // if search for \n failed, this is a single line nl = new NLine(text, color); lines.push_back(nl); formatLine(lines.size()-1); discardExcess(); //fmtw = -1; } void NText::formatBuffer() { int i; // Timestamp a,b,c; // a = Timestamp::now(); for(i=0;iText; k = sl->NBytes; j = 0; color = sl->Color; // empty line if (k==0) { fl = new FLine(sl); fl->setSource(i,0); xlines.push_back(fl); return; } while(k-j > 0) { fit = false; // try full-fit for for unwrapped of last chunk of wrapping if (j==0 && sl->Width >= 0) { w = sl->Width; } else { if (!g_utf8_validate(tp+j,k-j,NULL)) continue; w = L.substringWidth(0,tp+j,k-j); if (j==0) sl->Width = w; } if (w <= elw) { fl = new FLine(tp+j, color, -1, sl->Timestamp); fl->setSource(i,j); xlines.push_back(fl); return; } for(l=k-1;l>=j;l--) if (tp[l] == ' ' || tp[l] == '\t') { if (!g_utf8_validate(tp+j,k-j,NULL)) continue; w = L.substringWidth(0,tp+j,l-j); if (w <= elw) { fl = new FLine(tp+j,color,l-j, sl->Timestamp); fl->setSource(i,j); xlines.push_back(fl); j = l+1; fit = true; break; } } // no blanks to wrap ? if (lTimestamp); fl->setSource(i,j); xlines.push_back(fl); j = k; } } } // topline: index of line rendered at the top of the widget // linecount: number of lines in the buffer // nlines: how many lines can be fit in the current widget void NText::setScroll(int topline, int linecount, int nlines) { GtkAdjustment prev; memcpy(&prev,vsa,sizeof(GtkAdjustment)); // printf("this=%x setScroll topline=%d linecount=%d nlines=%d\n", // (int)this,topline,linecount,nlines); // all text fits in the widget if (nlines >= linecount) { vsa->value = 0.0; vsa->lower = 0.0; vsa->upper = nlines; vsa->step_increment = 1.0; vsa->page_increment = nlines; vsa->page_size = nlines; } else { vsa->value = topline; vsa->lower = 0.0; vsa->upper = linecount; vsa->step_increment = 1.0; vsa->page_increment = nlines; vsa->page_size = nlines; } if (memcmp(&prev,vsa,sizeof(GtkAdjustment))!=0) { ++IgnoreChg; gtk_adjustment_changed(vsa); gtk_adjustment_value_changed(vsa); } } void NText::pageUp(float pages) { int nval, j, disp; j = xlines.size() - (int)(vsa->page_size); disp = (int) (pages*vsa->page_size); nval = (int) (vsa->value - disp); // printf("this=%x pageUp disp=%d nval=%d j=%d\n", // (int)this, disp, nval, j); if (nval < 0) nval = 0; if (nval > j) nval = j; WasAtBottom = false; setScroll(nval, xlines.size(), (int) (vsa->page_size)); repaint(); } void NText::pageDown(float pages) { int nval, j, disp; j = xlines.size() - (int)(vsa->page_size); disp = (int) (pages*vsa->page_size); nval = (int) (vsa->value + disp); // printf("this=%x pageDown disp=%d nval=%d j=%d\n", // (int)this, disp, nval, j); if (nval < 0) nval = 0; if (nval > j) nval = j; WasAtBottom = false; setScroll(nval, xlines.size(), (int) (vsa->page_size)); repaint(); } void NText::lineUp(int n) { int nval, j; j = xlines.size() - (int)(vsa->page_size); nval = (int) (vsa->value - n); if (nval < 0) nval = 0; if (nval > j) nval = j; WasAtBottom = false; setScroll(nval, xlines.size(), (int) (vsa->page_size)); repaint(); } void NText::lineDown(int n) { int nval, j; j = xlines.size() - (int)(vsa->page_size); nval = (int) (vsa->value + n); if (nval < 0) nval = 0; if (nval > j) nval = j; WasAtBottom = false; setScroll(nval, xlines.size(), (int) (vsa->page_size)); repaint(); } void NText::setScrollBack(int n) { if (n != (signed)MaxLines ) { if (n < 0) n=0; MaxLines = (unsigned) n; discardExcess(true); } } void NText::discardExcess(bool _repaint) { if (MaxLines != 0) if (lines.size() > MaxLines) { discardLines(lines.size() - MaxLines); if (_repaint) repaint(); } } void NText::discardLines(int n) { int i,top; if (n > (signed) lines.size()) n = lines.size(); if (!n) return; if (!xlines.size()) return; top = (int) (vsa->value); top = xlines[top]->Src; top -= n; // fix selection if (havesel) { A.LineNum -= n; B.LineNum -= n; if (A.LineNum < 0 || B.LineNum < 0) { havesel = false; gtk_selection_owner_set(NULL,GDK_SELECTION_PRIMARY,time(0)); } } // pop entries from main line index for(i=0;iSrc < n) { delete(xlines.front()); xlines.pop_front(); } deque::iterator j; for(j=xlines.begin();j!=xlines.end();j++) (*j)->Src -= n; // fix scroll values if (top < 0) top = 0; for(i=0;iSrc == top) { top = i; break; } if (top < 0) top = 0; setScroll(top, xlines.size(), (int) (vsa->page_size)); // does NOT repaint the widget, do it yourself } void NText::gotoLine(int n) { int i,j,xn; j = xlines.size(); xn = -1; for(i=0;iSrc == n) { xn = i; break; } if (xn < 0) return; if (xn < ((int)(vsa->value)) || xn >= ((int)(vsa->value+vsa->page_size))) { WasAtBottom = false; setScroll(xn, xlines.size(), (int) (vsa->page_size)); scheduleRepaint(50); } } bool NText::findTextUpward(int top, int bottom, const char *needle, bool select) { int a,b,i; a=0; b=lines.size()-1; if (top >= 0 && top <= b) a=top; if (bottom >= 0 && bottom <= b) b=bottom; for(i=b;i>=a;i--) if (matchTextInLine(i,needle,select)) { lfl = i; return true; } return false; } int NText::getLastFoundLine() { return lfl; } bool NText::matchTextInLine(int i, const char *needle, bool select) { int j; char *q; j = lines.size(); if (i>=j || i<0) return false; if (lines[i]->Text == NULL) return false; q = strstr(lines[i]->Text, needle); if (q!=NULL && select) { j = q-lines[i]->Text; selectRegion(i,j,i,j+strlen(needle)-1); } return(q!=NULL); } void NText::selectRegion(int startline, int startoff, int endline, int endoff) { int i,j; A.LineNum = startline; A.ByteOffset = startoff; B.LineNum = endline; B.ByteOffset = endoff; havesel = true; if (body != NULL) { if (!GTK_WIDGET_REALIZED(body)) gtk_widget_realize(body); gtk_selection_owner_set(body, GDK_SELECTION_PRIMARY,time(0)); } scheduleRepaint(); } bool NText::saveTextBuffer(const char *path) { int i; ofstream txt(path); if (!txt) return false; for(i=0;iText, lines[i]->NBytes); txt << endl; if (!txt) { txt.close(); return false; } } txt.close(); return true; } gboolean ntext_expose(GtkWidget *widget, GdkEventExpose *ee, gpointer data) { NText *me = (NText *) data; if (me->canvas == NULL) return FALSE; gdk_draw_pixmap(widget->window,widget->style->black_gc, me->canvas, ee->area.x, ee->area.y, ee->area.x, ee->area.y, ee->area.width, ee->area.height); return TRUE; } gboolean ntext_configure(GtkWidget *widget, GdkEventConfigure *ee, gpointer data) { NText *me = (NText *) data; int i, j, ww, wh, fh, lb, ri; int nl, tl, tb, ofh, tk; GdkGC *gc; GdkPixmap *g; LayoutBox *L; bool havesel; if (widget->window == NULL) return FALSE; gdk_window_get_size(widget->window, &ww, &wh); L = &(me->L); me->lw = ww - (me->leftb + me->rightb); me->lh = wh; if (me->canvas == NULL) { me->canvas = gdk_pixmap_new(widget->window, ww, wh, -1); me->cw = ww; me->ch = wh; me->cgc = gdk_gc_new(me->canvas); L->prepare(me->widget,me->canvas,me->cgc,0,0,ww,wh); L->setFont(0,global.ConsoleFont); if (me->canvas == NULL) cerr << "bug1\n"; } else { if (ww > me->cw || wh > me->ch) { gdk_pixmap_unref(me->canvas); if (me->cgc) gdk_gc_destroy(me->cgc); me->canvas = gdk_pixmap_new(widget->window, ww, wh, -1); me->cw = ww; me->ch = wh; me->cgc = gdk_gc_new(me->canvas); L->prepare(me->widget,me->canvas,me->cgc,0,0,ww,wh); L->setFont(0,global.ConsoleFont); if (me->canvas == NULL) cerr << "bug2\n"; } } ofh = me->fh; me->fh = L->fontHeight(0) + 2; if (me->fmtw != me->lw || me->fh != ofh) me->formatBuffer(); gc = me->cgc; g = me->canvas; fh = me->fh; lb = me->leftb; havesel = me->havesel; tb = wh % fh; if (tb > 2) tb-=2; L->setColor(me->bgcolor); L->drawRect(0,0,ww,wh,true); /* scrollbar calc */ j = me->xlines.size(); nl = wh / me->fh; if (nl >= j) tl = 0; else tl = (int) (me->vsa->value); // keep autoscrolling if seeing th bottom of the buffer if (me->WasAtBottom) { tl = j-nl; if (tl < 0) tl=0; } me->setScroll(tl,j,nl); if (!tl) tb=0; for(i=0;ixlines[i]->valid = false; TPoint a,b,c,d; FLine *fl; int o1,o2,pw,ox; char *pc,*nc; if (havesel) if (me->A < me->B) { a=me->A; b=me->B; } else { a=me->B; b=me->A; } tk = global.ShowTimestamp ? me->tsskip : 0; for(i=0;i= j) break; fl = me->xlines[ri]; if (tk != 0) { L->setColor(global.Colors.TextDefault); L->drawString(lb,tb+fh*i,0,fl->stamp); } L->setColor(fl->Color); if (!havesel) { L->drawSubstring(lb+tk,tb+fh*i,0,fl->Text,fl->NBytes); } else { c.LineNum = fl->Src; c.ByteOffset = fl->Off; d.LineNum = fl->Src; d.ByteOffset = fl->Off + fl->NBytes - 1; if (b < c || d < a) L->drawSubstring(lb+tk,tb+fh*i,0,fl->Text,fl->NBytes); else { o1 = 0; if (c < a) o1 = a.ByteOffset - fl->Off; o2 = fl->NBytes - 1; if (b < d) o2 = b.ByteOffset - fl->Off; nc = fl->Text+o2; pc = g_utf8_next_char(nc); o2 += (pc-nc-1); ox = 0; if (o1 > 0) { ox = L->substringWidth(0,fl->Text,o1); L->setColor(fl->Color); L->drawSubstring(lb+tk,tb+fh*i,0,fl->Text,o1); } pw = L->substringWidth(0,fl->Text+o1,o2-o1+1); L->setColor(fl->Color); L->drawRect(lb+ox+tk,tb+fh*i,pw,fh,true); L->setColor(me->bgcolor); L->drawSubstring(lb+ox+tk,tb+fh*i,0,fl->Text+o1,o2-o1+1); ox += pw; L->setColor(fl->Color); if (o2+1 != fl->NBytes) L->drawString(lb+ox+tk,tb+fh*i,0,fl->Text+o2+1); } } fl->valid = true; fl->X = lb+tk; fl->Y = tb+fh*i; fl->H = fh; } me->WasAtBottom = (i+tl == j); return TRUE; } void ntext_sbchange(GtkAdjustment *adj, gpointer data) { NText *me = (NText *) data; if (me->IgnoreChg) me->IgnoreChg--; else { me->WasAtBottom = false; me->repaint(); } } void NText::freeOldSelections() { char *x; while(!prevsel.empty()) { x = prevsel.top(); free(x); prevsel.pop(); } } bool NText::calcTP(TPoint &t, int x,int y) { int i,j,lastvalid; int l,r; /* binary search limits of length */ int p,q; char *fc, *nc, *pc; if (!L.prepared()) return false; lastvalid = -1; for(i=0;ivalid) { lastvalid = i; if (y>=xlines[i]->Y && y<(xlines[i]->Y+xlines[i]->H)) { t.LineNum = xlines[i]->Src; if (x <= xlines[i]->X) { t.ByteOffset = xlines[i]->Off; return true; } fc = xlines[i]->Text; nc = fc; p=q=0; do { pc = g_utf8_next_char(nc); t.ByteOffset = (nc-fc) + xlines[i]->Off; q = L.substringWidth(0,fc,pc-fc); q += xlines[i]->X; nc = pc; } while(nc[0]!=0 && q < x); return true; } } // set point at the end of text when the user clicks past the end */ if (lastvalid >= 0) { t.LineNum = xlines[lastvalid]->Src; t.ByteOffset = xlines[lastvalid]->NBytes - 1; return true; } return false; /* no match (no visible lines at all ?!?) */ } /* scroll wheel for GTK 2 */ gboolean ntext_scroll(GtkWidget *widget, GdkEventScroll *es, gpointer data) { NText *me = (NText *) data; if (es->direction == GDK_SCROLL_UP) me->lineUp(1); if (es->direction == GDK_SCROLL_DOWN) me->lineDown(1); return TRUE; } /* 1. clears the selection 2. prepares A end point */ gboolean ntext_mdown(GtkWidget *widget, GdkEventButton *eb, gpointer data) { NText *me = (NText *) data; TPoint c; char *tl,*l,*r,*ml,*mr; if (!eb) return FALSE; if (eb->button == 1) { switch(eb->type) { case GDK_2BUTTON_PRESS: // select word if (me->calcTP(c, (int)(eb->x), (int)(eb->y))) { tl = me->lines[c.LineNum]->Text; if (isspace(tl[c.ByteOffset])) return FALSE; me->A = c; me->B = c; l = r = &tl[c.ByteOffset]; ml = tl; mr = &tl[ me->lines[c.LineNum]->NBytes - 1]; // walk left while(l>=ml && !isspace(*l)) l = g_utf8_prev_char(l); if (l!=ml) l = g_utf8_next_char(l); // walk right while(r<=mr && !isspace(*r)) r = g_utf8_next_char(r); if (r!=mr) r = g_utf8_prev_char(r); me->A.ByteOffset = l - tl; me->B.ByteOffset = r - tl; me->havesel = true; me->dropmup++; gtk_selection_owner_set(me->body, GDK_SELECTION_PRIMARY,eb->time); me->scheduleRepaint(); } break; case GDK_3BUTTON_PRESS: // select whole line if (me->calcTP(c, (int)(eb->x), (int)(eb->y))) { me->havesel = true; me->A = c; me->B = c; me->A.ByteOffset = 0; me->B.ByteOffset = me->lines[c.LineNum]->NBytes - 1; me->dropmup++; gtk_selection_owner_set(me->body, GDK_SELECTION_PRIMARY,eb->time); me->scheduleRepaint(); } break; default: me->havesel = me->calcTP(me->A, (int)(eb->x), (int)(eb->y)); if (me->havesel) { me->B = me->A; gtk_selection_owner_set(me->body, GDK_SELECTION_PRIMARY,eb->time); } } } return TRUE; } /* 1. prepare B end point 2. if A==B (offset-wise), clear selection */ gboolean ntext_mup(GtkWidget *widget, GdkEventButton *eb, gpointer data) { NText *me = (NText *) data; TPoint c; bool dirty = false; if (!eb) return FALSE; if (eb->button == 1) { if (!me->havesel) return FALSE; if (me->dropmup) { me->dropmup--; return FALSE; } if (me->calcTP(c, (int) (eb->x), (int) (eb->y))) { me->B = c; dirty = true; } if (me->A == me->B) { me->havesel = false; dirty = true; } if (dirty) me->repaint(); if (me->havesel) gtk_selection_owner_set(me->body, GDK_SELECTION_PRIMARY,eb->time); } return TRUE; } /* what it does: 1. prepares B end point */ gboolean ntext_mdrag(GtkWidget *widget, GdkEventMotion *em, gpointer data) { NText *me = (NText *) data; TPoint c; int x,y; if (!em) return FALSE; if (!me->havesel) return FALSE; if (em->state & GDK_BUTTON1_MASK) { x = (int)(em->x); y = (int)(em->y); if (y > me->ch) { me->lineDown(1); return TRUE; } if (y < 0) { me->lineUp(1); return TRUE; } if (me->calcTP(c, x, y)) { me->B = c; me->scheduleRepaint(); } } return TRUE; } gboolean ntext_ksel(GtkWidget * widget, GdkEventSelection * event, gpointer data) { NText *me = (NText *) data; me->havesel = false; me->scheduleRepaint(); me->freeOldSelections(); return TRUE; } void ntext_getsel(GtkWidget * widget, GtkSelectionData * seldata, guint info, guint time, gpointer data) { NText *me = (NText *) data; int i,sz; char *txt,*p,*q; TPoint a,b; if (me->havesel) { if (me->A < me->B) { a=me->A; b=me->B; } else { a=me->B; b=me->A; } if (a.LineNum == b.LineNum) { sz = b.ByteOffset - a.ByteOffset + 2; } else { sz = me->lines[a.LineNum]->NBytes - a.ByteOffset; sz += b.ByteOffset + 1; sz++; // \n from first line for(i=a.LineNum+1;ilines[i]->NBytes + 1; sz++; // nul terminator } // account for a long UTF-8 sequence at TPoint b p = me->lines[b.LineNum]->Text + b.ByteOffset; q = g_utf8_next_char(p); sz += q-p-1; txt = (char*) malloc(sz); memset(txt,0,sz); if (a.LineNum == b.LineNum) { g_strlcpy(txt,me->lines[a.LineNum]->Text + a.ByteOffset,sz); } else { g_strlcpy(txt,me->lines[a.LineNum]->Text + a.ByteOffset,sz); g_strlcat(txt,"\n",sz); for(i=a.LineNum+1;ilines[i]->Text,sz); g_strlcat(txt,"\n",sz); } g_strlcat(txt,me->lines[b.LineNum]->Text,sz); } gtk_selection_data_set_text(seldata, txt, -1); me->freeOldSelections(); me->prevsel.push(txt); } } gboolean ntext_redraw(gpointer data) { NText *me = (NText *) data; me->toid = -1; if (me->canvas) me->repaint(); return FALSE; } void NText::scheduleRepaint(int latency) { if (toid < 0) toid = gtk_timeout_add(latency,ntext_redraw,(gpointer) this); } eboard-1.1.1.orig/main.cc0000644000175000017500000000674610757567572014550 0ustar patrikpatrik/* $Id: main.cc,v 1.27 2007/02/01 21:29:39 pierrebou Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "config.h" #include "mainwindow.h" #include "global.h" #include "sound.h" #include "help.h" #include "eboard.h" #include "dgtboard.h" #ifdef HAVE_LINUX_JOYSTICK_H #include #endif void sigint_handler(int par); #ifdef HAVE_LINUX_JOYSTICK_H void openJoystick(MainWindow *mw); void closeJoystick(); #endif int main(int argc,char **argv) { list::iterator zomb; int i; MainWindow *z; char *dgtport = NULL; if (strstr(argv[0],"beeper")) { SoundSlave slave; slave.waitForEvents(); return 0; } g_strlcpy(global.argv0,argv[0],512); signal(SIGPIPE,SIG_IGN); // signal(SIGUSR1,dump_tables); // for debugging signal(SIGINT,sigint_handler); #ifdef ENABLE_NLS langs_prepare(0, "eboard", DATADIR "/eboard:/usr/share/eboard:/usr/local/share/eboard:.:multilang"); #endif gtk_set_locale (); gtk_init(&argc,&argv); gdk_rgb_init(); for(i=1;ishow(); z->restoreDesk(); if (global.PopupHelp) (new Help::GettingStarted())->show(); if (dgtport!=NULL) { dgtInit(dgtport, z); dgtSetBoard(global.BoardList.front()); } #ifdef HAVE_LINUX_JOYSTICK_H openJoystick(z); #endif gtk_main(); #ifdef HAVE_LINUX_JOYSTICK_H closeJoystick(); #endif for(zomb=global.TheOffspring.begin();zomb!=global.TheOffspring.end(); zomb++) kill(*zomb,SIGKILL); global.LogAppend("finished gracefully"); return 0; } void sigint_handler(int par) { static bool told_to_quit_already = false; global.LogAppend("SIGINT caught"); if (told_to_quit_already) { exit(-2); } else { told_to_quit_already = true; gtk_main_quit(); } } #ifdef HAVE_LINUX_JOYSTICK_H void openJoystick(MainWindow *mw) { int i,fd; char devname[64]; for(i=0;i<10;i++) { snprintf(devname,64,"/dev/js%d",i); fd = open(devname,O_RDONLY); if (fd >= 0) break; } if (fd < 0) return; global.JoystickFD = fd; gdk_input_add(fd, GDK_INPUT_READ,(GdkInputFunction) mainwindow_joystick, (gpointer) mw); } void closeJoystick() { if (global.JoystickFD > 0) { gdk_input_remove(global.JoystickFD); close(global.JoystickFD); global.JoystickFD = -1; } } #endif eboard-1.1.1.orig/notebook.cc0000644000175000017500000002323010757567572015427 0ustar patrikpatrik/* $Id: notebook.cc,v 1.31 2007/05/23 18:28:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "eboard.h" #include "global.h" #include "notebook.h" #include "dead.xpm" #include "trash2.xpm" void page_trash(GtkWidget *w, gpointer data) { Page *p; p=(Page *) data; global.removeRemovablePage(p->number); } Page::Page() { global.debug("Page","Page","1"); number=0; content=0; title[0]=0; naughty=false; level=IM_ZERO; label=gtk_label_new(""); gshow(label); } Page::Page(int _number,GtkWidget *_content, char *_title, bool _removable) { GtkWidget *b,*p; global.debug("Page","Page","2"); number=_number; content=_content; level=IM_ZERO; naughty=false; removable=_removable; g_strlcpy(title,_title,256); if (removable) { labelframe=gtk_hbox_new(FALSE,1); Notebook::ensurePixmaps(); b=gtk_button_new(); gtk_button_set_relief(GTK_BUTTON(b), GTK_RELIEF_HALF); p=gtk_pixmap_new(Notebook::trashface, Notebook::trashmask); gtk_container_add(GTK_CONTAINER(b), p); gtk_box_pack_start(GTK_BOX(labelframe), b, FALSE, FALSE, 0); label=gtk_label_new(title); gtk_box_pack_start(GTK_BOX(labelframe), label, FALSE, TRUE, 1); Gtk::show(p,b,label,labelframe,NULL); gtk_signal_connect(GTK_OBJECT(b),"clicked", GTK_SIGNAL_FUNC(page_trash), (gpointer) this); } else { label=gtk_label_new(title); gshow(label); labelframe=label; } } int Page::operator==(int n) { return(n==number); } int Page::under(Importance imp) { return(level < imp); } int Page::above(Importance imp) { return(level > imp); } void Page::setLevel(Importance imp) { level=imp; } void Page::setTitle(char *_title) { g_strlcpy(title,_title,256); gtk_label_set_text(GTK_LABEL(label),title); gtk_widget_queue_resize(label); } char * Page::getTitle() { return(title); } void Page::renumber(int newid) { char z[258]; number=newid; snprintf(z,258,"{%s}",title); setTitle(z); } void Page::dump() { cerr.setf(ios::hex,ios::basefield); cerr.setf(ios::showbase); cerr << "[page " << ((uint64_t)this) << "] "; cerr.setf(ios::dec,ios::basefield); cerr << "pageid=" << number << " "; cerr << "title=" << title << " "; cerr << "level=" << ((int)level) << endl; } GdkPixmap * Notebook::trashface=0; GdkBitmap * Notebook::trashmask=0; GtkWidget * Notebook::swidget=0; void Notebook::ensurePixmaps() { GtkStyle *style; if (swidget==0) return; if (trashface==0) { style=gtk_widget_get_style(swidget); trashface = gdk_pixmap_create_from_xpm_d (swidget->window, &trashmask, &style->bg[GTK_STATE_NORMAL], (gchar **) trash2_xpm); } } Notebook::Notebook() { global.debug("Notebook","Notebook"); pcl=0; widget=gtk_notebook_new(); swidget=widget; gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widget),GTK_POS_RIGHT); gtk_notebook_set_scrollable(GTK_NOTEBOOK(widget),TRUE); gtk_signal_connect(GTK_OBJECT(widget),"switch_page", GTK_SIGNAL_FUNC(notebook_switch_page), (gpointer)this); } void Notebook::addPage(GtkWidget *what,char *title,int id,bool removable) { Page *pg; global.debug("Notebook","addPage",title); pg=new Page(id,what,title,removable); pages.push_back(pg); gtk_notebook_append_page(GTK_NOTEBOOK(widget),what,pg->labelframe); /* to test graphics only, adds dead.xpm to console tab if (pages.size() == 2) addBombToTab(pg); */ } void Notebook::removePage(int id) { vector::iterator pi; int i; global.debug("Notebook","removePage"); for(i=0,pi=pages.begin();pi!=pages.end();pi++,i++) if ( (*(*pi)) == id ) { gtk_notebook_remove_page(GTK_NOTEBOOK(widget),i); delete(*pi); pages.erase(pi); return; } } unsigned int Notebook::getCurrentPage() { return((unsigned int)gtk_notebook_get_current_page(GTK_NOTEBOOK(widget))); } int Notebook::getCurrentPageId() { unsigned int i; i=getCurrentPage(); if (i >= pages.size()) return 0; return( pages[i]->number ); } void Notebook::setTabColor(int pageid,int color,Importance imp) { vector::iterator pi; int i; global.debug("Notebook","setTabColor","1"); for(i=0,pi=pages.begin();pi!=pages.end();pi++,i++) if ( (*(*pi)) == pageid ) { setTabColor(i,color,0,imp); return; } } void Notebook::setTabColor(int page_num,int color,int poly, Importance imp) { vector::iterator pi; GdkColor nc; GtkStyle *style; int i; i=page_num; global.debug("Notebook","setTabColor","2"); for(pi=pages.begin();i;pi++,i--) ; if ((*pi)->above(imp)) return; if (imp==IM_RESET) imp=IM_ZERO; (*pi)->setLevel(imp); nc.red=((color>>16)<<8); nc.green=(color&0x00ff00); nc.blue=((color&0xff)<<8); style=gtk_style_copy( gtk_widget_get_style((*pi)->label) ); for(i=0;i<5;i++) style->fg[i]=nc; gtk_widget_set_style( (*pi)->label, style ); gtk_widget_ensure_style( (*pi)->label ); gtk_widget_queue_draw( (*pi)->label ); gtk_style_unref(style); // tomv, leak } void Notebook::goToPageId(int id) { vector::iterator pi; int i; for(i=0,pi=pages.begin();pi!=pages.end();pi++,i++) if ( (*(*pi)) == id ) { gtk_notebook_set_page(GTK_NOTEBOOK(widget),i); return; } } void Notebook::setTabPosition(GtkPositionType pos) { gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widget),pos); } void Notebook::dump() { vector::iterator pi; for(pi=pages.begin();pi!=pages.end();pi++) (*pi)->dump(); } void Notebook::goToNext() { gtk_notebook_next_page(GTK_NOTEBOOK(widget)); } void Notebook::goToPrevious() { gtk_notebook_prev_page(GTK_NOTEBOOK(widget)); } void Notebook::renumberPage(int oldid,int newid) { vector::iterator i; for(i=pages.begin();i!=pages.end();i++) if ( (*(*i)) == oldid ) (*i)->renumber(newid); } void Notebook::setListener(PaneChangeListener *listener) { pcl=listener; } void Notebook::setNaughty(int pageid, bool val) { vector::iterator i; for(i=pages.begin();i!=pages.end();i++) if ( (*(*i)) == pageid ) { if ( (val)&&(! (*i)->naughty) ) addBombToTab(*i); (*i)->naughty=val; } } void Notebook::getNaughty(vector &evil_ids) { vector::iterator i; evil_ids.clear(); for(i=pages.begin();i!=pages.end();i++) if ( (*i)->naughty ) evil_ids.push_back( (*i)->number ); } bool Notebook::isNaughty(int pageid) { vector::iterator i; for(i=pages.begin();i!=pages.end();i++) if ( (*i)->number == pageid ) if ((*i)->naughty) return true; return false; } bool Notebook::hasNaughty() { vector::iterator i; for(i=pages.begin();i!=pages.end();i++) if ( (*i)->naughty ) return true; return false; } // SOMEONE SET UP US THE BOMB! void Notebook::addBombToTab(Page *pg) { GtkWidget *hb,*label,*pm; GdkPixmap *d; GdkBitmap *b; GtkStyle *style; style=gtk_widget_get_default_style(); d = gdk_pixmap_create_from_xpm_d (widget->window, &b, &style->bg[GTK_STATE_NORMAL], (gchar **) dead_xpm); pm=gtk_pixmap_new(d,b); label=gtk_label_new(pg->getTitle()); hb=gtk_hbox_new(FALSE,2); gtk_box_pack_start(GTK_BOX(hb),label,FALSE,FALSE,4); gtk_box_pack_start(GTK_BOX(hb),pm,FALSE,FALSE,4); Gtk::show(label,pm,hb,NULL); pg->label=label; gtk_notebook_set_tab_label(GTK_NOTEBOOK(widget),pg->content,hb); } void Notebook::pretendPaneChanged() { if (pcl) pcl->paneChanged( getCurrentPage(), getCurrentPageId() ); } void notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer data) { Notebook *me; unsigned int pg = (unsigned int) page_num; me=(Notebook *)data; me->setTabColor(pg,0,0,IM_RESET); if ( (me->pcl) && (me->pages.size() > pg) ) me->pcl->paneChanged(pg, me->pages[pg]->number); } // ================================================================ NotebookInsider::NotebookInsider() { mynotebook=0; pgid=0; } void NotebookInsider::setNotebook(Notebook *nb,int pageid) { pgid=pageid; mynotebook=nb; } void NotebookInsider::contentUpdated() { int color=0xff0000; Importance maxi=IM_NORMAL; global.debug("NotebookInsider","contentUpdated"); if (!impstack.empty()) { maxi=IM_IGNORE; while(!impstack.empty()) { if (impstack.top() > maxi) maxi=impstack.top(); impstack.pop(); } switch(maxi) { case IM_IGNORE: return; case IM_NORMAL: color=0xff0000; break; case IM_PERSONAL: color=0x0000ff; break; default: color=0x00ff00; /* will never happen */ break; } } if (!mynotebook) return; if (mynotebook->getCurrentPageId() != pgid) mynotebook->setTabColor(pgid,color,maxi); } void NotebookInsider::pop() { global.debug("NotebookInsider","pop"); if (!mynotebook) return; mynotebook->goToPageId(pgid); } void NotebookInsider::pushLevel(Importance imp) { impstack.push(imp); } int NotebookInsider::getPageId() { return(pgid); } eboard-1.1.1.orig/global.h0000644000175000017500000002135110757567572014713 0ustar patrikpatrik/* $Id: global.h,v 1.87 2008/02/22 07:32:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef GLOBAL_H #define GLOBAL_H 1 #include #include "eboard.h" #include "text.h" #include "network.h" #include "protocol.h" #include "position.h" #include "chess.h" #include "sound.h" #include "seekgraph.h" #include "history.h" #include "bugpane.h" #include "clock.h" #include "stl.h" class Board; class OutputPane; class TextSet; class NetConnection; class Status; class Protocol; class ChessGame; class Notebook; class QuickBar; class QButton; class SeekGraph; class SoundSlave; class StringCollection; class BugPane; class PieceSet; class VectorPieces; class HostBookmark { public: HostBookmark(); int operator==(HostBookmark *hbm); char host[128]; int port; char protocol[64]; }; class EngineBookmark { public: int operator==(EngineBookmark *ebm); void read(tstring &t); string caption; string directory; string cmdline; int humanwhite; TimeControl timecontrol; int maxply; int think; int proto; variant mode; }; class ZombieHunter { public: ZombieHunter(); ~ZombieHunter(); void add(int pid, SigChildHandler *sigh); private: void handleSigChild(); friend void zh_sigchild_handler(int sig); vector pids; vector handlers; }; void zh_sigchild_handler(int sig); class IcsChannel { public: IcsChannel(char *s); // s like "49\tmamer tourneys\n" string name; int number; }; class ChannelSplitter : public SigChildHandler { public: virtual ~ChannelSplitter() {} void appendToChannel(int ch,char *msg,int color,Importance im=IM_NORMAL); virtual Notebook * getNotebook()=0; void removeRemovablePage(int n); void getChannels(char *ipaddr); void channelPageUp(int ch); void channelPageDown(int ch); void ZombieNotification(int pid); void updateFont(); protected: void updateChannelScrollBacks(); private: void ensurePane(int ch); void createPane(int ch); void parseChannelList(); const char * getChannelTitle(int n); vector panes; vector numbers; string chlist; vector channels; }; class TerminalColor { public: TerminalColor(); void read(tstring &t); int TextDefault; int TextBright; int PrivateTell; int NewsNotify; int Mamer; int KibitzWhisper; int Shouts; int Seeks; int ChannelTell; int Engine; int Background; }; class WindowGeometry { public: WindowGeometry(int a,int b,int c,int d); WindowGeometry(); void read(tstring &t); void print(); void retrieve(GtkWidget *w); bool isNull(); void setNull(); int X,Y,W,H; }; class Desktop { public: Desktop(); void clear(); void read(tstring &t); void readConsole(tstring &t); void writeConsoles(ostream &s, const char *key); void addConsole(DetachedConsole *dc); void spawnConsoles(TextSet *ts); WindowGeometry wMain, wGames, wLocal, wAds; int PanePosition; private: vector consoles; vector cfilters; }; class Environment { public: Environment(); string Home; string User; string Config; }; class Global : public ChannelSplitter { public: Global(); virtual ~Global() {} ChessGame * getGame(int num); void removeBoard(Board *b); int nextFreeGameId(int base); void repaintAllBoards(); void appendGame(ChessGame *cg,bool RenumberDupes=true); void prependGame(ChessGame *cg,bool RenumberDupes=true); void deleteGame(ChessGame *cg); void statOS(); void ensureDirectories(); void readRC(); void writeRC(); void addHostBookmark(HostBookmark *hbm); void addEngineBookmark(EngineBookmark *ebm); void WrappedMainIteration(); void WrappedMainQuit(); void LogAppend(char *msg); void debug(char *klass,char *method,char *data=0); void dumpGames(); void dumpBoards(); void dumpPanes(); void gatherConsoleState(); void addAgent(NetConnection *ag); void removeAgent(NetConnection *ag); void agentBroadcast(char *z); int receiveAgentLine(char *dest,int limit); bool effectiveLegalityChecking(); /* issue sound events */ void opponentMoved(); void drawOffered(); void privatelyTold(); void challenged(); void timeRunningOut(); void gameWon(); void gameLost(); void gameStarted(); void gameFinished(); void moveMade(); void flushSound(); void setPasswordMode(int pm); // void clearSoundStack(); void updateScrollBacks(); void dropQuickbarButtons(); bool hasSoundFile(string &p); Notebook * getNotebook(); void setPieceSet(string &filename,bool chgPieces,bool chgSquares); void respawnPieceSet(); void addPieceClient(PieceChangeListener *pcl); void removePieceClient(PieceChangeListener *pcl); char * filter(char *s); // free with free() as usual static void * safeMalloc(int nbytes); list GameList; list::iterator GLi; list BoardList; list::iterator BLi; list TheOffspring; list Agents; list Consoles; list PieceClients; VectorPieces vpieces; PieceSet *pieceset; InputHandler *input; OutputPane *output; NetConnection *network; Status *status; Protocol *protocol; ConnectionHandler *chandler; PieceProvider *promotion; Notebook *ebook; SeekGraph2 *skgraph2; History *inputhistory; BookmarkListener *bmlistener; UpdateInterface *qbcontainer; QuickBar *quickbar; GtkWidget *killbox; GtkWidget *lowernotebook; GtkWidget *mainpaned; GtkWidget *toplevelwidget; BugPane *bugpane; IONotificationInterface *iowatcher; JoystickListener *joycapture; StringCollection annotator; SoundSlave sndslave; ZombieHunter zombies; int SelfInputColor; int PasswordMode; int LastScratch; int HilightLastMove; int AnimateMoves; int Premove; int TabPos; // 0=R 1=L 2=T 3=B char ClockFont[96]; char PlayerFont[96]; char InfoFont[96]; char ConsoleFont[96]; char SeekFont[96]; int PlainSquares; int LightSqColor; int DarkSqColor; int ShowTimestamp; int ShowRating; int ScrollBack; int FicsAutoLogin; int IcsSeekGraph; int HideSeeks; int BeepWhenOppMoves; int EnableSounds; int UseVectorPieces; int CheckLegality; int SpecialChars; // 0=none 1=truncate 2=underscore 3=soft translate (a^) int SplitChannels; int ChannelsToConsoleToo; int DrawHouseStock; int AppendPlayed; int AppendObserved; char AppendFile[128]; int PopupSecondaryGames; int SmartDiscard; int ShowCoordinates; int ShowQuickbar; int RetrieveChannelNames; bool PopupHelp; int LowTimeWarningLimit; int SmootherAnimation; int IcsAllObPlayed; int IcsAllObObserved; int JSCursorAxis; int JSBrowseAxis; int JSMoveButton; int JSNextTabButton; int JSPrevTabButton; int JSMode; int JSSpeed; char P2PName[64]; TerminalColor Colors; Desktop Desk; // 0=opponent moved, 1=draw offer 2=pvt tell 3=challenged // 4=time running out // 5=won game 6=lost game 7=game started // 8=game over (observed) // 9=moved (observed) SoundEvent sndevents[N_SOUND_EVENTS]; int CommLog; int DebugLog; int PauseLog; int Quitting; list HostHistory; list EnginePresets; vector SoundFiles; vector QuickbarButtons; char * Version; char SystemType[64]; char argv0[512]; Environment env; string ConsoleReply; int JoystickFD; private: int createDir(char *z); void renumberGame(ChessGame *cg,int id); void clearDupes(ChessGame *cg); void playOther(int i); void unicodeNormalize(string &dest, gunichar src); int MainLevel; int QuitPending; vector RCKeys; stack SoundStack; }; #ifndef GLOBAL_CC extern Global global; #endif #endif eboard-1.1.1.orig/proto_fics.h0000644000175000017500000001456210757567572015630 0ustar patrikpatrik/* $Id: proto_fics.h,v 1.50 2008/02/08 14:25:51 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // don't #include this, #include protocol.h instead #ifndef PROTO_FICS_H #define PROTO_FICS_H 1 #include #include "stl.h" #include "position.h" class FicsProtocol : public Protocol { public: FicsProtocol(); virtual ~FicsProtocol(); void receiveString(char *netstring); void sendMove(int x1,int y1,int x2,int y2,int prom); void sendDrop(piece p,int x,int y); void finalize(); int hasAuthenticationPrompts(); void resign(); void draw(); void adjourn(); void abort(); void discardGame(int gameid); void queryGameList(GameListConsumer *glc); void queryAdList(GameListConsumer *glc); void observe(int gameid); void answerAd(int adid); void exaForward(int n); void exaBackward(int n); void refreshSeeks(bool create); vector * getPlayerActions(); vector * getGameActions(); void callPlayerAction(char *player, string *action); void callGameAction(int gameid, string *action); private: void createGame(ExtPatternMatcher &pm); void createExaminedGame(int gameid,char *whitep,char *blackp); void createScratchPos(int gameid,char *whitep,char *blackp); void addGame(ExtPatternMatcher &pm); void removeGame(ExtPatternMatcher &pm); void innerRemoveGame(int gameid); void parseStyle12(char *data); void gameOver(ExtPatternMatcher &pm, GameResult result); void updateGame(ExtPatternMatcher &pm); void attachHouseStock(ExtPatternMatcher &pm, bool OnlyForBughouse); void clearMoveBuffer(); void retrieve1(ExtPatternMatcher &pm); void retrieve2(ExtPatternMatcher &pm); void retrievef(); void retrieveMoves(ExtPatternMatcher &pm); void sendGameListEntry(); void sendAdListEntry(char *pat); void sendInitialization(); char *knowRating(char *player); void clearRatingBuffer(); void ensureSeekGraph(); void seekAdd(ExtPatternMatcher &pm); void seekRemove(ExtPatternMatcher &pm); void doPlayerAction(char *player, int id); void doGameAction(int gameid, int id); void prepareBugPane(); void updateVar(ProtocolVar pv); bool doAllOb1(); void doAllOb2(); friend gboolean fics_allob(gpointer data); /* private parsing state and parsing methods */ bool AuthGone; bool InitSent; bool LecBotSpecial; bool LastWasStyle12; bool LastWasPrompt; bool UseMsecs; bool RetrievingGameList; bool RetrievingAdList; int RetrievingMoves; int PendingStatus; int LastChannel; int LastColor; /* all parser* methods return true if all parsing has been done, false if something must still be done. (and I'm trying to avoid any false returns, making it all functional-programming-happy) */ bool parser1(char *T); /* prompt removal */ bool parser2(char *T); /* early login */ bool parser3(char *T); /* game events */ bool parser4(char *T); /* list retrieval */ bool parser5(char *T); /* server/game events */ bool parser6(char *T); /* game termination */ bool parser7(char *T); /* bughouse and other oddities */ bool parser8(char *T); /* chat */ bool doOutput(char *msg, int channel, bool personal, int msgcolor); PatternBinder Binder; PatternMatcher WelcomeMessage; PatternMatcher UserName; ExtPatternMatcher Login; ExtPatternMatcher Password; ExtPatternMatcher Prompt; ExtPatternMatcher CreateGame; ExtPatternMatcher CreateGame0; ExtPatternMatcher ContinueGame; ExtPatternMatcher BeginObserve; ExtPatternMatcher EndObserve; ExtPatternMatcher NotObserve; ExtPatternMatcher EndExamine; ExtPatternMatcher GameStatus; ExtPatternMatcher ExaGameStatus; ExtPatternMatcher GameListEntry; ExtPatternMatcher EndOfGameList; ExtPatternMatcher AdListEntry; ExtPatternMatcher EndOfAdList; ExtPatternMatcher Style12; ExtPatternMatcher Style12House; ExtPatternMatcher Style12BadHouse; ExtPatternMatcher WhiteWon; ExtPatternMatcher BlackWon; ExtPatternMatcher Drawn; ExtPatternMatcher Interrupted; ExtPatternMatcher DrawOffer; ExtPatternMatcher PrivateTell; ExtPatternMatcher News; ExtPatternMatcher MovesHeader; ExtPatternMatcher MovesHeader2; ExtPatternMatcher MovesHeader3; ExtPatternMatcher MovesHeader4; ExtPatternMatcher MovesBody; ExtPatternMatcher MovesBody2; ExtPatternMatcher MovesEnd; ExtPatternMatcher Kibitz; ExtPatternMatcher Whisper; ExtPatternMatcher Say; ExtPatternMatcher Say2; ExtPatternMatcher Shout; ExtPatternMatcher cShout; ExtPatternMatcher It; ExtPatternMatcher ChannelTell; ExtPatternMatcher Seek; ExtPatternMatcher Notify; ExtPatternMatcher Challenge; ExtPatternMatcher LectureBotXTell; ExtPatternMatcher LectureBotXTellContinued; ExtPatternMatcher PTell; ExtPatternMatcher GotPartnerGame; ExtPatternMatcher ObsInfoLine; ExtPatternMatcher MsSet; // seek graph ExtPatternMatcher SgClear; ExtPatternMatcher SgAdd; ExtPatternMatcher SgAdd2; ExtPatternMatcher SgRemove; ExtPatternMatcher SgRemove2; ExtPatternMatcher AllObNone; ExtPatternMatcher AllObFirstLine; ExtPatternMatcher AllObMidLine; int AllObState; char AllObAcc[1024]; char nick[64]; piece style12table[256]; list MoveBuf; deque MoveRetrievals; deque AllObReqs; vector PActions, GActions; Position WildStartPos; GameListConsumer *lastGLC, *lastALC; // 2-position circular buffer to keep rating parsing state char xxplayer[2][64]; char xxrating[2][64]; int xxnext; int PartnerGame; bool UserPlayingWithWhite; /* for won/lost sound event tracking */ }; gboolean fics_allob(gpointer data); #endif eboard-1.1.1.orig/eboard.h0000644000175000017500000001210210757567572014701 0ustar patrikpatrik/* $Id: eboard.h,v 1.50 2008/02/08 14:25:50 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_H #define EBOARD_H 1 #include #include #include "config.h" #define EMPTY 0x00 #define BLACK 0x10 #define WHITE 0x20 #define ROOK 0x01 #define KNIGHT 0x02 #define BISHOP 0x03 #define QUEEN 0x04 #define KING 0x05 #define PAWN 0x06 // to keep track of promoted pieces in zhouse #define WASPAWN 0x40 // Not A Piece -- I mean it :-) #define NotAPiece 0x0e #define PIECE_MASK 0x0f #define COLOR_MASK 0x30 #define CUTFLAGS 0x3f typedef short int piece; typedef unsigned char * rgbptr; typedef unsigned char hati; class Protocol; class EngineProtocol; class EngineBookmark; class NetConnection; class PieceProvider { public: virtual piece getPiece()=0; }; class InputHandler { public: virtual void setPasswordMode(int pm)=0; virtual void userInput(const char *text)=0; virtual void peekKeys(GtkWidget *who)=0; virtual int keyPressed(int keyval, int state)=0; virtual void updatePrefix()=0; }; class ConnectionHandler { public: virtual void openServer(char *host,int port, Protocol *protocol,char *helper)=0; virtual void openServer(NetConnection *conn, Protocol *protocol)=0; virtual void openEngine(EngineProtocol *protocol, EngineBookmark *bm)=0; }; class UpdateInterface { public: virtual void update()=0; }; class IONotificationInterface { public: virtual void readAvailable(int handle)=0; virtual void writeAvailable(int handle)=0; }; class MoveListListener { public: virtual void moveListClosed()=0; }; class GameListListener { public: virtual void gameListClosed()=0; }; class StockListListener { public: virtual void stockListClosed()=0; }; class AdListListener { public: virtual void adListClosed()=0; }; class ConsoleListener { public: virtual void consoleClosed()=0; }; class GameListConsumer { public: virtual void appendGame(int gamenum, char *desc)=0; virtual void endOfList()=0; }; class PaneChangeListener { public: virtual void paneChanged(int pgseq,int pgid)=0; }; class SigChildHandler { public: virtual void ZombieNotification(int pid)=0; }; class BookmarkListener { public: virtual void updateBookmarks()=0; }; class PieceChangeListener { public: virtual void pieceSetChanged()=0; }; typedef enum { REGULAR, CRAZYHOUSE, SUICIDE, BUGHOUSE, WILD, LOSERS, GIVEAWAY, ATOMIC, WILDFR, WILDCASTLE, WILDNOCASTLE, } variant; #define IS_WILD(v) (((v)==WILD)||((v)==WILDFR)||((v)==WILDCASTLE)||((v)==WILDNOCASTLE)) #define IS_NOT_WILD(v) (((v)!=WILD)&&((v)!=WILDFR)&&((v)!=WILDCASTLE)&&((v)!=WILDNOCASTLE)) typedef enum { JOY_AXIS, JOY_BUTTON } JoystickEventType; class JoystickListener { public: virtual void joystickEvent(JoystickEventType jet, int number, int value)=0; }; typedef enum { WHITE_WIN, BLACK_WIN, DRAW, UNDEF } GameResult; typedef enum { IM_ZERO=0, IM_IGNORE=1, IM_NORMAL=2, IM_PERSONAL=3, IM_TOP=4, IM_RESET=5, } Importance; #define CLOCK_UNCHANGED (-100000000) // number of configurable fonts #define NFONTS 5 #define DEFAULT_FONT_CLOK "Sans Bold 26" #define DEFAULT_FONT_PLYR "Sans 14" #define DEFAULT_FONT_INFO "Sans 10" #define DEFAULT_FONT_CONS "Bitstream Vera Sans Mono 10" #define DEFAULT_FONT_SEEK "Sans 10" typedef enum { EF_PlayerFont, EF_ClockFont, EF_InfoFont } EboardFont; typedef enum { GS_PGN_File, GS_ICS, GS_Engine, GS_Other=99 } GameSource; typedef enum { TC_SPM = 0, /* seconds per move */ TC_ICS = 1, /* time+increment */ TC_XMOVES = 2, /* X moves in Y minutes */ TC_NONE = 99, /* don't set, use engine's default */ } TimeControlMode; #define N_SOUND_EVENTS 10 /* i18n placeholders in case gettext isn't available*/ #ifdef ENABLE_NLS #include "langs.h" #define _(s) langs_translate(s) #define N_(s) (s) #define eboard_gettext(s) langs_translate(s) #else #define _(s) (s) #define N_(s) (s) #define eboard_gettext(x) (x) #endif // gtk simplifications (code looks cleaner this way, especially dlg_prefs.cc) #define gshow gtk_widget_show #define gtset gtk_toggle_button_set_active #define gtget gtk_toggle_button_get_active #define grnew gtk_radio_button_new_with_label #define grg gtk_radio_button_group #define gmiset gtk_check_menu_item_set_active #endif eboard-1.1.1.orig/protocol.cc0000644000175000017500000000525510757567572015457 0ustar patrikpatrik/* $Id: protocol.cc,v 1.28 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2002 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "protocol.h" #include "global.h" Protocol::~Protocol() { } void Protocol::finalize() { } int Protocol::hasAuthenticationPrompts() { return 0; } bool Protocol::requiresLegalityChecking() { return false; } void Protocol::discardGame(int gameid) { } void Protocol::queryGameList(GameListConsumer *glc) { glc->endOfList(); } void Protocol::queryAdList(GameListConsumer *glc) { glc->endOfList(); } void Protocol::observe(int gameid) { } void Protocol::answerAd(int adid) { } void Protocol::exaForward(int n) { } void Protocol::exaBackward(int n) { } void Protocol::updateVar(ProtocolVar pv) { } void Protocol::sendDrop(piece p,int x,int y) { // not all protocols need to support {bug,crazy}house } void Protocol::retractMove() { global.status->setText(_("Sorry, this protocol does not allow to retract a move thru this menu option."), 15); } // the default implementation just sends the line as is. // only the P2P protocol must encode chat lines void Protocol::sendUserInput(char *line) { if (global.network) if (global.network->isConnected()) global.network->writeLine(line); } void Protocol::refreshSeeks(bool create) { // not all protocols need to manage a seek table } vector * Protocol::getPlayerActions() { return NULL; } vector * Protocol::getGameActions() { return NULL; } void Protocol::callPlayerAction(char *player, string *action) { } void Protocol::callGameAction(int gameid, string *action) { } void NullProtocol::receiveString(char *netstring) { global.output->append(netstring,0xffffff); } void NullProtocol::sendMove(int x1,int y1,int x2,int y2,int prom) { } void NullProtocol::resign() { } void NullProtocol::draw() { } void NullProtocol::adjourn() { } void NullProtocol::abort() { } eboard-1.1.1.orig/dgtboard.cc0000644000175000017500000003300010757567572015371 0ustar patrikpatrik/* $Id: dgtboard.cc,v 1.17 2008/02/08 15:10:46 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* AUTHORS += Pierre Boulenguez */ #include "config.h" #include #include #include #include #include #include #include "mainwindow.h" #include "global.h" #include "sound.h" #include "help.h" #include "eboard.h" #include /************************/ /* Constant definitions */ /************************/ /* message emitted when a piece is added onto the board */ #define DGTNIX_MSG_MV_ADD 0x00 /* message emitted when a piece is removed from the board */ #define DGTNIX_MSG_MV_REMOVE 0x01 /* message emitted when the clock send information */ #define DGTNIX_MSG_TIME 0x02 /* serial tag for the dgtnixQueryString function */ #define DGTNIX_SERIAL_STRING 0x1F00 /* busadress tag for the dgtnixQueryString function */ #define DGTNIX_BUSADDRESS_STRING 0x1F01 /* version tag for the dgtnixQueryString function */ #define DGTNIX_VERSION_STRING 0x1F02 /* trademark tag for the dgtnixQueryString function */ #define DGTNIX_TRADEMARK_STRING 0x1F03 /* options of dgtnixInit */ #define DGTNIX_BOARD_ORIENTATION 0x01 #define DGTNIX_DEBUG 0x02 #define DGTNIX_BOARD_ORIENTATION_CLOCKLEFT 0x01 #define DGTNIX_BOARD_ORIENTATION_CLOCKRIGHT 0x02 #define DGTNIX_DEBUG_ON 0x01 #define DGTNIX_DEBUG_OFF 0x04 #define DGTNIX_DEBUG_WITH_TIME 0x08 #define DGTNIX_DRIVER_VERSION 0x1F04 /* Contains saved errno value after a failed system call */ /* extern int dgtnix_errno; */ /******************************/ /* API Functions list */ /******************************/ /* int dgtnixInit(const char *); int dgtnixClose(); const char *dgtnixGetBoard(); const char *dgtnixToPrintableBoard(const char *board) int dgtnixTestBoard(const char *); float dgtnixQueryDriverVersion(); const char *dgtnixQueryString(unsigned int); int dgtnixGetClockData(int *, int *, int *); void dgtnixSetOption(unsigned long, unsigned int); */ int *ptr_dgtnix_errno; int (*dgtnixInit)(const char *); int (*dgtnixClose)(); const char *(*dgtnixGetBoard)(); const char *(*dgtnixToPrintableBoard)(const char *); int (*dgtnixTestBoard)(const char *); const char *(*dgtnixQueryString)(unsigned int); int (*dgtnixGetClockData)(int *, int *, int *); void (*dgtnixSetOption)(unsigned long, unsigned int); void *dgtnix_dll_handle; bool loadDgtnix() { dgtnix_dll_handle = dlopen ("libdgtnix.so", RTLD_LAZY); char fErrorString[512]; int count = 0; const char *error; if (!dgtnix_dll_handle) { count += snprintf(fErrorString+count,512-count,_("Unable to load dgtnix library.\n")); count+= snprintf(fErrorString+count,512-count,"dlerror: %s\n",dlerror()); global.output->append(fErrorString,global.Colors.TextDefault,IM_NORMAL); return false; } count += snprintf(fErrorString+count,512-count,_("Unable to load dgtnix library symbol.\n")); dlerror(); ptr_dgtnix_errno=(int *)dlsym(dgtnix_dll_handle, "dgtnix_errno"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnix_errno: %s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixQueryString) = dlsym(dgtnix_dll_handle, "dgtnixQueryString"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixQueryString: %s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } float version = atof(dgtnixQueryString(DGTNIX_DRIVER_VERSION)); float requiredVersion = 1.8137; if( version < requiredVersion) { char str[256]; snprintf(str,256,_("dgtnix version too old: %f, must be >= %f"), version, requiredVersion); global.output->append(str,global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **) (&dgtnixInit)= dlsym(dgtnix_dll_handle, "dgtnixInit"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixInit:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixClose)= dlsym(dgtnix_dll_handle, "dgtnixClose"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixClose:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixGetBoard)= dlsym(dgtnix_dll_handle, "dgtnixGetBoard"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixGetBoard:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixToPrintableBoard)= dlsym(dgtnix_dll_handle, "dgtnixToPrintableBoard"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixToPrintableBoard:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixTestBoard) = dlsym(dgtnix_dll_handle, "dgtnixTestBoard"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixTestBoard:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixGetClockData) = dlsym(dgtnix_dll_handle,"dgtnixGetClockData"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixGetClockData:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } *(void **)(&dgtnixSetOption) = dlsym(dgtnix_dll_handle,"dgtnixSetOption"); if(error = dlerror()) { count+= snprintf(fErrorString+count,512-count,"dgtnixSetOption:%s\n",error); global.output->append(fErrorString, global.Colors.TextDefault,IM_NORMAL); dlclose(dgtnix_dll_handle); return false; } return true; } Board *DgtBoard = NULL; bool DgtInit = false; /* Main function for dgtnix support under eboard, * this function is called in the main event loop * each time something occur on the descriptor of the board * indentified by parameter channel * data is a pointer to the MainWindow mw. */ gboolean gtkDgtnixEvent(GIOChannel* channel, GIOCondition cond, gpointer data) { char msg[256]; // code : first char of any message char code; // number of chars read gsize read=0; // read one char one the descriptor to find out the message type g_io_channel_read_chars( channel, &code, 1,&read,NULL); MainWindow *mw=(MainWindow *)data; if(mw->notebook->getCurrentPageId() != -1) { g_strlcpy(msg,_("DGT support error: wrong page"),256); global.output->append(msg,global.Colors.TextBright,IM_NORMAL); return false; } // Code DGTNIX_MSG_MV_ADD or DGTNIX_MSG_MV_REMOVE // a piece was move on the board if((code == DGTNIX_MSG_MV_ADD) || (code == DGTNIX_MSG_MV_REMOVE)) { // Read and identify the move char column, piece; int color; int line; int x,y; // message : body of message with code DGTNIX_MSG_MV_ADD // or DGTNIX_MSG_MV_REMOVE char message[4]; read=0; gsize nread=0; while (read <3) { g_io_channel_read_chars(channel, message, 3, &nread, NULL); read += nread; nread = 3 -read; } column = message[0]; line = message[1]; piece = message[2]; if(islower(piece)) color = BLACK; else color = WHITE; y=8-line; x=column-'A'; // generate a button events equivalent to the move GdkEventButton be; be.button=1; be.state =0; Board *me=DgtBoard; // TODO: write a method in class Board to compute these. Joystick code needs it too. if (me->effectiveFlip()) {x=7-x; y=7-y;} be.x=(x*me->sqside)+me->borx; be.y=(y*me->sqside)+me->bory+me->morey; // END TODO if(DgtBoard->hasGame()) { int myColor=DgtBoard->getGame()->MyColor&COLOR_MASK; if(myColor==BLACK) { be.x=((7-x)*me->sqside)+me->borx; be.y=((7-y)*me->sqside)+me->bory+me->morey; } } board_button_press_event(DgtBoard->widget,&be,DgtBoard); board_button_release_event(DgtBoard->widget,&be,DgtBoard); // end of mouse move event generation // Test if the boards are synced if(DgtBoard->hasGame()) { char board[64]; int i,j; for(i=0; i<8; i++) { for(j=0; j<8; j++) { int p=DgtBoard->position.getPiece(j,i)&PIECE_MASK; int color=DgtBoard->position.getPiece(j,i)&COLOR_MASK; int indice =((7-i)*8)+j; switch(p) { case PAWN: if (color==WHITE)board[indice]='P'; else board[indice]='p'; break; case ROOK: if (color==WHITE)board[indice]='R'; else board[indice]='r'; break; case KNIGHT: if (color==WHITE)board[indice]='N'; else board[indice]='n'; break; case BISHOP: if (color==WHITE)board[indice]='B'; else board[indice]='b'; break; case QUEEN: if (color==WHITE)board[indice]='Q'; else board[indice]='q'; break; case KING: if (color==WHITE)board[indice]='K'; else board[indice]='k'; break; default: board[indice]=' '; break; } } } int myColor=DgtBoard->getGame()->MyColor&COLOR_MASK; if((myColor == color) && (code != DGTNIX_MSG_MV_REMOVE) && (dgtnixTestBoard(board) != 1)) { g_strlcpy(msg,_("DGT warning: position mismatch between eboard and DGT board."),256); global.output->append(msg,global.Colors.TextBright,IM_NORMAL); snprintf(msg,256,"DGT:\n%s",dgtnixToPrintableBoard(dgtnixGetBoard())); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); snprintf(msg,256,"eboard:\n%s",dgtnixToPrintableBoard(dgtnixGetBoard())); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); } } return true; } // Code DGTNIX_MSG_TIME, time was sent by the DGT clock if(code == DGTNIX_MSG_TIME) { int wtime, btime, wturn; /* FIXME: dgtnix 1.7 doesn't have this, commented so I can compile eboard -- Felipe if(dgtnixGetClockData(&wtime, &btime, &wturn)) { cout << "White time :" << wtime ; cout << "s, Black time :" << btime; if(wturn) cout << ", white player turn\n"; else cout << ", black player turn\n"; } else cerr << "Error in dgtnix time event." <append(msg,global.Colors.TextBright,IM_NORMAL); } void dgtInit(const char *port, MainWindow *mainWindow) { if(!loadDgtnix()) { DgtInit = false; return; } char msg[512]; dgtnixSetOption(DGTNIX_DEBUG, DGTNIX_DEBUG_ON); snprintf(msg,512,_("dgtnix driver version: %s"), dgtnixQueryString(DGTNIX_DRIVER_VERSION)); global.output->append(msg,global.Colors.TextBright,IM_NORMAL); int fd = dgtnixInit(port); if(fd<0) { snprintf(msg,512,_("Unable to find the DGT board on port %s."), port); if(*ptr_dgtnix_errno > 0) snprintf(msg + strlen(msg), 512 - strlen(msg), "\n%s.", strerror(*ptr_dgtnix_errno)); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); DgtInit = false; } else { snprintf(msg,512,_("DGT board found on port %s."), port); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); snprintf(msg,512,_("Serial :%s"),dgtnixQueryString(DGTNIX_SERIAL_STRING) ); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); snprintf(msg,512,_("Bus address :%s"),dgtnixQueryString(DGTNIX_BUSADDRESS_STRING)); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); snprintf(msg,512,_("Board version :%s"),dgtnixQueryString(DGTNIX_VERSION_STRING)); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); snprintf(msg,512,_("Trademark :%s"),dgtnixQueryString(DGTNIX_TRADEMARK_STRING) ); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); strncpy(msg,dgtnixToPrintableBoard(dgtnixGetBoard()),512); global.output->append(msg,global.Colors.TextDefault,IM_NORMAL); g_io_add_watch (g_io_channel_unix_new(fd),G_IO_IN ,gtkDgtnixEvent,mainWindow); DgtInit = true; } } void dgtSetBoard(Board *b) { if (DgtInit) DgtBoard = b; } eboard-1.1.1.orig/dlg_connect.cc0000644000175000017500000003737710757567572016107 0ustar patrikpatrik/* $Id: dlg_connect.cc,v 1.24 2007/06/09 11:35:06 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "stl.h" #include "dlg_connect.h" #include "protocol.h" #include "global.h" #include "chess.h" #include "eboard.h" #include "mainwindow.h" #ifdef MAEMO #include #endif extern MainWindow *mainw; ConnectDialog::ConnectDialog() { GtkWidget *v,*hs,*hb,*ok,*cancel,*t; GtkWidget *zh,*zv,*ysw,*ysl; BoxedLabel *bl[3]; GList *combo; int i; #if !MAEMO widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); #else widget=(GtkWidget *) HILDON_WINDOW(hildon_window_new()); #endif gtk_window_set_transient_for(GTK_WINDOW(widget),GTK_WINDOW(mainw->widget)); gtk_window_set_modal(GTK_WINDOW(widget),TRUE); if (!global.HostHistory.empty()) gtk_window_set_default_size(GTK_WINDOW(widget),400,300); gtk_window_set_title(GTK_WINDOW(widget),_("Connect to ICS Server")); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),4); gtk_widget_realize(widget); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); zh=gtk_hbox_new(FALSE,4); zv=gtk_vbox_new(FALSE,4); gtk_box_pack_start(GTK_BOX(v),zh,TRUE,TRUE,0); if (!global.HostHistory.empty()) { ysw=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ysw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ysl=gtk_clist_new(1); gtk_clist_set_column_title(GTK_CLIST(ysl),0,_("Recent Hosts")); gtk_clist_set_selection_mode(GTK_CLIST(ysl),GTK_SELECTION_SINGLE); gtk_clist_column_titles_show(GTK_CLIST(ysl)); char z[256]; char *zp[1]; for(list::iterator bi=global.HostHistory.begin(); bi!=global.HostHistory.end();bi++) { snprintf(z,256,"%s, %d, %s",(*bi)->host,(*bi)->port,(*bi)->protocol); zp[0]=z; gtk_clist_append(GTK_CLIST(ysl),zp); } gtk_container_add(GTK_CONTAINER(ysw),ysl); gtk_box_pack_start(GTK_BOX(zh),ysw,TRUE,TRUE,4); gtk_signal_connect(GTK_OBJECT(ysl),"select_row", GTK_SIGNAL_FUNC(dlgconn_rowsel),this); Gtk::show(ysl,ysw,NULL); } gtk_box_pack_start(GTK_BOX(zh),zv,FALSE,TRUE,0); bl[0]=new BoxedLabel(_("Hostname")); bl[1]=new BoxedLabel(_("TCP Port")); bl[2]=new BoxedLabel(_("Protocol")); server=gtk_entry_new(); port=gtk_entry_new(); protocol=gtk_combo_new(); combo=0; combo=g_list_append(combo,(gpointer)"FICS"); combo=g_list_append(combo,(gpointer)"FICS without timeseal"); gtk_combo_set_popdown_strings(GTK_COMBO(protocol),combo); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(protocol)->entry),"FICS"); gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(protocol)->entry),FALSE); gtk_box_pack_start(GTK_BOX(zv),bl[0]->widget,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(zv),server,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(zv),bl[1]->widget,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(zv),port,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(zv),bl[2]->widget,FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(zv),protocol,FALSE,FALSE,0); gtk_entry_set_text(GTK_ENTRY(port),"5000"); // MAEMO TODO t=gtk_label_new(_("Once you connect to a host from this dialog, it will be added to\n"\ "the Peer/ICS Bookmarks menu. Edit the ~/.eboard/eboard.conf file\n"\ "to modify or remove entries.")); gtk_box_pack_start(GTK_BOX(v),t,FALSE,FALSE,6); hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,6); hb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(hb), 5); gtk_box_pack_start(GTK_BOX(v),hb,FALSE,FALSE,2); ok=gtk_button_new_with_label(_("Connect")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); cancel=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(cancel,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(hb),cancel,TRUE,TRUE,0); gtk_widget_grab_default(ok); for(i=0;i<3;i++) gshow(bl[i]->widget); Gtk::show(server,port,protocol,t,hs,hb,cancel,ok, zv,zh,v,NULL); gtk_signal_connect(GTK_OBJECT(ok),"clicked", GTK_SIGNAL_FUNC(dlg_connect_ok),this); gtk_signal_connect(GTK_OBJECT(cancel),"clicked", GTK_SIGNAL_FUNC(dlg_connect_cancel),this); } void ConnectDialog::show() { gshow(widget); gtk_grab_add(widget); gtk_widget_grab_focus(server); } void dlg_connect_ok(GtkWidget *w,gpointer data) { int useseal=1; ConnectDialog *cd; Protocol *pp; HostBookmark *hbm; tstring t; cd=(ConnectDialog *)data; g_strlcpy(cd->Host,gtk_entry_get_text(GTK_ENTRY(cd->server)),256); cd->Port=atoi(gtk_entry_get_text(GTK_ENTRY(cd->port))); g_strlcpy(cd->Proto, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(cd->protocol)->entry)),64); t.set(cd->Host); if (! t.token(" \n\t\r")) return; hbm=new HostBookmark(); strcpy(hbm->host,cd->Host); hbm->port=cd->Port; strcpy(hbm->protocol,cd->Proto); global.addHostBookmark(hbm); pp=0; if (!strcmp(cd->Proto,"FICS without timeseal")) { pp=new FicsProtocol(); useseal=0; goto kissagirl; } if (!strcmp(cd->Proto,"FICS")) { pp=new FicsProtocol(); useseal=1; goto kissagirl; } if (!pp) pp=new NullProtocol(); kissagirl: gtk_grab_remove(cd->widget); gtk_widget_destroy(cd->widget); if (useseal) global.chandler->openServer(cd->Host,cd->Port,pp,"timeseal"); else global.chandler->openServer(cd->Host,cd->Port,pp,0); } void dlg_connect_cancel(GtkWidget *w,gpointer data) { ConnectDialog *cd; cd=(ConnectDialog *)data; gtk_grab_remove(cd->widget); gtk_widget_destroy(cd->widget); } void dlgconn_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data) { ConnectDialog *me; list::iterator bi; char z[6]; me=(ConnectDialog *)data; for(bi=global.HostHistory.begin();row;row--) bi++; gtk_entry_set_text(GTK_ENTRY(me->server),(*bi)->host); snprintf(z,6,"%d",(*bi)->port); gtk_entry_set_text(GTK_ENTRY(me->port),z); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(me->protocol)->entry),(*bi)->protocol); } // ============================== EditEngineBookmarksDialog::~EditEngineBookmarksDialog() { delete uf[0]; delete uf[1]; if (beholder != 0) beholder->updateBookmarks(); } EditEngineBookmarksDialog::EditEngineBookmarksDialog(BookmarkListener *updatee) : ModalDialog(N_("Edit Engine Bookmarks")) { GtkWidget *v, *v2, *h, *tch, *bs, *hs, *hb, *klose, *h2, *etc; BoxedLabel *fl[5]; int i; beholder=updatee; gtk_window_set_default_size(GTK_WINDOW(widget), 550, 300); v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); h=gtk_hbox_new(TRUE,4); gtk_box_pack_start(GTK_BOX(v),h,TRUE,TRUE,0); bs=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(bs), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); bl=gtk_clist_new(1); gtk_clist_set_column_title(GTK_CLIST(bl),0,_("Engine Bookmarks")); gtk_clist_set_selection_mode(GTK_CLIST(bl),GTK_SELECTION_SINGLE); gtk_clist_column_titles_show(GTK_CLIST(bl)); gtk_container_add(GTK_CONTAINER(bs),bl); gtk_box_pack_start(GTK_BOX(h),bs,TRUE,TRUE,4); // --- v2=gtk_vbox_new(FALSE,2); gtk_box_pack_start(GTK_BOX(h), v2, FALSE, TRUE, 4); fl[0]=new BoxedLabel(_("Bookmark Caption:")); fl[1]=new BoxedLabel(_("Directory:")); fl[2]=new BoxedLabel(_("Command Line:")); fl[3]=new BoxedLabel(_("Time Control:")); fl[4]=new BoxedLabel(_("Max Ply:")); fe[0]=gtk_entry_new(); fe[1]=gtk_entry_new(); fe[2]=gtk_entry_new(); fe[3]=gtk_label_new(" "); fe[4]=gtk_entry_new(); tch = gtk_hbox_new(FALSE,4); edittc = etc = gtk_button_new_with_label(_("Change...")); fe[5]=gtk_check_button_new_with_label(_("Human plays white")); fe[6]=gtk_check_button_new_with_label(_("Think Always")); uf[0]=new BoxedLabel(_("Variant:")); uf[1]=new BoxedLabel(_("Engine Type:")); for(i=0;i<5;i++) { gtk_box_pack_start(GTK_BOX(v2), fl[i]->widget, FALSE,TRUE, 2); if (i!=3) gtk_box_pack_start(GTK_BOX(v2), fe[i], FALSE,TRUE, 0); else { gtk_box_pack_start(GTK_BOX(v2), tch, FALSE,TRUE, 0); gtk_box_pack_start(GTK_BOX(tch), fe[3], FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(tch), etc, FALSE, TRUE, 0); } } for(i=5;i<7;i++) gtk_box_pack_start(GTK_BOX(v2), fe[i], FALSE,TRUE, 2); for(i=0;i<2;i++) gtk_box_pack_start(GTK_BOX(v2), uf[i]->widget, FALSE,TRUE, 2); h2=gtk_hbox_new(FALSE,4); apply=gtk_button_new_with_label(_("Apply Changes")); rm=gtk_button_new_with_label(_("Delete This Entry")); rmall=gtk_button_new_with_label(_("Delete All Entries")); gtk_box_pack_start(GTK_BOX(v2),h2,FALSE,TRUE,2); gtk_box_pack_end(GTK_BOX(h2),apply,FALSE,TRUE,4); gtk_box_pack_end(GTK_BOX(h2),rmall,FALSE,TRUE,4); gtk_box_pack_end(GTK_BOX(h2),rm,FALSE,TRUE,4); // --- hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,FALSE,2); hb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(hb), 5); gtk_box_pack_start(GTK_BOX(v),hb,FALSE,FALSE,2); klose=gtk_button_new_with_label(_("Close")); GTK_WIDGET_SET_FLAGS(klose,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hb),klose,TRUE,TRUE,0); gtk_widget_grab_default(klose); Gtk::show(etc,tch,klose,hb,hs,h2,apply,rm,rmall,v2,NULL); for(i=0;i<7;i++) gshow(fe[i]); for(i=0;i<5;i++) gshow(fl[i]->widget); for(i=0;i<2;i++) uf[i]->show(); Gtk::show(bl,bs,h,v,NULL); setDismiss(GTK_OBJECT(klose),"clicked"); refresh(); selindex=-1; gtk_signal_connect(GTK_OBJECT(bl),"select_row", GTK_SIGNAL_FUNC(eebmd_rowsel), (gpointer) this); gtk_signal_connect(GTK_OBJECT(bl),"unselect_row", GTK_SIGNAL_FUNC(eebmd_rowunsel), (gpointer) this); gtk_widget_set_sensitive(rm,FALSE); gtk_widget_set_sensitive(apply,FALSE); gtk_widget_set_sensitive(edittc,FALSE); gtk_signal_connect(GTK_OBJECT(rm),"clicked", GTK_SIGNAL_FUNC(eebmd_rm1), (gpointer) this); gtk_signal_connect(GTK_OBJECT(rmall),"clicked", GTK_SIGNAL_FUNC(eebmd_rmall), (gpointer) this); gtk_signal_connect(GTK_OBJECT(apply),"clicked", GTK_SIGNAL_FUNC(eebmd_apply), (gpointer) this); gtk_signal_connect(GTK_OBJECT(etc),"clicked", GTK_SIGNAL_FUNC(eebmd_edittc), (gpointer) this); } void EditEngineBookmarksDialog::refresh() { list::iterator ei; char *zp[1]; char z[256]; gtk_clist_freeze(GTK_CLIST(bl)); gtk_clist_clear(GTK_CLIST(bl)); for(ei=global.EnginePresets.begin();ei!=global.EnginePresets.end();ei++) { g_strlcpy(z,(*ei)->caption.c_str(),256); zp[0]=z; gtk_clist_append(GTK_CLIST(bl),zp); } gtk_clist_thaw(GTK_CLIST(bl)); selindex=-1; updateRightPane(); } void EditEngineBookmarksDialog::update() { updateRightPane(); } void EditEngineBookmarksDialog::updateRightPane() { list::iterator ei; int i; char z[128],x[64]; if (selindex>=0) { ei=global.EnginePresets.begin(); for(i=selindex;i;i--) ei++; gtk_entry_set_text(GTK_ENTRY(fe[0]),(*ei)->caption.c_str()); gtk_entry_set_text(GTK_ENTRY(fe[1]),(*ei)->directory.c_str()); gtk_entry_set_text(GTK_ENTRY(fe[2]),(*ei)->cmdline.c_str()); localtc.toString(z,128); gtk_label_set_text(GTK_LABEL(fe[3]),z); gtk_widget_queue_resize(fe[3]); snprintf(z,128,"%d",(*ei)->maxply); gtk_entry_set_text(GTK_ENTRY(fe[4]),z); gtset(GTK_TOGGLE_BUTTON(fe[5]),(*ei)->humanwhite?TRUE:FALSE); gtset(GTK_TOGGLE_BUTTON(fe[6]),(*ei)->think?TRUE:FALSE); snprintf(z,128,_("Variant: %s (uneditable)"), ChessGame::variantName( (*ei)->mode ) ); uf[0]->setText(z); switch( (*ei)->proto ) { case 0: g_strlcpy(x,_("generic xboard v2"),64); break; case 1: strcpy(x,"crafty"); break; case 2: strcpy(x,"sjeng"); break; case 3: strcpy(x,"GNU chess 4.x"); break; } snprintf(z,128,_("Engine Type: %s (uneditable)"),x); uf[1]->setText(z); gtk_widget_set_sensitive(rm,TRUE); gtk_widget_set_sensitive(apply,TRUE); gtk_widget_set_sensitive(edittc,TRUE); } else { gtk_entry_set_text(GTK_ENTRY(fe[0]),"\0"); gtk_entry_set_text(GTK_ENTRY(fe[1]),"\0"); gtk_entry_set_text(GTK_ENTRY(fe[2]),"\0"); gtk_label_set_text(GTK_LABEL(fe[3])," "); gtk_entry_set_text(GTK_ENTRY(fe[4]),"\0"); gtset(GTK_TOGGLE_BUTTON(fe[5]),0); gtset(GTK_TOGGLE_BUTTON(fe[6]),0); uf[0]->setText(_("Variant:")); uf[1]->setText(_("Engine Type:")); gtk_widget_set_sensitive(rm,FALSE); gtk_widget_set_sensitive(apply,FALSE); gtk_widget_set_sensitive(edittc,FALSE); } } void eebmd_rowsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data) { EEBMDp me = (EEBMDp) data; list::iterator ei; int i; ei=global.EnginePresets.begin(); for(i=row;i;i--) ei++; me->localtc = (*ei)->timecontrol; me->selindex=row; me->updateRightPane(); } void eebmd_rowunsel(GtkCList *clist,int row,int column,GdkEventButton *eb, gpointer data) { EEBMDp me; me=(EEBMDp) data; me->selindex=-1; me->updateRightPane(); } void eebmd_rm1(GtkWidget *w, gpointer data) { EEBMDp me; list::iterator ei; int i; me=(EEBMDp) data; if (me->selindex < 0) return; ei=global.EnginePresets.begin(); for(i=me->selindex;i;i--) ei++; delete(*ei); global.EnginePresets.erase(ei); global.writeRC(); me->refresh(); me->updateRightPane(); } void eebmd_rmall(GtkWidget *w, gpointer data) { list::iterator ei; EEBMDp me; me=(EEBMDp) data; for(ei=global.EnginePresets.begin();ei!=global.EnginePresets.end();ei++) delete(*ei); global.EnginePresets.clear(); global.writeRC(); me->refresh(); me->updateRightPane(); } void eebmd_edittc(GtkWidget *w, gpointer data) { EEBMDp me = (EEBMDp) data; TimeControlEditDialog *tced; if (me->selindex < 0) return; tced = new TimeControlEditDialog(&(me->localtc)); tced->setUpdateListener( (UpdateInterface *) me ); tced->show(); } void eebmd_apply(GtkWidget *w, gpointer data) { EEBMDp me; list::iterator ei; int i; me=(EEBMDp) data; if (me->selindex < 0) return; ei=global.EnginePresets.begin(); for(i=me->selindex;i;i--) ei++; (*ei)->caption = gtk_entry_get_text(GTK_ENTRY(me->fe[0])); (*ei)->directory = gtk_entry_get_text(GTK_ENTRY(me->fe[1])); (*ei)->cmdline = gtk_entry_get_text(GTK_ENTRY(me->fe[2])); (*ei)->timecontrol = me->localtc; (*ei)->maxply = atoi(gtk_entry_get_text(GTK_ENTRY(me->fe[4]))); (*ei)->think = (*ei)->humanwhite=0; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(me->fe[5]))) (*ei)->humanwhite=1; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(me->fe[6]))) (*ei)->think=1; global.writeRC(); i=me->selindex; me->refresh(); // to update the caption when needed gtk_clist_select_row(GTK_CLIST(me->bl), i, 0); // reselect the same entry me->updateRightPane(); } eboard-1.1.1.orig/trash.xpm0000644000175000017500000000245510757567572015155 0ustar patrikpatrik/* XPM */ static char * trash_xpm[] = { "24 16 55 1", " c None", ". c #000000", "+ c #181D18", "@ c #8DB063", "# c #8BB174", "$ c #C8C7A3", "% c #6A735E", "& c #7B8C5B", "* c #3C3F30", "= c #8AA162", "- c #799A65", "; c #88B970", "> c #8FC174", ", c #7CA966", "' c #95B97A", ") c #4C5C41", "! c #1E231E", "~ c #242F24", "{ c #809F58", "] c #83965D", "^ c #71965D", "/ c #9DC09D", "( c #7FA16A", "_ c #86A85D", ": c #758F62", "< c #5B854E", "[ c #98B798", "} c #BACA95", "| c #98B17E", "1 c #455C39", "2 c #4E6437", "3 c #567D48", "4 c #6E9F58", "5 c #5D965D", "6 c #4C734C", "7 c #476847", "8 c #415C41", "9 c #364B36", "0 c #3C442F", "a c #58774A", "b c #536847", "c c #3B563B", "d c #293A29", "e c #516C45", "f c #496A3D", "g c #77A162", "h c #405134", "i c #345134", "j c #4D6E4D", "k c #060606", "l c #507144", "m c #7EB17E", "n c #638954", "o c #4C6140", "p c #607A53", " ........ ", " +.@#$%&*=-.. ", " .;>,')!~+-{]]. ", " .^/'(__=-{]]:. ", " .<#[}|=-{]]<1. ", " .23455<<67890. ", " .+abb8c09d+. ", " .e++++++++b. ", " .e|fghai69b. ", " .e|fghaij9b.kkk ", " .e|fghail9b.kkkk ", " .emfghail9b.kkkk ", " .emfghail9b.kkkk ", " .n(fgoa9l17.kkk ", " .< #include #include #include #include #include #include #include using namespace std; /* using std::list; using std::vector; using std::stack; using std::deque; using std::string; using std::ostream; using std::istream; using std::ofstream; using std::ifstream; */ #endif eboard-1.1.1.orig/sealoff.xpm0000644000175000017500000000322010757567572015442 0ustar patrikpatrik/* XPM */ static char * sealoff_xpm[] = { "32 16 70 1", " c None", ". c #161616", "+ c #96AEBE", "@ c #6A76AA", "# c #66666A", "$ c #62626A", "% c #DEDEEE", "& c #4A4A46", "* c #869AB6", "= c #AEAEBA", "- c #363632", "; c #BEBADA", "> c #2E223E", ", c #C6C6DE", "' c #7686B2", ") c #EEEEF6", "! c #727AB2", "~ c #CECAE2", "{ c #6E6E7E", "] c #2A2E2A", "^ c #8EA6B6", "/ c #D6D6E6", "( c #7A7A86", "_ c #767EB2", ": c #5A66A2", "< c #9292A6", "[ c #8296AE", "} c #7A7696", "| c #F6F6FA", "1 c #56565A", "2 c #726E86", "3 c #62628E", "4 c #E6E6F2", "5 c #3A3E36", "6 c #8282B2", "7 c #868696", "8 c #7E92AE", "9 c #BEBEDA", "0 c #B6B6BE", "a c #5E6AA6", "b c #869EB2", "c c #52525A", "d c #FEFEFE", "e c #CECEE2", "f c #C6C2DE", "g c #B6B2BE", "h c #DAD6EA", "i c #F2F2FA", "j c #DEDAEA", "k c #C2C2DE", "l c #B2B2BA", "m c #3A3A36", "n c #D2CEE6", "o c #42423E", "p c #E2E2EE", "q c #626EA6", "r c #D2D2E6", "s c #4E4E4E", "t c #CAC6DE", "u c #C2BEDE", "v c #92A6BA", "w c #8A9EB2", "x c #4A4A4E", "y c #6E7EAE", "z c #565A52", "A c #2E2E2A", "B c #EAE6F2", "C c #3E3E3A", "D c #CAC6E2", "E c #3E3E3E", " =l0 >>>> ", " $1c$7 >> ", " (zC--]E< >>>>>> ", " m-&2{&Ax >>3>63>> ", " Am }oA>>>|i>6%/>>> ", "= Cm &]>3|d|>_%je3> ", " .......... >>)i|i>6jje,>> ", " ._:::@'[^v*. >34)))>6%re,3> ", " ._aa:@'*v+*. >%p444>6/e~k9> ", " ._aaa@'[v+*. >3j%%j6>6e,93> ", " ._:a:@'*^+*. >>r///r6>6k;>> ", "= ._a:a@'[v+*. >3ernnD6k;3> ", "l ._aaa@'[v+*. >>>,,tku;>>> ", " =._aaa@'*^+*. 0 >>39;3>> ", " .!:::@!8b^[. l >>>>>> ", " .......... g "}; eboard-1.1.1.orig/gnupiece.xpm0000644000175000017500000005630710757567572015640 0ustar patrikpatrik/* XPM */ static char * gnupiece_xpm[] = { "123 177 81 1", " c None", ". c #080707", "+ c #8D815E", "@ c #563332", "# c #595349", "$ c #DEC782", "% c #855447", "& c #A57C68", "* c #BEAB6A", "= c #846759", "- c #B29E60", "; c #39332D", "> c #B07C64", ", c #797262", "' c #5A3E38", ") c #B29478", "! c #9B6753", "~ c #736A5C", "{ c #625B51", "] c #342623", "^ c #D79F7E", "/ c #653D39", "( c #B5856C", "_ c #6F6658", ": c #9F7662", "< c #26211E", "[ c #DFB29A", "} c #6D6255", "| c #65443D", "1 c #A5836F", "2 c #C18465", "3 c #CB9E83", "4 c #6B5349", "5 c #F4EFD8", "6 c #9D725E", "7 c #885B4C", "8 c #949083", "9 c #171312", "0 c #C18C6D", "a c #8C7663", "b c #48443C", "c c #745E52", "d c #D0AC97", "e c #AB9E71", "f c #6E453C", "g c #E4DEC3", "h c #9C958C", "i c #868074", "j c #BC937B", "k c #8B7263", "l c #A46C56", "m c #BEA08A", "n c #774A41", "o c #7B4F43", "p c #C5C0AD", "q c #B0765C", "r c #524A42", "s c #908A7C", "t c #DDCC94", "u c #B3AE9E", "v c #A19167", "w c #936452", "x c #795A4F", "y c #423E37", "z c #D19470", "A c #BA7D60", "B c #714A3F", "C c #49312C", "D c #916E5D", "E c #948271", "F c #905C4C", "G c #CA8C6A", "H c #A59F91", "I c #241817", "J c #C1B49A", "K c #452A28", "L c #AA725A", "M c #CDBC9F", "N c #B4A08C", "O c #D9CEB6", "P c #E1C2AC", " ", " ", " ", " ", " ", " hHs_}#{#ihu uHHH ", " 8,8upgOOggppuH8h ~~,iH8i~, ", " ,uupOgussi88HHusupuHs i,h88HuJuOpphsi ", " iHOOOu~~~r;{i~iryzzz(1ddJNi<9##{H8 ~H8]<;#r{}iEv~u ", " E,*J$J,,by,hpu siss;]y<;+^^^^zGGGGz^d(zGzzzz^zzz!/@]]a(zzzG(w&3^z3ma{a~r{_i ~hiyII#ra},svai ", " y**$H,br{bbhOsi ss#]yII;~03^zzzGGG222wB'(22222A>(jzGw@Cc&zGG00>x2GGGzzk}+##}~s~};}}{ybb}#_+vs, ", " ;j*u{}i8r9b}s8{_ihpu8;9I9b(zzzzzzzG2(%4a].y(2AAA(2&:&GzGl=|=2G(x=&!o0GGzzz+##r#{,yb.lAzz>44q22rIoFwDw>2GGz3}}_rb{;#;9]by{#<#svv+ ", " #v*tpu#;#{#~;9s8s#9.<<#N^^zzGG2AAAwKx6;I4:>AqLqA2GGA>0G((jGG2K@%%7w%!>GGGzm}~}r{bib;9#~~,r~vv+a ", " +a-JpHb]b~~#I9{]byI.9x3^^zzGGGAAq:|x=7''6L!!wwFo!0G2>(zzzzGz6;4o%7w7ww2Gzzz=_,y#biy{I}i_,+Evv,, ", " ,)*N8is8}_rb<}G0w2zzz^^{;6>>:wo%77!>0Gj=#+}r,{s#is+a(+,a ", " Ev-e,a,sh8]y{A2GzGzGzzzD#.I.pE4fnxF!&2G^k#+sv1+avh ", " ,Es+1E}vvvvvcr3z22G2AqLAAw%%%%7w!ll!apgu<9;OJ6A20GGGGzGzz49;rgH4nno%7wLAGj#;#}~s ", " ++vv+Ea+veex=z2A222ALlqLF%%%o%lLLLq:DHOs,uM(&A2GGGzzzzzz0cHpH{|BBo%7w6:(31, ", " e_,+v+vv)-=)GAA222qlLLwF%%o'%q>LAAA(1vD1:!6>2GGGzGGzzz^zi,i#|oBfBo7wD6>zj1s ", " i}+save)Dj2AAG2qLLLlw7%%n|6AAA2(AA>>q:l:((GGGGGGGzzzzzzD7={cxBffowlL&2zG= ", " s+,,c4%02A222qLLl!F%%%746(AA2A(A>qqqA200GGG0GGzzzGGzz1o!44=off47!6&0zG)E ", " r:222GAqqqA!F%%%FB=qAA222(>LqA2200G22GGGGzzGzGzzjD==aa=BffB%w6>22(E ", " %222G2AqLLlw7%%%7xD(222AAAAqA22G2GGGGGGGGGzzzzzzG>B=~ icB||fn%w6q(k _ ", " oA2G2qAqL!wF%%%w7&q>2(2(AAAAA(220GGGGGGGGGGzzzzzz0D74 s4'/ffoFw!q1}ry ", " a2G2LAAl!wF%%%F=&022222A222222222222G0G0GGzz^zzzzG>c|h i{]y|o7Dl&=]9 ", " ~:02qqAqlF%7%%7wq00GA(22222222222GG2A>w|'o!(GzzzzzzGDC8 #yr4C4=4# ", " 4:>LLqAAlw%%%F7B70G22222G22222A0222227=aD!=|7>Gzz^zGG('s 8u ,i ", " +>llqAA!F%%%%F%w2GG222G0222222A2AAAA7aa::qq!w!L2zz^zG0&chiBE= ", " a6l22ql%o%oooB!2GGGGGGG022222AA2AAq67#@6AA22A(w'=0zzGGG>:::>!k ", " h=!qG>w%ooo|/Bc:2GGG00G2222222AAAALqw:]x(&L>220(6{x6GzGGGGGGG0c ", " icFw!!FB@CC]@/c%7LGGG2G22G22202222AqL!6C!:%'4LA2Gj1DD0zzzGGGGGGDs ", " iowwF%|/'|K@'//BB7L2GGGGGGGGG00022AqLLl%D:6K9;B622GzzzGzGGGGGGzz1~ ", " acDw7fCy||K'''@/nn%q2GGGGGGGG22q6A2AqALlF6::|I:wB'@f|>0GGGGGGGGzzzzzE, ", " ixxyb#i s4//@/foo%L2GGGGGG2AAAL00A222q!!:&11&wff@D0GGG0GGG22222>, ", " , ax/@@|no|B622GG22G22AA2GG2qq2L!!:q((1>w%o=2GGGG2A2A(>:x| ", " i=|'@|n4fB!A2G222G222GGGGG2!>Lw!Fw1(11&:6q22GG2(A>(:o4; ", " sDf@/nonoBoq22A2GG22GGGGGG0:!LF!w!&&&:1>(22222A>::Dryr ", " sDf'/nooo7olAAAAG2222GGG002>F66!w66DDD&6&>>q>>>:7={;y ", " +xn//non%F4w:qA2022AA2GGG002>x6L!6wwD66wwl!l:L6%Bx4;_ ", " icf/|Bono%=7wL2G2AAAA20GGGGzGDBL6l!6::Dw7%FFwFoow%Bc, ", " s7f//BnB%7x77w>2A2AA220GGGGzz0w&&&&:6l6w7nno%ofn%oF:E~~ ", " 87f//|ff%%%w!=!>A22qq20GGGGzzz(4(1>ll6w!w%o7FF%%Fw6:1E} ", " hxf/fffno%%F7!&w:2AqA2GzzzzzzzG:|&1(>6l:LLllllww66:!6a, ", " c|///||fo%%7FFlDa:qq2GGzzzz^zzz(771((q>&>>>6xrC]yC;]Ci ", " k'////|fo%%%7F6!E!LA22Gzzzzzzzz(1:w'BD=x&=ro={#;]99y ", " #|////|foo%%FFw7D6LA2AAGzz^zzzG((114#==cx%:>A2jjjj}H ", " =|/'//|fnoo%FF77a6AA222GzzzzzG222((0(>l&10AqAA2(j3E, ", " a|//@//fBno7FFFx6qAAA2GzGGzzGGG(2(((0(&(((&!L6w:((ii ", " +B/////ffno%%777D6:>(222AGGGGGGG2(>(&&>LF!F%!7o::Dk} ", " c''///ffno%x7wwFDwD&22AA2GGG0G2((&qL6lw%FnBxoxDk==} ", " =/@@///fBono%wFwwww72G2A2GGGGG2A&(:::=oBC(6xxy999..9ri u ", " ~/'@////|fnoo7F7%onwD0^d^GG22222z0#'@99]<]E# ", " cf|////||/ffBoo%onfowq073^d(^j^d0zG(&7%:10j# ", " #||f||/|/||ffBnoonfowq(::mj1P^[dzz0jj66133miH ", " 4Bffff||f|fffnnnnffnF!&j1mJ(P[[[^3j3^j11[md# ", " |nBffffff|fffnffnffB%w:)MHu(3[[[3^^^[^1)[dE# ", " 'nnnfnffffnfnfnnnnffo%:NuuudE3[[^^d[Pj=mH)~ ", " @nooonnnnfnnnnnnnnoo%F:mJm&mm&3[[d[[m=ahhh ", " onnonnonnnooooooo%%%F!!)u)!(NNd[[[m1=siEH ", " ixnoooonoo%no%o%o%%%FFw&)11llNum[[dhvHa:La ", " ,ooooo%ooo%o%%%%%%%FFF7a1Lll&hsN[dNuN~wLqq1 ", " kxoo%o%%%o%%%%%%%FFFw!=k:l!l1h)m[m)Ji;LqqL:N ", " |Bo%o%%%%%%%%%F7FFFFwwD:lllq)&ed3[dJ#|>AAqL! ", " cnooo%%%%%%%%FFFFFFw!!!!llLL&6:EMdmmrDqAqAAqE ", " cn%%%%%%7%%FFFFFwww!w!llllll1664iu)d#cAqqqqAqk ", " oooo%%%%%%%FFFww!F!!!l!lllLLqL>q(m1xi4>AAAAqA6 ", " =fo%o%%%%%7FFFFFww!w!!!llllLLL>(>>j(&1DDLAAAAAA: ", " =oooo%%%%F%FFFFwwww!!!lllllLLLqqLq>>):A:k62AAAAqE ", " /oo%%%%%%%FFFFwFww!!l!l!lllLLLLqqAqAA(A2AAA2AA2A>s ", " +nn%%%%%%7F7FFFFFw!w!!!lllLllLLqqLqAqAAAAAAAA2A2AA& ", " 'nooo%%%%%FFFFFwF!w!!ll!lllLlqqqqAqAAAAAAAA2A22222A: ", " kxooo%%%%%%FFFFFFwww!!!lllLLLqqLqqqAAAAA2AA2A2A22A22lh ", " =Booo%%%%%FFFFFww!!w!!l!llLllLqqqqqqAAAA222222222222A: ", " xonoo%%%%%FFFFFFwFw!!!ll!LlLlqqqAAqAAA2A2A2222222A222A8 ", " sfnoo%%%%%%7FFFwFww!!w!llllLLLqLqLAAAAAAA22A222222GA222: ", " Bnnooo%%%%%FFFFFwF!w!!!lllllllqqqqqAAAAAA2222222222G222A1 ", " ,nnooo%%%%7%7FFFFwFw!!!!lllLlLLqLqqAAAAAAAA222222G2222222AH ", " 84Bnonoo%%%7%7FFFFww!!!!!lllllLqqqqqqAAAA22222G22G22G2G222A> ", " _fnnnooo%%%%%FFFFFFFw!!!!!llllLLqqqAqAAA22A2222GG2GGGGG2222(1 ", " xfnnooo%o%%%%FFFFwFF!!!!llllLllLLqAqAAAAAA22A22222G2GG2G2222) ", " ,ffnnonoo%%%7%FFFFFwww!wl!!llLlLqqLqAAAAAA22AG2222GGGGGG2G222: ", " ffBBnnoo%%%%7%%FFFFwF!w!!!llllLlLqqqqAAAAAA2A222GG2GGGG2GG222qv ", " 4fffBooooo%%%%%%FFFFFww!!!!lllLlLLLqqqAAAAAA2A222222G2GGG222222: ", " ,Bffnnnoo%oo%%7F%FFFFwwF!w!!!lllLllqqqAqqAAAA22222G22GGGGGG22A2ALH ", " c|ffnfnnoooo%%%%%FFFFFww!w!!llllllLLqLqAAAAAAA2A22222G2G22222222AE ", " i'|fffnnooooo%%%7%FFFFwwF!!!!!lllLllqqqqAqAAAAAA22A22222G22222A2AA: ", " r'fffffnnoooo%%%%77FFFwFww!w!!llllLlLLqqqqAqAAA2A222222A222A2AA2AA&h ", " i]/||ffBnonooo%%%7%FFFFFFww!w!llllllLlqLqqqqAAAA2AAA222222222A2AAAALc ", " yC|||fffnooooo%%%%%FFFFFwFw!!!!l!lllLlLqqLqqAAAAAA2AA222222222A2AAA>& ", " ~;@/ffffffnono%%%%%%FFFFFFww!!!l!llllllLLqqqAqqAAAAAA2A222AAA2A2AAAqq1 ", " r]|/f|ffffnooo%o%%%%FFFFFFFF!!w!!l!llLlLlqLqqqqAAAAAAAAAAAA2AAAAAAAqLE ", " rK///fffnBBonoo%%%%%%%FFFFFwww!!!llllllLlqqqqqqqqAAAAAAAAAAAAAAqAAqqLa ", " 3[POOOOOOu ", " ;]@@@@@@@@@@@@K]KCC@/|ffffBBnnoooo%%%%%%%%%7%FFFFFFFFFwwFwFFw!>(3[[d3m000jdh ", " r]@@@@@@@@@'///'@@C@KC''|fnnnBnonooo%%%%%%%%%F%FFFFFFFFFF!l>Gz^^j1:l!wFwFF7H ", " i]@@@@@@@@@@@''/////|//@@@@@'//foooo%%%%%%%%%7%%FFFF!lL>22G2>:!wFFFFFFFFFFFHuu ", " {r#bIA>LllwwFFFFFFFFFFFFw6mPPPJJu ", " #]I9III9<]C@@@@@@@/'/@////|||fffffnnonooooo%o%%%%%FFwwFwFF7FFFFFFF7FFFFFF7w6jMOPOOOOO ", " ;99I]@@C]IIII]KC@'@'///////|/f|ffffffnBnnonoooo%%%%%%%%%%%%7%%%%77F7%7F!l1jdPPOOOOOOgggp ", " ;999]@@@@@@CK]III<]KK@@///////|||ff|fBfnnnonnoooooo%%%%%%%%%%%%FF7w!:>jjddP[PPPPPPPgOggggp ", " {999IC@@@@@@@@@@CK]]]]<<]C@@////|||fffffffnooooo%%%%%F7F%Fwllq>>0j33^dddd3j((((ql6>>0jdPOggN ", " Hy999<@@@@@@@@@@@@@@@@@@@@@@@@|//||||f|ffn%w!LLqqA2GGGGzzz^^^^^^^33j0&lw%%%%%%%%%%%%%%%%%&mOP8 ", " ,]999]@@@@@@@@@@@@@@@@/@@/''/'///|/||||fffffn%77w!!llLq>qAA>>(q&LwF%%%%%%%%%%%%%%%%%%%%ooo71P ", " r<999IC@@@@@@@@@@@@@@@@@'@''////////|||ffffffBBnBonooo%%o%%%%%o%%o%%o%%%%%%xo%o%%%%%ooooooooj ", " #<9999K@@@C@@@@@@@@@@@@'@/'@'@@///|/|/||fffffffnffBnnonooonoooooooooooooooooo%oooooonooooonoDJ ", " i;9999I@@@@@@@@@@@@@@@@@@@/'@//@//////|/f||fffffffnnnnnonnonooooooooooooooooooooonooononooon7h ", " #99999]@@@@@@@@@@@@@@@@@@@@/'@/@//////||||fffffffffnnnfnooonnooooo%oooooooooooooooooononnnn| ", " ,]I999C@@@@@@@@C@@@@@@@@@@/@'/''////|/||f|||fffffffnnnnnnnoonooonoonooonoonooooonoBBnnBnf|s ", " ]]99IC@@@@@@@@@@@@@@@@@@@/@/@/////////||/fffffffffffnnnfBnnnnnoononononoonooonnnnnBnnBBB ", " _<99K@@C@@@@@@@@@@@@@@@''@/@/////////|/|||ffffffffffBfnnfnBnnnonoonnnonoBnBnBBBBnBf#= ", " H#]]C@@@@@@@@@@@@@@@@@@@@@'@/@@///////||||||fffffffnfffnBBBnnfnBBnnnnnBnnfBnnBfBx} ", " |4/@@C@@@@@@@@@@@@@@'@@@@@@//////|/////|||ffffffffffffBBBBffBnBfBfBBffBBffBc|8 ", " Ekf@@@@@@@@@@@@@@@@@@@@@'/@/////////|////|f|fffffffffffffffBfffBfffff|B,E ", " H=||'@@@@@@@@@@@@@@@'/@@'/@/////|/|||/||f|||ff|ff|ffffffffffffBB4~8 ", " 1Bkx|'@@@@@@@@'@/@@/@@/@//////////|/|||ff|||ffffffffff||4ck7,h ", " E=|f@@@@@@@@@@@'//'////////////|||||f|/f||f|'B#~Eh ", " h8=r4xBrB|'''|/'@''//////|f||'|B4x4c7#~hH ", " u)hs~{br4okk,kkkkkkkk%x|r#=sHhH ", " ", " ", " ", " ", " ", " ", " "}; eboard-1.1.1.orig/sound.cc0000644000175000017500000003660710757567572014753 0ustar patrikpatrik/* $Id: sound.cc,v 1.28 2007/01/19 14:16:47 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sound.h" #include "global.h" #include "tstring.h" #include "util.h" #include "config.h" #include "eboard.h" #define SOME_DRIVER 1 #ifdef HAVE_SYS_SOUNDCARD_H #define OSS_DRIVER 1 #include #elif defined HAVE_SYS_AUDIOIO_H #define OPENBSD_DRIVER 1 #include // Solaris has sys/audio.h but is incompatible with OpenBSD #ifndef AUMODE_PLAY #undef SOME_DRIVER #undef OPENBSD_DRIVER #endif #else #undef SOME_DRIVER #endif SoundEvent::SoundEvent() { type=INT_WAVE; Pitch=800; Duration=250; Count=1; strcpy(Device,"/dev/dsp"); ExtraData[0]=0; enabled = true; } SoundEvent SoundEvent::operator=(SoundEvent &se) { type=se.type; Pitch=se.Pitch; Duration=se.Duration; Count=se.Count; enabled = se.enabled; strcpy(Device,se.Device); strcpy(ExtraData,se.ExtraData); return(*this); } int SoundEvent::operator==(SoundEvent &se) { if (enabled!=se.enabled) return 0; if (type!=se.type) return 0; if (Pitch!=se.Pitch) return 0; if (Duration!=se.Duration) return 0; if (Count!=se.Count) return 0; if (strcmp(Device,se.Device)) return 0; if (strcmp(ExtraData,se.ExtraData)) return 0; return 1; } int SoundEvent::operator!=(SoundEvent &se) { return(! (se==(*this)) ); } void SoundEvent::read(tstring &rcline) { int t; static char *sep=",\r\n"; string *p; memset(Device,0,64); memset(ExtraData,0,256); t=rcline.tokenvalue(sep); switch(t) { case 0: // INT_WAVE type=INT_WAVE; Count=1; Pitch=rcline.tokenvalue(sep); Duration=rcline.tokenvalue(sep); p=rcline.token(sep); p->copy(Device,63); Count=rcline.tokenvalue(sep); if (!Count) Count=1; enabled = rcline.tokenbool(sep,true); break; case 1: // EXT_WAVE type=EXT_WAVE; Pitch=Duration=0; p=rcline.token(sep); p->copy(Device,63); p=rcline.token(sep); p->copy(ExtraData,255); enabled = rcline.tokenbool(sep,true); break; case 2: // EXT_PROGRAM type=EXT_PROGRAM; Pitch=Duration=0; p=rcline.token(sep); p->copy(ExtraData,255); enabled = rcline.tokenbool(sep,true); break; case 3: // PLAIN_BEEP type=PLAIN_BEEP; Pitch=Duration=0; rcline.token(sep); /* beep string */ enabled = rcline.tokenbool(sep,true); break; default: cerr << _("[eboard] bad RC line\n"); } } ostream & operator<<(ostream &s, SoundEvent e) { switch(e.type) { case INT_WAVE: s << "0," << e.Pitch << ',' << e.Duration << ','; s << e.Device << ',' << e.Count << ',' << (e.enabled?1:0); break; case EXT_WAVE: if (e.Device[0] == 0) strcpy(e.Device,"/dev/dsp"); s << "1," << e.Device << ',' << e.ExtraData; s << ',' << (e.enabled?1:0); break; case EXT_PROGRAM: s << "2," << e.ExtraData << ',' << (e.enabled?1:0); break; case PLAIN_BEEP: s << "3,beep" << ',' << (e.enabled?1:0); break; } return(s); } void SoundEvent::playHere() { switch(type) { case INT_WAVE: sine_beep(Device,Pitch,Duration); break; case PLAIN_BEEP: printf("%c",7); fflush(stdout); break; default: play(); } } void SoundEvent::safePlay() { global.sndslave.play(*this); } void SoundEvent::play() { if (type==INT_WAVE || type==PLAIN_BEEP) { playHere(); return; } if (!fork()) { switch(type) { case EXT_WAVE: execlp("play","play","-d",Device,ExtraData,0); execlp("sox",ExtraData,"-t","ossdsp",Device,0); break; case EXT_PROGRAM: execlp("/bin/sh","/bin/sh","-c",ExtraData,0); break; default: /* will never happen */ break; } _exit(0); } } void SoundEvent::sine_beep(char *device,int pitch,int duration) { #ifdef SOME_DRIVER int rate=11025; // Hz int interval; unsigned char *wave; int bl,fd,i,ts; double r,s; #endif // SOME #ifdef OSS_DRIVER int format=AFMT_U8; int channels=1; #endif #ifdef OPENBSD_DRIVER audio_info_t ai; #endif // OPENBSD #ifdef SOME_DRIVER interval=120*rate/1000; // 120 msec wave=(unsigned char *)malloc(ts = (Count*(bl=(rate*duration)/1000) + (Count-1)*interval) ); if (!wave) return; memset(wave,127,ts); for(i=0;i1)?_("beeps"): _("beep"),Device,Pitch,Duration); break; case EXT_WAVE: snprintf(pvt,128,_("play file %s"),ExtraData); break; case EXT_PROGRAM: snprintf(pvt,128,_("run %s"),ExtraData); break; case PLAIN_BEEP: snprintf(pvt,128,_("plain console beep")); break; default: g_strlcpy(pvt,_("nothing"),128); } return pvt; } void SoundEvent::edit(SoundEventChangeListener *listener) { (new SoundEventDialog(this,listener))->show(); } // dialog SoundEventDialog::SoundEventDialog(SoundEvent *src, SoundEventChangeListener *listener) : ModalDialog(N_("Sound Event")) { GtkWidget *v,*tf,*rh,*mh[4],*ml[5],*hs,*bb,*ok,*cancel,*test,*brw; GSList *rg; int i,j; GtkObject *pitch,*dur,*cou; GtkWidget *tl=0,*om=0,*cbh=0,*omm,*ommi; gtk_window_set_default_size(GTK_WINDOW(widget),480,340); obj=src; hearer=listener; v=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(widget),v); tf=gtk_frame_new(_("Event Type")); gtk_frame_set_shadow_type(GTK_FRAME(tf),GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(v),tf,FALSE,FALSE,4); rh=gtk_vbox_new(FALSE,4); gtk_container_add(GTK_CONTAINER(tf),rh); rd[0]=gtk_radio_button_new_with_label( 0, _("Beep (need Pitch, Duration, Count and Device)") ); rg=gtk_radio_button_group(GTK_RADIO_BUTTON(rd[0])); rd[1]=gtk_radio_button_new_with_label(rg, _("Play WAV (need Device and Filename, sox must be installed)") ); rg=gtk_radio_button_group(GTK_RADIO_BUTTON(rd[1])); rd[2]=gtk_radio_button_new_with_label(rg, _("Run Program (need Filename)") ); rg=gtk_radio_button_group(GTK_RADIO_BUTTON(rd[2])); rd[3]=gtk_radio_button_new_with_label(rg, _("Console Beep") ); for(i=0;i<4;i++) { gtk_box_pack_start(GTK_BOX(rh),rd[i],FALSE,FALSE,4); gshow(rd[i]); } mh[0]=gtk_hbox_new(FALSE,4); mh[1]=gtk_hbox_new(FALSE,4); mh[2]=gtk_hbox_new(FALSE,4); mh[3]=gtk_hbox_new(FALSE,4); ml[0]=gtk_label_new(_("Pitch (Hz):")); ml[1]=gtk_label_new(_("Duration (msec):")); ml[2]=gtk_label_new(_("Device:")); ml[3]=gtk_label_new(_("File to play / Program to run:")); ml[4]=gtk_label_new(_("Count:")); brw=gtk_button_new_with_label(_(" Browse... ")); for(i=2;i<4;i++) en[i]=gtk_entry_new(); pitch=gtk_adjustment_new((gfloat)(src->Pitch),50.0,2000.0,1.0,10.0,10.0); en[0]=gtk_spin_button_new(GTK_ADJUSTMENT(pitch),0.5,0); dur=gtk_adjustment_new((gfloat)(src->Duration),30.0,4000.0,10.0,100.0,100.0); en[1]=gtk_spin_button_new(GTK_ADJUSTMENT(dur),0.5,0); cou=gtk_adjustment_new((gfloat)(src->Count),1.0,5.0,1.0,1.0,1.0); en[4]=gtk_spin_button_new(GTK_ADJUSTMENT(cou),0.5,0); j=global.SoundFiles.size(); if (j) { cbh=gtk_hbox_new(FALSE,4); om=gtk_option_menu_new(); omm=gtk_menu_new(); for(i=0;itype) { case INT_WAVE: gtset(GTK_TOGGLE_BUTTON(rd[0]), 1); break; case EXT_WAVE: gtset(GTK_TOGGLE_BUTTON(rd[1]), 1); break; case EXT_PROGRAM: gtset(GTK_TOGGLE_BUTTON(rd[2]), 1); break; case PLAIN_BEEP: gtset(GTK_TOGGLE_BUTTON(rd[3]), 1); break; } gtk_entry_set_text(GTK_ENTRY(en[2]),src->Device); gtk_entry_set_text(GTK_ENTRY(en[3]),src->ExtraData); gtk_signal_connect(GTK_OBJECT(ok),"clicked", GTK_SIGNAL_FUNC(snddlg_ok),(gpointer)(this)); gtk_signal_connect(GTK_OBJECT(test),"clicked", GTK_SIGNAL_FUNC(snddlg_test),(gpointer)(this)); gtk_signal_connect(GTK_OBJECT(brw),"clicked", GTK_SIGNAL_FUNC(snddlg_browse),(gpointer)(this)); } void snddlg_picktheme(GtkMenuItem *w,gpointer data) { SoundEventDialog *me; EboardFileFinder eff; char z[512],zz[512]; int i,j; me=(SoundEventDialog *)data; j=me->sthemes.size(); for(i=0;isthemes[i])) { g_strlcpy(z,global.SoundFiles[i].c_str(),512); if (strlen(z)) { if (eff.find(z,zz)) strcpy(z,zz); gtk_entry_set_text(GTK_ENTRY(me->en[3]),z); gtset(GTK_TOGGLE_BUTTON(me->rd[1]),TRUE); } return; } } void snddlg_browse(GtkWidget *w,gpointer data) { SoundEventDialog *me; FileDialog *fd; me=(SoundEventDialog *)data; fd=new FileDialog(_("Browse")); if (fd->run()) { gtk_entry_set_text(GTK_ENTRY(me->en[3]), fd->FileName); } delete fd; } void snddlg_ok(GtkWidget *w,gpointer data) { SoundEventDialog *me; me=(SoundEventDialog *)data; me->apply(me->obj); if (me->hearer) me->hearer->SoundEventChanged(); me->release(); } void snddlg_test(GtkWidget *w,gpointer data) { SoundEventDialog *me; SoundEvent foo; me=(SoundEventDialog *)data; me->apply(&foo); foo.safePlay(); } void SoundEventDialog::apply(SoundEvent *dest) { if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rd[0]))) dest->type=INT_WAVE; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rd[1]))) dest->type=EXT_WAVE; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rd[2]))) dest->type=EXT_PROGRAM; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rd[3]))) dest->type=PLAIN_BEEP; dest->Pitch=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(en[0])); dest->Duration=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(en[1])); dest->Count=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(en[4])); g_strlcpy(dest->Device,gtk_entry_get_text(GTK_ENTRY(en[2])),64); g_strlcpy(dest->ExtraData,gtk_entry_get_text(GTK_ENTRY(en[3])),256); } // --- sound daemon (slave) SoundSlave::SoundSlave() { pid=0; pipe(sout); } SoundSlave::~SoundSlave() { if (alive()) kill(); close(sout[0]); close(sout[1]); } void SoundSlave::play(SoundEvent &se) { if ( ! ( alive() && kicking() ) ) { kill(); run(); usleep(50000); } write(sout[1],&se,sizeof(se)); } bool SoundSlave::alive() { if (!pid) return false; if (waitpid(pid,0,WNOHANG)<=0) return true; else return false; } bool SoundSlave::kicking() { fd_set wd; struct timeval tv; if (!pid) return false; FD_ZERO(&wd); FD_SET(sout[1],&wd); tv.tv_sec=0; tv.tv_usec=20000; if (select(sout[1]+1,0,&wd,0,&tv)<=0) return false; else return true; } void SoundSlave::kill() { global.debug("SoundSlave","kill"); if (!pid) return; ::kill((pid_t)pid,SIGKILL); close(sout[0]); close(sout[1]); pipe(sout); pid=0; } void SoundSlave::run() { pid=fork(); if (!pid) { close(0); dup2(sout[0],0); execlp(global.argv0,"(eboard beeper)",0); waitForEvents(); // only if above method fails _exit(0); } } void SoundSlave::waitForEvents() { SoundEvent se; int r; for(;;) { r=read(0,&se,sizeof(se)); if (r!=sizeof(se)) _exit(0); se.playHere(); waitpid(0,0,WNOHANG); // release zombies } } eboard-1.1.1.orig/status.h0000644000175000017500000000237710757567572015005 0ustar patrikpatrik/* $Id: status.h,v 1.3 2003/01/20 03:30:20 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2001 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef EBOARD_STATUS_H #define EBOARD_STATUS_H 1 #include "widgetproxy.h" class Status : public WidgetProxy { public: Status(); void setText(char *msg); void setText(char *msg, int secs); int WaitUpdate; private: void waitUpdate(); void killExp(); friend gboolean st_expire(gpointer data); int toid; GtkWidget *label; }; #endif eboard-1.1.1.orig/r18.xpm0000644000175000017500000000146510757567572014446 0ustar patrikpatrik/* XPM */ static char * r18_xpm[] = { "18 18 25 1", " c None", ". c #1A1A1A", "+ c #000000", "@ c #5F5F5F", "# c #8E8E8E", "$ c #A6A6A6", "% c #323232", "& c #353535", "* c #D4D4D4", "= c #6A6A6A", "- c #B1B1B1", "; c #404040", "> c #FFFFFF", ", c #DCDCDC", "' c #AAAAAA", ") c #F8F8F8", "! c #EAEAEA", "~ c #E3E3E3", "{ c #808080", "] c #2C2C2C", "^ c #555555", "/ c #080808", "( c #101010", "_ c #787878", ": c #424242", " ", " ", " .++ @++#$++% ", " &*=%+-#++#*+ ", " ;>,'')!''~>+ ", " +;{{{{{{{{]+ ", " +={{{{{{^/ ", " %'>>>>>>{+ ", " %'>>>>>>{+ ", " %'>>>>>>{+ ", " %'>>>>>>{+ ", " %'>>>>>>{+ ", " (_{{{{{{=+ ", " +^{{{{{{{{:@ ", " +*>>>>>>>>'% ", " +{{{{{{{{{{{=+ ", " +;;;;;;;;;;;&/ ", " "}; eboard-1.1.1.orig/status.cc0000644000175000017500000000416610757567572015141 0ustar patrikpatrik/* $Id: status.cc,v 1.14 2006/10/26 09:24:20 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2006 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "global.h" #include "status.h" #include "eboard.h" Status::Status() { GtkWidget *hb; WaitUpdate=1; toid = -1; widget=gtk_frame_new(0); gtk_frame_set_shadow_type(GTK_FRAME(widget),GTK_SHADOW_ETCHED_OUT); hb=gtk_hbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),hb); label=gtk_label_new(_("Welcome to eboard.")); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(hb),label,FALSE,FALSE,2); Gtk::show(label,hb,NULL); } void Status::setText(char *msg) { killExp(); gtk_label_set_text(GTK_LABEL(label),msg); gtk_widget_queue_resize(label); waitUpdate(); } gboolean st_expire(gpointer data) { Status *me = (Status *) data; me->toid = -1; gtk_label_set_text(GTK_LABEL(me->label)," "); gtk_widget_queue_resize(me->label); return FALSE; } void Status::setText(char *msg, int secs) { killExp(); setText(msg); toid = gtk_timeout_add(secs * 1000, st_expire, (void *) this); } void Status::waitUpdate() { int i; if (WaitUpdate) for(i=3;i;i--) if(gtk_events_pending()) global.WrappedMainIteration(); else break; } void Status::killExp() { if (toid>0) { gtk_timeout_remove(toid); toid = -1; } } eboard-1.1.1.orig/icon-ads.xpm0000644000175000017500000000707610757567572015535 0ustar patrikpatrik/* XPM */ static char * icon_ads_xpm[] = { "48 48 73 1", " c None", ". c #020202", "+ c #6A4E3A", "@ c #684A36", "# c #5F4333", "$ c #503A2A", "% c #B2966B", "& c #AE926A", "* c #AA8E66", "= c #A48A63", "- c #A28662", "; c #9E865F", "> c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #1E1E1E", "B c #E2E2E2", "C c #8E8E8E", "D c #3A3A3A", "E c #565656", "F c #AAAAAA", "G c #C6C6C6", "H c #727272", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzAABzzzzzzB.zzzzzzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzCDEFzzzzzzFEzzzzzzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzAGECzzzFECHHzBEEGzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzCDzFEzzCAFE.FzACCAGzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzAGzFEzz.Bzz.BzACzGBzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzC.EEE.zFEzzz.zzBEAFzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzAFFFF.zFEzzCEzCGzB.zzz", "zzzzzzzzzzzzzzzzzzzzzzzzzCHzzzzDFB.CCAHzCAFCAzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzHBzzzzCGzGECCGzzCEHBzzz", "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"}; eboard-1.1.1.orig/dlg_gamelist.cc0000644000175000017500000006144110757567572016250 0ustar patrikpatrik/* $Id: dlg_gamelist.cc,v 1.37 2007/01/20 15:58:42 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "eboard.h" #include "global.h" #include "chess.h" #include "dlg_gamelist.h" #include "tstring.h" #include "icon-games.xpm" #include "icon-ads.xpm" #include "icon-local.xpm" #include "goc_open.xpm" #include "goc_save.xpm" #include "goc_refresh.xpm" #include "goc_discardall.xpm" #include "goc_display.xpm" #include "goc_discard.xpm" #include "goc_edit.xpm" #include "treeics.xpm" #include "treepgn.xpm" #include "treeeng.xpm" #include "treeoth.xpm" #include "treepgnf.xpm" #include "treegam.xpm" GameListDialog::GameListDialog(GameListListener *someone) { GtkWidget *sw,*v,*bh; GtkStyle *style; GdkFont *fixed; int i; owner=someone; SelectedRow=-1; canclose=1; widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(widget),600,400); gtk_window_set_title(GTK_WINDOW(widget),_("Game List")); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),4); gtk_widget_realize(widget); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),v); sw=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); style=gtk_style_copy( gtk_widget_get_default_style() ); /* FIXME fixed=gdk_font_load("fixed"); if (fixed) style->font=fixed; else cerr << _(" Warning: couldn't load fixed font, this dialog's content will look awful.\n\n"); */ clist=gtk_clist_new(2); gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE); gtk_clist_set_column_title(GTK_CLIST(clist),0,"#"); gtk_clist_set_column_title(GTK_CLIST(clist),1,_("Game Description")); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_box_pack_start(GTK_BOX(v),sw,TRUE,TRUE,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_style(clist,style); gtk_container_add(GTK_CONTAINER(sw),clist); for(i=0;i<2;i++) gtk_clist_set_column_min_width(GTK_CLIST(clist),i,32); bh=gtk_hbox_new(TRUE,0); gtk_box_pack_start(GTK_BOX(v),bh,FALSE,FALSE,0); b[0]=gtk_button_new_with_label(_("Refresh List")); b[1]=gtk_button_new_with_label(_("Observe")); for(i=0;i<2;i++) { gtk_box_pack_start(GTK_BOX(bh),b[i],FALSE,TRUE,0); gshow(b[i]); } gtk_widget_set_sensitive(b[1],FALSE); setIcon(icon_games_xpm,_("Games")); Gtk::show(bh,clist,sw,v,NULL); gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(gamelist_delete),(gpointer)(&canclose)); gtk_signal_connect(GTK_OBJECT(widget),"destroy", GTK_SIGNAL_FUNC(gamelist_destroy),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[0]),"clicked", GTK_SIGNAL_FUNC(gamelist_refresh),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[1]),"clicked", GTK_SIGNAL_FUNC(gamelist_observe),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"select_row", GTK_SIGNAL_FUNC(gamelist_select),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"unselect_row", GTK_SIGNAL_FUNC(gamelist_unselect),(gpointer)this); refresh(); } void GameListDialog::appendGame(int gamenum, char *desc) { char z[10]; char *zp[2]; snprintf(z,10,"%d",gamenum); zp[0]=z; zp[1]=desc; gtk_clist_append(GTK_CLIST(clist),zp); } void GameListDialog::endOfList() { gtk_widget_set_sensitive(b[0],TRUE); gtk_window_set_title(GTK_WINDOW(widget),_("Game List")); gtk_clist_columns_autosize(GTK_CLIST(clist)); canclose=1; } void gamelist_observe (GtkWidget * w, gpointer data) { GameListDialog *me; char *z; me=(GameListDialog *)data; int gn; gtk_clist_get_text(GTK_CLIST(me->clist),me->SelectedRow,0,&z); gn=atoi(z); if (global.getGame(gn)) return; if (global.protocol) global.protocol->observe(gn); } void GameListDialog::refresh() { if (global.protocol) { canclose=0; global.protocol->queryGameList(this); SelectedRow=-1; gtk_clist_clear(GTK_CLIST(clist)); gtk_widget_set_sensitive(b[0],FALSE); gtk_widget_set_sensitive(b[1],FALSE); gtk_window_set_title(GTK_WINDOW(widget),_("Game List (refreshing...)")); } } void gamelist_refresh (GtkWidget * w, gpointer data) { GameListDialog *me; me=(GameListDialog *)data; me->refresh(); } gint gamelist_delete (GtkWidget * widget, GdkEvent * event, gpointer data) { int flag; flag=*((int *)data); return(flag?FALSE:TRUE); } void gamelist_destroy (GtkWidget * widget, gpointer data) { GameListDialog *me; me=(GameListDialog *)data; if (me->owner) me->owner->gameListClosed(); } void gamelist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data) { GameListDialog *me; me=(GameListDialog *)data; me->SelectedRow=row; gtk_widget_set_sensitive(me->b[1],TRUE); } void gamelist_unselect (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data) { GameListDialog *me; me=(GameListDialog *)data; me->SelectedRow=-1; gtk_widget_set_sensitive(me->b[1],FALSE); } // ------------- client-side game list StockListDialog::StockListDialog(StockListListener *someone) { GtkWidget *v,*sw,*h,*left; GdkFont *fixed; GtkStyle *style; int i; owner=someone; SelectedRow=-1; canclose=1; widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(widget),650,400); gtk_window_set_title(GTK_WINDOW(widget),_("Local Game List")); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),4); gtk_widget_realize(widget); style=gtk_widget_get_style(widget); icons[0] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[0], &style->bg[GTK_STATE_NORMAL], (gchar **) treeics_xpm); icons[1] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[1], &style->bg[GTK_STATE_NORMAL], (gchar **) treepgn_xpm); icons[2] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[2], &style->bg[GTK_STATE_NORMAL], (gchar **) treeeng_xpm); icons[3] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[3], &style->bg[GTK_STATE_NORMAL], (gchar **) treeoth_xpm); icons[4] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[4], &style->bg[GTK_STATE_NORMAL], (gchar **) treepgnf_xpm); icons[5] = gdk_pixmap_create_from_xpm_d (widget->window, &masks[5], &style->bg[GTK_STATE_NORMAL], (gchar **) treegam_xpm); h=gtk_hbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),h); left=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(h),left,FALSE,TRUE,0); b[3]=PixButton(goc_open_xpm,_("Load PGN...")); gtk_box_pack_start(GTK_BOX(left),b[3],FALSE,TRUE,0); b[0]=PixButton(goc_refresh_xpm,_("Refresh List")); gtk_box_pack_start(GTK_BOX(left),b[0],FALSE,TRUE,0); b[6]=PixButton(goc_discardall_xpm,_("Discard All")); gtk_box_pack_start(GTK_BOX(left),b[6],FALSE,TRUE,0); b[1]=PixButton(goc_display_xpm,_("Display Game")); gtk_box_pack_start(GTK_BOX(left),b[1],FALSE,TRUE,0); b[4]=PixButton(goc_save_xpm,_("Save Game...")); gtk_box_pack_start(GTK_BOX(left),b[4],FALSE,TRUE,0); b[2]=PixButton(goc_discard_xpm,_("Discard Game")); gtk_box_pack_start(GTK_BOX(left),b[2],FALSE,TRUE,0); b[5]=PixButton(goc_edit_xpm,_("Edit Game Info")); gtk_box_pack_start(GTK_BOX(left),b[5],FALSE,TRUE,0); // ------- v=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(h),v,TRUE,TRUE,0); sw=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); style=gtk_style_copy( gtk_widget_get_default_style() ); /* FIXME fixed=gdk_font_load("fixed"); if (fixed) style->font=fixed; else cerr << _(" Warning: couldn't load fixed font, this dialog's content will look awful.\n\n"); */ // number(tree) displayed white black variant result clist=gtk_ctree_new(7,0); gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE); gtk_clist_set_column_title(GTK_CLIST(clist),0,_("Game #")); gtk_clist_set_column_title(GTK_CLIST(clist),1,_("Displayed")); gtk_clist_set_column_title(GTK_CLIST(clist),2,_("White")); gtk_clist_set_column_title(GTK_CLIST(clist),3,_("Black")); gtk_clist_set_column_title(GTK_CLIST(clist),4,_("Variant")); gtk_clist_set_column_title(GTK_CLIST(clist),5,_("Result")); gtk_clist_set_column_title(GTK_CLIST(clist),6,"ctree is buggy it seems"); gtk_clist_set_column_visibility(GTK_CLIST(clist),6,FALSE); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_box_pack_start(GTK_BOX(v),sw,TRUE,TRUE,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_style(clist,style); gtk_container_add(GTK_CONTAINER(sw),clist); for(i=0;i<6;i++) gtk_clist_set_column_min_width(GTK_CLIST(clist),i,64); gtk_clist_columns_autosize(GTK_CLIST(clist)); // ---------------------------------- for(i=0;i<7;i++) gshow(b[i]); gtk_widget_set_sensitive(b[0],TRUE); gtk_widget_set_sensitive(b[1],FALSE); gtk_widget_set_sensitive(b[2],FALSE); gtk_widget_set_sensitive(b[3],TRUE); gtk_widget_set_sensitive(b[4],FALSE); gtk_widget_set_sensitive(b[5],FALSE); gtk_widget_set_sensitive(b[6],TRUE); setIcon(icon_local_xpm,_("Local")); Gtk::show(clist,sw,v,left,h,NULL); gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(gamelist_delete),(gpointer)(&canclose)); gtk_signal_connect(GTK_OBJECT(widget),"destroy", GTK_SIGNAL_FUNC(stocklist_destroy),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[0]),"clicked", GTK_SIGNAL_FUNC(stocklist_refresh),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[1]),"clicked", GTK_SIGNAL_FUNC(stocklist_open),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[2]),"clicked", GTK_SIGNAL_FUNC(stocklist_dump),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[3]),"clicked", GTK_SIGNAL_FUNC(stocklist_loadpgn),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[6]),"clicked", GTK_SIGNAL_FUNC(stocklist_dumpall),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[5]),"clicked", GTK_SIGNAL_FUNC(stocklist_editpgn),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[4]),"clicked", GTK_SIGNAL_FUNC(stocklist_savepgn),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"tree_select_row", GTK_SIGNAL_FUNC(stocklist_select),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"tree_unselect_row", GTK_SIGNAL_FUNC(stocklist_unselect),(gpointer)this); refresh(); } void StockListDialog::refresh() { list::iterator gli; char x[16],y[8],z[64],a[64],b[32],c[16]; char *zp[7]; unsigned int i; int j; char ka[256], kb[256]; string *kp; int kids[4]; vector filenodes; vector filenames; vector count; GtkCTreeNode *myfile; tstring t; SelectedRow=-1; gtk_clist_freeze(GTK_CLIST(clist)); gtk_clist_clear(GTK_CLIST(clist)); // add toplevel nodes for(i=0;i<4;i++) toplevel[i]=gtk_ctree_insert_node(GTK_CTREE(clist),0,0, 0,2, icons[i],masks[i], icons[i],masks[i], FALSE, TRUE); kids[0]=kids[1]=kids[2]=kids[3]=0; zp[0]=x; zp[1]=y; zp[2]=z; zp[3]=a; zp[4]=b; zp[5]=c; zp[6]=x; for(gli=global.GameList.begin();gli!=global.GameList.end();gli++) { snprintf(x,16,"%d",(*gli)->GameNumber); g_strlcpy(y,(*gli)->getBoard()?_("Yes"): _("No"),8); strcpy(z,(*gli)->PlayerName[0]); strcpy(a,(*gli)->PlayerName[1]); strcpy(b,ChessGame::variantName((*gli)->Variant)); if (!(*gli)->isOver()) g_strlcpy(c,_("in progress"),16); else { GameResult gr=(*gli)->getResult(); switch(gr) { case WHITE_WIN: strcpy(c,"1-0"); break; case BLACK_WIN: strcpy(c,"0-1"); break; case DRAW: strcpy(c,"1/2-1/2"); break; case UNDEF: strcpy(c,"*"); break; } } if ( (*gli)->source == GS_PGN_File ) { j=-1; for(i=0;isource_data ) { count[i]++; j=i; break; } } if (j<0) { myfile=gtk_ctree_insert_node(GTK_CTREE(clist), toplevel[1], 0, 0, 2, icons[4],masks[4], icons[4],masks[4], FALSE, TRUE); gtk_ctree_node_set_text(GTK_CTREE(clist), myfile, 6, "gtk_is_buggy"); filenames.push_back( (*gli)->source_data ); filenodes.push_back( myfile ); count.push_back(1); j = filenames.size() - 1; } gtk_ctree_insert_node(GTK_CTREE(clist), filenodes[j], 0, zp, 2, icons[5],masks[5], icons[5],masks[5], TRUE, TRUE); kids[1]++; } else { switch( (*gli)->source ) { case GS_ICS: j=0; break; case GS_Engine: j=2; break; case GS_Other: j=3; break; default: j=3; } gtk_ctree_insert_node(GTK_CTREE(clist), toplevel[j], 0, zp, 2, icons[5],masks[5], icons[5],masks[5], TRUE, TRUE); kids[j]++; } } for(i=0;icopy(ka,255); } } while(kp); snprintf(kb,256,"%s (%d %s)", ka, count[i], count[i]==1?_("game"): _("games")); gtk_ctree_node_set_pixtext(GTK_CTREE(clist) , filenodes[i], 0, kb, 4, icons[4], masks[4]); } for(i=0;i<4;i++) gtk_ctree_node_set_text(GTK_CTREE(clist), toplevel[i], 6, "gtk-is-buggy"); snprintf(kb,256,_("From ICS (%d %s)"), kids[0], kids[0]==1?_("game"): _("games")); gtk_ctree_node_set_pixtext(GTK_CTREE(clist), toplevel[0], 0, kb, 4, icons[0],masks[0]); snprintf(kb,256,_("From PGN Files (%d %s)"), kids[1], kids[1]==1?_("game"): _("games")); gtk_ctree_node_set_pixtext(GTK_CTREE(clist), toplevel[1], 0, kb, 4, icons[1], masks[1]); snprintf(kb,256,_("From Engines (%d %s)"), kids[2], kids[2]==1?_("game"): _("games")); gtk_ctree_node_set_pixtext(GTK_CTREE(clist), toplevel[2], 0, kb, 4, icons[2], masks[2]); snprintf(kb,256,_("From Elsewhere (%d %s)"), kids[3], kids[3]==1?_("game"): _("games")); gtk_ctree_node_set_pixtext(GTK_CTREE(clist), toplevel[3], 0, kb, 4, icons[3], masks[3]); gtk_clist_columns_autosize(GTK_CLIST(clist)); gtk_clist_thaw(GTK_CLIST(clist)); calcEnable(); } void StockListDialog::open() { Board *b; ChessGame *cg; char tab[32]; cg=global.getGame(SelectedRow); if (!cg) return; if (!cg->loadMoves()) return; cg->protodata[1]=1; b=new Board(); b->reset(); cg->setBoard(b); b->setGame(cg); b->setCanMove(false); b->setSensitive(false); b->walkBackAll(); cg->acknowledgeInfo(); snprintf(tab,32,_("Game #%d"),cg->GameNumber); global.ebook->addPage(b->widget,tab,cg->GameNumber); b->setNotebook(global.ebook,cg->GameNumber); b->pop(); b->repaint(); refresh(); } void StockListDialog::trashAll() { ChessGame *cg; Board *b; list::iterator gli; int i; for(i=0;i<2;i++) { for(gli=global.GameList.begin();gli!=global.GameList.end();gli++) { cg=*gli; if (cg->getBoard()) { b=cg->getBoard(); if (b==global.BoardList.front()) continue; // can't discard game shown in main board cg->closeMoveList(); global.ebook->removePage(cg->GameNumber); global.removeBoard(b); delete(b); cg->setBoard(0); } delete(cg); global.GameList.erase(gli); gli=global.GameList.begin(); } } refresh(); } void StockListDialog::trash() { ChessGame *cg; Board *b; list::iterator gli; cg=global.getGame(SelectedRow); if (cg==NULL) return; if (cg->getBoard()!=NULL) { b=cg->getBoard(); if (b==global.BoardList.front()) // can't remove game in main board return; global.ebook->removePage(cg->GameNumber); global.removeBoard(b); delete(b); cg->setBoard(NULL); } for(gli=global.GameList.begin();gli!=global.GameList.end();gli++) if ( (*gli) == cg ) { delete(*gli); global.GameList.erase(gli); break; } refresh(); } void StockListDialog::calcEnable() { ChessGame *cg; if (SelectedRow<0) { oops: gtk_widget_set_sensitive(b[1],FALSE); gtk_widget_set_sensitive(b[2],FALSE); gtk_widget_set_sensitive(b[4],FALSE); gtk_widget_set_sensitive(b[5],FALSE); return; } cg=global.getGame(SelectedRow); if (!cg) goto oops; if (cg->getBoard()) { gtk_widget_set_sensitive(b[1],FALSE); // can't display gtk_widget_set_sensitive(b[2],cg->isOver()); // can discard if over } else { gtk_widget_set_sensitive(b[1],TRUE); // can display gtk_widget_set_sensitive(b[2],TRUE); // can discard } gtk_widget_set_sensitive(b[4],TRUE); // can save gtk_widget_set_sensitive(b[5],TRUE); // can edit pgn } void stocklist_refresh (GtkWidget * w, gpointer data) { StockListDialog *me; me=(StockListDialog *)data; me->refresh(); } void stocklist_open (GtkWidget * w, gpointer data) { StockListDialog *me; me=(StockListDialog *)data; me->open(); } void stocklist_savepgn (GtkWidget * w, gpointer data) { StockListDialog *me; FileDialog *fd; ChessGame *cg; me=(StockListDialog *)data; fd=new FileDialog(_("Save as PGN")); if (fd->run()) { cg=global.getGame(me->SelectedRow); if (cg) cg->savePGN(fd->FileName, true); } delete fd; } void stocklist_loadpgn (GtkWidget * w, gpointer data) { StockListDialog *me; FileDialog *fd; me=(StockListDialog *)data; fd=new FileDialog(_("Load PGN")); if (fd->run()) { ChessGame::LoadPGN(fd->FileName); me->refresh(); } delete fd; } void stocklist_editpgn (GtkWidget * w, gpointer data) { StockListDialog *me; ChessGame *cg; me=(StockListDialog *)data; cg=global.getGame(me->SelectedRow); if (!cg) return; (new PGNEditInfoDialog(cg))->show(); } void stocklist_dump (GtkWidget * w, gpointer data) { StockListDialog *me; me=(StockListDialog *)data; me->trash(); } void stocklist_dumpall (GtkWidget * w, gpointer data) { StockListDialog *me; me=(StockListDialog *)data; me->trashAll(); } void stocklist_destroy (GtkWidget * widget, gpointer data) { StockListDialog *me; me=(StockListDialog *)data; if (me->owner) me->owner->stockListClosed(); } // the gtk documentation has a wrong declaration of this, // only figured out after looking at the code of the Balsa // mail client void stocklist_select (GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data) { StockListDialog *me; char *p; me=(StockListDialog *)data; // getting column 0 either crashes or returns garbage, so // I duplicated it in an invisible column gtk_ctree_node_get_text(cl, node, 6, &p); if (p[0] != 'g') { me->SelectedRow=atoi(p); if (me->SelectedRow == 0) me->SelectedRow=-1; me->calcEnable(); } } void stocklist_unselect (GtkCTree *cl, GtkCTreeNode *node, gint column, gpointer data) { StockListDialog *me; int i; me=(StockListDialog *)data; me->SelectedRow=-1; for(i=1;i<3;i++) gtk_widget_set_sensitive(me->b[i],FALSE); gtk_widget_set_sensitive(me->b[4],FALSE); gtk_widget_set_sensitive(me->b[5],FALSE); } // ------------------------ ad list AdListDialog::AdListDialog(AdListListener *someone) { GtkWidget *sw,*v,*bh; GtkStyle *style; GdkFont *fixed; int i; owner=someone; SelectedRow=-1; canclose=1; widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(widget),600,400); gtk_window_set_title(GTK_WINDOW(widget),_("Ad List")); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),4); gtk_widget_realize(widget); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(widget),v); sw=gtk_scrolled_window_new(0,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); style=gtk_style_copy( gtk_widget_get_default_style() ); /* FIXME fixed=gdk_font_load("fixed"); if (fixed) style->font=fixed; else cerr << _(" Warning: couldn't load fixed font, this dialog's content will look awful.\n\n"); */ clist=gtk_clist_new(2); gtk_clist_set_shadow_type(GTK_CLIST(clist),GTK_SHADOW_IN); gtk_clist_set_selection_mode(GTK_CLIST(clist),GTK_SELECTION_SINGLE); gtk_clist_set_column_title(GTK_CLIST(clist),0,"#"); gtk_clist_set_column_title(GTK_CLIST(clist),1,_("Ad Description")); gtk_clist_column_titles_passive(GTK_CLIST(clist)); gtk_clist_column_titles_show(GTK_CLIST(clist)); gtk_box_pack_start(GTK_BOX(v),sw,TRUE,TRUE,0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_style(clist,style); gtk_container_add(GTK_CONTAINER(sw),clist); for(i=0;i<2;i++) gtk_clist_set_column_min_width(GTK_CLIST(clist),i,32); bh=gtk_hbox_new(TRUE,0); gtk_box_pack_start(GTK_BOX(v),bh,FALSE,FALSE,0); b[0]=gtk_button_new_with_label(_("Refresh List")); b[1]=gtk_button_new_with_label(_("Play")); for(i=0;i<2;i++) { gtk_box_pack_start(GTK_BOX(bh),b[i],FALSE,TRUE,0); gshow(b[i]); } gtk_widget_set_sensitive(b[1],FALSE); setIcon(icon_ads_xpm,_("Ads")); Gtk::show(bh,clist,sw,v,NULL); gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(gamelist_delete),(gpointer)(&canclose)); gtk_signal_connect(GTK_OBJECT(widget),"destroy", GTK_SIGNAL_FUNC(adlist_destroy),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[0]),"clicked", GTK_SIGNAL_FUNC(adlist_refresh),(gpointer)this); gtk_signal_connect(GTK_OBJECT(b[1]),"clicked", GTK_SIGNAL_FUNC(adlist_answer),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"select_row", GTK_SIGNAL_FUNC(adlist_select),(gpointer)this); gtk_signal_connect(GTK_OBJECT(clist),"unselect_row", GTK_SIGNAL_FUNC(adlist_unselect),(gpointer)this); refresh(); } void AdListDialog::appendGame(int gamenum, char *desc) { char z[10]; char *zp[2]; snprintf(z,10,"%d",gamenum); zp[0]=z; zp[1]=desc; gtk_clist_append(GTK_CLIST(clist),zp); } void AdListDialog::endOfList() { gtk_widget_set_sensitive(b[0],TRUE); gtk_window_set_title(GTK_WINDOW(widget),_("Ad List")); gtk_clist_columns_autosize(GTK_CLIST(clist)); canclose=1; } void AdListDialog::refresh() { if (global.protocol) { canclose=0; global.protocol->queryAdList(this); SelectedRow=-1; gtk_clist_clear(GTK_CLIST(clist)); gtk_widget_set_sensitive(b[0],FALSE); gtk_widget_set_sensitive(b[1],FALSE); gtk_window_set_title(GTK_WINDOW(widget),_("Ad List (refreshing...)")); } } void adlist_refresh (GtkWidget * w, gpointer data) { AdListDialog *me; me=(AdListDialog *)data; me->refresh(); } void adlist_answer (GtkWidget * w, gpointer data) { AdListDialog *me; char *z; me=(AdListDialog *)data; int gn; gtk_clist_get_text(GTK_CLIST(me->clist),me->SelectedRow,0,&z); gn=atoi(z); if (global.protocol) global.protocol->answerAd(gn); } void adlist_destroy (GtkWidget * widget, gpointer data) { AdListDialog *me; me=(AdListDialog *)data; if (me->owner) me->owner->adListClosed(); } void adlist_select (GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data) { AdListDialog *me; me=(AdListDialog *)data; me->SelectedRow=row; gtk_widget_set_sensitive(me->b[1],TRUE); } void adlist_unselect(GtkCList *cl, gint row, gint column, GdkEventButton *eb, gpointer data) { AdListDialog *me; me=(AdListDialog *)data; me->SelectedRow=-1; gtk_widget_set_sensitive(me->b[1],FALSE); } eboard-1.1.1.orig/goc_open.xpm0000644000175000017500000000150210757567572015615 0ustar patrikpatrik/* XPM */ static char * goc_open_xpm[] = { "32 20 4 1", " c None", ". c #000000", "+ c #9C917B", "@ c #E2E2E2", " ", " ", " ", " .. ", " ...+... ", " .. ...+...@@@... ", " .++..+...@@@@..++. ", " .+++..@@@@@..++++. ", " .+.@@@@@..++++++. ", " .+.@@@..++++++++. ", " ..@@.++++++++++. ", " .+.@.++++++++++. ", " ..@.++++++++++. ", " .+..++++++++.. ", " .+.++++++.. ", " .+.+++++. ", " ..+++.. ", " ..+.. ", " .. ", " "}; eboard-1.1.1.orig/proto_xboard.cc0000644000175000017500000010360110757567572016312 0ustar patrikpatrik/* $Id: proto_xboard.cc,v 1.52 2008/02/08 14:25:51 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #ifdef HAVE_STRINGS_H #include #endif #include #include #include #include "eboard.h" #include "global.h" #include "network.h" #include "protocol.h" #include "chess.h" #include "status.h" #include "util.h" #include "stl.h" #include "tstring.h" XBoardProtocol::XBoardProtocol() { EngineWhite=0; MoveNumber=1; MoveBlack=0; Variant=REGULAR; want_path_pane=1; supports_setboard=false; requires_usermove=false; timeout_id=-1; need_handshake=true; // send xboard/protover 2 Finalized = false; InitDone = false; got_init_pos = false; just_sent_fen = false; timecontrol.setSecondsPerMove(20); g_strlcpy(ComputerName,_("Computer"),64); strcpy(EngineCommandLine,"gnuchess"); strcpy(EngineRunDir,"~/.eboard/eng-out"); Features.set("*feature*"); IllegalMove.set("Illegal move*"); Moved[0].set("move%b%r"); Moved[1].set("%N.%b...%b%r"); Moved[2].set("%N%b...%b%r"); WhiteWin[0].set("1-0 {*}*"); BlackWin[0].set("0-1 {*}*"); Drawn[0].set ("1/2-1/2 {*}*"); WhiteWin[1].set("result 1-0*"); BlackWin[1].set("result 0-1*"); Drawn[1].set ("result 1/2-1/2*"); Dialect[0].set("White resigns*"); Dialect[1].set("Black resigns*"); Dialect[2].set("White %s*"); Dialect[3].set("Black %s*"); Dialect[4].set("Draw*"); Dialect[5].set("computer mates*"); Dialect[6].set("opponent mates*"); Dialect[7].set("computer resigns*"); Dialect[8].set("game is a draw*"); Dialect[9].set("checkmate*"); CurrentPosition.setStartPos(); LegalityBackup.setStartPos(); ebm=0; } void XBoardProtocol::setInitialPosition(Position *p) { initpos=(*p); got_init_pos=true; } // the "dialect" for game ends char * XBoardProtocol::xlateDialect(char *s) { static char result[128]; if (Dialect[0].match(s)) { strcpy(result,"0-1 { White resigns }"); return result; } if (Dialect[1].match(s)) { strcpy(result,"1-0 { Black resigns }"); return result; } if (Dialect[2].match(s)) { strcpy(result,"1-0 { White mates }"); return result; } if (Dialect[3].match(s)) { strcpy(result,"0-1 { Black mates }"); return result; } if (Dialect[4].match(s)) { strcpy(result,"1/2-1/2 { Draw }"); return result; } if (Dialect[5].match(s)) { strcpy(result,EngineWhite?"1-0 { White mates }":"0-1 { Black mates }"); return result; } if (Dialect[6].match(s)) { strcpy(result,EngineWhite?"0-1 { Black mates }":"1-0 { White mates }"); return result; } if (Dialect[7].match(s)) { strcpy(result,EngineWhite?"0-1 { White resigns }":"1-0 { Black resigns }"); return result; } if (Dialect[8].match(s)) { strcpy(result,"1/2-1/2 { Draw }"); return result; } if (Dialect[9].match(s)) { strcpy(result,EngineWhite?"1-0 { White mates }":"0-1 { Black mates }"); return result; } return 0; } void XBoardProtocol::receiveString(char *netstring) { ChessGame *refgame; char *p; char a[64],b[64]; int i,moved; int wc,bc; p=xlateDialect(netstring); if (p) netstring=p; if (Features.match(netstring)) { parseFeatures(); goto just_print; } if (IllegalMove.match(netstring)) { if (!InitDone) { // most likely engine does not support xboard protocol v2. // and currently we do not support these. if (timeout_id >= 0) { gtk_timeout_remove(timeout_id); timeout_id = -1; } finalize(); global.status->setText(_(" Incompatible Engine Protocol")); // TRANSLATE goto just_print; } if (just_sent_fen) if ((CurrentPosition.sidehint && EngineWhite) || (!CurrentPosition.sidehint && !EngineWhite) ) { // engine sent illegal move string during HIS move // happens when FEN string is sent to GNU Chess 5 and // it doesn't understand the castling permissions global.output->append(_("engine claimed illegal move but we didn't move, ignoring it."), global.Colors.TextBright, IM_IGNORE); return; } CurrentPosition=LegalityBackup; refgame=getGame(); backMove(); refgame->retreat(1); wc = bc = CLOCK_UNCHANGED; if (timecontrol.mode == TC_SPM) { if (EngineWhite) bc=0; else wc=0; } refgame->updatePosition2(CurrentPosition, MoveNumber, EngineWhite?1:0, wc,bc, _("illegal move!")); global.status->setText(netstring,15); global.BoardList.front()->setCanMove(true); return; } moved=-1; for(i=0;i<3;i++) if (Moved[i].match(netstring)) { moved = i; break; } if (moved>=0) { LegalityBackup=CurrentPosition; CurrentPosition.SANstring(Moved[moved].getRToken(0),a); CurrentPosition.moveAnyNotation(Moved[moved].getRToken(0), (MoveBlack?BLACK:WHITE),Variant); if (EngineWhite) snprintf(b,64,"%d. %s",MoveNumber,a); else snprintf(b,64,"%d. ... %s",MoveNumber,a); refgame=getGame(); wc = bc = CLOCK_UNCHANGED; if (timecontrol.mode == TC_ICS) { if (MoveNumber == 1) wc = bc = 1000 * timecontrol.startValue(); else refgame->incrementActiveClock(timecontrol.value[1]); } if (timecontrol.mode == TC_SPM) { if (EngineWhite) bc=0; else wc=0; } refgame->updatePosition2(CurrentPosition, MoveNumber, !MoveBlack, wc, bc, b, true); advanceMove(); global.BoardList.front()->setCanMove(true); global.opponentMoved(); just_sent_fen = false; return; } for(i=0;i<2;i++) { if (WhiteWin[i].match(netstring)) { gameOver(WhiteWin[i],WHITE_WIN); goto just_print; } if (BlackWin[i].match(netstring)) { gameOver(BlackWin[i],BLACK_WIN); goto just_print; } if (Drawn[i].match(netstring)) { gameOver(Drawn[i],DRAW); goto just_print; } } just_print: global.output->append(netstring, global.Colors.Engine, IM_IGNORE); } void XBoardProtocol::advanceMove() { if (MoveBlack) MoveNumber++; MoveBlack=!MoveBlack; } void XBoardProtocol::backMove() { if (!MoveBlack) MoveNumber--; MoveBlack=!MoveBlack; } void XBoardProtocol::sendMove(int x1,int y1,int x2,int y2,int prom) { ChessGame *refgame; char move[6], umove[15]; char mymove[12],ppfmm[32]; // [p]retty [p]rint [f]or [m]y [m]ove piece pp; int wc, bc; refgame=getGame(); LegalityBackup=CurrentPosition; pp = prom ? global.promotion->getPiece() : EMPTY; CurrentPosition.stdNotationForMove(x1,y1,x2,y2,pp,mymove,refgame->Variant); CurrentPosition.moveCartesian(x1,y1,x2,y2,Variant,true); if (EngineWhite) snprintf(ppfmm,32,"%d. ... %s",MoveNumber,mymove); else snprintf(ppfmm,32,"%d. %s",MoveNumber,mymove); wc = bc = CLOCK_UNCHANGED; if (timecontrol.mode == TC_ICS) { if (MoveNumber == 1) wc = bc = 1000 * timecontrol.startValue(); else refgame->incrementActiveClock(timecontrol.value[1]); } if (timecontrol.mode == TC_SPM) { if (EngineWhite) wc=0; else bc=0; } refgame->updatePosition2(CurrentPosition, MoveNumber, !MoveBlack, wc,bc, ppfmm); move[4]=0; move[5]=0; move[0]='a'+x1; move[1]='1'+y1; move[2]='a'+x2; move[3]='1'+y2; if (prom) { switch(pp) { case QUEEN: move[4]='q'; break; case ROOK: move[4]='r'; break; case BISHOP: move[4]='b'; break; case KNIGHT: move[4]='n'; break; case KING: move[4]='k'; break; } } if (requires_usermove) { strcpy(umove,"usermove "); strcat(umove,move); global.network->writeLine(umove); } else { global.network->writeLine(move); } advanceMove(); global.BoardList.front()->setCanMove(false); } void XBoardProtocol::finalize() { ChessGame *refgame; if (!Finalized) { Finalized = true; refgame=getGame(true); if (refgame!=NULL) { refgame->GameNumber=global.nextFreeGameId(XBOARD_GAME+1); refgame->endGame("interrupted",UNDEF); } if (global.network!=NULL) { global.network->close(); global.network->sendReadNotify(); } } } void XBoardProtocol::gameOver(ExtPatternMatcher &pm,GameResult gr, int hasreason) { char reason[64]; ChessGame *refgame; if (hasreason) { g_strlcpy(reason,pm.getStarToken(0),64); } else strcpy(reason,"Game over"); // I can't think of anything better... if ( (gr==BLACK_WIN && EngineWhite) || (gr==WHITE_WIN && !EngineWhite) ) global.gameWon(); if ( (gr==WHITE_WIN && EngineWhite) || (gr==BLACK_WIN && !EngineWhite) ) global.gameLost(); refgame=getGame(); refgame->endGame(reason,gr); if (global.AppendPlayed) { if (refgame->savePGN(global.AppendFile,true)) { char z[128]; snprintf(z,128,_("Game appended to %s"),global.AppendFile); global.status->setText(z,10); } } global.network->close(); global.network->sendReadNotify(); } void XBoardProtocol::resign() { ChessGame *refgame; global.gameLost(); refgame=getGame(); if (EngineWhite) { global.network->writeLine("result 0-1 {Black Resigns}"); refgame->endGame("Black resigned", WHITE_WIN); } else { global.network->writeLine("result 1-0 {White Resigns}"); refgame->endGame("White resigned", WHITE_WIN); } global.status->setText(_("Resigned."),10); if (global.AppendPlayed) { if (refgame->savePGN(global.AppendFile,true)) { char z[128]; snprintf(z,128,_("Game appended to %s"),global.AppendFile); global.status->setText(z,10); } } global.network->close(); global.network->sendReadNotify(); } void XBoardProtocol::draw() { global.network->writeLine("draw"); global.status->setText(_(" draw request sent"),20); } void XBoardProtocol::adjourn() { global.status->setText(_(" Adjourning not supported"),10); } void XBoardProtocol::abort() { finalize(); global.status->setText(_(" Session Aborted"),15); } void XBoardProtocol::retractMove() { ChessGame *ref; ref = getGame(true); if (ref!=NULL && MoveNumber>1) { if ((!MoveBlack && EngineWhite)|| (MoveBlack && !EngineWhite)) { global.status->setText(_("You can only retract when it's your turn to move."),15); } else { Position p; char z[64]; ref->retreat(2); p = ref->getLastPosition(); --MoveNumber; memset(z,0,64); p.getLastMove().copy(z,63); ref->updatePosition2(p,MoveNumber,MoveBlack, CLOCK_UNCHANGED, CLOCK_UNCHANGED,z); global.network->writeLine("remove"); global.status->setText(_("Retracted last move."),15); CurrentPosition = p; } } } ChessGame * XBoardProtocol::getGame(bool allowFailure) { ChessGame *refgame; refgame=global.getGame(XBOARD_GAME); if (!allowFailure && refgame==NULL) { cerr << _("* game not found: ") << XBOARD_GAME << endl; exit(5); } return refgame; } int XBoardProtocol::run() { createDialog(); if (!runDialog()) { destroyDialog(); return 0; } ebm=0; readDialog(); if (ebm!=0) global.addEngineBookmark(ebm); ebm=0; destroyDialog(); return(loadEngine()); } int XBoardProtocol::run(EngineBookmark *bm) { loadBookmark(bm); return(loadEngine()); } gboolean xb_initengine_timeout(gpointer data) { XBoardProtocol *me; me=(XBoardProtocol *) data; global.status->setText(_("Initializing engine"),30); me->initEngine(); return FALSE; } int XBoardProtocol::loadEngine() { PipeConnection *link; global.debug("XBoardProtocol","loadEngine",EngineCommandLine); if (strlen(EngineRunDir)) snprintf(FullCommand,1024,"cd %s ; %s",EngineRunDir,EngineCommandLine); else strcpy(FullCommand,EngineCommandLine); link=new PipeConnection("/bin/sh","-c",FullCommand,0,0); link->setMaxWaitTime(3000.0); // only gnu chess 4 has trouble with it if (need_handshake) link->setHandshake("xboard\nprotover 2\n"); if (link->open()==0) { global.status->setText(_("Engine started (2 sec timeout)"),30); global.network=link; // run initEngine after 2 seconds timeout_id=gtk_timeout_add(2000,xb_initengine_timeout,(gpointer) this); if (global.network->isConnected()) return 1; else { global.network=0; dumpGame(); } } global.status->setText(_("Failed to run engine."),30); global.output->append(_("Failed to run engine."), global.Colors.TextBright,IM_NORMAL); global.output->append(_("Failed command line:"), global.Colors.TextBright,IM_NORMAL); global.output->append(FullCommand, global.Colors.TextBright,IM_NORMAL); delete link; return 0; } void XBoardProtocol::initEngine() { char z[256]; createGame(); // xboard/protover already sent in open() call global.network->writeLine("nopost"); if (ThinkAlways) global.network->writeLine("hard"); else global.network->writeLine("easy"); global.network->writeLine("new"); timecontrol.toXBoard(z,256); if (z[0]) global.network->writeLine(z); if (MaxDepth > 0) { snprintf(z,256,"sd %d",MaxDepth); global.network->writeLine(z); } lateInit(); endInit(); } void XBoardProtocol::endInit() { char z[256]; InitDone = true; snprintf(z,256,_("%s engine started."), ComputerName); global.status->setText(z,15); } void XBoardProtocol::lateInit() { if (got_init_pos) { global.network->writeLine("force"); setupPosition(); // the a2a3 thing suggested in the protocol spec // makes GNU chess 4 go nuts if (initpos.sidehint) global.network->writeLine("white"); else global.network->writeLine("black"); global.network->writeLine("go"); } else { if (EngineWhite) { global.network->writeLine("white"); global.network->writeLine("go"); } } } void XBoardProtocol::setupPosition() { char z[256]; if (!got_init_pos) return; if (supports_setboard) { string s; s="setboard "; s+=initpos.getFEN(); g_strlcpy(z,s.c_str(),256); global.network->writeLine(z); just_sent_fen = true; } else { char assoc[128]; int i,j; piece p; global.network->writeLine("edit"); global.network->writeLine("#"); assoc[PAWN] ='P'; assoc[KNIGHT]='N'; assoc[BISHOP]='B'; assoc[ROOK] ='R'; assoc[QUEEN] ='Q'; assoc[KING] ='K'; for(i=0;i<8;i++) for(j=0;j<8;j++) { p=initpos.getPiece(i,j); if ((p&COLOR_MASK) == WHITE) { snprintf(z,256,"%c%c%d",assoc[p&PIECE_MASK],'a'+i,1+j); global.network->writeLine(z); } } global.network->writeLine("c"); for(i=0;i<8;i++) for(j=0;j<8;j++) { p=initpos.getPiece(i,j); if ((p&COLOR_MASK) == BLACK) { snprintf(z,256,"%c%c%d",assoc[p&PIECE_MASK],'a'+i,1+j); global.network->writeLine(z); } } global.network->writeLine("."); just_sent_fen = true; } } void XBoardProtocol::createGame() { ChessGame *cg; Position *pos; global.debug("XBoardProtocol","createGame"); MoveNumber=1; MoveBlack=0; cg=new ChessGame(); cg->GameNumber=XBOARD_GAME; cg->source = GS_Engine; cg->timecontrol = timecontrol; g_strlcpy(cg->PlayerName[EngineWhite?0:1],getComputerName(),64); g_strlcpy(cg->PlayerName[EngineWhite?1:0],global.env.User.c_str(),64); cg->MyColor=EngineWhite?BLACK:WHITE; timecontrol.toString(cg->info0,64); cg->clock_regressive=timecontrol.isRegressive()?1:0; cg->Rated=0; cg->Variant=Variant; global.appendGame(cg); global.BoardList.front()->reset(); cg->setBoard(global.BoardList.front()); global.BoardList.front()->setGame(cg); global.BoardList.front()->pop(); global.BoardList.front()->setCanMove(true); global.BoardList.front()->repaint(); if (EngineWhite) global.BoardList.front()->setFlipped(true); cg->acknowledgeInfo(); cg->fireWhiteClock(timecontrol.startValue(), timecontrol.startValue()); pos=new Position(); if (got_init_pos) { (*pos)=initpos; CurrentPosition = initpos; LegalityBackup = initpos; MoveBlack = pos->sidehint ? 0 : 1; } cg->updatePosition2(*pos,1,pos->sidehint ? 0:1, 1000*timecontrol.startValue(), 1000*timecontrol.startValue(), "0. startpos"); delete pos; global.gameStarted(); } void XBoardProtocol::dumpGame() { ChessGame *cg; cg=global.getGame(XBOARD_GAME); if (cg==NULL) return; if (!cg->isOver()) cg->endGame("*",UNDEF); global.BoardList.front()->reset(); } void XBoardProtocol::parseFeatures() { ExtPatternMatcher sf,nf; ChessGame *cg; char *cand,*p; int n; bool gotdone=false; sf.set("%b%s=\"*\"*"); nf.set("%b%s=%n*"); cand=Features.getStarToken(1); while(1) { if (sf.match(cand)) { p=sf.getSToken(0); if (!strcmp(p,"myname")) { ComputerName[63]=0; g_strlcpy(ComputerName,sf.getStarToken(0),64); global.status->setText(ComputerName,10); cg=global.getGame(XBOARD_GAME); if (cg) { g_strlcpy(cg->PlayerName[EngineWhite?0:1],ComputerName,64); cg->acknowledgeInfo(); } } cand=sf.getStarToken(1); continue; } if (nf.match(cand)) { p=nf.getSToken(0); if (!strcmp(p,"setboard")) { n=atoi(nf.getNToken(0)); if (n) supports_setboard=true; } if (!strcmp(p,"usermove")) { n=atoi(nf.getNToken(0)); if (n) requires_usermove=true; } if (!strcmp(p,"done")) { n=atoi(nf.getNToken(0)); if (n) gotdone=true; else { // engine asked more time global.status->setText(_("Engine asked more time to startup, waiting."),120); if (timeout_id >= 0) gtk_timeout_remove(timeout_id); // 1 hour, as per Mann's doc timeout_id=gtk_timeout_add(3600000, xb_initengine_timeout, (gpointer) this); } } cand=nf.getStarToken(0); continue; } break; } if (gotdone && timeout_id >= 0) { gtk_timeout_remove(timeout_id); timeout_id=-1; global.status->setText(_("Engine loaded."),20); initEngine(); } } char * XBoardProtocol::getDialogName() { return(_("Play against Engine")); } char * XBoardProtocol::getComputerName() { return(ComputerName); } // ----- the bloated world of GUI ------- void XBoardProtocol::createDialog() { GtkWidget *v,*v2; GtkWidget *cfr,*rd[2],*ok,*cancel,*bhb,*hs; GtkWidget *f2,*tabl,*l2,*tch,*tce,*tl1,*tl2,*te1,*tv; GSList *rg; char z[64]; GtkWidget *bp_l,*bp_v, *pp_l=0, *pp_v=0; GtkWidget *h3=0,*l3=0,*path3,*b31,*l31,*h4=0,*l4=0,*path4; eng_dlg=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(eng_dlg),getDialogName()); gtk_window_set_position(GTK_WINDOW(eng_dlg),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(eng_dlg),6); gtk_widget_realize(eng_dlg); v=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(eng_dlg),v); eng_book=gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(v),eng_book,TRUE,TRUE,0); // basic pane bp_v=gtk_vbox_new(FALSE,0); bp_l=gtk_label_new(_("Side & Time")); gtk_container_set_border_width(GTK_CONTAINER(bp_v),4); cfr=gtk_frame_new(_("Side Selection")); gtk_frame_set_shadow_type(GTK_FRAME(cfr),GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(bp_v),cfr,FALSE,TRUE,4); v2=gtk_vbox_new(TRUE,2); gtk_container_add(GTK_CONTAINER(cfr),v2); rd[0]=grnew( 0, _("Human White vs. Computer Black") ); rg=grg(GTK_RADIO_BUTTON(rd[0])); rd[1]=grnew(rg, _("Computer White vs. Human Black") ); gtset(GTK_TOGGLE_BUTTON(rd[0]), TRUE); gtk_box_pack_start(GTK_BOX(v2),rd[0],FALSE,TRUE,2); gtk_box_pack_start(GTK_BOX(v2),rd[1],FALSE,TRUE,2); // time per move f2=gtk_frame_new(_("Time Control")); gtk_frame_set_shadow_type(GTK_FRAME(f2),GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(bp_v),f2,FALSE,TRUE,4); tv=gtk_vbox_new(FALSE,2); gtk_container_add(GTK_CONTAINER(f2),tv); tch = gtk_hbox_new(FALSE,2); gtk_box_pack_start(GTK_BOX(tv),tch,TRUE,TRUE,0); timecontrol.toString(z,64); l2=gtk_label_new(z); gtk_box_pack_start(GTK_BOX(tch),l2,TRUE,TRUE,0); tce = gtk_button_new_with_label(_("Time Control...")); gtk_box_pack_start(GTK_BOX(tch),tce,FALSE,TRUE,0); tabl=gtk_table_new(2,2,FALSE); gtk_container_set_border_width(GTK_CONTAINER(tabl),4); gtk_table_set_row_spacings(GTK_TABLE(tabl),2); gtk_table_set_col_spacings(GTK_TABLE(tabl),2); gtk_box_pack_start(GTK_BOX(tv),tabl,FALSE,FALSE,2); tl2=gtk_label_new(_("Depth Limit:")); te1=gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(te1),"0"); gtk_table_attach_defaults(GTK_TABLE(tabl),tl2,0,1,0,1); gtk_table_attach_defaults(GTK_TABLE(tabl),te1,1,2,0,1); tl1=gtk_label_new(_("Set depth limit to 0 to use the engine's default.")); gtk_box_pack_start(GTK_BOX(tv),tl1,FALSE,FALSE,2); think=gtk_check_button_new_with_label(_("Think on opponent's time")); gtk_table_attach_defaults(GTK_TABLE(tabl),think,0,2,1,2); gtset(GTK_TOGGLE_BUTTON(think), 1); bookmark=gtk_check_button_new_with_label(_("Add to Peer/Engine Bookmarks menu")); gtk_box_pack_start(GTK_BOX(v),bookmark,FALSE,FALSE,2); gtset(GTK_TOGGLE_BUTTON(bookmark), 1); Gtk::show(bookmark,think,te1,tl2,tl1,tabl,tv,f2,tch,l2,tce,rd[1],rd[0], v2,cfr,NULL); gtk_notebook_append_page(GTK_NOTEBOOK(eng_book),bp_v,bp_l); Gtk::show(bp_v,bp_l,NULL); // path pane if (want_path_pane) { pp_v=gtk_vbox_new(FALSE,0); pp_l=gtk_label_new(_("Engine Command")); gtk_container_set_border_width(GTK_CONTAINER(pp_v),4); h3=gtk_hbox_new(FALSE,0); l3=gtk_label_new(_("Engine command line")); gtk_box_pack_start(GTK_BOX(pp_v),h3,FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(h3),l3,FALSE,FALSE,0); } path3=gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(path3),EngineCommandLine); if (want_path_pane) { gtk_box_pack_start(GTK_BOX(pp_v),path3,FALSE,TRUE,2); h4=gtk_hbox_new(FALSE,0); l4=gtk_label_new(_("Directory to run from (e.g., where book files are)")); gtk_box_pack_start(GTK_BOX(pp_v),h4,FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(h4),l4,FALSE,FALSE,0); } path4=gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(path4),EngineRunDir); if (want_path_pane) { gtk_box_pack_start(GTK_BOX(pp_v),path4,FALSE,TRUE,2); b31=gtk_hbox_new(FALSE,0); l31=gtk_label_new(_("The engine will be run with\n/bin/sh -c 'cd directory ; command line'")); gtk_label_set_justify(GTK_LABEL(l31),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(b31),l31,FALSE,FALSE,2); gtk_box_pack_start(GTK_BOX(pp_v),b31,FALSE,FALSE,2); Gtk::show(h3,l3,l31,b31,path3,h4,l4,path4,NULL); gtk_notebook_append_page(GTK_NOTEBOOK(eng_book),pp_v,pp_l); Gtk::show(pp_v,pp_l,NULL); } // bottom box hs=gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(v),hs,FALSE,TRUE,4); bhb=gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bhb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bhb), 5); gtk_box_pack_start(GTK_BOX(v),bhb,FALSE,FALSE,4); ok=gtk_button_new_with_label (_("OK")); GTK_WIDGET_SET_FLAGS(ok,GTK_CAN_DEFAULT); cancel=gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(cancel,GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bhb),ok,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(bhb),cancel,TRUE,TRUE,0); gtk_widget_grab_default(ok); Gtk::show(ok,cancel,bhb,hs,v,NULL); gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(xboard_eng_ok),this); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(xboard_eng_cancel),this); gtk_signal_connect(GTK_OBJECT(eng_dlg), "delete_event", GTK_SIGNAL_FUNC(xboard_eng_delete),0); gtk_signal_connect(GTK_OBJECT(tce), "clicked", GTK_SIGNAL_FUNC(xboard_edit_time), (XBoardProtocol *) this); gshow(eng_book); gtk_notebook_set_page(GTK_NOTEBOOK(eng_book),0); engctl_lbl=l2; engctl_ply=te1; engctl_ewhite=rd[1]; engctl_engcmd=path3; engctl_engdir=path4; if (got_init_pos) { if (initpos.sidehint) // white to move gtset(GTK_TOGGLE_BUTTON(rd[1]), TRUE); else gtset(GTK_TOGGLE_BUTTON(rd[0]), TRUE); gtk_widget_set_sensitive(rd[0],FALSE); gtk_widget_set_sensitive(rd[1],FALSE); } } void XBoardProtocol::update() { char z[64]; timecontrol.toString(z,64); gtk_label_set_text(GTK_LABEL(engctl_lbl), z); gtk_widget_queue_resize(engctl_lbl); } void XBoardProtocol::readDialog() { EngineWhite=0; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(engctl_ewhite))) EngineWhite=1; MaxDepth=atoi(gtk_entry_get_text(GTK_ENTRY(engctl_ply))); g_strlcpy(EngineCommandLine,gtk_entry_get_text(GTK_ENTRY(engctl_engcmd)),512); g_strlcpy(EngineRunDir,gtk_entry_get_text(GTK_ENTRY(engctl_engdir)),256); ThinkAlways=(bool)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(think)); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(bookmark))) { ebm=new EngineBookmark(); ebm->timecontrol =timecontrol; ebm->maxply =MaxDepth; ebm->humanwhite =1-EngineWhite; ebm->think =ThinkAlways?1:0; ebm->directory =EngineRunDir; ebm->cmdline =EngineCommandLine; ebm->mode =REGULAR; ebm->proto =0; // base xboard protocol makeBookmarkCaption(); // addition is done in run() to allow all virtual versions of this // to run before doing it } else { ebm=0; // derivated classes should check ebm!=0 before doing oddities } } void XBoardProtocol::makeBookmarkCaption() { tstring t,u; string x, *p; char caption[1024], z[128]; if (!ebm) return; t.set(EngineCommandLine); x=EngineCommandLine; if (x.empty()) x=""; p=t.token(" "); if (p != 0) { u.set(*p); while( (p=u.token("/")) != 0 ) x=*p; } ebm->timecontrol.toString(z,128); snprintf(caption,1024, _("Play %s as %s vs. %s (%s, maxdepth %d, think always: %s)"), ChessGame::variantName(ebm->mode), ebm->humanwhite?_("White"): _("Black"), x.c_str(), z, ebm->maxply, ebm->think?_("yes"): _("no")); ebm->caption = caption; } void XBoardProtocol::loadBookmark(EngineBookmark *bm) { timecontrol = bm->timecontrol; MaxDepth = bm->maxply; ThinkAlways = (bm->think!=0); EngineWhite = 1-bm->humanwhite; Variant = bm->mode; g_strlcpy(EngineRunDir, bm->directory.c_str(), 256 ); g_strlcpy(EngineCommandLine, bm->cmdline.c_str(), 512 ); if (got_init_pos) EngineWhite=initpos.sidehint ? 1 : 0; } int XBoardProtocol::runDialog() { GotResult=0; gshow(eng_dlg); gtk_grab_add(eng_dlg); while(!GotResult) global.WrappedMainIteration(); gtk_grab_remove(eng_dlg); return(GotResult==1); } void XBoardProtocol::destroyDialog() { gtk_widget_destroy(eng_dlg); } void xboard_edit_time(GtkWidget *w,gpointer data) { XBoardProtocol *me = (XBoardProtocol *) data; TimeControlEditDialog *dlg; dlg = new TimeControlEditDialog(&(me->timecontrol)); dlg->setUpdateListener( (UpdateInterface *) me); dlg->show(); } void xboard_eng_ok(GtkWidget *w,gpointer data) { XBoardProtocol *me; me=(XBoardProtocol *)data; me->GotResult=1; } void xboard_eng_cancel(GtkWidget *w,gpointer data) { XBoardProtocol *me; me=(XBoardProtocol *)data; me->GotResult=-1; } gboolean xboard_eng_delete(GtkWidget *w,GdkEvent *e,gpointer data) { return TRUE; } /* ************************************************** */ /* *********** specific engines ********************* */ /* ************************************************** */ // =============== CRAFTY ============================ CraftyProtocol::CraftyProtocol() : XBoardProtocol() { strcpy(ComputerName,"Crafty"); want_path_pane=0; } char * CraftyProtocol::getDialogName() { return(_("Play against Crafty")); } void CraftyProtocol::readDialog() { XBoardProtocol::readDialog(); resolvePaths(); snprintf(EngineCommandLine,512,"crafty bookpath=%s logpath=%s tbpath=%s", BookPath,LogPath,LogPath); if (!global.env.Home.empty()) snprintf(EngineRunDir,512,"%s/.eboard/craftylog",global.env.Home.c_str()); else strcpy(EngineRunDir,"/tmp"); if (ebm) { ebm->proto = 1; ebm->cmdline = EngineCommandLine; ebm->directory = EngineRunDir; makeBookmarkCaption(); } } void CraftyProtocol::initEngine() { global.network->writeLine("log off"); XBoardProtocol::initEngine(); } // keep this and Documentation/Crafty.txt coherent void CraftyProtocol::resolvePaths() { FileFinder ff; char z[256],zz[256],*p; // book path if (!global.env.Home.empty()) snprintf(z,256,"%s/.eboard",global.env.Home.c_str()); else strcpy(z,"/tmp"); ff.addMyDirectory(".eboard"); ff.addMyDirectory("."); ff.addDirectory("/usr/local/share/eboard"); ff.addDirectory("/usr/share/eboard"); ff.addDirectory("/usr/local/share/crafty"); ff.addDirectory("/usr/share/crafty"); if (ff.find("book.bin",zz)) { p=strrchr(zz,'/'); *p=0; } else strcpy(zz,z); strcpy(BookPath,zz); // log path if (!global.env.Home.empty()) snprintf(z,256,"%s/.eboard/craftylog",global.env.Home.c_str()); else strcpy(z,"/tmp"); strcpy(LogPath,z); } // =============== SJENG ============================ SjengProtocol::SjengProtocol() : XBoardProtocol() { strcpy(ComputerName,"Sjeng"); strcpy(EngineCommandLine,"sjeng"); want_path_pane=1; } void SjengProtocol::initEngine() { char z[32]; createGame(); global.network->writeLine("xboard"); global.network->writeLine("protover 2"); global.network->writeLine("nopost"); if (ThinkAlways) global.network->writeLine("hard"); else global.network->writeLine("easy"); global.network->writeLine("new"); switch(Variant) { case CRAZYHOUSE: global.network->writeLine("variant crazyhouse"); break; case SUICIDE: global.network->writeLine("variant suicide"); break; case LOSERS: global.network->writeLine("variant losers"); break; case GIVEAWAY: global.network->writeLine("variant giveaway"); break; default: z[31]=0; /* nothing! */ break; } timecontrol.toXBoard(z,32); if (z[0]) global.network->writeLine(z); if (MaxDepth>0) { snprintf(z,32,"sd %d",MaxDepth); global.network->writeLine(z); } lateInit(); endInit(); } void SjengProtocol::createDialog() { int i; GtkWidget *fr,*v,*rd[5],*vl; GSList *rg; XBoardProtocol::createDialog(); // add variant pane fr=gtk_frame_new(_("Variant")); gtk_frame_set_shadow_type(GTK_FRAME(fr),GTK_SHADOW_ETCHED_IN); v=gtk_vbox_new(TRUE,2); gtk_container_add(GTK_CONTAINER(fr),v); rd[0]=grnew( 0, _("Normal Chess") ); rg=grg(GTK_RADIO_BUTTON(rd[0])); rd[1]=grnew(rg, _("Crazyhouse") ); rg=grg(GTK_RADIO_BUTTON(rd[1])); rd[2]=grnew(rg, _("Suicide") ); rg=grg(GTK_RADIO_BUTTON(rd[2])); rd[3]=grnew(rg, _("Losers") ); rg=grg(GTK_RADIO_BUTTON(rd[3])); rd[4]=grnew(rg, _("Giveaway") ); gtset(GTK_TOGGLE_BUTTON(rd[0]), TRUE); for(i=0;i<5;i++) { gtk_box_pack_start(GTK_BOX(v),rd[i],FALSE,TRUE,2); gshow(rd[i]); varbutton[i]=rd[i]; } Gtk::show(v,fr,NULL); vl=gtk_label_new(_("Variant")); gshow(vl); gtk_notebook_append_page(GTK_NOTEBOOK(eng_book),fr,vl); gtk_notebook_set_page(GTK_NOTEBOOK(eng_book),0); } void SjengProtocol::readDialog() { XBoardProtocol::readDialog(); if (gtget(GTK_TOGGLE_BUTTON(varbutton[0]))) Variant=REGULAR; if (gtget(GTK_TOGGLE_BUTTON(varbutton[1]))) Variant=CRAZYHOUSE; if (gtget(GTK_TOGGLE_BUTTON(varbutton[2]))) Variant=SUICIDE; if (gtget(GTK_TOGGLE_BUTTON(varbutton[3]))) Variant=LOSERS; if (gtget(GTK_TOGGLE_BUTTON(varbutton[4]))) Variant=GIVEAWAY; if (ebm) { ebm->proto=2; ebm->mode=Variant; makeBookmarkCaption(); } } char * SjengProtocol::getDialogName() { return(_("Play against Sjeng")); } void SjengProtocol::sendDrop(piece p,int x,int y) { ChessGame *refgame; char mymove[12],ppfmm[32]; // [p]retty [p]rint [f]or [m]y [m]ove piece clp; refgame=getGame(); LegalityBackup=CurrentPosition; snprintf(mymove,12,"P@%c%c",'a'+x,'1'+y); clp=p&PIECE_MASK; switch(clp) { case PAWN: mymove[0]='P'; break; case ROOK: mymove[0]='R'; break; case KNIGHT: mymove[0]='N'; break; case BISHOP: mymove[0]='B'; break; case QUEEN: mymove[0]='Q'; break; case KING: mymove[0]='K'; break; } CurrentPosition.moveDrop(p|(refgame->MyColor),x,y); if (EngineWhite) snprintf(ppfmm,32,"%d. ... %s",MoveNumber,mymove); else snprintf(ppfmm,32,"%d. %s",MoveNumber,mymove); refgame->updatePosition2(CurrentPosition, MoveNumber,!MoveBlack, CLOCK_UNCHANGED, CLOCK_UNCHANGED, ppfmm); global.network->writeLine(mymove); advanceMove(); global.BoardList.front()->setCanMove(false); } // ==================== GNU CHESS 4 ========================= GnuChess4Protocol::GnuChess4Protocol() : XBoardProtocol() { strcpy(ComputerName,"GNU Chess"); want_path_pane=0; need_handshake=false; // sending xboard confuses GNU chess 4 } void GnuChess4Protocol::initEngine() { char z[32]; createGame(); global.network->writeLine("nopost"); global.network->writeLine("hard"); if (!ThinkAlways) global.network->writeLine("easy"); global.network->writeLine("new"); timecontrol.toXBoard(z,32,TCF_GNUCHESS4QUIRK); if (z[0]) global.network->writeLine(z); if (MaxDepth > 0) { snprintf(z,32,"depth %d",MaxDepth); global.network->writeLine(z); } lateInit(); endInit(); } void GnuChess4Protocol::readDialog() { XBoardProtocol::readDialog(); strcpy(EngineCommandLine,"gnuchessx"); EngineRunDir[0]=0; if (ebm) { ebm->proto=3; ebm->cmdline=EngineCommandLine; ebm->directory=EngineRunDir; makeBookmarkCaption(); } } char * GnuChess4Protocol::getDialogName() { return(_("Play against GNU Chess 4")); } eboard-1.1.1.orig/history.cc0000644000175000017500000000363210757567572015314 0ustar patrikpatrik/* $Id: history.cc,v 1.3 2002/09/10 19:08:28 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2002 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "history.h" History::History(unsigned int len) { Length=len; cursor=thehistory.end(); } void History::appendString(char *s) { if (!thehistory.empty()) if (!strcmp(s,thehistory.back())) { free(s); cursor=thehistory.end(); return; } thehistory.push_back(s); cursor=thehistory.end(); if (thehistory.size() > Length) { free(thehistory.front()); thehistory.pop_front(); } } char * History::moveUp() { return(moveUp(cursor)); } char * History::moveDown() { return(moveDown(cursor)); } char * History::moveUp(iterator &alt) { if (thehistory.empty()) return("\0"); if (alt!=thehistory.begin()) alt--; return(*alt); } char * History::moveDown(iterator &alt) { if (thehistory.empty()) return("\0"); if (alt!=thehistory.end()) alt++; if (alt!=thehistory.end()) return(*alt); else return("\0"); } History::iterator History::getCursor() { return(thehistory.end()); } eboard-1.1.1.orig/ntext.h0000644000175000017500000001236010757567572014615 0ustar patrikpatrik/* $Id: ntext.h,v 1.14 2008/02/22 00:57:18 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2008 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef NTEXT_H #define NTEXT_H 1 #include "widgetproxy.h" #include "stl.h" // line index class NLine { public: NLine(); NLine(const char *text, int color, int maxlen=-1); virtual ~NLine(); char *Text; int NBytes; int Color; int Width; time_t Timestamp; }; // secondary line index class FLine : public NLine { public: FLine(); FLine(const char *text, int color, int maxlen=-1, time_t stamp=0); FLine(NLine *src); void setSource(int src,int off); int Src,Off; int X,Y,H; // position of last rendering bool valid; // visible ? char stamp[12]; private: void makeStamp(); }; // a point in the text (a selection has two of this) class TPoint { public: TPoint(); TPoint &operator=(TPoint &src); int operator<(TPoint &src); int operator>(TPoint &src); int operator==(TPoint &src); int operator<(int i); int operator<=(int i); int operator>(int i); int operator>=(int i); int operator==(int i); int LineNum, ByteOffset; }; // a decent text buffer widget class NText : public WidgetProxy { public: NText(); virtual ~NText(); void setFont(const char *font); void append(const char *text, int len, int color); void pageUp(float pages); void pageDown(float pages); void lineUp(int n); void lineDown(int n); void gotoLine(int n); void setScrollBack(int n); void setBG(int c); bool findTextUpward(int top, int bottom, const char *needle, bool select=true); int getLastFoundLine(); bool saveTextBuffer(const char *path); virtual void repaint(); void scheduleRepaint(int latency=100); private: void createGui(); void formatLine(unsigned int i); void formatBuffer(); void setScroll(int topline, int linecount, int nlines); void discardLines(int n); void discardExcess(bool _repaint=false); bool calcTP(TPoint &t, int x,int y); bool matchTextInLine(int i, const char *needle, bool select=true); void selectRegion(int startline,int startoff,int endline,int endoff); void freeOldSelections(); deque lines; deque xlines; stack prevsel; int bgcolor; GtkWidget *body, *sb; GtkAdjustment *vsa; GdkPixmap *canvas; GdkGC *cgc; int cw, ch, lw, lh, fmtw; int fh; int leftb, rightb, tsskip; LayoutBox L; int IgnoreChg; unsigned int MaxLines; bool WasAtBottom; /* selection handling */ bool havesel; TPoint A,B; // selection end points int dropmup; int toid; int lfl; /* the usual callback friends */ friend gboolean ntext_expose(GtkWidget *widget, GdkEventExpose *ee, gpointer data); friend gboolean ntext_configure(GtkWidget *widget, GdkEventConfigure *ee, gpointer data); friend void ntext_sbchange(GtkAdjustment *adj, gpointer data); friend gboolean ntext_mdown(GtkWidget *widget, GdkEventButton *eb, gpointer data); friend gboolean ntext_mup(GtkWidget *widget, GdkEventButton *eb, gpointer data); friend gboolean ntext_mdrag(GtkWidget *widget, GdkEventMotion *em, gpointer data); friend gboolean ntext_scroll(GtkWidget *widget, GdkEventScroll *es, gpointer data); friend gboolean ntext_ksel(GtkWidget * widget, GdkEventSelection * event, gpointer data); friend void ntext_getsel(GtkWidget * widget, GtkSelectionData * seldata, guint info, guint time, gpointer data); friend gboolean ntext_redraw(gpointer data); }; gboolean ntext_expose(GtkWidget *widget, GdkEventExpose *ee, gpointer data); gboolean ntext_configure(GtkWidget *widget, GdkEventConfigure *ee, gpointer data); void ntext_sbchange(GtkAdjustment *adj, gpointer data); gboolean ntext_mdown(GtkWidget *widget, GdkEventButton *eb, gpointer data); gboolean ntext_mup(GtkWidget *widget, GdkEventButton *eb, gpointer data); gboolean ntext_mdrag(GtkWidget *widget, GdkEventMotion *em, gpointer data); gboolean ntext_scroll(GtkWidget *widget, GdkEventScroll *es, gpointer data); gboolean ntext_ksel(GtkWidget * widget, GdkEventSelection * event, gpointer data); void ntext_getsel(GtkWidget * widget, GtkSelectionData * seldata, guint info, guint time, gpointer data); gboolean ntext_redraw(gpointer data); #endif eboard-1.1.1.orig/treegam.xpm0000644000175000017500000000055510757567572015457 0ustar patrikpatrik/* XPM */ static char * treegam_xpm[] = { "14 14 4 1", " c None", ". c #000000", "+ c #3A3A3A", "@ c #C4C4C4", " ", " ............ ", " .+++++@@@@@. ", " .+++++@@@@@. ", " .+++++@@@@@. ", " .+++++@@@@@. ", " .+++++@@@@@. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " .@@@@@+++++. ", " ............ ", " "}; eboard-1.1.1.orig/widgetproxy.cc0000644000175000017500000004731410757567572016205 0ustar patrikpatrik/* $Id: widgetproxy.cc,v 1.38 2007/05/23 18:28:17 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "widgetproxy.h" #include "global.h" #include "eboard.h" // ColorSpace class #include "pieces.h" WidgetProxy::WidgetProxy() { widget=0; } void WidgetProxy::show() { gshow(widget); } void WidgetProxy::hide() { gtk_widget_hide(widget); } void WidgetProxy::repaint() { gtk_widget_queue_resize(widget); } GtkWidget * WidgetProxy::scrollBox(GtkWidget *child) { GtkWidget *scr; scr = gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scr), GTK_SHADOW_NONE); gtk_container_set_border_width(GTK_CONTAINER(scr),4); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scr), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scr), child); gtk_widget_show(scr); return scr; } void WidgetProxy::setIcon(char **xpmdata,const char *text) { GdkPixmap *icon; GdkBitmap *mask; GtkStyle *style; style=gtk_widget_get_style(widget); icon = gdk_pixmap_create_from_xpm_d (widget->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) xpmdata); gdk_window_set_icon (widget->window, NULL, icon, mask); gdk_window_set_icon_name(widget->window,(gchar *)text); } void WidgetProxy::restorePosition(WindowGeometry *wg) { if (!widget) return; if (wg->isNull()) return; gdk_window_move_resize(widget->window,wg->X,wg->Y,wg->W,wg->H); } GtkWidget * WidgetProxy::PixButton(char **xpmicon, char *caption) { GdkPixmap *d; GdkBitmap *mask; GtkWidget *b, *p, *v, *t; GtkStyle *style; b=gtk_button_new(); v=gtk_vbox_new(FALSE,1); gtk_container_set_border_width(GTK_CONTAINER(v),2); gtk_container_add(GTK_CONTAINER(b),v); style=gtk_widget_get_style(widget); d = gdk_pixmap_create_from_xpm_d (widget->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **) xpmicon); p=gtk_pixmap_new(d, mask); gtk_box_pack_start(GTK_BOX(v),p,FALSE,TRUE,0); t=gtk_label_new(caption); gtk_box_pack_start(GTK_BOX(v),t,FALSE,TRUE,0); Gtk::show(t,p,v,NULL); return b; } // ------------ BoxedLabel::BoxedLabel(char *text) { widget=gtk_hbox_new(FALSE,0); label=gtk_label_new(text); gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(widget),label,FALSE,FALSE,0); gshow(label); } void BoxedLabel::setText(char *msg) { gtk_label_set_text(GTK_LABEL(label),msg); } // ------------- /* titles must be marked with N_(...) */ ModalDialog::ModalDialog(char *title) { widget=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(widget),eboard_gettext(title)); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),6); gtk_widget_realize(widget); focused_widget=0; closeable = true; gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(modal_closereq),(gpointer)this); } void ModalDialog::show() { gshow(widget); gtk_grab_add(widget); if (focused_widget) gtk_widget_grab_focus(focused_widget); } void ModalDialog::release() { releaseWithoutDelete(); delete this; } void ModalDialog::releaseWithoutDelete() { gtk_grab_remove(widget); gtk_widget_destroy(widget); } ModalDialog::~ModalDialog() { } void ModalDialog::setDismiss(GtkObject *obj,char *sig) { gtk_signal_connect(obj,sig,GTK_SIGNAL_FUNC(modal_release),(gpointer)this); } void ModalDialog::setCloseable(bool v) { closeable = v; } void modal_release(GtkWidget *w,gpointer data) { ModalDialog *me; me=(ModalDialog *)data; me->release(); } gint modal_closereq(GtkWidget * widget, GdkEvent * event, gpointer data) { ModalDialog *me = (ModalDialog *) data; return(me->closeable ? FALSE : TRUE); } // -- non modal NonModalDialog::NonModalDialog(char *title) : ModalDialog(title) { } NonModalDialog::~NonModalDialog() { } void NonModalDialog::show() { gshow(widget); if (focused_widget) gtk_widget_grab_focus(focused_widget); } void NonModalDialog::releaseWithoutDelete() { gtk_widget_destroy(widget); } // ------------ progress gint upw_delete (GtkWidget * widget, GdkEvent * event, gpointer data); gint upw_delete (GtkWidget * widget, GdkEvent * event, gpointer data) { return TRUE; } UnboundedProgressWindow::UnboundedProgressWindow(const char *_templ) : WidgetProxy() { GtkStyle *style; GdkColor one; int i; templ=_templ; widget=gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_title(GTK_WINDOW(widget),_("Progress")); gtk_window_set_position(GTK_WINDOW(widget),GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(widget),6); style=gtk_style_copy( gtk_widget_get_style(widget) ); one.red=one.green=one.blue=0; for(i=0;i<5;i++) style->bg[i]=one; one.red=one.green=one.blue=0xffff; for(i=0;i<5;i++) style->fg[i]=one; gtk_widget_set_style(widget,style); gtk_widget_realize(widget); label=gtk_label_new(_("Working...")); gtk_widget_set_style(label,style); gtk_container_add(GTK_CONTAINER(widget),label); Gtk::show(label,widget,NULL); gtk_signal_connect(GTK_OBJECT(widget),"delete_event", GTK_SIGNAL_FUNC(upw_delete),0); for(i=3;i;i--) // avoid locks with idle hooks if(gtk_events_pending()) gtk_main_iteration(); else break; } UnboundedProgressWindow::~UnboundedProgressWindow() { gtk_widget_destroy(widget); } void UnboundedProgressWindow::setProgress(int v) { char z[256]; int i; snprintf(z,256,templ,v); gtk_label_set_text(GTK_LABEL(label),z); gtk_widget_queue_resize(label); for(i=3;i;i--) // avoid locks with idle hooks if(gtk_events_pending()) gtk_main_iteration(); else break; } // ----------------------------- ColorButton::ColorButton(char *caption, int value) { ColorValue=value; widget=gtk_button_new(); label=gtk_label_new(caption); gtk_container_add(GTK_CONTAINER(widget),label); notified=0; updateButtonFace(); Gtk::show(label,widget,NULL); gtk_signal_connect(GTK_OBJECT(widget),"clicked", GTK_SIGNAL_FUNC(colorb_click),(gpointer)this); } void ColorButton::setColor(int value) { ColorValue=value; updateButtonFace(); } int ColorButton::getColor() { return(ColorValue); } void ColorButton:: hookNotify(UpdateNotify *listen) { notified=listen; } void ColorButton::updateButtonFace() { GtkStyle *style; int i,dark=1; style=gtk_style_copy( gtk_widget_get_style(widget) ); for(i=0;i<5;i++) { style->bg[i].red=(ColorValue>>16)<<8; style->bg[i].green=(ColorValue&0x00ff00); style->bg[i].blue=(ColorValue<<8)&0x00ff00; } if ( (style->bg[0].red>>8) + (style->bg[0].green>>8) + (style->bg[0].blue>>8) > 384) dark=0; style->bg[GTK_STATE_PRELIGHT].red=0xe000; style->bg[GTK_STATE_PRELIGHT].green=0xe000; style->bg[GTK_STATE_PRELIGHT].blue=0xe000; for(i=0;i<5;i++) { style->fg[i].red=dark?0xffff:0x0000; style->fg[i].green=dark?0xffff:0x0000; style->fg[i].blue=dark?0xffff:0x0000; } style->fg[GTK_STATE_PRELIGHT].red=0x0000; style->fg[GTK_STATE_PRELIGHT].green=0x0000; style->fg[GTK_STATE_PRELIGHT].blue=0x0000; gtk_widget_set_style(widget,style); gtk_widget_ensure_style(widget); gtk_widget_set_style(label,style); gtk_widget_queue_draw( label ); if (notified) notified->update(); } void colorb_click(GtkWidget *b,gpointer data) { ColorButton *me; GtkWidget *dlg; gdouble c[3]; me=(ColorButton *)data; dlg=gtk_color_selection_dialog_new(_("Color Selection")); me->colordlg=dlg; c[0]=( (gdouble) ((me->ColorValue>>16)) )/256.0; c[1]=( (gdouble) ((me->ColorValue>>8)&0xff) ) / 256.0; c[2]=( (gdouble) ((me->ColorValue&0xff)) )/256.0; gtk_color_selection_set_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dlg)->colorsel),c); gtk_signal_connect (GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG (dlg)->ok_button), "clicked", GTK_SIGNAL_FUNC(colorb_csok),data); gtk_signal_connect_object(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG (dlg)->cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (dlg)); gshow(dlg); gtk_grab_add(dlg); } void colorb_csok(GtkWidget *b,gpointer data) { ColorButton *me; me=(ColorButton *)data; gdouble c[3]; int v[3]; gtk_color_selection_get_color(GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(me->colordlg)->colorsel),c); v[0]=(int)(c[0]*255.0); v[1]=(int)(c[1]*255.0); v[2]=(int)(c[2]*255.0); me->ColorValue=(v[0]<<16)|(v[1]<<8)|v[2]; gtk_grab_remove(me->colordlg); gtk_widget_destroy(me->colordlg); me->updateButtonFace(); } // =============== TextPreview::TextPreview(GdkWindow *wnd, ColorButton *_bg) { frozen=false; pending=false; bg=_bg; bg->hookNotify(this); pixmap=gdk_pixmap_new(wnd, 400, 300, -1); widget=gtk_drawing_area_new(); gtk_widget_set_events(widget,GDK_EXPOSURE_MASK); gtk_drawing_area_size(GTK_DRAWING_AREA(widget),400,300); gtk_signal_connect(GTK_OBJECT(widget),"expose_event", GTK_SIGNAL_FUNC(preview_expose),(gpointer)this); pl = gtk_widget_create_pango_layout(widget,NULL); pfd = NULL; } TextPreview::~TextPreview() { colors.clear(); examples.clear(); gdk_pixmap_unref(pixmap); if (pl!=NULL) g_object_unref(G_OBJECT(pl)); } void TextPreview::attach(ColorButton *cb, const char *sample) { string s; s=sample; colors.push_back(cb); examples.push_back(s); cb->hookNotify(this); if (!frozen) update(); else pending=true; } void TextPreview::freeze() { frozen=true; } void TextPreview::thaw() { frozen=false; if (pending) update(); } void TextPreview::update() { GdkGC *gc; PangoRectangle prl, pri; int i,j,y; pending=false; if (!pixmap) return; gc=gdk_gc_new(pixmap); gdk_rgb_gc_set_foreground(gc, bg->getColor() ); gdk_draw_rectangle(pixmap,gc,TRUE,0,0,400,300); if (pfd!=NULL) { pango_font_description_free(pfd); pfd = NULL; } pfd = pango_font_description_from_string(global.ConsoleFont); if (pfd == NULL) { cerr << "[eboard] TextPreview unable to set font " << global.ConsoleFont << endl; return; } pango_layout_set_font_description(pl, pfd); j=examples.size(); y=2; for(i=0;igetColor() ); pango_layout_set_text(pl, examples[i].c_str(), -1); pango_layout_get_pixel_extents(pl, &pri, &prl); gdk_draw_layout(pixmap,gc,5,y,pl); y += prl.height + 2; } gdk_gc_destroy(gc); gtk_widget_queue_resize(widget); } gboolean preview_expose(GtkWidget *widget,GdkEventExpose *ee, gpointer data) { TextPreview *me; GdkGC *gc; me=(TextPreview *)data; if (me->pixmap == NULL) return false; gc = gdk_gc_new(widget->window); gdk_draw_pixmap(widget->window,gc,me->pixmap,0,0,0,0,400,300); gdk_gc_destroy(gc); return true; } // FileDialog FileDialog::FileDialog(char *title) : WidgetProxy() { widget=gtk_file_selection_new(title); FileName[0] = 0; gotresult = false; gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (widget)->ok_button), "clicked", GTK_SIGNAL_FUNC(filedlg_ok), (gpointer) this ); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (widget)->cancel_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT (widget)); gtk_signal_connect (GTK_OBJECT (widget), "destroy", GTK_SIGNAL_FUNC(filedlg_destroy), (gpointer) this ); } FileDialog::~FileDialog() { } bool FileDialog::run() { gshow(widget); gtk_grab_add(widget); gotresult = false; destroyed = false; while(!gotresult) { if (gtk_events_pending()) global.WrappedMainIteration(); else usleep(50000); // prevent busy waiting } if (!destroyed) { g_strlcpy(FileName,gtk_file_selection_get_filename( GTK_FILE_SELECTION(widget) ), 128 ); gtk_grab_remove(widget); gtk_widget_destroy(widget); return true; } return false; } void filedlg_ok (GtkWidget * w, gpointer data) { FileDialog *fd; fd=(FileDialog *)data; fd->gotresult = true; } void filedlg_destroy (GtkWidget * w, gpointer data) { FileDialog *fd; fd=(FileDialog *)data; fd->destroyed=true; fd->gotresult=true; } // ----------- layout box for the clock (previous code was getting out of hand) LayoutBox::LayoutBox() { int i; GC=NULL; Target=NULL; X=Y=W=H=0; for(i=0;i<5;i++) pfd[i] = NULL; pl = NULL; } LayoutBox::~LayoutBox() { int i; if (pl!=NULL) g_object_unref(G_OBJECT(pl)); for(i=0;i<5;i++) if (pfd[i] != NULL) pango_font_description_free(pfd[i]); } void LayoutBox::prepare(GtkWidget *w, GdkPixmap *t, GdkGC *gc, int a, int b, int c, int d) { int i; Target = t; GC = gc; X=a; Y=b, W=c; H=d; // leak, tomv if (pl!=NULL) g_object_unref(G_OBJECT(pl)); for(i=0;i<5;i++) if (pfd[i]!=NULL) pango_font_description_free(pfd[i]); for(i=0;i<5;i++) pfd[i] = NULL; pl = gtk_widget_create_pango_layout(w,NULL); } bool LayoutBox::prepared() { return(GC!=NULL && Target!=NULL && pl!=NULL && pfd[0]!=NULL); } void LayoutBox::setFont(int i,const char *fontname) { i%=5; if (pfd[i] != NULL) { pango_font_description_free(pfd[i]); pfd[i] = NULL; } pfd[i] = pango_font_description_from_string(fontname); if (pfd[i] == NULL) cerr << "[eboard] unable to set font " << fontname << endl; } void LayoutBox::setColor(int c) { gdk_rgb_gc_set_foreground(GC,c); } void LayoutBox::drawRect(int x,int y,int w,int h,bool fill) { gdk_draw_rectangle(Target,GC,fill?TRUE:FALSE,x,y,w,h); } void LayoutBox::drawLine(int x,int y,int w,int h) { gdk_draw_line(Target,GC,x,y,w,h); } void LayoutBox::drawEllipse(int x,int y,int w,int h,bool fill) { gdk_draw_arc(Target,GC,fill?TRUE:FALSE,x,y,w,h,0,360*64); } void LayoutBox::consumeTop(int v) { Y+=v; H-=v; } void LayoutBox::consumeBottom(int v) { H-=v; } void LayoutBox::drawString(int x,int y, int f, const char *s) { if (pl != NULL) { pango_layout_set_font_description(pl, pfd[f%5]); pango_layout_set_text(pl,s,-1); gdk_draw_layout(Target,GC,x,y,pl); /* PangoRectangle prl, pri; pango_layout_get_pixel_extents(pl, &pri, &prl); gdk_draw_rectangle(Target,GC,FALSE,x+prl.x,y+prl.y, prl.width,prl.height); gdk_draw_line(Target,GC,x+prl.x,y+prl.y, x+prl.x+prl.width,y+prl.y+prl.height); gdk_draw_line(Target,GC,x+prl.x,y+prl.y+prl.height, x+prl.x+prl.width,y+prl.y); */ } } void LayoutBox::drawString(int x,int y, int f, string &s) { drawString(x,y,f,s.c_str()); } void LayoutBox::drawSubstring(int x,int y, int f, const char *s,int len) { if (pl != NULL) { pango_layout_set_font_description(pl, pfd[f%5]); pango_layout_set_text(pl,s,len); gdk_draw_layout(Target,GC,x,y,pl); } } int LayoutBox::stringWidth(int f,const char *s) { PangoRectangle prl, pri; if (pl != NULL) { pango_layout_set_font_description(pl, pfd[f%5]); pango_layout_set_text(pl,s,-1); pango_layout_get_pixel_extents(pl, &pri, &prl); return(prl.width); } else return 0; } int LayoutBox::substringWidth(int f,const char *s,int len) { PangoRectangle prl, pri; if (pl != NULL) { pango_layout_set_font_description(pl, pfd[f%5]); pango_layout_set_text(pl,s,len); pango_layout_get_pixel_extents(pl, &pri, &prl); return(prl.width); } else return 0; } int LayoutBox::fontHeight(int f) { PangoRectangle prl, pri; if (pl != NULL) { pango_layout_set_font_description(pl, pfd[f%5]); pango_layout_set_text(pl,"Aypb178XW@",-1); pango_layout_get_pixel_extents(pl, &pri, &prl); return(prl.height); } else return 0; } bool LayoutBox::drawBoxedString(int x,int y,int w,int h, int f,char *s,char *sep) { int cy, lskip; char *first, *p, *last; lskip = fontHeight(f) + 2; // base case: string fits in one line if (stringWidth(f,s) <= w) { drawString(x,y,f,s); return true; } cy = y; last = s + strlen(s) - 1; first = s; while( *first == ' ' ) ++first; while(first < last) { if ( (cy+lskip) > (y+h) ) return false; for(p=last;p!=first;p--) { if (!strchr(sep,*p)) continue; if (substringWidth(f,first,p-first+1) <= w) { drawSubstring(x,cy,f,first,p-first+1); first = p+1; cy += lskip; break; } // if substring... } // for // couldn't fit line, repeat the step but break anywhere :-( if (p==first) { for(p=last;p!=first;p--) { if (substringWidth(f,first,p-first+1) <= w) { drawSubstring(x,cy,f,first,p-first+1); first = p+1; cy += lskip; break; } } } // if p==first while( *first == ' ' ) ++first; } // while return true; } // method int LayoutBox::drawButton(int x, int y, int w, int h, char *s, int font, int fg,int bg) { ColorSpace cs; int i,j; if (s) { j=stringWidth(font,s); i=fontHeight(font); } else { j=16; i=10; } if (w<0) w=j+10; setColor(bg); drawRect(x,y,w,h,true); setColor(cs.darker(bg)); drawRect(x+1,y+1,w-2,h-2,false); drawRect(x+2,y+2,w-4,h-4,false); setColor(cs.lighter(bg)); drawLine(x+1,y+1,x+w-1,y+1); drawLine(x+2,y+2,x+w-2,y+2); drawLine(x+1,y+1,x+1,y+h-1); drawLine(x+2,y+2,x+2,y+h-2); setColor(fg); drawRect(x,y,w,h,false); if (s) drawString(x+(w-j)/2, y + ((3+h-i)/2) - 1,font,s); return w; } DropBox::DropBox(char *option, ...) { va_list ap; GtkMenu *m; GtkWidget *mi; char *p; int i; m = GTK_MENU(gtk_menu_new()); p = option; mi = gtk_menu_item_new_with_label(p); gtk_menu_shell_append(GTK_MENU_SHELL(m),mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(dropbox_select), (gpointer) this); gshow(mi); options.push_back(mi); va_start(ap, option); for(;;) { p=va_arg(ap,char *); if (!p) break; mi = gtk_menu_item_new_with_label(p); gtk_menu_shell_append(GTK_MENU_SHELL(m),mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", GTK_SIGNAL_FUNC(dropbox_select), (gpointer) this); gshow(mi); options.push_back(mi); } va_end(ap); gshow(GTK_WIDGET(m)); widget = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(widget), GTK_WIDGET(m)); selection = 0; listener = 0; } DropBox::~DropBox() { options.clear(); } int DropBox::getSelection() { return selection; } void DropBox::setSelection(int i) { gtk_option_menu_set_history(GTK_OPTION_MENU(widget), i); selection = i; } void DropBox::setUpdateListener(UpdateInterface *ui) { listener = ui; } void dropbox_select(GtkWidget *w, gpointer data) { DropBox *me = (DropBox *) data; int i,j; j = me->options.size(); for(i=0;ioptions[i]) { me->selection = i; if (me->listener) me->listener->update(); break; } } namespace Gtk { void show(GtkWidget *w, ...) { va_list ap; GtkWidget *x; va_start(ap,w); gshow(w); // gtk_widget_show , defined in eboard.h for(;;) { x=va_arg(ap,GtkWidget *); if (!x) break; gshow(x); } va_end(ap); } } // namespace Gtk eboard-1.1.1.orig/promote.h0000644000175000017500000000311410757567572015135 0ustar patrikpatrik/* $Id: promote.h,v 1.3 2007/01/01 18:29:03 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef PROMOTE_H #define PROMOTE_H 1 #include "eboard.h" #include "widgetproxy.h" class PromotionPicker : public WidgetProxy, public PieceProvider { public: PromotionPicker(GdkWindow *window); void setPromotion(int index); int getPromotion(); piece getPromotionPiece(); virtual piece getPiece(); private: int promotion; GtkWidget *button[5]; friend void promote_toggle(GtkWidget *widget,gpointer data); }; void promote_toggle(GtkWidget *widget,gpointer data); // yeah. this is the only one in the whole code. class UglyHack { public: UglyHack(PromotionPicker *a,int b); PromotionPicker *picker; int index; }; #endif eboard-1.1.1.orig/forward1.xpm0000644000175000017500000000102410757567572015550 0ustar patrikpatrik/* XPM */ static char * forward1_xpm[] = { "24 16 2 1", " c None", ". c #000000", " ", " ", " . ", " .. .. ", " ... ... ", " .... .... ", " ..... .. ", " ...... .. ", " ...... .. ", " ..... .. ", " .... .. ", " ... .. ", " .. ", " . ", " ", " "}; eboard-1.1.1.orig/icon-console.xpm0000644000175000017500000000733010757567572016421 0ustar patrikpatrik/* XPM */ static char * icon_console_xpm[] = { "48 48 83 1", " c None", ". c #020202", "+ c #6A4E3A", "@ c #684A36", "# c #5F4333", "$ c #503A2A", "% c #B2966B", "& c #AE926A", "* c #AA8E66", "= c #A48A63", "- c #A28662", "; c #9E865F", "> c #9A825E", ", c #947E5A", "' c #8E7A56", ") c #8A7653", "! c #877252", "~ c #846E50", "{ c #7E6A4D", "] c #6E4E3A", "^ c #6E523A", "/ c #624A36", "( c #4E3E2D", "_ c #AE966A", ": c #AA9268", "< c #A68E66", "[ c #927A5A", "} c #796649", "| c #72523C", "1 c #B69A6E", "2 c #8E7656", "3 c #756246", "4 c #624E3A", "5 c #77563E", "6 c #715E45", "7 c #6A5A42", "8 c #6E5A42", "9 c #594A36", "0 c #5E4E39", "a c #413223", "b c #392F22", "c c #362A1E", "d c #32261A", "e c #2E2219", "f c #BB9D71", "g c #BFA273", "h c #C3A676", "i c #594330", "j c #553E2E", "k c #4A3627", "l c #463226", "m c #422E22", "n c #3E2E22", "o c #3B2A1F", "p c #4E362A", "q c #36261E", "r c #463626", "s c #524232", "t c #32221A", "u c #2A1E16", "v c #67563E", "w c #322A1E", "x c #62523A", "y c #2E261B", "z c #FEFEFE", "A c #FFFFFF", "B c #717171", "C c #1C1C1C", "D c #000000", "E c #A9A9A9", "F c #AAAAAA", "G c #555555", "H c #545454", "I c #E2E2E2", "J c #C6C6C6", "K c #8D8D8D", "L c #383838", "M c #727272", "N c #E3E3E3", "O c #C7C7C7", "P c #8E8E8E", "Q c #393939", "R c #1D1D1D", ".............++++++@@@#$%&*=-;>,')!~{...........", "............]]]^]]]+@@/(%_:<=;>,[)!~{}..........", "............^]|^|^^++@@(1%&*=;>,[2!~{}3.........", "...........]|||||||^++4(1%&*=->,[2!~{}3.........", "..........]^||55|||^]+@....:<-;>[2)~{}36........", ".........+]|||5555|^]........=;,,')!{}}6........", ".........+^||55555||..........>>['!!~}}6........", "........@+]||55555|...........;>,')!{}367.......", "........@+]^|||55|.............>,2!~{}368.......", ".......@4+]^^|||5|.............,[2!~{}367.......", "......./@@+]^^|||].............,[2!~{}367.......", ".......#/@@+]]]^]..............,')!~{}367.......", ".......99/0004444..............aaabbccdde.......", "......&%1ffgghghhhggff19##ijj$$$kklamnnoc.......", "......:_%11fgggggggf11%9iijjj$$pkklamnooq.......", "......*:&%%11fffff11%%&iiijj$$$kkllamoooq.......", "......=<:&_%%11111%%&&*iijj$$$pkrlamnnocq.......", "......-=<*:&&&%&&_&&:*>;-===<=<................................", "......,>>;;;--==................................", "......[[,>>>>>;;................................", "......2'[[,,,>>,................................", ".......)2''[[[,,,.............mn................", ".......!!))2222'2............nnnoocqd...........", ".......~~!!!!!))))..........nnooocqdtee.........", "........{{~~~~!~~~~........nnoooqqdtte..........", "........}}{{~{{~{{{{.....nnooooqqdttee..........", ".........}}}}}}}}}}}}}3bnnooocqqddeee...........", ".........33333}3}333336booocqqqtteee............", "..........6666666666678bocqqqddteeu.............", "...........77788787777vcqqqddteeuu..............", "............vvvvvvvvvvvwqdtteeuuu...............", ".............xxvxxxxxx0ytteeeeuu................", "...............00000009yeeeeuu..................", "..................99999eeuu.....................", "................................................", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "zzzzzzBCDCEzzzzzAAAAAAAAAAAAAAAAAAAAAAAFGAAAAAAA", "zzzzzHHIzJCJzzzzAAAAAAAAAAAAAAAAAAAAAAAGFAAAAAAA", "zzzzKLzzzzEKzzKHMAANMOGMNAAMGPAAAOGGNAAQOANMGPAA", "zzzzLJzzzzzzzLHEGGAFRQFGMAMGFQMAPRFPRNADANQPFRPA", "zzzzDzzzzzzzELzzADAMQAAPMAMGNNOADNAAGFOQAGMFFMGA", "zzzzDzzzzzJIHEzzADAGFAAGFAAMRMAFGAAAGFFGADGGGGPA", "zzzzLKzzzICzHEzzPGADAAARNOPAAQFFGAANDAGPADAAAFNA", "zzzzEDKEKCEzECEKDNNDAAADANDPFRONRPFRPAQFAMGFGGAA", "zzzzzJBHBIzzzEHBNAOPAAOPAAOGGOAANGGOAAGAAAMGPAAA", "zzzzzzzzzzzzzzzzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}; eboard-1.1.1.orig/goc_discardall.xpm0000644000175000017500000000356210757567572016766 0ustar patrikpatrik/* XPM */ static char * goc_discardall_xpm[] = { "32 20 75 1", " c None", ". c #000000", "+ c #E16C10", "@ c #E37312", "# c #E47812", "$ c #E57C13", "% c #E68014", "& c #E68214", "* c #E0650F", "= c #DE5D0E", "- c #DC540D", "; c #E06610", "> c #E26F11", ", c #E37612", "' c #E57D13", ") c #E68314", "! c #E78815", "~ c #E88B15", "{ c #E98E16", "] c #DA4A0B", "^ c #DB510C", "/ c #DD5B0E", "( c #E47712", "_ c #E78715", ": c #EA9317", "< c #EB9717", "[ c #EB9A18", "} c #EC9B18", "| c #DD570D", "1 c #DF620F", "2 c #E88915", "3 c #E99116", "4 c #EB9817", "5 c #EC9E18", "6 c #EDA319", "7 c #EEA61A", "8 c #EEA71A", "9 c #DA4D0B", "0 c #E06810", "a c #EDA219", "b c #EFA91A", "c c #F0AE1B", "d c #F1B21C", "e c #F1B31C", "f c #DB520C", "g c #D9460A", "h c #DC560D", "i c #DF610F", "j c #E16D11", "k c #EFAB1B", "l c #F2B91D", "m c #F3BD1D", "n c #F4BF1E", "o c #DD590D", "p c #E27111", "q c #F3BC1D", "r c #F5C41E", "s c #F6C91F", "t c #F6CB20", "u c #DA4E0C", "v c #DE5C0E", "w c #E37412", "x c #F7CD20", "y c #F8D421", "z c #F9D722", "A c #DB500C", "B c #E16910", "C c #FBDE23", "D c #FCE324", "E c #DE5E0E", "F c #E16A10", "G c #FFEF25", "H c #E57B13", "I c #F1B51C", "J c #F8D221", " ............... ", " ....+@#$%&&&%$#@+*=... ", " .-=;>,')!~{{{~!)',>;=-]. ", " .^/*>(%_{:<[}[<:{_%(>*/^. ", " .|1+,%2345678765432%,+1|9. ", " .=0@'_3[abcdedcba[3_'@0=fg. ", " .hij#){4akelmnmleka4{)#jih]. ", " .o*p$!:5beqrstsrqeb5:!$p*ou. ", " .v0w%~<6clrxyzyxrlc6<~%w0vA. ", " .^=B,&{[7dmsyCDCysmd7[{&,B=^. ", " .fEF,&{}8entzDGDztne8}{&,FEf. ", " ..B,&{[7dH4IJGJI4Hd7[{&,B=. ", " ...~<6.H4IJGJI4H.6<~%... ", " ....H4IJGJI4H..... ", " .H4IJGJI4H. ", " .H4IJGJI4H. ", " .H4IJGJI4H. ", " .H4IJGJI4H. ", " .H4IJGJI4H. ", " "}; eboard-1.1.1.orig/spiral0.xpm0000644000175000017500000000071710757567572015405 0ustar patrikpatrik/* XPM */ static char * spiral0_xpm[] = { "16 16 6 1", " c None", ". c #000000", "+ c #EDEDED", "@ c #A3A3A3", "# c #93321A", "$ c #BA7A43", " ...... ", " .+@+@. ", " .+@. ", " ..@+.. ", " .. .#.+@.#. .. ", " .+...#..#...@. ", " .@+@+.$#.@+@+. ", " .+@+@.##.+@+@. ", " .@...#..$...+. ", " ...##.@+.##... ", " .##.+@.##. ", " .###.@+.###. ", " .##.@+@+.$#. ", " .#$......##. ", " .##########. ", " ............ "}; eboard-1.1.1.orig/pieces.cc0000644000175000017500000005045510757567572015070 0ustar patrikpatrik/* $Id: pieces.cc,v 1.37 2007/01/20 23:46:02 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include "pieces.h" #include "global.h" #include "tstring.h" #include "eboard.h" #include "fallback.xpm" PReq::PReq(piece a, rgbptr b, int c, int d, int e, bool f) { p=a; dest=b; x=c; y=d; dwidth=e; onlytop=f; } int PReq::operator< (PReq * a) { return(y < a->y); } int PReq::operator> (PReq * a) { return(y > a->y); } PieceSet::PieceSet(string &name, string &sqname) { EboardFileFinder eff; string wherever; char cpath[512]; int i; // global.debug("PieceSet","PieceSet",name); Name=name; SqName=sqname; if (!eff.find(Name,wherever)) { cerr << _(" ** file not found: ") << name << endl; exit(2); } memset(cpath,0,512); wherever.copy(cpath,512); isrc = new CImg(cpath); if (isrc==0 || !(isrc->ok)) { cerr << ""; cerr << _(" ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n"); isrc=FallbackLoad(); } // use squares from other file ? if (Name.compare(SqName)) { if (!eff.find(SqName, wherever)) cerr << _(" ** file not found: ") << SqName << endl; else loadSquares(wherever); } side = height = isrc->W / 7; bottom_only=false; top_only=false; queuef=false; i = (isrc->W * 10) / isrc->H; if ((i<34)||(i>36)) { extruded=true; height=isrc->H / 2; } else { extruded=false; } initCache(); bgcolor= isrc->get(0,0); alphamask=0; calcAlphaMask(); } PieceSet::PieceSet(PieceSet *src) { Name=src->Name; SqName=src->SqName; initCache(); isrc=new CImg(src->isrc); side=src->side; height=src->height; extruded=src->extruded; queuef=src->queuef; bgcolor=src->bgcolor; alphamask=(rgbptr)g_malloc(side*height*14); memcpy(alphamask,src->alphamask,side*height*14); bottom_only=false; top_only=false; } PieceSet::~PieceSet() { list::iterator qi; if (alphamask) g_free(alphamask); delete(isrc); clearCache(); if (!myq.empty()) { for(qi=myq.begin();qi!=myq.end();qi++) delete(*qi); myq.clear(); } } string & PieceSet::getName() { return(Name); } string & PieceSet::getSquareName() { return(SqName); } void PieceSet::loadSquares(string &path) { CImg *tmp,*aux; char cpath[512]; int w1,w2,h1,h2; int x,w; memset(cpath,0,512); path.copy(cpath,512); global.debug("PieceSet","loadSquares",cpath); tmp = new CImg(cpath); if (tmp==0 || !(tmp->ok)) { cerr << ""; cerr << _(" ** PNG LOAD FAILED: using internal low-res pieceset. It'll look ugly.\n"); tmp=FallbackLoad(); } w1=isrc->W; w2=tmp->W; h1=isrc->H; h2=tmp->H; w=w2/7; bitblt(tmp->data, tmp->data, 6*w, 0, w2, 0, 0, w2, w, w); bitblt(tmp->data, tmp->data, 6*w, h2/2, w2, 0, w, w2, w, w); tmp->crop(0,0,w,2*w); if ( (w1!=w2) ) { w=w1/7; aux = tmp->scale(w,2*w); delete(tmp); tmp = aux; } x=(w1/7)*6; w=(w1/7); // white square bitblt(tmp->data,isrc->data, 0,0,w, x,0,w1, w,w); // black square bitblt(tmp->data,isrc->data, 0, w, w, x, isrc->H / 2, w1, w,w); delete(tmp); } void PieceSet::initCache() { int i; xxcache[0]=0; for(i=0;i<256;i++) cacheindex[i]=0; cacheindex[WHITE|PAWN]=0; cacheindex[WHITE|ROOK]=1; cacheindex[WHITE|KNIGHT]=2; cacheindex[WHITE|BISHOP]=3; cacheindex[WHITE|QUEEN]=4; cacheindex[WHITE|KING]=5; cacheindex[BLACK|PAWN]=6; cacheindex[BLACK|ROOK]=7; cacheindex[BLACK|KNIGHT]=8; cacheindex[BLACK|BISHOP]=9; cacheindex[BLACK|QUEEN]=10; cacheindex[BLACK|KING]=11; } void PieceSet::buildCache() { int i; int itemlen; rgbptr bp; itemlen=side*side*3; bp=(rgbptr)g_malloc(itemlen*24); clearCache(); for(i=0;i<24;i++) xxcache[i]=bp+i*itemlen; // empty sqs drawSquare(0,xxcache[0],0,0,side); drawSquare(1,xxcache[12],0,0,side); for(i=1;i<12;i++) { memcpy(xxcache[i],xxcache[0],itemlen); memcpy(xxcache[i+12],xxcache[12],itemlen); } bottom_only=true; for(i=0;i<24;i+=12) { drawPiece(WHITE|PAWN, xxcache[i],0,0,side); drawPiece(WHITE|ROOK, xxcache[i+1],0,0,side); drawPiece(WHITE|KNIGHT,xxcache[i+2],0,0,side); drawPiece(WHITE|BISHOP,xxcache[i+3],0,0,side); drawPiece(WHITE|QUEEN, xxcache[i+4],0,0,side); drawPiece(WHITE|KING, xxcache[i+5],0,0,side); drawPiece(BLACK|PAWN, xxcache[i+6],0,0,side); drawPiece(BLACK|ROOK, xxcache[i+7],0,0,side); drawPiece(BLACK|KNIGHT,xxcache[i+8],0,0,side); drawPiece(BLACK|BISHOP,xxcache[i+9],0,0,side); drawPiece(BLACK|QUEEN, xxcache[i+10],0,0,side); drawPiece(BLACK|KING, xxcache[i+11],0,0,side); } bottom_only=false; } void PieceSet::clearCache() { if (xxcache[0]!=0) { g_free(xxcache[0]); xxcache[0]=0; } } void PieceSet::scale(int newside) { CImg *ni; float factor; int newheight; // cerr << "scaling from " << side << " to " << newside << endl; factor = ((float)newside) / ((float)side); if (extruded) newheight = (int) (factor * height); else newheight = newside; ni = isrc->alphaScale(alphamask,newside*7,newheight*2,extruded); bgcolor = 0x808080; side=newside; height=newheight; delete(isrc); isrc=ni; calcAlphaMask(); buildCache(); } void PieceSet::calcAlphaMask() { int c; unsigned char r,g,b; rgbptr t,am; if (alphamask!=0) g_free(alphamask); c=side*height*14; alphamask=(rgbptr)g_malloc(c); memset(alphamask,0,c); t=isrc->data; am=alphamask; r=bgcolor>>16; g=(bgcolor>>8)&0xff; b=bgcolor&0xff; while(c) { if ( (t[0] == r) && (t[1] == g) && (t[2] == b) ) *am=1; ++am; t+=3; --c; } } void PieceSet::drawPiece(piece p, GdkPixmap *dest, GdkGC *gc, int x, int y) { int sx=0,sy=0,S; int i,j,k=0,ai; unsigned char buf[3072]; // enough for 1024 x N pieces int bufcount=0; rgbptr r,q=0,a; p&=CUTFLAGS; if (p==EMPTY) return; if (p&BLACK) sy=height; sx=side*((p&PIECE_MASK)-1); if (extruded) y-=(height-side); S=0; r=buf; a=alphamask+7*side*sy+sx; ai=6*side; for(i=0;idata+3*(7*side*(i+sy)+sx); // piece S=0; for(j=0;jdata+3*(7*side*(i+sy)+sx); // piece S=0; for(j=0;jdata,dest, sx,sy+sc,7*side, x,top,dwidth, side,height-sc-hlt,alphamask); } else bitblt_a(isrc->data,dest,sx,sy,7*side,x,y,dwidth,side,side,alphamask); } void PieceSet::drawSquare(int dark,rgbptr dest,int x,int y,int dwidth) { int sx,sy=0; if (global.PlainSquares) { rgbptr sq; unsigned char r,g,b; int i,j,lo; r=(unsigned char)((dark?global.DarkSqColor:global.LightSqColor)>>16); g=(unsigned char)(0xff&((dark?global.DarkSqColor:global.LightSqColor)>>8)); b=(unsigned char)((dark?global.DarkSqColor:global.LightSqColor)&0xff); sq=dest+3*(dwidth*y+x); lo=3*(dwidth-side); for(i=side;i;i--) { for(j=side;j;j--) { *(sq++)=r; *(sq++)=g; *(sq++)=b; } sq+=lo; } } else { if (dark) sy=height; sx=6*side; bitblt(isrc->data,dest,sx,sy,7*side,x,y,dwidth,side,side); } rect_outline(dest,x,y,side+1,side+1,dwidth); } void PieceSet::drawPieceAndSquare(piece p,rgbptr dest, int x,int y,int dwidth, int sqdark) { int i; if (global.PlainSquares) { drawSquare(sqdark,dest,x,y,dwidth); drawPiece(p,dest,x,y,dwidth); return; } p&=CUTFLAGS; if ((p==EMPTY)||(p==NotAPiece)) { drawSquare(sqdark,dest,x,y,dwidth); return; } if (!xxcache[0]) buildCache(); i=cacheindex[p]+(sqdark?12:0); bitblt(xxcache[i],dest,0,0,side,x,y,dwidth,side,side); if (queuef) queueRequest(new PReq(p,dest,x,y,dwidth,true)); } void PieceSet::rect_outline(rgbptr img,int x,int y,int w,int h,int iw) { int i; memset(img+3*(iw*y+x),0,3*w); memset(img+3*(iw*(y+h-1)+x),0,3*w); for(i=0;idata+(y*(isrc->W)+x)*3; return(pixel(src[0],src[1],src[2])); } void PieceSet::setPixel(int x,int y,int v) { rgbptr src; src=isrc->data+(y*(isrc->W)+x)*3; src[0]=(unsigned char)pixr(v); src[1]=(unsigned char)pixg(v); src[2]=(unsigned char)pixb(v); } void PieceSet::xSetPixel(rgbptr img,int x,int y,int v) { rgbptr src; src=img+(y*(isrc->W)+x)*3; src[0]=(unsigned char)pixr(v); src[1]=(unsigned char)pixg(v); src[2]=(unsigned char)pixb(v); } int PieceSet::alpha(int x,int y) { rgbptr a; if (!alphamask) return 0; a=alphamask+(y*(isrc->W)+x); return( (int)(a[0]) ); } void PieceSet::queueRequest(PReq *r) { list::iterator qi, qj; if (myq.empty()) { myq.push_back(r); return; } for(qi=myq.begin();qi!=myq.end();qi=qj) { qj=qi; ++qj; if (qj==myq.end()) { myq.push_back(r); return; } if ( (*r) < (*qj) ) { myq.insert(qj,r); return; } } } void PieceSet::beginQueueing() { queuef=extruded; } void PieceSet::endQueueing() { list::iterator qi; if (!queuef) return; queuef=false; for(qi=myq.begin();qi!=myq.end();qi++) { top_only=(*qi)->onlytop; drawPiece((*qi)->p, (*qi)->dest, (*qi)->x, (*qi)->y, (*qi)->dwidth); delete(*qi); } myq.clear(); top_only=false; } CImg * PieceSet::FallbackLoad() { tstring t; int w,h,c,i,j; rgbptr data, p; CImg *img; string *s; int cmap[256]; int rgb; t.set(fallback_xpm[0]); w=t.tokenvalue(" \t"); h=t.tokenvalue(" \t"); c=t.tokenvalue(" \t"); for(i=0;ic_str(),0,16); else rgb=0; cmap[fallback_xpm[i+1][0]]=rgb; } data=(rgbptr)g_malloc(w*h*3); p=data; for(j=0;jdata, data, h*(img->rowlen)); g_free(data); return img; } // ------------------------------ vectorized pieces // offsets 32 67 90 76 65 46 // sum = 376 // these data were generated automatically. Changing it by // hand is *stupid* GdkPoint VectorPieces::srcpiece[376]={ {35,16},{21,16},{21,31},{29,39},{29,71},{27,75},{23,79},{22,83},{22,90},{17,90},{15,93},{15,97},{17,99},{89,99},{91,97},{91,93},{89,90},{84,90},{84,83},{83,79},{79,75},{77,71},{77,39},{85,31},{85,16},{71,16},{71,22},{60,22},{60,16},{46,16},{46,22},{35,22}, {29,10},{28,14},{29,17},{29,21},{28,24},{25,28},{23,32},{20,44},{17,48},{14,52},{12,56},{10,60},{9,64},{9,68},{10,71},{12,73},{15,74},{18,75},{22,75},{23,78},{26,78},{28,76},{30,72},{38,64},{40,64},{43,61},{45,61},{48,58},{50,58},{53,56},{55,54},{56,57},{55,61},{54,65},{51,69},{48,73},{44,77},{41,81},{37,85},{35,89},{34,93},{33,97},{35,99},{95,99},{98,97},{98,89},{97,85},{97,77},{96,73},{96,69},{94,61},{92,53},{90,49},{89,45},{87,41},{84,37},{81,33},{74,25},{70,23},{66,21},{62,20},{54,18},{49,10},{46,13},{44,17},{41,20},{37,16}, {53,7},{48,10},{47,14},{48,17},{50,19},{47,22},{43,24},{39,27},{35,30},{31,34},{29,38},{27,42},{27,46},{27,50},{28,53},{29,56},{31,58},{32,61},{34,63},{36,65},{35,69},{33,74},{32,77},{32,80},{35,81},{38,82},{42,82},{45,83},{48,83},{47,86},{40,88},{20,88},{12,90},{8,92},{8,94},{10,96},{11,99},{13,100},{15,100},{18,99},{22,98},{30,98},{33,99},{41,99},{44,98},{47,96},{49,96},{52,94},{54,94},{57,95},{59,97},{65,99},{73,99},{76,98},{88,98},{91,99},{93,101},{95,99},{97,95},{96,91},{92,89},{88,88},{68,88},{60,86},{59,83},{62,83},{66,82},{69,82},{73,81},{75,79},{73,74},{71,69},{69,65},{71,63},{73,61},{75,59},{77,55},{78,51},{79,47},{79,43},{77,39},{75,35},{71,31},{67,27},{63,24},{59,22},{56,19},{58,17},{59,13},{57,9}, {51,7},{48,10},{47,14},{49,16},{51,18},{43,54},{31,22},{34,18},{34,14},{30,11},{26,12},{23,15},{24,18},{25,21},{28,22},{27,57},{12,33},{13,29},{14,25},{11,21},{7,20},{3,22},{2,26},{3,29},{5,31},{8,32},{10,34},{15,65},{21,71},{25,83},{22,88},{19,95},{28,98},{32,98},{35,99},{39,99},{42,100},{62,100},{65,99},{69,99},{73,98},{79,98},{83,97},{87,95},{84,88},{81,83},{83,71},{89,65},{96,33},{98,32},{101,31},{103,29},{104,25},{101,21},{97,20},{93,22},{92,26},{93,29},{94,32},{78,56},{78,23},{80,22},{82,18},{82,14},{78,11},{74,12},{71,15},{72,18},{73,21},{75,23},{62,54},{54,18},{57,17},{59,13},{57,9},{53,7}, {50,8},{51,13},{46,12},{46,17},{51,16},{51,23},{49,26},{46,29},{44,37},{43,41},{37,37},{31,35},{27,35},{23,35},{19,36},{15,38},{11,41},{9,45},{7,49},{7,53},{8,56},{9,59},{11,61},{12,64},{18,70},{21,71},{22,74},{22,82},{23,85},{23,93},{38,98},{41,98},{45,99},{57,99},{61,98},{64,98},{68,97},{83,92},{83,80},{84,76},{84,72},{87,70},{95,62},{97,60},{98,56},{99,52},{98,48},{96,44},{93,40},{89,37},{85,36},{81,35},{77,35},{73,36},{67,39},{62,41},{61,37},{59,29},{56,26},{54,23},{54,16},{59,17},{59,12},{54,13},{55,8}, {50,15},{46,17},{43,21},{42,25},{42,29},{45,33},{40,35},{36,39},{35,43},{34,47},{34,51},{35,54},{36,57},{38,59},{40,61},{34,65},{29,70},{27,74},{23,82},{22,86},{21,90},{21,94},{22,97},{25,98},{81,98},{85,97},{85,93},{84,85},{83,81},{80,74},{77,69},{72,64},{67,61},{69,59},{71,55},{72,51},{72,47},{71,43},{69,39},{65,35},{61,33},{64,29},{64,25},{62,21},{59,17},{55,15}, }; VectorPieces::VectorPieces() { int i,j; orig_sqside=cur_sqside=108; np[0]=32; np[1]=67; np[2]=90; np[3]=76; np[4]=65; np[5]=46; for(i=0;i<6;i++) { offset[i]=0; for(j=0;j &moves, int over,GameResult result, char *reason); virtual ~MoveListWindow(); void setListener(MoveListListener *mll); void updateList(list &moves, int over=0,GameResult result=UNDEF, char *reason=0); void close(); private: GtkWidget *clist; MoveListListener *listener; Status *textbar; void populate_clist(list &moves, int over, GameResult result,char *reason); friend void movelist_destroy (GtkWidget *w, gpointer data); }; void movelist_destroy (GtkWidget *w, gpointer data); #endif eboard-1.1.1.orig/plastic.png0000644000175000017500000002463210757567572015454 0ustar patrikpatrik‰PNG  IHDR–t‘Ýä™ PLTEnNê®jÞš^†^>¾†N|ßO¢rBŠZ" úÊ‚¦zJ†f*fÍ3²‚NB2=— uÚEÞ¢fûΛæªj®~RF¦þÚ®æºvrÖB¢zRn2þÞºwÚJL°ÖÖÖþúÂ`>Òžb þæÒZÂ&NJZN6°s;†FF& .ö²nN*N‚ÖžN z>þ¾r>š‚*—}df6ÎŽZR¸þþþ^*–b*êlþî¶’b:n>¶Š>Â’ZކnþÖnþÞ¢¶’bzJ"¢f&f>& 2 Z6†å^> R.þ‚mÔ;ήv`È,’Nª‚>Bž z~Z.V& W¾#’R" ~R*þÕ‡v>žb6²éjä pHYs  ’ù¥tIMEÓ ,ûÌ1ô IDATxÚí} wÚF»57Eœ ©&‘›cDR„€ ¯äˆj,s©  éA•…ôÿÿÅ÷<# °c`ȱ³²úerYΪwç²g?·™Á±w?Û“µÿùæû¹xO×>|sûIËOµü ÍfºóS-?#ða'óçŸæ§Z~ZŠsÇgN?|(Hö9óS-? -ŽÓa¯óç¤åþ½j¦þó§RµïK‹"š^ÿêJæìµZ9Sà8îÑzªÛÍ}OZl:íÏ8¿þ÷ªÅMõØE–ïæ¿ }rR;ë ß´:rfðáôô›zU„YAúWGb¬Àö9iÁ/—ßÄ˼X«i9á[Xᛃîyþ`^̸™Ê–M­Öìvÿ­yKÏMe…$_kÖø³þ§Ãý’U,jBÎ?¼c!É5OÏ?Ì‹Ÿc4®–]”Ÿò…§Z®¹ðe­Vãû,sÆINóD´K–_ƒ%jR/kO´EЊÆ5gÝsàíü‹£0Jm-Ùlš™Lsy•?0´ó™Zþãw:óž 5yF–YWJpY²™ï—ZfbÙ=ïòŒ\;¦ÀK¾hÊ|’K$ØëÌ,îR´üy^Ó>-¥-Ü8ž77óyÇ4N’x¾9k6›™nz>ï‚r–MéÇR +\_ƒóÄ/‹,Z£~™ýãTc˜½Šáp¨ŠhNj “ë,_Ðú°¢qÝ.sa÷ Ëî ^üCt9Á°mSÖ Ûðd>šÿÔg¤7gšÌ%…m´Ì¢¨+Še)u»¬Õ†çy¦gM,““Z‚Ó¤K-ì+0íÍó5-Äœ˜©×ï÷÷Ð"³ì «ñóà¶çªÖLŠv‚'n‡©u?¸uŸãÎûq†htôVµt!ú׬®×ŬÔgeAÈ5ûÃËÉÿ‹‹jµÕjÅb±V©tüèFÃk˜s_fe†•~8ßÒcYÙ©´ôVj‰ûg¼Ö×v®¶n«¦¯q“ëK#iµ|3!I\RJRd1'CÇg’Íå€1|.rÉï̆n_fá¯ê…eÛ+Z.‡Öig‚$†gš¦‘sš”äùBs™ÉdxéÇó-fÊéÌùóßÿ½˜h/7Sg MÛcÄð',ÃI؃EOàjÍL¾ÆsI-ÉIû3÷“¢èÀâð§…ŠkfÎMžfâV ¶=ü¹¸P†ž +,h—àiïÚVK 30dúÐtM·s ‚”ü#±!쳟™V­r™åøD³Y,‡ ö4Ó×v«E×Õ¡)KÇädŸÅIJ °>ÚIèµ½¾ÿÄÖ=Y“ ¢ªl!³lèâkk\*•@'ºÙ˺òÍæÕò”“(v¼”Z¶éø²ÀHR’3¯|4µ ã¦éÍ5²¢}Õ2ËçOÏÞ jÒµÈrV€€ç4Áïõ€p2RŸr¹>'û³}ùÄɉ­ÞôaUš’. 0â)ƒä ˜ö“á’ —ÝSºH[t -œ!5Û4µˆqà¥âø¯+¡¥¹„˜þM¦ÉíQ‹­O†)†C«¥}-)5yüB¸¤6Û/Eí„»ÃϚ騪 •Mä~Å÷³Œô=Ô¢çâ L–± Ðr–OpÜ>ß"µ$jšh° î\0…Ì«ž9L åÜþ`ìd:Õ½# ¡”c?Ò/NI%bIBµ«Áà”ž–’á°hy¹DdÿR äCl¡ðÔ¢bjÕA#$…jÉäógg³D"±[-`¬¤$¤Ì\“]‚]¾ùI’úB¶7Œkln¶šª¨ZºXIù9†mÓ¯Ž:šrËåà*ÃS®®8šGòj9X§:}.QË/—ùÌÓ×ÄTÃó*D-Z¨°bËÁ Ý÷¾?žbûK9Y㓬)zŸÌ±ì«WY9µ`÷Š…½ét|9—,\‘sÂA†²nx¸Ç›¬eò]>[Ò€Ãï yêrå¢á3|ójpv5¸*|—š˜Ü€)ó°AHí†Ý?Np+ –%+×jÍZMcuVÆ]ËÐ%a?-¾!‘ aE Z¢Ð¤[À+2È; ™Ræ©ÀAÀ¨v(’œ+¦Ì®ÎºλƒYá;TEƒFT¼q°ÝÓSŠš®>SÚçk5l¼$¼ZFcÂÄÉ\› ‰{ò´Õ}UWUÀyŽã:›6Çú”`]'ê7!¡UD‡•šùn÷Çîé6¹<ªZ†) E€ýÇqµ¨{0È ûiáúëHW<+ó —f‹æÔ†:Ë ¹l6 {þ ·mw›&ˆ¹\C P›e|šÏÏ´ýHAȾ‚!8®Í–Kzd`Q! ý+Ý­Vì‘Ï[а‡ °`°‹|0Á,Õy!äù vƱm–W3È!h û°ºYö4ÚÿtuŠ ëÓütMX–í±DÛ‰æryÖ%b9ÛdØ#Ä6…L~@ ³%ˆ‹Í öÃÙ2ó=Ôòî]¹ fah.XP $”³$Õ †Ä¨<QX²€BN–º´‡J‹ø0™¬ÛÉ}*@“ú’&°4¸!¶x|‘JõŒÊ|­õ÷ƒ]è/逋Èëd‚?¤[ E4Y©ÖÌ,gË«÷]ÔRž"-)6Î0?ÈÏjT´Ìçs‡$ßw1D)¼òo®33j;V>)Ãv€h¸bz\y ȉ¤.RàÚ§Eb+‚?s½»5|>8ý ˜‰û>j9™`}RîK|sù¦;«Q…óD›L¾À1fE«5ƒÄÇŸ–…Öwhúן¸B>³<$ÝF6‡nŠ•Fû„`î$Ì3Åf¯éX²Ì÷¨lKwY\Z—úヒZNþW…áú¤*vöæ|V£º×f‹¢á1W­ãøàDyõ… ý¹1,îâU’Ï\ç›Ú!´L§Å¸Ë2×}­?"sý¾t ’Ôât³#CÞ½=Í~dµœŒA-=ÊD­ûæ¼I9\Fè3ÌìJò͹†ÁͧlÏ¿.|:„A*€ÛÌú©e2Œ/^aI®¹X;éå˜kDž‚$!Ž¥V:òuR{úšØŠ–á"+ÏA-”U&³ÑðœB&點!òUáìµT 5ce°'‚„1Ñaë‹[t{Qj\á0pmõMh9ùNJb}3“Y¾9s\~ø¾%Þ#u¸Ò’§¤¢Í>¬k’7ÜÚ R.Ǿ’ 3J;Vާ^i°kßœ/óÜa¾eèvn`¼Rá쬛?È· ÁÙð¹ÂaÝÚ›Å(ÒÎOg³ï‰AD”“BµÐÚÜF¥R1³IpL¡V›á-Œv ”þ¥è.=©fY,S’šùåàœ®Ãp•‡äŒ‘,.ýhIèA¿©¥#ì¦å1ÕRF±¸.‹UYއm”?[Âx)iZD¯Ä š&m8Ië'hƒ"¤¥ÑÍ€ðR£t,àYR„‰Œvy: cÒaÐrÈ<#Z¼N6™¸êvgßA-å21ÖÌšÉxñˆ†[HPñbëz/ó®šÏÒ­î¤Þ÷£&ñ r¯Ö§@¥ØCÞp W7m‚£èQõ ‘‰}·„Ûë0DŽOï[œ¹7œ¨ª8lxs¼ÊÊaƒÁKüîXCÿbx¦#ËYˆÊn|H öÁÂ^Õ‰ŠÈ¹ÏFîG‡ <SU£QÁ#Rm Ñ_KPõèÎ}5Mªn#ZÏïs‰ïà[† kohºÎO¹sxÅ ÜDþ´{šGžŸíˆÈVX ‚ÕÙ,úÀš™Ùî@nxB&öŠ”YÐálO‡ïŠep^eîÌñ4ŸÉ!x†àí÷X6Ç*3L0ÏYþŒªÛè̲æ½kPËr_>±ZâvÔDC÷<o'™NÏ÷;d;ÏMlÃ4Qm7»‘÷Å«k¤ é:|7YátQ؆çU\@àRW ™'˜ªÛwïˆ]E¾•H,‡{BµLõ©Ž7ï Ë›‹yªýö“\"S«ñཱུw€èÐ&€5±r#%ùùÝ0DN W]·WHºßMWK«CÏ„ñöXÌB°[žÓúLv;+:ü¶õ)ôfÌ9džAHŽZ›Ëâ<Å9{*µ aqT¼)14½…ÓGJ^â…CÈ y¼Ù²µ†X],’õIÉäú2ä-{aˆ´±×¢·‰¤è°‚›lÀÒöXR¬Dð€îoÑ Ù>â0àòÀy®B› ¼ñrF ±§R˰Œ÷ˆ±¹®»HõÐ`_‡åÊ%ŒÆË%¯·YkÀ¬Ãf™$^¯ì¾Éïm"ãÈóýÈ2ÑIpd ÊN!-äØš?3Kàã'i /“z8ϸ‹š)6˜']·Ø&hS†n/‹9Ä,”ØÓ¨¥\Æyâm׌5峯 s‘ÈæmžÃL$p¼Ò§‡£Mع6…'· ‡5±eã·ÀBä„ q…"ds/²Lœ˜:ŒC0­ç%©Å!˜¬®tÍ<Œ Æê¦RÌæpž ªnI‘ D¢‚]XÈđĞD-ÿKt ³ì±¯² ^˜†„ÜÙŸÍfçgËô^Kæä[Hñ³øÎ<ïØÙY~Öl’Í´{Ó#ò›rR"B.w"ëtâ“CxXY‰¬í Á§K0÷5À2ûzÌ’·Áî£è6ÀuƒVPÚ³nwÐ $&=Zе€²xa¿¯Id´‰Z0^,dì‚ <¼ç,p`¹5,¡iøðx«ZÀˆˆL½: ¦Bmï¹D,%“hoqÏ4`–Ý‚‹ë±Jx¤• 0°‚——)HÊ’ òBy%±'PK™Œƒ"ç¼B ›„Yú7þVZˆ âH¯¥&1^+¶ÓB:Õƒ^Cd3èprjcðMçˆes¹P/DÞÍ&/1ò ¼ì–-´îŸ«aá&PÚ¾nwÛ|ø@œDbsöŸ"#êÆ]o@Täu{ÝHèâaZàl·Edÿ¬.5;`k¤~(2ÀáA`e¨öýÑŠbÃ3ç[í&ö¨bô×Уÿ݀à ›—”0šÁ. {Ö÷_-$Âï ¡>KÀ·8|!´ ùü雳S¼ Š ß눭V#›Ëo‚ ¤Í–—îk$DD U]'\I x{p÷Á ƒŒöHxÎÓ æ™\Í“fÀAA–tí5TU¿Ãåø–á$ô¢à[:7‚&aÙ¯Ò‚ãåò…!¶ǃñ0|CÜY·{ÞÍo…EHÝ.ÆÝäC°·8ÚÔ y´I†‹6%£ýú\kˆ£ˆ„v>`e6[Ò #cb¬S2#Õ‚×?+.ïHC-¨ÎɤèâíO«Ç|H ô|zú&`¥À?ôi*ˆÕ§x-²kiµ¸ÑuâYßò!,a¯!2I,C2©8˜ü” ®‚»Áh¥¯ò2îÈ[ÜÅq̧Yˆæ¹wÀè€q•R¾@<Ë2ŸÙ=ºZ&“©:™N&eü Ú×Gí½K¾Cÿût˜î„…ÈoZA§»;|W 6ƒãÓwv«¢/R!É}ï6ãî?·º–ÉäðC˜ŸŸUùC¶ŸŸìúC¶·o?þüüóóçáï¿ ýòòå/Øžýö ÛŸÏþÄö_hðן®þõ“–'lŸ#ZBR^⯀–_RBÇ !??iÁC{µ|Æö<Ò ‘Kб<{¶’óß?WÜüN áãÂvd+üúñò²¡BÌoÐîÈe-–Ÿ´Zb­’a/þ3Ÿ‚$Åòù¯ iöÛ¦\ˆ%ûïªeM‹5®Æùö•Ê“ÐB˜±5- —grY{ý'£%6þ_àéôñw¦%ÖŠ×ã±ýøjùYYñò<â寗ß6‚±?ŸX-¥“Ñx2~+©U•ù®´±¢ÀŒŸÂ·üsG.!//A//‰Ó'Šù30dÿ½ë^›«T¦“õÛ´R/º á›>ÿîHt9¿óm{AqôúSþ´{¼3¿ \^Fvì¾{yZ,+­ØõRÝP¿É”]TÇSYû–Ÿà‰^‡©¹ó2ºmÆjܰ&Eÿæ±i¹$¬DvŒÆc^~»›UnX±Ø#³bÇuSu[,nÈb±Ø¨d)'‡Ë0ŽX-!,ä?Öµ®VŽ*•¸QNžF-¡\Öv ˆtåö7Ì“¨X±K1+ªUµŽ§‡ƒ€K«Ž›2¨—µè?ØiѾfÚhÇð^ ¡X¶aL††a˜ó9«f3^êÿQ|Lµ\^Þ!æ+^ÂôeÍÊS¨EGVl[u]µT-ur/JUQ .ÒzÂ+›‚¥Ÿ(¥XëÞe™V­b¼Ýn›Vu<á;cËŽ+[¸)µ àWi¬ÔÁæN l•_¸æ¥ë?þh;†òH´üsùÏÛȽDÞ%²c¿!/Ïîz˜ˆ—{´œ€’ëä3ָٜ®«F¾ìLŠlkŸm¹m¿·ÅaÇQÆÕÛXiR<$"§?®Æbø¬ZjÛß_jMêcXË´&6¬uµ>wâSØB[©ÚÊx-@ÊmlÕZ··­ U•©2)+ŠŠ,µ\^¾]É%¨ÃüµÒËo‘\6Ãä‡i)—‹cß8±qoã—£Ò¶¬}&_±ª¥ª5QÍŽ)ZãÖ­åLêŠB;ÁtºTU{r+VR&î¤#…Â€ÝÆZÁÒ-4f±ªb•ªçª [»º«ëØýF¸)ág#«Ê£±Ðï¿]›1¢——/C+öÛúX(—{´Œ•““tŽÐÒJGjYܦe¼Ï_ÃÄ,µ¨–•"ì7Kí4t‰™ª4¬ I1g ¼Ä;|»²qÒ¥V´ã×{–v q‡eïÞñ $R*„bOuÑ0]s8UÓ· C^>G†Œ”aÂÄ’óìY¾læû÷iIÓã[kF·±´¢ëF¬ð¨Õ:Ö÷Ò¢T±MÕj'jÙøì"2E©ÛŠI³Ä@‹½pTHºÊߣ²kBp™ÃÖw+å®^7£ˆ$}{ýzÍËÝt‰ARB·¿þÜŒ“ïÓr›¾•ÊÜT+µÜ‚¼ëããá>ZF¸ïÒÐ`«ét\)HæÂ[–Ú÷®18°í¨,+VR ÇTéÜÒ†LÀ—ØSµØá5ŸfmÛ…T’He¢Žc?&+@ËëË [û—àø%Ì_^®Â±?ûóÙF<»¿ûP×â‚?GÃ&? òþ½ÌÎEkËŸTÇ0?ØoJ5 üŒ­©m×1{R-5ö-rÖR¥n(±ª¨Æ”2‰ˆ,X ÑöĘ˒,*”J‹tlLTGæ´øc²òîòõ劗{qò=^¢x,r0÷ÕYï-µZãÕ8i¹Ñ²ï p.ÕaØ-¤‚c{b«%¢ØJCÏrA¾¬ìÝû ÐìwhiÙ†8¥®†¬ p:1>æ3,­wHF0Õ1"•‰á0STVЈݥ% È6Ž‘_¾ÜdåÏm´nÂðøVªQZ’¹¹ˆÆiצ 6}b{ñÒ`iN€ˆbG-°m{i!?L€“ÉX)Oì±u@m x{Z4˜%cÓ"[·Ä„¡ÊT‡Ip_dÑÊn#˜±€˜ûÿ_d3_©…ФÀXÉs; Å×义óNZYJƒk½áyÑO¯Ÿ—£Xz4V¦46…¬¯RŸbœ{@ÉäMh™¢{¬1:õâ‚K>'†z¬Õ$ç Z½PÜ^øuÅË?+Ŭޑ7åͼ2HùïÓrKâ’1±B¶>Aß2¿ÑäŠ¨ë»  A“ ¢90×¢V"»m)%š:Là$0%§K‡”ln#;i:t¦AkŠ0šA{"]טڇHl€jÍçó­j xYÇck½¬2þç¡`žE–ì!Z  ºEµŒ-,,˯@s˜NH9Ù—ãÃ^WtÑ‘Ý)„bcEÕË')cˆËö²2&?‡e¬LŽÚí/¿¸‹E‘rqWE&ªó6+ñµOmÓ(Óµ¬‘ƼýiÙüݺ´510ÖÔ0ÇGGæ¶¼ì×–—Ë ñòòùK’¿¼üm¥ä%ö Ém¡Gh!C£0ÝÚ?NrAŸÉ'“ ÃÐ-áâ¨Åi½~²ŸHwÀ£)u·Óþ’:ŽÝ2%-­Ò(V„zÔNšÒQ¹LC öH ~cŽÊÃE™R£­VÕV‡ÇíÜ—öQEÝFK@Ìåë;žÿspÄ´—ÏWvlÃñ?@˘X Ot¯“ãš×íc8…‰¿mYxc[u: cˆ¶q9Ò›0â…Ó˜Q»íG6RIIc2Kgc!´4 s}j$1¥R]u{}®Ïî¢åuÈËeäùµlZ² ³"æZ Ä@ ¾nt´fÿxXî§Ë3Å¡ ÁØ>Ö¯xžA_$O§¼ybo¼þØ^˜•¡B…K‰è·ëSÕ3ŽûלÖ6+†EÝ#8옋ÌGö˜²[TK©j{Gík)ɺóÉvµ„‚ årùÏ”ubùr#³ÄÛæ £‚î\ºâ] .óðû¾6¯xæ1í¹Rºz‚¥BËñGæúK»RñÊ¿ÓÔ7ç‚›hb-_8žC°’¦í+ CóÈÍ}”ÙžkÒtK¤VO ï¸ý%Ûv;ŒØ¯~ò¾ã`¢@ùeÄ˃¾å–^nÁ­¤a‰+^¥¡ÇéÁtÝ¢ht±ÒqÊÖxJ]ö+‚–¶Nʵx¢Lí1ẑð‚z»\ž”±Lz‘¦ím&ååIñä„(´ÉRUQ ÷È9ŽÇ'[¦ù÷߯åB˜YdŸÅDWÈž¿¼#˜Ø7qÎSœyCœRêzlÛâ+ª'°e0„åýÕ,®c¥ åÒqé\P˜¿êÁÔA··„šVúÀn1ɪ⧡†¸­ö÷¯¯ÍØååëËÍ Ù†!#Ùb6b±ˆ]Ôä¶'R…'èê~‘$0bC“Ÿi±x/-TË´¢®}"|ç{Ó#¼¨ô5G´‚JÑt™^ã°õÁÑ’4¿˜K|tÐE)çÂü âK,,mýý÷‹Ð޽Ž"å b"fB·•bðÙ/[}Ë¡­Ø“¾ÔnPÒ’†`ÜcíqÕÆç×=vXWƒÚŒX Ïøqªß9ÌI^8ùÂDK mFcSõøÏÑw‹;n"V*Gm¶}l:ÛÔòâEäöWzy@0Ï×G0äNÌ6Z`ÿÃj¥šä¾T('Š•´ªëƒÓW€–†ÙаƒÍ¢MM ˆeqÜ“Žö-£ Hžsý£¸}€ZBZêÅv–Lz$9€-zGGíö_:ÆÃ´+¶ò/_éåíý;1ᘗ[Õ‚Ñ11b<ÏT Ú oŸÈv½j:ðR1;°T'.¥^b­´2-ºíž6?ÔÈC†‡YvñXË&ó N‹M¶Ÿ”é‘äîL«dÙÆQçøH´í-´¼x±ò/‘ã¿\×úßÞÓK$˜¿^nqù±ÀäÚ¶Î%sl…n¸–˜¬³ŽjÑ›ãùI±¨Pª% >û8ÕcäC}K‹œ%@{,}9À’ÝÌÓh_×í–TGs}«ËRÁüº‘‚‰âäÕYòçõݾ¿¶ú–•eʉÆHñ¹:ôUEUU F<:ž*EÚ ´_¤d¿¡Œq-„›Ü¼Xj09'KÆ‚áåCº hI[ÅÞÇÎZîèe-˜ ½|¾{Û¶ýp‘cc­Ô°i†«2ÈŸlˆÃh4ÞqÛ,‡´§#<-S üQét®K¤¥‰O »“µ,5ø6røä˜H๊}--’¸ÄYÁßMËß›fÓñß½³YŠyˆ–*lû± uÅÖUŸa\Q¤o:<ƪZÓF?·}Üs†*¥XJ%ôø°°øáCsQÓoÚî!¼1`«â¢/¹”`è€W×1ªr™šLß-Ù¼0UƒÕgZBϧpy‡ZbAA¶‘²¨OñIDATUÇ ¨Êš3«D'ë°‚©@½¿§eº@Œx_TË®"[u•–•À›^MÆŸëT£%ž%M8Oï†oúTó\ŸJ•¬8+1{iùûnD.p0Ñ¥Ëç±YÁ¥_ «ëªÉz üŒvÊ2Œ6 ®‹»äÜÄ¢t,­[²D°T`Æ0h:$§4$š x™ÚÕð*0Z…‚• Û ÎǧЯ)g;:U·A•=þÑGíã~µ„´Ü­ÄÜ)(¾ó&ù-­^eÇy@‡6rÁMox;wD…EÙqÕ§ä8CÝ0Œ°×¨œôJYÝÝá;èo}3’œG­ta颺s¬á` ŒÌ±u+îév®â7×ÿXÙOË¿¿.(?P" ˜‰Ý;gÁe0V|¬bÕU£2wÚóy¥‚Çú“Ñfx½š”8•ަu‚wg&ûvüÒn`‡@±°lܪV/.., –G[i4 >oXÛ‘±Q4Ïñýyª{¼²ØŸ-ØìÖ;÷iYù—¯ã±5+ä÷]µ”°H‰¦(6 næ–‚RyðEu§?\cq'†öý0ŒB$96\•¹ù‚€c«Ú~ íÓŽq˜Aγ4Zw'2˜j`S Œ - (ÛÛCKèaÔ˽Ç|ð;v/b¢3L§«Á9®ÚI u2ÕwÝ\¸«€Ø4IÑDC CœL§åúž850(-@’l©>Q½Až÷²Ø1Ø Ä!"\7t¼’nm?Ð ÆÚ ÆŠ'-hêÓ [µ aÊž’u 5Èš+ï×ÛK˽xì2R̆ßkÊŸcwµGè«q¬©ÕE£¹ wR.o?mD»€i@€U°Véô:&ÀÔryçÅ­Xh7ÓˆÄbk6Õ0TDž(ûµ‚7tȱ ¹æ \Îi¨ø„cÛ5PÂáÆ<ñ¸ÅÖ Ïí±`À'ÊÞšu°#nKá±õƒ÷ _¼x€˜;'Éë£ä·›—a7i¹Ç,¥Ò†Tð«Í¾`ªEU,§õ“­k„Äè ‹œu[uú,ÐPW‹Ãâäd×ê’z5é–”GEÏ|³¼ ‹ÃòÉÎCÉVà˜@iAiÒu­Æ3ø‰¢Ê¶ë¹ä|&4–›ó4üfM0‹ªZ„¶ëR\hSˆ6QÙ¡MØO˦`^ÿz7y{‡—Øy’ Æ'äe‚j4-‡«$ªzýᓸð±[`úpquC­°šÆÜxª8'Åz}Çê®{­"²âÈINf†¸s·ÜŒÞ×Ý&¼ ̽á’lC$ŸÇ«”ÚyéŒqI„¿Þ[XyñuÙ²ã[A„ªägÏV*•ã/µ&';8Z¥ºu¬-rµ¬¡f1œgÅé|‘ ×7¹ÅçGÒ¼-UñV%þÀ8Y+ôÛGïçd¢´üýâ®ûõþ[ l±{ÙÉÌZ©ÖËø‰ã~/ó5ÆÁÑŠªå6Z£Piu¼a1ŸÏ¹¯}ñßÏç } -Q¯£ÛÒˆ\ð–Þ ôWK07N¥¡ƒ'Ý òÒEðäIÅ£jX(/H,æÞëW_÷8""¼.ƒÞžÌsî|”šý/°Tq -·‘ÿM[uLíóEJp}Mt:#¶.(¿¾«—"^b —¬í¶öÐS—Û(Ý‘ó‹°]ÜîLÕG­tà~¿‚=ŒŒF à=4Ø]´`Ú}Ûm—¼ñÑÑCýBËüår³ž|ùÏÿK`é,®®‚IEND®B`‚eboard-1.1.1.orig/trash2.xpm0000644000175000017500000000212210757567572015226 0ustar patrikpatrik/* XPM */ static char * trash2_xpm[] = { "17 13 52 1", " c None", ". c #000000", "+ c #181D18", "@ c #8DB063", "# c #8BB174", "$ c #C8C7A3", "% c #6A735E", "& c #7B8C5B", "* c #3C3F30", "= c #8AA162", "- c #799A65", "; c #88B970", "> c #8FC174", ", c #7CA966", "' c #95B97A", ") c #4C5C41", "! c #1E231E", "~ c #242F24", "{ c #809F58", "] c #83965D", "^ c #5B854E", "/ c #98B798", "( c #BACA95", "_ c #98B17E", ": c #455C39", "< c #4E6437", "[ c #567D48", "} c #6E9F58", "| c #5D965D", "1 c #4C734C", "2 c #476847", "3 c #415C41", "4 c #364B36", "5 c #3C442F", "6 c #58774A", "7 c #536847", "8 c #3B563B", "9 c #293A29", "0 c #516C45", "a c #496A3D", "b c #77A162", "c c #405134", "d c #345134", "e c #4D6E4D", "f c #5E5E5E", "g c #7EB17E", "h c #507144", "i c #638954", "j c #7FA16A", "k c #4C6140", "l c #607A53", "m c #060606", " ........ ", " +.@#$%&*=-.. ", ".;>,')!~+-{]]. ", ".^#/(_=-{]]^:. ", ".<[}||^^12345. ", " .+67738549+. ", " .0++++++++7. ", " .0_abc6d147. ", " .0_abc6de47.fff ", " .0gabc6dh47.ffff", " .ijabk64h:2.ffff", " .^^l[61h0.mf ", " ........m "}; eboard-1.1.1.orig/eboard-config.10000644000175000017500000000214310757567572016061 0ustar patrikpatrik.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection .\" other parms are allowed: see man(7), man(1) .\" .\" This template provided by Tom Christiansen . .\" .TH EBOARD-CONFIG 1 .SH NAME eboard-config \- program to get information about the installed eboard. .SH SYNOPSIS eboard-config .RI [ --prefix|--datadir|--bindir|--version ] .SH "DESCRIPTION" This manual page briefly documents the .B eboard-config command. This manual page was contributed by the developers of the Debian GNU/Linux distribution. eboard-config reports the installation options that the currently installed version of eboard was compiled with. .SH OPTIONS .TP .B --prefix Returns the prefix under which eboard was installed. .TP .B --datadir Returns the location in which eboard datafiles were installed. .TP .B --bindir Returns the directory in which the eboard binaries were install .TP .B --version Outputs the current eboard version to stdout. .SH AUTHOR This manual page was written by Daniel Burrows , for the Debian GNU/Linux system, but may be used by others. eboard-1.1.1.orig/eboard-config.in0000755000175000017500000000121510757567572016331 0ustar patrikpatrik#!/bin/sh # # configuration script for eboard # # syntax: eboard-config --prefix # eboard-config --bindir # eboard-config --datadir # eboard-config --version # # author: Felipe Bergo # with patches from Han Boetes # loosely based on gtk-config # #HERE usage() { cat >&2 < #include #include #include #include #include #include "position.h" #include "global.h" #include "eboard.h" StringCollection::StringCollection() { amOpen = false; LastId = 0; } StringCollection::~StringCollection() { collection.clear(); } int StringCollection::open() { IntAndString s; if (amOpen) return LastId; s.i = ++LastId; collection.push_back(s); amOpen=true; return LastId; } void StringCollection::append(char *s) { if (amOpen) collection.back().s.append(s); } void StringCollection::append(string &s) { if (amOpen) collection.back().s.append(s); } void StringCollection::append(char c) { if (amOpen) collection.back().s.append(1,c); } void StringCollection::close() { if (amOpen) amOpen=false; } bool StringCollection::isOpen() { return(amOpen); } const char * StringCollection::get(int id) { list::iterator li; for(li=collection.begin();li!=collection.end();li++) if ( (*li).i == id ) return ((*li).s.c_str()); return 0; } void StringCollection::link(int id) { list::iterator li; for(li=collection.begin();li!=collection.end();li++) if ( (*li).i == id ) { (*li).references++; // cout << "link id " << id << " references " << (*li).references << endl; break; } } void StringCollection::unlink(int id) { list::iterator li; for(li=collection.begin();li!=collection.end();li++) if ( (*li).i == id ) { (*li).references--; /* if ( ! (*li).references ) collection.erase(li); */ break; } } // ------------------------------------------------- SMove::SMove(piece p,int sx,int sy,int dx,int dy) { Piece=p; SX=sx; SY=sy; DX=dx; DY=dy; } int SMove::valid() { return( !((SX==DX)&&(SY==DY)) ); } int SMove::distance() { return((int)hypot((double)(DX-SX),(double)(DY-SY))); } char Position::AnnotationBuffer[512]; Position::Position() { setStartPos(); LastMove.erase(); } Position::~Position() { dropAnnotations(); } void Position::dropAnnotations() { list::iterator ai; for(ai=Annotations.begin();ai!=Annotations.end();ai++) global.annotator.unlink(*ai); Annotations.clear(); } void Position::setStartPos() { register int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) square[i][j]=EMPTY; square[0][0]=square[7][0]=square[0][7]=square[7][7]=ROOK; square[1][0]=square[6][0]=square[1][7]=square[6][7]=KNIGHT; square[2][0]=square[5][0]=square[2][7]=square[5][7]=BISHOP; for(i=0;i<8;i++) square[i][1]=square[i][6]=PAWN; square[3][0]=square[3][7]=QUEEN; square[4][0]=square[4][7]=KING; for(i=0;i<8;i++) for(j=0;j<2;j++) { square[i][j]|=WHITE; square[i][j+6]|=BLACK; } for(i=0;i<4;i++) maycastle[i]=true; ep[0]=-1; clearStock(); sidehint=true; } int Position::operator==(const Position &p) { int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) if (square[i][j]!=p.square[i][j]) return 0; for(i=0;i<5;i++) for(j=0;j<2;j++) if (House[i][j]!=p.House[i][j]) return 0; return 1; } int Position::operator!=(const Position &p) { return(!((*this)==p)); } Position Position::operator=(Position &p) { int i,j; list::iterator ai; for(i=0;i<8;i++) for(j=0;j<8;j++) square[i][j]=p.square[i][j]; for(i=0;i<5;i++) for(j=0;j<2;j++) House[i][j]=p.House[i][j]; for(i=0;i<4;i++) maycastle[i]=p.maycastle[i]; ep[0]=p.ep[0]; ep[1]=p.ep[1]; LastMove = p.LastMove; dropAnnotations(); for(ai=p.Annotations.begin();ai!=p.Annotations.end();ai++) { Annotations.push_back(*ai); global.annotator.link(*ai); } sidehint=p.sidehint; return(*this); } void Position::setPiece(int col,int row,piece p) { square[col%8][row%8]=p; } piece Position::getPiece(int col,int row) { return(square[col%8][row%8]); } void Position::addAnnotation(int id) { Annotations.push_back(id); global.annotator.link(id); } char * Position::getAnnotation() { list::iterator ai; if (Annotations.empty()) return 0; AnnotationBuffer[0]=0; for(ai=Annotations.begin();ai!=Annotations.end();ai++) strncat(AnnotationBuffer, global.annotator.get(*ai), 511); return(AnnotationBuffer); } void Position::clearAnnotation() { Annotations.clear(); } void Position::invalidate() { int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) square[i][j]++; } void Position::setLastMove(char *s) { LastMove=s; } void Position::setLastMove(string &s) { LastMove=s; } string & Position::getLastMove() { return(LastMove); } void Position::moveAnyNotation(char *m,piece color,variant Vr) { int i,x,y,ml; piece pr; char xlate[12]; global.debug("Position","moveAnyNotation",m); if (color==WHITE) sidehint=false; else sidehint=true; if (m[1]=='@') { switch(m[0]) { case 'Q': case 'q': pr=QUEEN; break; case 'R': case 'r': pr=ROOK; break; case 'B': case 'b': pr=BISHOP; break; case 'N': case 'n': pr=KNIGHT; break; case 'P': case 'p': pr=PAWN; break; case 'K': case 'k': pr=KING; break; default: return; } x=m[2]-'a'; y=m[3]-'1'; moveDrop(pr|color,x,y); return; } ml = strlen(m); if ( isupper(m[0]) || m[1]=='x' || m[2]=='x' || m[0]=='o' || ml==2 || ml == 3 || m[2]=='=' || ( ml >= 4 && ( m[3]=='+' || m[3]=='#' ) ) || (ml>=5 && m[4]=='=') ) { if (m[0]=='o') { // cope with o-o for castling (gnu chess 4) g_strlcpy(xlate,m,12); for(i=0;xlate[i];i++) xlate[i]=toupper(xlate[i]); moveStdNotation(xlate,color,Vr); } else moveStdNotation(m,color,Vr); } else { if (ml < 4) return; moveCartesian(m[0]-'a',m[1]-'1',x=(m[2]-'a'),y=(m[3]-'1'),Vr); if (m[4]!=0) { // promotion switch(m[4]) { case 'q': case 'Q': pr=QUEEN; break; case 'r': case 'R': pr=ROOK; break; case 'n': case 'N': pr=KNIGHT; break; case 'b': case 'B': pr=BISHOP; break; case 'k': case 'K': pr=KING; break; default: return; } square[x][y]=pr|color|WASPAWN; } } } void Position::moveStdNotation(char *m,piece color,variant Vr) { int from[2],to[2]; int istake, isdrop; piece what, prom; char *p; int cy; global.debug("Position","moveStdNotation",m); if (color==WHITE) sidehint=false; else sidehint=true; what=PAWN; from[0]=from[1]=to[0]=to[1]=-1; istake=0; isdrop=0; p=m; switch(*p) { case 'P': what=PAWN; p++; break; case 'N': what=KNIGHT; p++; break; case 'R': what=ROOK; p++; break; case 'B': what=BISHOP; p++; break; case 'K': what=KING; p++; break; case 'Q': what=QUEEN; p++; break; case 'O': cy=(color==BLACK)?7:0; if (!strncmp(m,"O-O-O",5)) { square[2][cy]=square[4][cy]; square[3][cy]=square[0][cy]; square[0][cy]=EMPTY; square[4][cy]=EMPTY; maycastle[color==BLACK?3:2]=false; return; } if (!strncmp(m,"O-O",3)) { square[6][cy]=square[4][cy]; square[5][cy]=square[7][cy]; square[7][cy]=EMPTY; square[4][cy]=EMPTY; maycastle[color==BLACK?1:0]=false; return; } cerr << "WHAT YOU SAY!!! (" << m << ")\n"; exit(8); } prom=EMPTY; for(;*p;p++) { if (*p=='x') { istake=1; continue; } if (*p=='@') { isdrop=1; continue; } if ( (*p >= 'a') && (*p <= 'h') ) { if (to[0]>=0) from[0]=to[0]; to[0]=*p-'a'; continue; } if ( (*p >= '1') && (*p <= '8') ) { if (to[1]>=0) from[1]=to[1]; to[1]=*p-'1'; continue; } // promotion. cope also with bad notation in PGNs (a8Q instead of a8=Q) if ( what==PAWN && to[1]%7 == 0 && strchr("=QqRrBbNnKk",*p) ) { if (*p == '=') ++p; switch(*p) { case 'Q': case 'q': prom=QUEEN; break; case 'R': case 'r': prom=ROOK; break; case 'B': case 'b': prom=BISHOP; break; case 'N': case 'n': prom=KNIGHT; break; case 'K': case 'k': prom=KING; break; } continue; } } // for if ((isdrop)&&(getStockCount(what|color))&& (to[0]>=0)&&(to[1]>=0)&&(square[to[0]][to[1]]==EMPTY)) { square[to[0]][to[1]]=what|color; decStockCount(what|color); return; } locate(what|color,from,to,istake,Vr); if ((from[0]<0)||(from[1]<0)) return; // stocked takes if (istake) if ((Vr==BUGHOUSE)||(Vr==CRAZYHOUSE)) if (square[to[0]][to[1]]!=EMPTY) incStockCount( square[to[0]][to[1]]^COLOR_MASK ); else if (what==PAWN) incStockCount( square[from[0]][from[1]] ); // en passant // en passant takes if ((istake)&&(square[to[0]][to[1]]==EMPTY)&&(what==PAWN)) { square[to[0]][to[1]+((color==WHITE)?-1:1)]=EMPTY; if (ep[0]>=0) ep[0]=-1; } square[to[0]][to[1]]=square[from[0]][from[1]]; square[from[0]][from[1]]=EMPTY; if (prom!=EMPTY) { square[to[0]][to[1]]&=COLOR_MASK; square[to[0]][to[1]]|=prom|WASPAWN; } // check whether kings and rooks moved if (IS_NOT_WILD(Vr) && (Vr!=SUICIDE)) checkCastlingPossibility(); // handle explosions in atomic if (Vr==ATOMIC && istake) makeAtomicExplosion(to[0],to[1]); } void Position::checkCastlingPossibility() { piece p; p=square[4][0]&CUTFLAGS; if (p!=(WHITE|KING)) maycastle[0]=maycastle[2]=false; p=square[4][7]&CUTFLAGS; if (p!=(BLACK|KING)) maycastle[1]=maycastle[3]=false; p=square[7][0]&CUTFLAGS; if (p!=(WHITE|ROOK)) maycastle[0]=false; p=square[7][7]&CUTFLAGS; if (p!=(BLACK|ROOK)) maycastle[1]=false; p=square[0][0]&CUTFLAGS; if (p!=(WHITE|ROOK)) maycastle[2]=false; p=square[0][7]&CUTFLAGS; if (p!=(BLACK|ROOK)) maycastle[3]=false; } void Position::locate(piece p,int *src,int *dest,int istake, variant Vr) { int minx,maxx,miny,maxy; int i,j,dc,dr,m,n; piece kind,color; int reject; #define RETURN_IF_LEGAL if (isMoveLegalCartesian(src[0],src[1],dest[0],dest[1],square[src[0]][src[1]]&COLOR_MASK,Vr)) { return; } else { break; } minx=0; maxx=7; miny=0; maxy=7; if (src[0]>=0) minx=maxx=src[0]; if (src[1]>=0) miny=maxy=src[1]; for(i=minx;i<=maxx;i++) for(j=miny;j<=maxy;j++) { if ((square[i][j]&CUTFLAGS)!=p) continue; kind=p&PIECE_MASK; color=p&COLOR_MASK; switch(kind) { case PAWN: if (istake) { if ( ((color==WHITE)&&((dest[1]-j)==1)&&(abs(dest[0]-i)==1)) || ((color==BLACK)&&((j-dest[1])==1)&&(abs(dest[0]-i)==1)) ) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } } else { if ( ((color==WHITE) && (i==dest[0]) && ((dest[1]-j)==1)) || ((color==WHITE) && (i==dest[0]) && ((dest[1]-j)==2)&&(j==1)) || ((color==BLACK) && (i==dest[0]) && ((j-dest[1])==1)) || ((color==BLACK) && (i==dest[0]) && ((j-dest[1])==2)&&(j==6)) ) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } } break; case KNIGHT: dc=abs(dest[0]-i); dr=abs(dest[1]-j); if ((dc<1)||(dc>2)) break; if ( (dc+dr) == 3 ) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } break; case BISHOP: dc=abs(dest[0]-i); dr=abs(dest[1]-j); if ((dc!=dr)||(dc==0)) break; dc=((dest[0]-i)>0) ? 1 : -1; dr=((dest[1]-j)>0) ? 1 : -1; reject=0; for(m=i+dc,n=j+dr;m!=dest[0];m+=dc,n+=dr) { if (square[m][n]!=EMPTY) { reject=1; break; } } if (!reject) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } break; case ROOK: dc=dest[0]-i; dr=dest[1]-j; if ((dc!=0)&&(dr!=0)) break; if (dc!=0) dc/=abs(dc); if (dr!=0) dr/=abs(dr); reject=0; for(m=i+dc,n=j+dr;(m!=dest[0] || n!=dest[1]);m+=dc,n+=dr) { if (square[m][n]!=EMPTY) { reject=1; break; } } if (!reject) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } break; case QUEEN: dc=dest[0]-i; dr=dest[1]-j; if ( (abs(dc)!=abs(dr)) && (dc!=0) && (dr!=0) ) break; if (dc!=0) dc/=abs(dc); if (dr!=0) dr/=abs(dr); reject=0; for(m=i+dc,n=j+dr;(m!=dest[0] || n!=dest[1]);m+=dc,n+=dr) { if (square[m][n]!=EMPTY) { reject=1; break; } } if (!reject) { src[0]=i; src[1]=j; RETURN_IF_LEGAL } break; case KING: dc=abs(dest[0]-i); dr=abs(dest[1]-j); if ((dc>1)||(dr>1)) break; src[0]=i; src[1]=j; RETURN_IF_LEGAL } // switch kind } // for j } // method void Position::moveDrop(piece p,int x2,int y2) { if (getStockCount(p)) { square[x2][y2]=p; decStockCount(p); if (ep[0]>=0) ep[0]=-1; } } void Position::moveCartesian(int x1,int y1,int x2,int y2, variant Vr, bool resolvepromotion) { piece color; int istake=0; color=square[x1][y1]&COLOR_MASK; if (color==WHITE) sidehint=false; else sidehint=true; // castling if ((x1==4)&&(x2==6)&&(!(y1%7))&&(!(y2%7))&& ( (square[x1][y1]&PIECE_MASK)==KING) ) { moveStdNotation("O-O",square[x1][y1]&COLOR_MASK); return; } if ((x1==4)&&(x2==2)&&(!(y1%7))&&(!(y2%7))&& ( (square[x1][y1]&PIECE_MASK) == KING)) { moveStdNotation("O-O-O",square[x1][y1]&COLOR_MASK); return; } // en passant (calling moveStdNotation for it would cause an infinite loop) if ( ( (square[x1][y1]&PIECE_MASK) == PAWN ) && (square[x2][y2]==EMPTY)&& (x1!=x2)) { square[x2][y2+((color==WHITE)?-1:1)]=EMPTY; if (ep[0]>=0) ep[0]=-1; istake = 1; } if ((Vr==BUGHOUSE)||(Vr==CRAZYHOUSE)) if (square[x2][y2]!=EMPTY) incStockCount( square[x2][y2]^COLOR_MASK ); // en passant if (((square[x1][y1]&PIECE_MASK)==PAWN)&&(abs(y2-y1)==2)) { ep[0]=x1; ep[1]=(y2+y1)/2; } else { if (ep[0]>=0) ep[0]=-1; } if (square[x2][y2] != EMPTY) istake=1; square[x2][y2]=square[x1][y1]; square[x1][y1]=EMPTY; // sometimes we don't want promotions solved by the GUI widget, // like when loading moves from a PGN file. In these cases, // lack of indication of the piece is a gross error in notation. if (resolvepromotion) { if ( ( (y2==0) && (square[x2][y2] == (PAWN|BLACK) ) ) || ( (y2==7) && (square[x2][y2] == (PAWN|WHITE) ) ) ) { square[x2][y2]&=COLOR_MASK; square[x2][y2]|=WASPAWN | global.promotion->getPiece(); } } if (IS_NOT_WILD(Vr) && (Vr!=SUICIDE)) checkCastlingPossibility(); // handle explosions in atomic if (Vr==ATOMIC && istake) makeAtomicExplosion(x2,y2); } /* does not test variant or if a capture actually occurred */ void Position::makeAtomicExplosion(int x,int y) { int i,j; square[x][y] = EMPTY; for(i=x-1;i<=x+1;i++) if (i>=0 && i<=7) for(j=y-1;j<=y+1;j++) if (j>=0 && j<=7) if ( (square[i][j] & PIECE_MASK) != PAWN) square[i][j] = EMPTY; } void Position::SANstring(char *src,char *dest) { int i,x1,y1,x2,y2; Position after; piece prom; global.debug("Position","SANstring",src); // piece dropping, capitalize piece letter if (src[1]=='@') { strcpy(dest,src); dest[0]=toupper(dest[0]); // FIXME: if the drop results in check, no '+' is added // here. problem: I don't have a way to know which side // is dropping. return; } // already SAN, just capitalize castling if needed if ( (isupper(src[0])) || (src[1]=='x') || (src[2]=='x') || (src[0]=='o') || (strlen(src)==2) || (src[2]=='=') || ((src[2]=='+' || src[2]=='#') && (strlen(src)==3)) ) { strcpy(dest,src); if (dest[0]=='o') for(i=0;dest[i];i++) dest[i]=toupper(dest[i]); return; } x1=src[0]-'a'; y1=src[1]-'1'; x2=src[2]-'a'; y2=src[3]-'1'; switch(src[4]) { case 'q': prom=QUEEN; break; case 'r': prom=ROOK; break; case 'n': prom=KNIGHT; break; case 'b': prom=BISHOP; break; case 'k': prom=KING; break; default: prom=EMPTY; } stdNotationForMove(x1,y1,x2,y2,prom,dest); } void Position::stdNotationForMove(int x1,int y1,int x2,int y2,piece prom,char *m,variant Vr) { Position after; stdNotationForMoveInternal(x1,y1,x2,y2,m); switch(prom) { case QUEEN: strcat(m,"=Q"); break; case ROOK: strcat(m,"=R"); break; case KNIGHT: strcat(m,"=N"); break; case BISHOP: strcat(m,"=B"); break; case KING: strcat(m,"=K"); break; } after=(*this); after.moveCartesian(x1,y1,x2,y2); if (prom!=EMPTY) { after.square[x2][y2]&=COLOR_MASK; after.square[x2][y2]|=prom|WASPAWN; } if ( after.isInCheck( (square[x1][y1]&COLOR_MASK) ^ COLOR_MASK ) ) if ( after.isMate((square[x1][y1]&COLOR_MASK) ^ COLOR_MASK, Vr ) ) strcat(m,"#"); else strcat(m,"+"); } void Position::stdNotationForMoveInternal(int x1,int y1,int x2,int y2,char *m) { vector ax,ay; int istake, hasamb,needrow,needcol; unsigned int i; piece p,c; char *z; memset(m,0,8); istake=(square[x2][y2]!=EMPTY); p=square[x1][y1]&PIECE_MASK; c=square[x1][y1]&COLOR_MASK; if ((p==KING)&&(c==WHITE)&&(y1==0)&&(y2==0)&&(x1==4)&&(x2==6)) { strcpy(m,"O-O"); return; } if ((p==KING)&&(c==WHITE)&&(y1==0)&&(y2==0)&&(x1==4)&&(x2==2)) { strcpy(m,"O-O-O"); return; } if ((p==KING)&&(c==BLACK)&&(y1==7)&&(y2==7)&&(x1==4)&&(x2==6)) { strcpy(m,"O-O"); return; } if ((p==KING)&&(c==BLACK)&&(y1==7)&&(y2==7)&&(x1==4)&&(x2==2)) { strcpy(m,"O-O-O"); return; } hasamb=needrow=needcol=0; ambiguityCheck(p,c,x2,y2,x1,y1,ax,ay); if (!ax.empty()) { hasamb=1; for(i=0;i &ambx,vector &amby) { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) { if ((i==exclx)&&(j==excly)) continue; if (square[i][j]==EMPTY) continue; if ((square[i][j]&COLOR_MASK)!=c) continue; if ((square[i][j]&PIECE_MASK)!=p) continue; if (canMove(p,c,i,j,destx,desty)) { ambx.push_back(i); amby.push_back(j); } } } } bool Position::canMove(piece p,piece c,int sx,int sy,int dx,int dy) { int dc,dr,m,n; // doesn't check castling! (but isMoveLegalCartesian() checks) if ((square[dx][dy]&COLOR_MASK)==c) return false; switch(p) { case PAWN: dc=dx-sx; dr=dy-sy; if (abs(dc)>1) return false; if (dc==0) { if (square[dx][dy]!=EMPTY) return false; // can't take ahead if ((c==WHITE)&&(dr==1)) return true; if ((c==BLACK)&&(dr==-1)) return true; if ((c==WHITE)&&(dr==2)&&(sy==1)&&(square[sx][2]==EMPTY)) return true; if ((c==BLACK)&&(dr==-2)&&(sy==6)&&(square[sx][5]==EMPTY)) return true; return false; } else { // e.p. if ( (c==WHITE)&&(sy==4)&&(square[dx][dy]==EMPTY)&& (square[dx][dy-1]==(PAWN|BLACK)) && (dr==1) ) { if (((ep[0]==dx)&&(ep[1]==dy))||(ep[0]==-2)) return true; else return false; } if ( (c==BLACK)&&(sy==3)&&(square[dx][dy]==EMPTY)&& (square[dx][dy+1]==(PAWN|WHITE)) && (dr==-1) ) { if (((ep[0]==dx)&&(ep[1]==dy))||(ep[0]==-2)) return true; else return false; } // normal take if ( (c==WHITE)&&(dr==1)&&(square[dx][dy]!=EMPTY) ) return true; if ( (c==BLACK)&&(dr==-1)&&(square[dx][dy]!=EMPTY) ) return true; return false; } case ROOK: if ((sx!=dx)&&(sy!=dy)) return false; dc=dx-sx; dr=dy-sy; if (dc) dc/=abs(dc); if (dr) dr/=abs(dr); for(m=sx+dc,n=sy+dr;((m!=dx)||(n!=dy));m+=dc,n+=dr) if (square[m][n]!=EMPTY) return false; return true; case KNIGHT: dc=dx-sx; dr=dy-sy; dc=abs(dc); dr=abs(dr); if ((dc==0) || (dr==0) || ( (dr+dc)!=3 ) ) return false; return true; case BISHOP: dc=dx-sx; dr=dy-sy; if (abs(dc)!=abs(dr)) return false; if (dc) dc/=abs(dc); if (dr) dr/=abs(dr); for(m=sx+dc,n=sy+dr;((m!=dx)||(n!=dy));m+=dc,n+=dr) if (square[m][n]!=EMPTY) return false; return true; case QUEEN: dc=dx-sx; dr=dy-sy; if ( (dc!=0)&&(dr!=0)&& ( abs(dc)!=abs(dr) ) ) return false; if (dc) dc/=abs(dc); if (dr) dr/=abs(dr); for(m=sx+dc,n=sy+dr;((m!=dx)||(n!=dy));m+=dc,n+=dr) if (square[m][n]!=EMPTY) return false; return true; case KING: dc=dx-sx; dr=dy-sy; if ((abs(dc)>1)||(abs(dr)>1)) return false; return true; } return false; } void Position::print() { int i,j; cerr << "+---+---+---+---+---+---+---+---+\n"; for(i=7;i>=0;i--) { cerr << "|"; for(j=0;j<8;j++) { cerr << " "; switch(square[j][i]&CUTFLAGS) { case PAWN|WHITE: cerr << "P"; break; case ROOK|WHITE: cerr << "R"; break; case KNIGHT|WHITE: cerr << "N"; break; case BISHOP|WHITE: cerr << "B"; break; case QUEEN|WHITE: cerr << "Q"; break; case KING|WHITE: cerr << "K"; break; case PAWN|BLACK: cerr << "p"; break; case ROOK|BLACK: cerr << "r"; break; case KNIGHT|BLACK: cerr << "n"; break; case BISHOP|BLACK: cerr << "b"; break; case QUEEN|BLACK: cerr << "q"; break; case KING|BLACK: cerr << "k"; break; default: cerr << " "; } cerr << " |"; } cerr << "\n+---+---+---+---+---+---+---+---+\n"; } cerr << endl; cerr << "stock = "; for(i=0;i<2;i++) for(j=0;j<5;j++) cerr << House[j][i] << " "; cerr << endl; } /* find the diff from current position to np */ void Position::diff(Position &np,vector &sl) { bool sieve[64]; unsigned int ui; int i,j,pend,pi=0,qi=0; int sx=0,sy=0,dx=0,dy=0; piece p; // clear output vector for(ui=0;ui 1) { dx = -1; for(i=0;i<64;i++) if (sieve[i] && np.getPiece(i/8,i%8)!=EMPTY && getPiece(i/8,i%8)==EMPTY) { dx = i/8; dy = i%8; pi = i; break; } // no plain moves left, consider captures if (dx<0) { for(i=0;i<64;i++) if (sieve[i] && np.getPiece(i/8,i%8)!=EMPTY && getPiece(i/8,i%8)!=EMPTY) { dx = i/8; dy = i%8; pi = i; break; } } if (dx<0) return; // I don't know what to do, bail out. shouldn't ever happen p = np.getPiece(dx,dy); sx = -1; for(i=0;i<64;i++) if (sieve[i] && i!=pi && getPiece(i/8,i%8)==p) { sx = i/8; sy = i%8; qi = i; break; } // promotion ? (WASPAWN can't be checked, FICS positions won't have it) if (sx < 0 && ((p&WHITE && dy==7) || (p&BLACK && dy==0))) { p = PAWN | (p&COLOR_MASK); for(i=0;i<64;i++) if (sieve[i] && i!=pi && getPiece(i/8,i%8)==p) { sx = i/8; sy = i%8; qi = i; break; } } // unable to match (?,?)@this -> (dx,dy)@np // (will happen on crazyhouse drops, for example) if (sx < 0) { sieve[pi] = false; --pend; } else { sl.push_back(new SMove(p, sx,sy, dx,dy)); sieve[pi] = sieve[qi] = false; pend -= 2; } // and since we always decrement pend, we can ensure that this // loop finishes } } void Position::intersection(Position &b) { int i,j; // this = current pos // b = previous for(i=0;i<8;i++) for(j=0;j<8;j++) { if (b.square[i][j]==EMPTY) { square[i][j]=EMPTY; // remove piece that moved continue; } if ((b.square[i][j]!=EMPTY)&&(square[i][j]!=EMPTY)) { square[i][j]=b.square[i][j]; // keep taken piece continue; } } } string & Position::getHouseString() { // [PPPNNB] - [NBQ] int i,j,e=1; static char xlate[6]="PRNBQ"; HouseString.erase(); for(i=0;i<5;i++) for(j=0;j<2;j++) if (House[i][j]) { e=0; break; } if (e) return(HouseString); HouseString+='['; for(i=0;i<5;i++) for(j=0;j0) v=1; } if ((square[i][j]&COLOR_MASK)==WHITE) w+=v; else b+=v; } snprintf(tmp,64,_("Material: %d - %d"),w,b); MaterialString=tmp; return(MaterialString); } int Position::getStockCount(piece p) { int i; piece k,c; k=p&PIECE_MASK; c=p&COLOR_MASK; switch(k) { case PAWN: i=0; break; case ROOK: i=1; break; case KNIGHT: i=2; break; case BISHOP: i=3; break; case QUEEN: i=4; break; default: return 0; } return(House[i][c==WHITE?0:1]); } void Position::clearStock() { int i,j; for(i=0;i<5;i++) for(j=0;j<2;j++) House[i][j]=0; } void Position::incStockCount(piece p) { int i; piece k,c; k=p&PIECE_MASK; c=p&COLOR_MASK; if (p&WASPAWN) k=PAWN; switch(k) { case PAWN: i=0; break; case ROOK: i=1; break; case KNIGHT: i=2; break; case BISHOP: i=3; break; case QUEEN: i=4; break; default: return; } House[i][c==WHITE?0:1]++; /* for(i=0;i<5;i++) for(int j=0;j<2;j++) cerr << House[i][j] << ","; cerr << endl; */ } void Position::decStockCount(piece p) { int i; piece k,c; k=p&PIECE_MASK; c=p&COLOR_MASK; switch(k) { case PAWN: i=0; break; case ROOK: i=1; break; case KNIGHT: i=2; break; case BISHOP: i=3; break; case QUEEN: i=4; break; default: return; } if (House[i][c==WHITE?0:1]) House[i][c==WHITE?0:1]--; } // legality checking bool Position::isMoveLegalCartesian(int x0,int y0,int x1,int y1,piece mycolor,variant vari) { Position after; int dx; // cerr << "mycolor = " << mycolor << endl; // basic sanity checks if (square[x0][y0]==EMPTY) return false; if ((square[x0][y0]&COLOR_MASK)!=mycolor) return false; if ((square[x1][y1]&COLOR_MASK)==mycolor) return false; if (vari == ATOMIC) return true; // castling if ((square[x0][y0]&PIECE_MASK)==KING) { dx=abs(x0-x1); if (dx>1) { if ((mycolor==WHITE)&&((y0!=y1)||(y0!=0))) return false; if ((mycolor==BLACK)&&((y0!=y1)||(y0!=7))) return false; if (vari==WILD || vari==WILDFR || vari==WILDCASTLE) return true; // wild castling accepted always if (vari==SUICIDE) return false; // suicide can't castle if (vari==WILDNOCASTLE) return false; // nocastle shuffle chess if (dx!=2) return false; if ((x0==4)&&(x1==6)&&(maycastle[mycolor==WHITE?0:1])) if ((square[5][y0]==EMPTY)&&(square[6][y0]==EMPTY)) return (!( (isSquareInCheck(4,y0,mycolor,vari)) || (isSquareInCheck(5,y0,mycolor,vari)) || (isSquareInCheck(6,y0,mycolor,vari)) ) ); if ((x0==4)&&(x1==2)&&(maycastle[mycolor==WHITE?2:3])) if ((square[1][y0]==EMPTY)&&(square[2][y0]==EMPTY)&&(square[3][y0]==EMPTY)) return (!( (isSquareInCheck(4,y0,mycolor,vari)) || (isSquareInCheck(3,y0,mycolor,vari)) || (isSquareInCheck(2,y0,mycolor,vari)) ) ); return false; } } // not checked for these if ((vari==SUICIDE)||(vari==GIVEAWAY)||(vari==LOSERS)) return true; if (!canMove(square[x0][y0]&PIECE_MASK,mycolor,x0,y0,x1,y1)) return false; after=(*this); after.moveCartesian(x0,y0,x1,y1); if (after.isInCheck(mycolor,vari)) return false; return true; } bool Position::isDropLegal(piece p,int x1,int y1,piece mycolor,variant vari) { Position after; if ((vari!=CRAZYHOUSE)&&(vari!=BUGHOUSE)) return false; if (square[x1][y1]!=EMPTY) return false; after=(*this); after.square[x1][y1]=p|mycolor; if (after.isInCheck(mycolor,vari)) return false; return true; } // dc = defender color bool Position::isSquareInCheck(int x,int y,piece dc,variant Vr) { int i,j; // cerr << "is square in check " << (char)('a'+x) << (y+1) << " "; // cerr << "color = " << dc << endl; // FIXME: check rules for giveaway and losers variants if (Vr==SUICIDE) return false; for(i=0;i<8;i++) for(j=0;j<8;j++) { if (square[i][j]==EMPTY) continue; if ((square[i][j]&COLOR_MASK) == dc) continue; // cerr << "i=" << i << " j=" << j << " "; // cerr << "value = " << square[i][j] << endl; // cerr << "color = " << (square[i][j]&COLOR_MASK) << endl; if (canMove(square[i][j]&PIECE_MASK,dc^COLOR_MASK, i,j,x,y)) { // cerr << "yes from " << (char)('a'+i) << j << endl; return true; } } // cerr << "no" << endl; return false; } bool Position::isInCheck(piece c,variant Vr) { int i,j,kx,ky=0; // FIXME: check rules for giveaway and losers variants if (Vr==SUICIDE) return false; kx=-1; for(i=0;i<8;i++) for(j=0;j<8;j++) if (square[i][j]==(KING|c)) { kx=i; ky=j; i=8; j=8; break; } if (kx<0) return false; return(isSquareInCheck(kx,ky,c,Vr)); } bool Position::isMate(piece c,variant Vr) { int i,j,m,n; Position after; if (Vr!=REGULAR) return false; if (!isInCheck(c,Vr)) return false; for(i=0;i<8;i++) for(j=0;j<8;j++) for(m=0;m<8;m++) for(n=0;n<8;n++) { if ((m==i)&&(n==j)) continue; if ((square[i][j]&COLOR_MASK)!=c) continue; if ((square[m][n]&COLOR_MASK)==c) continue; if (!isMoveLegalCartesian(i,j,m,n,c,Vr)) continue; after=(*this); after.moveCartesian(i,j,m,n,Vr); if (!after.isInCheck(c,Vr)) return false; } return true; } bool Position::isStalemate(piece c,variant Vr) { int i,j,m,n; Position after; if (Vr!=REGULAR) return false; if (isInCheck(c,Vr)) return false; for(i=0;i<8;i++) for(j=0;j<8;j++) for(m=0;m<8;m++) for(n=0;n<8;n++) { if ((m==i)&&(n==j)) continue; if ((square[i][j]&COLOR_MASK)!=c) continue; if ((square[m][n]&COLOR_MASK)==c) continue; if (!isMoveLegalCartesian(i,j,m,n,c,Vr)) continue; after=(*this); after.moveCartesian(i,j,m,n,Vr); if (!after.isInCheck(c,Vr)) return false; /* found a legal move, no stalemate */ } return true; } /* draw situations recognized : K vs K K vs KN K vs KB */ bool Position::isNMDraw(variant Vr) { int n,b; int i,j; piece p; if (Vr!=REGULAR) return false; n=b=0; for(i=0;i<8;i++) for(j=0;j<8;j++) { p = square[i][j] & PIECE_MASK; if (p==QUEEN || p==ROOK || p==PAWN) return false; if (p==BISHOP) ++b; if (p==KNIGHT) ++n; if ( (b+n) > 1 ) return false; } return true; } // FEN string & Position::getFEN() { static string fen; int i,j,ec; piece p,c=EMPTY; char n=0; fen="\0"; for(i=7;i>=0;i--) { ec=0; for(j=0;j<8;j++) { p=square[j][i]&PIECE_MASK; c=square[j][i]&COLOR_MASK; if ((p!=EMPTY)&&(ec)) { fen+=(char)('0'+ec); ec=0; } switch(p) { case PAWN: n='P'; break; case ROOK: n='R'; break; case KNIGHT: n='N'; break; case BISHOP: n='B'; break; case QUEEN: n='Q'; break; case KING: n='K'; break; case EMPTY: ++ec; n=0; break; } if (n) { if (c==BLACK) n=(char)tolower(n); fen+=n; } } if (ec) fen+=(char)('0'+ec); if (i>0) fen+='/'; } if (sidehint) fen+=" w "; else fen+=" b "; ec=0; if (maycastle[0]) { fen+="K"; ++ec; } if (maycastle[2]) { fen+="Q"; ++ec; } if (maycastle[1]) { fen+="k"; ++ec; } if (maycastle[3]) { fen+="q"; ++ec; } if (!ec) fen+="-"; fen+=" "; if (ep[0]>=0) { fen+='a'+ep[0]; fen+='1'+ep[1]; } else { fen+='-'; } fen+=" "; fen+="0 1"; return(fen); } void Position::setFEN(const char *fen) { int c,r; const char *p; char z,u; piece pp; for(c=0;c<8;c++) for(r=0;r<8;r++) square[c][r]=EMPTY; p=fen; while(*p==' ') ++p; if (! *p) return; c=0; r=7; for(;(*p)!=' ';p++) { z=*p; if (z==0) return; if (z=='/') { c=0; r--; continue; } if (isdigit(z)) { c+=z-0x30; continue; } u=(char)toupper(z); switch(u) { case 'P': pp=PAWN; break; case 'R': pp=ROOK; break; case 'N': pp=KNIGHT; break; case 'B': pp=BISHOP; break; case 'Q': pp=QUEEN; break; case 'K': pp=KING; break; default: pp=EMPTY; } if (pp==EMPTY) continue; if (z==u) pp|=WHITE; else pp|=BLACK; square[c++][r]=pp; } if (strlen(p)<2) return; while(*p==' ') ++p; if (! *p) return; if (toupper(*p) == 'W') sidehint=true; else sidehint=false; while(*p==' ') ++p; if (! *p) return; for(c=0;c<4;c++) maycastle[c]=false; if ((*p)!='-') { for(;*p!=' ';p++) { switch(*p) { case 'K': maycastle[0]=true; break; case 'Q': maycastle[2]=true; break; case 'k': maycastle[1]=true; break; case 'q': maycastle[3]=true; break; case 0: return; } } } else ++p; if (strlen(p)<2) return; ++p; ep[0]=-1; if ((*p)!='-') { ep[0]=(*p++)-'a'; ep[1]=(*p)-'1'; } } eboard-1.1.1.orig/widgetproxy.h0000644000175000017500000001304010757567572016034 0ustar patrikpatrik/* $Id: widgetproxy.h,v 1.28 2007/02/05 19:37:56 bergo Exp $ */ /* eboard - chess client http://eboard.sourceforge.net Copyright (C) 2000-2007 Felipe Paulo Guazzi Bergo bergo@seul.org 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 2 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WIDGET_PROXY_H #define WIDGET_PROXY_H #include #include "eboard.h" #include "stl.h" class WindowGeometry; class WidgetProxy { public: WidgetProxy(); virtual void show(); virtual void hide(); virtual void repaint(); void setIcon(char **xpmdata,const char *text); void restorePosition(WindowGeometry *wg); GtkWidget * PixButton(char **xpmicon, char *caption); GtkWidget * scrollBox(GtkWidget *child); GtkWidget *widget; }; class BoxedLabel : public WidgetProxy { public: BoxedLabel(char *text); void setText(char *msg); private: GtkWidget *label; }; class ModalDialog : public WidgetProxy { public: ModalDialog(char *title); virtual ~ModalDialog(); virtual void show(); void setDismiss(GtkObject *obj,char *sig); void setCloseable(bool v); void release(); virtual void releaseWithoutDelete(); GtkWidget *focused_widget; friend void modal_release(GtkWidget *w,gpointer data); friend gint modal_closereq(GtkWidget * widget, GdkEvent * event, gpointer data); private: bool closeable; }; void modal_release(GtkWidget *w,gpointer data); gint modal_closereq(GtkWidget * widget, GdkEvent * event, gpointer data); class NonModalDialog : public ModalDialog { public: NonModalDialog(char *title); ~NonModalDialog(); virtual void show(); virtual void releaseWithoutDelete(); }; class UnboundedProgressWindow : public WidgetProxy { public: UnboundedProgressWindow(const char *_templ); virtual ~UnboundedProgressWindow(); void setProgress(int v); private: const char *templ; GtkWidget *label; }; class UpdateNotify { public: virtual void update()=0; }; class ColorButton : public WidgetProxy { public: ColorButton(char *caption, int value); void hookNotify(UpdateNotify *listen); void setColor(int value); int getColor(); private: void updateButtonFace(); friend void colorb_click(GtkWidget *b,gpointer data); friend void colorb_csok(GtkWidget *b,gpointer data); int ColorValue; GtkWidget *colordlg, *label; UpdateNotify * notified; }; void colorb_click(GtkWidget *b,gpointer data); void colorb_csok(GtkWidget *b,gpointer data); class TextPreview : public WidgetProxy, public UpdateNotify { public: TextPreview(GdkWindow *wnd, ColorButton *_bg); virtual ~TextPreview(); void attach(ColorButton *cb, const char *sample); void freeze(); void thaw(); void update(); private: ColorButton *bg; GdkPixmap *pixmap; bool frozen, pending; vector colors; vector examples; PangoLayout *pl; PangoFontDescription *pfd; friend gboolean preview_expose(GtkWidget *widget,GdkEventExpose *ee, gpointer data); }; gboolean preview_expose(GtkWidget *widget,GdkEventExpose *ee, gpointer data); class FileDialog : public WidgetProxy { public: FileDialog(char *title); virtual ~FileDialog(); bool run(); char FileName[128]; private: bool gotresult; bool destroyed; friend void filedlg_ok (GtkWidget * w, gpointer data); friend void filedlg_destroy (GtkWidget * w, gpointer data); }; void filedlg_ok (GtkWidget * w, gpointer data); void filedlg_destroy (GtkWidget * w, gpointer data); class LayoutBox { public: LayoutBox(); virtual ~LayoutBox(); void prepare(GtkWidget *w, GdkPixmap *t, GdkGC *gc, int a, int b, int c,int d); void setFont(int i,const char *fontname); void setColor(int c); void drawRect(int x,int y,int w,int h,bool fill); void drawLine(int x,int y,int w,int h); void drawEllipse(int x,int y,int w,int h,bool fill); void drawString(int x,int y, int f, const char *s); void drawString(int x,int y, int f, string &s); void drawSubstring(int x,int y, int f, const char *s,int len); int drawButton(int x,int y,int w,int h, char *s,int font, int fg,int bg); int stringWidth(int f,const char *s); int substringWidth(int f,const char *s,int len); int fontHeight(int f); bool drawBoxedString(int x,int y,int w,int h,int f,char *s,char *sep); bool prepared(); void consumeTop(int v); void consumeBottom(int v); int X,Y,W,H; GdkPixmap * Target; GdkGC * GC; private: PangoFontDescription *pfd[5]; PangoLayout *pl; }; class DropBox : public WidgetProxy { public: DropBox(char *option, ...); virtual ~DropBox(); int getSelection(); void setSelection(int i); void setUpdateListener(UpdateInterface *ui); private: int selection; vector options; UpdateInterface *listener; friend void dropbox_select(GtkWidget *w, gpointer data); }; void dropbox_select(GtkWidget *w, gpointer data); /* some gtk helpers */ namespace Gtk { // call gtk_widget_show for a bunch of widgets void show(GtkWidget *w, ...); } #endif eboard-1.1.1.orig/spiral2.xpm0000644000175000017500000000254310757567572015406 0ustar patrikpatrik/* XPM */ static char * spiral2_xpm[] = { "16 16 67 1", " c None", ". c #000000", "+ c #9D9D9D", "@ c #1D1D1D", "# c #6E6E6E", "$ c #C5C5C5", "% c #8A8A8A", "& c #E5E5E5", "* c #F1F1F1", "= c #5F5F5F", "- c #898989", "; c #4B4B4B", "> c #212121", ", c #E2E2E2", "' c #E6E6E6", ") c #878686", "! c #8A2F18", "~ c #888686", "{ c #E7E6E6", "] c #313131", "^ c #111111", "/ c #531C0E", "( c #40150B", "_ c #946237", ": c #714A28", "< c #93321A", "[ c #591E0F", "} c #752A17", "| c #822C17", "1 c #050101", "2 c #462E29", "3 c #1C0904", "4 c #452E28", "5 c #060201", "6 c #020202", "7 c #0C0402", "8 c #8B8B8B", "9 c #D6D6D6", "0 c #5B5B5B", "a c #6D2513", "b c #D5D5D5", "c c #060606", "d c #919191", "e c #737373", "f c #DCDCDC", "g c #ABABAB", "h c #383838", "i c #5B1E10", "j c #444444", "k c #E7E7E7", "l c #242424", "m c #482F1A", "n c #39130A", "o c #232323", "p c #311008", "q c #2C2C2C", "r c #EAEAEA", "s c #40221A", "t c #E9E9E9", "u c #2E2E2E", "v c #100502", "w c #903119", "x c #913119", "y c #140D07", "z c #BA7A43", "A c #7E2B16", "B c #39140A", " .. .. ", " .+@ @+. ", " .#$. .$#. ", " .%&*=...=*&-. ", " .;>,')!~{,>;. ", " .]-^/^-]. ", " .(_:<[}. ", " .|123<345. ", " 67890a0b8. ", " cdefghihgfedc ", " .j,klm