xboard-4.8.0/0000755000175000001440000000000012422467104010001 500000000000000xboard-4.8.0/po/0000755000175000001440000000000012422467104010417 500000000000000xboard-4.8.0/po/uk.po0000644000175000001440000026175512422467103011335 00000000000000# Ukrainian translation for xboard. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the xboard package. # # Yuri Chornoivan , 2011, 2012, 2013, 2014. msgid "" msgstr "" "Project-Id-Version: GNU xboard-4.8.0-pre1\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2014-09-30 22:13+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "%s у файлі параметрів\n" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Помилкове ціле значення %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Невідомий аргумент %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "Не вказано значення для аргументу %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Неповне екранування \\ у значенні для %s" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Не вдалося відкрити файл переспрямування %s" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Невідоме значення булевого аргументу %s" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "перший" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "другий" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "підтримки версії протоколу %d не передбачено" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "Вами не вказано виконуваного файла рушія" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "помилковий параметр timeControl %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "помилковий параметр searchTime %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Підтримку варіанта %s передбачено лише у режимі ICS" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Невідома назва варіанта %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Запуск шахової програми" #: backend.c:1475 msgid "Bad game file" msgstr "Помилковий файл гри" #: backend.c:1482 msgid "Bad position file" msgstr "Помилковий файл позиції" #: backend.c:1496 msgid "Pick new game" msgstr "Виберіть нову гру" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "Вами перезапущено вже завершений турнір.\n" "Тепер до турніру буде додано ще одне коло.\n" "Ігри розпочнуться за 10 секунд." #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "Всі ігри турніру «%s» вже зіграно або вже розпочато" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Не можна розпочати матч, якщо не встановлено шахових програм" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Не вдалося відкрити порт comm %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Не вдалося з’єднатися з вузлом %s, порт %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Невідоме значення initialMode %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "У режимі аналізу файла потрібен файл гри" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "У режимі аналізу потрібен шаховий рушій" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Робота режиму разом з режимом ICS неможлива" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "У режимі гри комп’ютера білими потрібен шаховий рушій" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "Робота режиму гри комп’ютером білими разом з режимом ICS неможлива" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "У режимі гри комп’ютера чорними потрібен шаховий рушій" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "Робота режиму гри комп’ютером білими разом з режимом ICS неможлива" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "" "Режимом гри між двома комп’ютерами можна скористатися, лише якщо встановлено " "шаховий рушій" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "Робота режиму гри між двома комп’ютерами разом з режимом ICS неможлива" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "У режимі тренування потрібен файл гри" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Помилка під час спроби запису до ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Помилка під час читання даних з клавіатури" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Отримано символ кінця файла з клавіатури" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Невідомий «дикий» тип %d" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Помилка запису на дисплей" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "втручання вашого суперника: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Помилка під час збирання списку ходів: два заголовки" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Помилка під час збирання списку ходів: вкладеність" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "проти" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "Некоректний хід (заборонено ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "З’єднання розірвано з боку ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Помилка під час спроби читання з ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Не вдалося обробити рядок дошки:\n" "\"%s\"" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" "Гра є занадто довгою. Збільшіть значення MAX_MOVES і перезберіть програму." #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Помилка під час збирання списку ходів: вихід за межі дошки" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Не вдалося обробити хід «%s» з ICS" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say Internal error; bad moveType %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "Ця дія неможлива у режимі гри або спостереження" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" "Повторно зберіть програму з підтримкою цих значень BOARD_RANKS і BOARD_FILES!" #: backend.c:6700 msgid "You are playing Black" msgstr "Ви граєте чорними" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Ви граєте білими" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Хід білих" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Хід чорних" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Показана позиція не є поточною" #: backend.c:7007 msgid "Illegal move" msgstr "Недозволений хід" #: backend.c:7084 msgid "End of game" msgstr "Кінець гри" #: backend.c:7087 msgid "Incorrect move" msgstr "Некоректний хід" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Потягніть пішака назад, щоб знизити ранг фігури" #: backend.c:7588 msgid "only marked squares are legal" msgstr "правилами дозволено лише позначені клітинки" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Турнір за швейцарською системою завершено" #: backend.c:8392 msgid "could not load EGBB library" msgstr "не вдалося завантажити бібліотеку EGBB" #: backend.c:8395 msgid "wrong EGBB version" msgstr "помилкова версія EGBB" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "Рушієм визначення пар повернуто некоректне значення пари" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Некоректний хід «%s» від комп’ютера %s" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "Отримано помилкові дані FEN від рушія" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "Рушієм не надіслано налаштувань для нестандартного варіанта" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "У %s не передбачено аналізу" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "" "Недозволений хід «%s» (у реєстрації ходу відмовлено шаховою програмою %s)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Не вдалося запустити шахову програму %s %s на %s: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Підказка: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "Некоректна підказка щодо ходу «%s»\n" "від шахової програми %s" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Ком’ютер погодився з вашою пропозицією нічиєї" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "Комп’ютером запропоновано нічию\n" "Скористайтеся пунктом меню «Дія->Нічия», щоб погодитися." #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "не вдалося записати PV" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Неоднозначний хід у виведених ICS даних: «%s»" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Некоректний хід у виведених даних ICS: «%s»" #: backend.c:9809 msgid "Gap in move list" msgstr "Пропущено хід у списку ходів" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Варіант %s не підтримується %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr ", але %s" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Помилка запуску на «%s»" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Очікування на запуск першої шахової програми" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Очікування на запуск другої шахової програми" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "Не вдалося виконати запис до файла турніру" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "Не можна міняти рушій, який зараз використовується!\n" "Спочатку перервіть гру." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "Рушія з вказаною вами назвою не встановлено" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Спочатку змініть рушій редагуванням списку учасників турніру\n" "у діалоговому вікні «Параметри турніру»" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "Одночасно змінювати можна лише один рушій" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "Не встановлено жодного рушія %s" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "Для запису результатів турніру\n" "вам слід вказати файл турніру." #: backend.c:10837 msgid "Not enough participants" msgstr "Недостатньо учасників" #: backend.c:11040 msgid "Bad tournament file" msgstr "Помилковий файл турніру" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Очікування на результати інших ігор" #: backend.c:11065 msgid "No pairing engine specified" msgstr "Не вказано рушія визначення пар" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Матч між %s і %s: остаточний рахунок — %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Недозволений хід: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Неоднозначний хід: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Не вдалося відкрити «%s»" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Не вдалося побудувати список ігор" #: backend.c:12190 msgid "No more games in this message" msgstr "У цьому повідомленні більше немає результатів ігор" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Ще не завантажено жодної гри" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Подальше створення резервних копій неможливе" #: backend.c:12678 msgid "Game number out of range" msgstr "Номер гри поза доступним діапазоном" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Пошук у файлі гри неможливий" #: backend.c:12747 msgid "Game not found in file" msgstr "У файлі немає даних щодо гри" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Помилкова позиція FEN у файлі" #: backend.c:13030 msgid "No moves in game" msgstr "У записі гри немає жодного ходу" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Жодної з позицій ще не завантажено" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Пошук у файлі позицій неможливий" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "У файлі не знайдено позиції" #: backend.c:13245 msgid "Black to play" msgstr "Хід чорних" #: backend.c:13248 msgid "White to play" msgstr "Хід білих" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Очікування на доступ до можливості збереження файла" #: backend.c:13337 msgid "Saving game" msgstr "Збереження гри" #: backend.c:13338 msgid "Bad Seek" msgstr "Помилкове позиціювання" #: backend.c:13707 msgid "Saving position" msgstr "Збереження позиції" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "Вами внесено зміни до журналу гри.\n" "Скористайтеся пунктом «Перезавантажити гру» і повторіть ваш хід." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "Вами введено занадто багато ходів.\n" "Поверніться до правильної позиції і повторіть спробу." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "Показана позиція не є поточною.\n" "Продовжіть гру, щоб виправити позицію і повторіть спробу." #: backend.c:13890 msgid "You have not made a move yet" msgstr "Вами ще не зроблено жодного ходу" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "Повідомлення cmail не завантажено.\n" "Скористайтеся пунктом «Перезавантажити повідомлення CMail» і повторіть ваш " "хід." #: backend.c:13916 msgid "No unfinished games" msgstr "Немає незавершених ігор" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "Ви вже надіслали хід поштою.\n" "Зачекайте, доки буде отримано хід від вашого суперника.\n" "Щоб повторно надіслати той самий хід, віддайте команду\n" "\"cmail -remail -game %s\"\n" "у командному рядку." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Не вдалося викликати cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Очікування на відповідь від суперника\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Слід зробити хід у грі\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Слід зробити ходити у обох іграх\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Слід зробити ходити у всіх %d іграх\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Слід зробити хід у грі %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Немає незавершених ігор\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Програма готова до надсилання пошти\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Слід зробити ходи у іграх %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Редагувати коментар" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Змінити коментар щодо %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "Ви не спостерігаєте за грою" #: backend.c:14420 msgid "It is not White's turn" msgstr "Зараз хід чорних" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Зараз хід білих" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Запуск шахової програми %s" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Зачекайте на ваш хід або\n" "виберіть пункт «Ходити»." #: backend.c:14774 msgid "Training mode off" msgstr "Режим тренування вимкнено" #: backend.c:14782 msgid "Training mode on" msgstr "Режим тренування увімкнено" #: backend.c:14785 msgid "Already at end of game" msgstr "Гру вже завершено" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Попередження: гра ще триває" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Попередження: ви ще продовжуєте спостерігати за грою" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Попередження: ви ще вивчаєте гру" #: backend.c:14938 msgid "Click clock to clear board" msgstr "Клацніть на годиннику, щоб спорожнити дошку" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Завершити процес аналізу рушія ICS…" #: backend.c:15268 msgid "That square is occupied" msgstr "Цю клітинку зайнято" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "У черзі немає пропозицій щодо цього ходу" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "У вашого суперника ще залишився час" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Перш ніж запропонувати нічию, вам слід зробити хід" #: backend.c:15781 msgid "You are not examining a game" msgstr "Ви не вивчаєте гру" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Скасовувати ходи у призупиненій грі не можна" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Ваш хід" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "Очікувати на ваш хід." #: backend.c:15909 msgid "No hint available" msgstr "Немає підказки" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "Список гри не завантажено або цей список є порожнім" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "Файл книги вже існує! Повторіть спробу, щоб перезаписати його." #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Помилка під час спроби запису даних до шахової програми %s" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "Програма %s завершила роботу у нічийній позиції (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Помилка: шахова програма %s (%s) несподівано завершила роботу" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Помилка під час спроби читання даних з шахової програми %s (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "Для рушія %s передбачено занадто багато параметрів\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Показаний хід не є поточним" #: backend.c:17083 msgid "Could not parse move" msgstr "Не вдалося обробити хід" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Обидва прапорці впали" #: backend.c:17210 msgid "White's flag fell" msgstr "Прапорець білих впав" #: backend.c:17232 msgid "Black's flag fell" msgstr "Прапорець чорних впав" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "Коригування годинника у режимі автоматичних прапорців заборонене" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Помилкова позиція FEN у буфері обміну" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "Некоректна бібліотека позицій" #: book.c:703 msgid "Book Fault" msgstr "Помилка бібліотеки позицій" #: book.c:839 msgid "Hash keys are different" msgstr "Ключі хешів не збігаються" #: book.c:1015 msgid "Could not create book" msgstr "Не вдалося створити книгу" #: dialogs.c:283 msgid "Tournament file: " msgstr "Файл турніру: " #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "Для сумісної турнірної гри з декількома XBoard:" #: dialogs.c:285 msgid "Sync after round" msgstr "Синхронізувати після рауду" #: dialogs.c:286 msgid "Sync after cycle" msgstr "Синхронізувати після кола" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Учасники турніру:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Виберіть рушій:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Система турніру (0 = кругова, 1 = почергова):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Кількість кіл турніру (швейцарських раундів):" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "Типова кількість ігор у матчі:" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Проміжок між іграми у матчі (у мілісекундах):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Зберігати ігри турніру до:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "Файл гри з початковими рядками:" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "Номер гри (-1 або -2 = автоматичне збільшення):" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Файл з початковими позиціями:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "Номер позиції (-1 або -2 = автоматичне збільшення):" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" "Відновлювати початковий номер після вказаної кількості ігор (0=ніколи):" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "Типово вимкнути власні бібліотеки позицій рушія" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Керування часом" #: dialogs.c:308 msgid "Common Engine" msgstr "Загальний рушій" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Загальні параметри" #: dialogs.c:310 msgid "Continue Later" msgstr "Продовжити пізніше" #: dialogs.c:311 msgid "Replace Engine" msgstr "Замінити рушій" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Оновити рушій" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Клонувати турнір" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "Спочатку вам слід вказати вже створений файл турніру для клонування" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "# не встановлено жодного рушія" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "Внутрішня помилка: встановлено помилкове значення PARTICIPANTS" #: dialogs.c:383 msgid "Tournament Options" msgstr "Параметри турніру" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "Абсолютні оцінки аналізу" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "Майже завжди королева (відхиляти неповні перетворення)" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Анімація перетягування" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Анімація ходів" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Автопрапорець" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Автоматичне обертання дошки" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Наосліп" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "Спадне меню" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "Увімкнути дерево варіантів" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "Заголовки у вікні виведення рушія" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Приховувати обмірковування від людини" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Позначати останній хід" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Позначити за допомогою стрілки" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Хід у одне клацання" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Періодичні оновлення (у режимі аналізу)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "Грати ходи натиснутих PV (аналіз)" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Обдумати наступний хід" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Контекстні підказки щодо виходу" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Контекстні підказки з помилками щодо ходів" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Оцінки у списку ходів" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Показувати координати" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Показувати клітинки призначення" #: dialogs.c:426 msgid "Sticky Windows" msgstr "Липкі вікна" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Перевіряти коректність" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "Вікна верхнього рівня" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "Блимання під час ходів (0 = без блимання):" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "Частота блимання (висока = швидко):" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "Швидкість анімації (висока = повільно):" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Масштаб графу оцінки позиції:" #: dialogs.c:452 msgid "Normal" msgstr "Звичайні" #: dialogs.c:453 msgid "Makruk" msgstr "Макрук" #: dialogs.c:454 msgid "FRC" msgstr "Фішера" #: dialogs.c:455 msgid "Shatranj" msgstr "Шатрандж" #: dialogs.c:456 msgid "Wild castle" msgstr "Дика тура" #: dialogs.c:457 msgid "Knightmate" msgstr "Мат коню" #: dialogs.c:458 msgid "No castle" msgstr "Без тури" #: dialogs.c:459 msgid "Cylinder *" msgstr "Циліндричні *" #: dialogs.c:460 msgid "3-checks" msgstr "Три шахи" #: dialogs.c:461 msgid "berolina *" msgstr "бероліна *" #: dialogs.c:462 msgid "atomic" msgstr "атомні" #: dialogs.c:463 msgid "two kings" msgstr "два королі" #: dialogs.c:464 msgid " " msgstr " " #: dialogs.c:465 msgid "Spartan" msgstr "спартанські" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "Розмір дошки ( -1 = типовий для вибраного варіанта):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Кількість рангів дошки:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Кількість файлів дошки:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "Розмір резерву:" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" "У варіанти позначені * можна грати\n" "лише з вимкненою перевіркою коректності." #: dialogs.c:473 msgid "ASEAN" msgstr "ASEAN" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "Великий шатрандж (10x8)" #: dialogs.c:475 msgid "Seirawan" msgstr "Сейравана" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "Сокіл (10x8)" #: dialogs.c:477 msgid "Superchess" msgstr "Супершахи" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "Капабланка (10x8)" #: dialogs.c:479 msgid "Crazyhouse" msgstr "Крейзіхаус" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "Готичні (10x8)" #: dialogs.c:481 msgid "Bughouse" msgstr "Шведські" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "Янус (10x8)" #: dialogs.c:483 msgid "Suicide" msgstr "Самовбивчі" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "Рівноправність (10x8)" #: dialogs.c:485 msgid "give-away" msgstr "піддавки" #: dialogs.c:486 msgid "grand (10x10)" msgstr "гранд-шахи (10x10)" #: dialogs.c:487 msgid "losers" msgstr "Антишахи" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "сьогі (9x9)" #: dialogs.c:489 msgid "fairy" msgstr "казкові" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "сянці (9x10)" #: dialogs.c:491 msgid "mighty lion" msgstr "могутній лев" #: dialogs.c:492 msgid "courier (12x8)" msgstr "кур’єр (12x8)" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "ельфійські шахи (10x10)" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "чу сьогі (12x12)" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Попередження: ця можливість не підтримується другим рушієм (%s)!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "У режимі перегляду недоступні лише шведські шахи." #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" "Всі варіанти, які не підтримуються першим рушієм\n" "(зараз це %s), вимкнено." #: dialogs.c:589 msgid "New Variant" msgstr "Новий варіант" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Максимальна кількість процесорів на рушій:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Каталог бібліотек Polygot:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Розмір таблиці хешів (у МБ):" #: dialogs.c:624 msgid "EGTB Path:" msgstr "Шлях до EGTB:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Розмір кешу EGTB (у МБ):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "Використовувати книгу з графічним інтерфейсом" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Назва файла даних дебютів:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Глибина книги (у ходах):" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Компроміс між різноманітністю (0) і силою (100) книги:" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Рушій 1 має власну книгу" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "Рушій 2 має власну книгу " #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Загальні параметри рушіїв" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Виявляти всі мати" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Перевіряти вимоги до результатів рушія" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Нічия, якщо недостатньо фігур для мату" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Визначати тривіальні нічиї (трикратне повторення)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "Правило N-го ходу:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "N-кратне повторення:" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Нічия після N ходів загалом:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Поріг виграшу/програшу:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Негативна оцінка рушія 1" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Негативна оцінка рушія 2" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "Судити ігри, що не належать до класу ICS" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Автопоради" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Автокоментарі" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Автоспостереження" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Автопідняття дошки" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "Автостворення скрипту входу" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Спостереження у тлі під час гри" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Подвійна дошка для ігор з фоновим спостереженням" #: dialogs.c:684 msgid "Get Move List" msgstr "Отримати список ходів" #: dialogs.c:685 msgid "Quiet Play" msgstr "Мовчазна гра" #: dialogs.c:686 msgid "Seek Graph" msgstr "Граф викликів" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Автоматичне оновлення графу пошуків" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "Автоматичне вікно введення" #: dialogs.c:689 msgid "Quit after game" msgstr "Вийти після гри" #: dialogs.c:690 msgid "Premove" msgstr "Попередній хід" #: dialogs.c:691 msgid "Premove for White" msgstr "Попередній хід для білих" #: dialogs.c:692 msgid "First White Move:" msgstr "Перший хід білих:" #: dialogs.c:693 msgid "Premove for Black" msgstr "Попередній хід для чорних" #: dialogs.c:694 msgid "First Black Move:" msgstr "Перший хід чорних:" #: dialogs.c:696 msgid "Alarm" msgstr "Нагадування" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "Час нагадування (у мс):" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Розфарбовувати повідомлення" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Кольори тексту вигуків:" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "Колір тексту S-вигуків:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Кольори тексту каналу 1:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Кольори тексту інших каналів:" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Кольори тексту порад:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "Кольори тексту висловлювань:" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "Кольори тексту викликів:" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "Кольори тексту запитів:" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Кольори тексту під час пошуку:" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "Кольори іншого тексту:" #: dialogs.c:716 msgid "ICS Options" msgstr "Параметри ICS" #: dialogs.c:721 msgid "Exact position match" msgstr "Точний збіг позицій" #: dialogs.c:721 msgid "Shown position is subset" msgstr "Показана позиція є підмножиною" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Однаковий матеріал з однаковим ланцюжком пішаків" #: dialogs.c:722 msgid "Same material" msgstr "Однаковий матеріал" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "Діапазон матеріалу (верхня половина дошки, необов’язковий)" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "Відмінність матеріалів (з додатковим врівноваженням можливостей)" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "Автопоказ міток" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "Автопоказ коментарів" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" "Швидкість автогри у завантажених іграх\n" "(0 = негайний показ, -1 = вимкнути автогру):" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Секунд на хід:" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" "\n" "Параметри режиму перегляду ігор:" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" "\n" "Порогові значення фільтрування позицій у списку ігор:" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Рейтинг Ело для сильнішого гравця не нижче за:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Рейтинг Ело для слабшого гравця не нижче за:" #: dialogs.c:746 msgid "No games before year:" msgstr "Не показувати ігри до року:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "Мінімальна к-ть послідовних позицій:" #: dialogs.c:749 msgid "Search mode:" msgstr "Режим пошуку:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "Шукати у позиціях зворотних кольорів" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "Шукати у симетричних позиціях" #: dialogs.c:760 msgid "Load Game Options" msgstr "Параметри завантаження ігор" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Автозбереження ігор" #: dialogs.c:773 msgid "Own Games Only" msgstr "Лише власні ігри" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Зберігати ігри до файла:" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Зберігати остаточні позиції до файла:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "Обробник подій PGN:" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "Застарілий стиль збереження (на відміну від PGN)" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "Включити мітку номера до PGN турніру" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "Зберігати дані щодо рейтингу/глибини у PGN" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "Зберігати сторонні дані до PGN " #: dialogs.c:787 msgid "Save Game Options" msgstr "Параметри збереження ігор" #: dialogs.c:796 msgid "No Sound" msgstr "Без звуку" #: dialogs.c:797 msgid "Default Beep" msgstr "Типовий гудок" #: dialogs.c:798 msgid "Above WAV File" msgstr "Файл WAV вище" #: dialogs.c:799 msgid "Car Horn" msgstr "Автомобільний гудок" #: dialogs.c:800 msgid "Cymbal" msgstr "Цимбали" #: dialogs.c:801 msgid "Ding" msgstr "Дзвінок" #: dialogs.c:802 msgid "Gong" msgstr "Гонг" #: dialogs.c:803 msgid "Laser" msgstr "Лазер" #: dialogs.c:804 msgid "Penalty" msgstr "Штраф" #: dialogs.c:805 msgid "Phone" msgstr "Телефон" #: dialogs.c:806 msgid "Pop" msgstr "Плескання" #: dialogs.c:807 msgid "Roar" msgstr "Рев" #: dialogs.c:808 msgid "Slap" msgstr "Клацання" #: dialogs.c:809 msgid "Wood Thunk" msgstr "Удар об дерево" #: dialogs.c:811 msgid "User File" msgstr "Файл користувача" #: dialogs.c:834 msgid "User WAV File:" msgstr "Файл WAV користувача:" #: dialogs.c:835 msgid "Sound Program:" msgstr "Програма відтворення:" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Тестовий звук:" #: dialogs.c:837 msgid "Play" msgstr "Пуск" #: dialogs.c:838 msgid "Move:" msgstr "Хід:" #: dialogs.c:839 msgid "Win:" msgstr "Виграшів:" #: dialogs.c:840 msgid "Lose:" msgstr "Програшів:" #: dialogs.c:841 msgid "Draw:" msgstr "Нічиїх:" #: dialogs.c:842 msgid "Unfinished:" msgstr "Незавершених:" #: dialogs.c:843 msgid "Alarm:" msgstr "Нагадування:" #: dialogs.c:844 msgid "Challenge:" msgstr "Виклик:" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Каталог звуків:" #: dialogs.c:847 msgid "Shout:" msgstr "Вигук:" #: dialogs.c:848 msgid "S-Shout:" msgstr "S-вигук:" #: dialogs.c:849 msgid "Channel:" msgstr "Канал:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Канал 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Висловлення:" #: dialogs.c:852 msgid "Kibitz:" msgstr "Порада:" #: dialogs.c:853 msgid "Request:" msgstr "Запит:" #: dialogs.c:854 msgid "Lion roar:" msgstr "Рев лева:" #: dialogs.c:855 msgid "Seek:" msgstr "Пошук:" #: dialogs.c:871 msgid "Sound Options" msgstr "Параметри звуку" #: dialogs.c:887 msgid "Selectable themes:" msgstr "Можливі теми:" #: dialogs.c:889 msgid "New name for current theme:" msgstr "Нова назва для поточної теми:" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Колір фігур білих:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "Ч" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "З" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "С" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "Т" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Колір фігур чорних:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Колір світлих клітинок:" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Колір темних клітинок:" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Колір позначення:" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Колір підсвічування плану ходу:" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "Стиль обміну фігурами сьогі (Кольорові кнопки відновлюють типовий)" #: dialogs.c:934 msgid "Mono Mode" msgstr "Монорежим" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "Розмір логотипу (0=вимкнути, потребує перезапуску):" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "Проміжок між рядами ( -1 = типовий для розмірів дошки):" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Використовувати текстури дошки" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Файл текстур світлих клітинок:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Файл текстур темних клітинок:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "Зовнішні растрові зображення фігур з власними кольорами" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "Каталог з зображеннями фігур:" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "# не визначено жодної теми" #: dialogs.c:1024 msgid "Board Options" msgstr "Параметри дошки" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "Текстове меню ICS" #: dialogs.c:1124 msgid "clear" msgstr "спорожнити" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "зберегти зміни" #: dialogs.c:1223 msgid "add next move" msgstr "додати наступний хід" #: dialogs.c:1247 msgid "Edit book" msgstr "Змінити книгу" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Мітки" #: dialogs.c:1385 msgid "ICS input box" msgstr "Поле введення ICS" #: dialogs.c:1417 msgid "Type a move" msgstr "Введіть хід" #: dialogs.c:1443 msgid "Engine has no options" msgstr "Рушієві не передаються жодні параметри" #: dialogs.c:1445 msgid "Engine Settings" msgstr "Параметри рушія" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Виберіть рушій зі списку:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "або вкажіть його нижче:" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Псевдонім (необов’язковий):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "Використовувати псевдонім у мітках гравця PGN під час ігор між рушіями" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "Каталог рушія:" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Команда рушія:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" "(Каталог буде визначено на основі шляху до рушія, якщо каталог не вказано)" #: dialogs.c:1479 msgid "UCI" msgstr "UCI" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "Протокол WB версії 1 (не чекати на дані щодо можливостей)" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "Не повинен використовувати книгу з графічним інтерфейсом" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Додати цей рушій до списку" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "Примусово визначити поточний варіант для рушія" #: dialogs.c:1533 msgid "Load first engine" msgstr "Завантажити перший рушій" #: dialogs.c:1539 msgid "Load second engine" msgstr "Завантажити другий рушій" #: dialogs.c:1562 msgid "shuffle" msgstr "перемішати" #: dialogs.c:1563 msgid "Fischer castling" msgstr "Рокіровка Фішера" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Номер початкової позиції:" #: dialogs.c:1565 msgid "randomize" msgstr "випадково" #: dialogs.c:1566 msgid "pick fixed" msgstr "вибрати фіксовану" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Нова випадкова гра" #: dialogs.c:1602 msgid "classical" msgstr "класичні" #: dialogs.c:1603 msgid "incremental" msgstr "нарощувальний" #: dialogs.c:1604 msgid "fixed max" msgstr "фіксований максимум" #: dialogs.c:1605 msgid "Moves per session:" msgstr "Ходів за сеанс:" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "Початковий час (у хвилинах):" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "Збільшення або максимум (сек/хід):" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "Коефіцієнти виправлення часу:" #: dialogs.c:1609 msgid "Engine #1" msgstr "Рушій 1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Рушій 2 / Людина" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "Не використовується" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Помилка під час спроби запису даних до шахової програми" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Скасувати" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Король" #: dialogs.c:1776 msgid "Captain" msgstr "Капітан" #: dialogs.c:1777 msgid "Lieutenant" msgstr "Лейтенант" #: dialogs.c:1778 msgid "General" msgstr "Загальне" #: dialogs.c:1779 msgid "Warlord" msgstr "Полководець" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Кінь" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Слон" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Тура" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Архієпископ" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Канцлер" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Королева" #: dialogs.c:1792 msgid "Lion" msgstr "Лев" #: dialogs.c:1796 msgid "Defer" msgstr "Зменшити пріоритет" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Підвищити" #: dialogs.c:1854 msgid "Chats:" msgstr "Розмови:" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 msgid "New Chat" msgstr "Нова розмова" #: dialogs.c:1862 msgid "Chat partner:" msgstr "Співрозмовник:" #: dialogs.c:1863 msgid "End Chat" msgstr "Завершити розмову" #: dialogs.c:1864 msgid "Hide" msgstr "Приховати" #: dialogs.c:2074 msgid "ICS Interaction" msgstr "Взаємодія у ICS" #: dialogs.c:2141 msgid "factory" msgstr "типові" #: dialogs.c:2142 msgid "up" msgstr "вгору" #: dialogs.c:2143 msgid "down" msgstr "вниз" #: dialogs.c:2162 msgid "No tag selected" msgstr "Не вибрано жодної мітки" #: dialogs.c:2193 msgid "Game-list options" msgstr "Параметри списку гри" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Помилка" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Критична помилка" #: dialogs.c:2306 msgid "Exiting" msgstr "Вихід" #: dialogs.c:2317 msgid "Information" msgstr "Інформація" #: dialogs.c:2324 msgid "Note" msgstr "Нотатка" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Білі" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Пішак" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Слон" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Гармата" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Розжалувати" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Порожня клітинка" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Спорожнити дошку" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Чорні" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Файл" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Зміни" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Перегляд" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Режим" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Дія" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Рушій" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Параметри" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Довідка" #: dialogs.c:2491 msgid "<<" msgstr "<<" #: dialogs.c:2492 msgid "<" msgstr "<" #: dialogs.c:2494 msgid ">" msgstr ">" #: dialogs.c:2495 msgid ">>" msgstr ">>" #: dialogs.c:2774 msgid "Directories:" msgstr "Каталоги:" #: dialogs.c:2775 msgid "Files:" msgstr "Файли:" #: dialogs.c:2776 msgid "by name" msgstr "за назвою" #: dialogs.c:2777 msgid "by type" msgstr "за типом" #: dialogs.c:2780 msgid "Filename:" msgstr "Назва файла:" #: dialogs.c:2781 msgid "New directory" msgstr "Новий каталог" #: dialogs.c:2782 msgid "File type:" msgstr "Тип файлів:" #: dialogs.c:2857 msgid "Contents of" msgstr "Вміст" #: dialogs.c:2883 msgid " next page" msgstr " наступна сторінка" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "СПОЧАТКУ ВКАЖІТЬ ТУТ НАЗВУ КАТАЛОГУ" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "СПРОБУЙТЕ ІНШУ НАЗВУ" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" "Типових зображень фігур не встановлено.\n" "Вкажіть власні за допомогою параметра -pieceImageDirectory" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Вивід рушія" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "%s (з можливістю скасування %d ходу)" msgstr[1] "%s (з можливістю скасування %d ходів)" msgstr[2] "%s (з можливістю скасування %d ходів)" msgstr[3] "%s (з можливістю скасування %d ходу)" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Читання файла гри (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: не вдалося перейти до каталогу CHESSDIR: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Не вдалося відкрити файл «%s»\n" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" "Для того, щоб скористатися підтримкою цього розміру, слід зібрати програму з " "більшими значеннями BOARD_RANKS або BOARD_FILES" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: помилковий синтаксис boardSize %s\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: невідома назва boardSize %s\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "%s: занадто мало кольорів; спробуємо монохромний режим\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "Не вдалося створити набір шрифтів для %s.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: взірцеві %s не відповідає жоден шрифт\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "Не вдалося відкрити тимчасовий файл даних" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Не вдалося відкрити файл" #: menus.c:134 msgid "Load game file name?" msgstr "Назва файла гри для завантаження?" #: menus.c:179 msgid "Load position file name?" msgstr "Назва файла позиції для завантаження?" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "Назва файли гри для збереження?" #: menus.c:194 msgid "Save position file name?" msgstr "Назва файла позиції для збереження?" #: menus.c:362 msgid " (with Zippy code)" msgstr " (з кодом Zippy)" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" "%s%s\n" "\n" "© Digital Equipment Corporation, 1991\n" "© Free Software Foundation, 1992–2014\n" "© Alessandro Scotti, 2005\n" "\n" "%s є вільним програмним забезпеченням, його працездатність не гарантується. " "Докладніше про це у файлі COPYING.\n" "Збірка з GTK цієї версії є експериментальною і нестабільною\n" "\n" "Відвідайте сторінку XBoard у мережі за адресою: http://www.gnu.org/software/" "xboard/\n" "Ознайомтеся з найсвіжішими можливостями програми: http://www.gnu.org/" "software/xboard/whats_new.html\n" "\n" "Надішліть повідомлення про ваду на адресу: \n" "\n" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Про XBoard" #: menus.c:601 msgid "New Game" msgstr "Нова гра" #: menus.c:602 msgid "New Shuffle Game..." msgstr "Нова випадкова гра…" #: menus.c:603 msgid "New Variant..." msgstr "Новий варіант…" #: menus.c:605 msgid "Load Game" msgstr "Завантажити гру" #: menus.c:606 msgid "Load Position" msgstr "Завантажити позицію" #: menus.c:607 msgid "Next Position" msgstr "Наступна позиція" #: menus.c:608 msgid "Prev Position" msgstr "Попередня позиція" #: menus.c:610 msgid "Save Game" msgstr "Зберегти гру" #: menus.c:611 msgid "Save Position" msgstr "Зберегти позицію" #: menus.c:612 msgid "Save Selected Games" msgstr "Зберегти позначені ігри" #: menus.c:613 msgid "Save Games as Book" msgstr "Зберегти ігри як книгу" #: menus.c:615 msgid "Mail Move" msgstr "Надіслати хід поштою" #: menus.c:616 msgid "Reload CMail Message" msgstr "Перезавантажити повідомлення CMail" #: menus.c:618 msgid "Quit " msgstr "Вийти " #: menus.c:623 msgid "Copy Game" msgstr "Копіювати гру" #: menus.c:624 msgid "Copy Position" msgstr "Копіювати позицію" #: menus.c:625 msgid "Copy Game List" msgstr "Копіювати список ігор" #: menus.c:627 msgid "Paste Game" msgstr "Вставити гру" #: menus.c:628 msgid "Paste Position" msgstr "Вставити позицію" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "Редагувати гру" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "Редагувати позицію" #: menus.c:632 msgid "Edit Tags" msgstr "Змінити мітки" #: menus.c:633 msgid "Edit Comment" msgstr "Змінити коментар" #: menus.c:634 msgid "Edit Book" msgstr "Змінити книгу" #: menus.c:636 msgid "Revert" msgstr "Повернути" #: menus.c:637 msgid "Annotate" msgstr "Анотувати" #: menus.c:638 msgid "Truncate Game" msgstr "Обрізати гру" #: menus.c:640 msgid "Backward" msgstr "Назад" #: menus.c:641 msgid "Forward" msgstr "Вперед" #: menus.c:642 msgid "Back to Start" msgstr "Повернутися до початку" #: menus.c:643 msgid "Forward to End" msgstr "Вперед до кінця" #: menus.c:648 msgid "Flip View" msgstr "Повернути дошку" #: menus.c:651 msgid "Move History" msgstr "Журнал ходів" #: menus.c:652 msgid "Evaluation Graph" msgstr "Граф оцінки позиції" #: menus.c:653 msgid "Game List" msgstr "Список ігор" #: menus.c:657 msgid "Comments" msgstr "Коментарі" #: menus.c:658 msgid "ICS Input Box" msgstr "Поле введення ICS" #: menus.c:659 msgid "ICS/Chat Console" msgstr "Консоль ICS/розмов" #: menus.c:661 msgid "Board..." msgstr "Дошка…" #: menus.c:662 msgid "Game List Tags..." msgstr "Мітки списку ігор…" #: menus.c:667 msgid "Machine White" msgstr "Комп’ютер-білими" #: menus.c:668 msgid "Machine Black" msgstr "Матч ком’ютерів" #: menus.c:669 msgid "Two Machines" msgstr "Два комп’ютера" #: menus.c:670 msgid "Analysis Mode" msgstr "Режим аналізу" #: menus.c:671 msgid "Analyze Game" msgstr "Аналізувати гру" #: menus.c:674 msgid "Training" msgstr "Тренування" #: menus.c:675 msgid "ICS Client" msgstr "Клієнт ICS" #: menus.c:677 msgid "Machine Match" msgstr "Матч ком’ютерів" #: menus.c:678 msgid "Pause" msgstr "Пауза" #: menus.c:683 msgid "Accept" msgstr "Прийняти" #: menus.c:684 msgid "Decline" msgstr "Відхилити" #: menus.c:685 msgid "Rematch" msgstr "Перегравання" #: menus.c:687 msgid "Call Flag" msgstr "Погодитися з програшем" #: menus.c:688 msgid "Draw" msgstr "Нічия" #: menus.c:689 msgid "Adjourn" msgstr "Відкласти" #: menus.c:690 msgid "Abort" msgstr "Перервати" #: menus.c:691 msgid "Resign" msgstr "Здатись" #: menus.c:693 msgid "Stop Observing" msgstr "Припинити спостереження" #: menus.c:694 msgid "Stop Examining" msgstr "Припинити аналіз" #: menus.c:695 msgid "Upload to Examine" msgstr "Вивантажити для аналізу" #: menus.c:697 msgid "Adjudicate to White" msgstr "Визначити виграш білих" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Визначити виграш чорних" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Визначити нічию" #: menus.c:704 msgid "Edit Engine List..." msgstr "Змінити список рушіїв…" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "Завантажити новий перший рушій…" #: menus.c:707 msgid "Load New 2nd Engine..." msgstr "Завантажити новий другий рушій…" #: menus.c:709 msgid "Engine #1 Settings..." msgstr "Параметри рушія 1…" #: menus.c:710 msgid "Engine #2 Settings..." msgstr "Параметри рушія 2…" #: menus.c:712 msgid "Hint" msgstr "Підказка" #: menus.c:713 msgid "Book" msgstr "Книга" #: menus.c:715 msgid "Move Now" msgstr "Ходити зараз" #: menus.c:716 msgid "Retract Move" msgstr "Відкликати хід" #: menus.c:722 msgid "General..." msgstr "Загальне…" #: menus.c:724 msgid "Time Control..." msgstr "Керування часом…" #: menus.c:725 msgid "Common Engine..." msgstr "Загальний рушій…" #: menus.c:726 msgid "Adjudications..." msgstr "Визначення…" #: menus.c:727 msgid "ICS..." msgstr "ICS…" #: menus.c:728 msgid "Tournament..." msgstr "Турнір…" #: menus.c:729 msgid "Load Game..." msgstr "Завантажити гру…" #: menus.c:730 msgid "Save Game..." msgstr "Зберегти гру…" #: menus.c:731 msgid "Game List..." msgstr "Список ігор…" #: menus.c:732 msgid "Sounds..." msgstr "Звуки…" #: menus.c:735 msgid "Always Queen" msgstr "Завжди королева" #: menus.c:741 msgid "Flash Moves" msgstr "Підсвічування ходів" #: menus.c:743 msgid "Highlight Dragging" msgstr "Підсвічувати перетягування" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Позначити за допомогою стрілки" #: menus.c:747 msgid "Move Sound" msgstr "Звук ходу" #: menus.c:749 msgid "Periodic Updates" msgstr "Періодичні оновлення" #: menus.c:751 msgid "Popup Exit Message" msgstr "Показувати повідомлення щодо виходу" #: menus.c:753 msgid "Show Coords" msgstr "Показати координати" #: menus.c:754 msgid "Hide Thinking" msgstr "Приховувати обмірковування" #: menus.c:758 msgid "Save Settings Now" msgstr "Зберегти параметри зараз" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Зберегти параметри при виході" #: menus.c:764 msgid "Info XBoard" msgstr "Інформація з XBoard" #: menus.c:765 msgid "Man XBoard" msgstr "Підручник з XBoard" #: menus.c:767 msgid "XBoard Home Page" msgstr "Домашня сторінка XBoard" #: menus.c:768 msgid "On-line User Guide" msgstr "Підручник користувача у інтернеті" #: menus.c:769 msgid "Development News" msgstr "Новини щодо розробки" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "Надіслати звіт про ваду електронною поштою" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "назва рушія" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "хід" #: nengineoutput.c:155 msgid "Engine output" msgstr "Вивід рушія" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" "Невідповідність STRIDE у nengineoutput.c\n" "Змініть і зберіть програму знову!" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Граф оцінки позиції" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "Граф грубих помилок" #: nevalgraph.c:106 msgid "Blunder" msgstr "Груба помилка" #: nevalgraph.c:106 msgid "Eval" msgstr "Оцінка" #: ngamelist.c:87 msgid "find position" msgstr "знайти позицію" #: ngamelist.c:88 msgid "narrow" msgstr "звуження" #: ngamelist.c:89 msgid "thresholds" msgstr "порогові значення" #: ngamelist.c:90 msgid "tags" msgstr "мітки" #: ngamelist.c:91 msgid "next" msgstr "далі" #: ngamelist.c:92 msgid "close" msgstr "закрити" #: ngamelist.c:116 msgid "No game selected" msgstr "Не вибрано гри" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Подальший рух вперед списком неможливий" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Сканування списку ігор (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "попередня сторінка" #: ngamelist.c:214 msgid "next page" msgstr "наступна сторінка" #: ngamelist.c:217 msgid "no games matched your request" msgstr "вашому запиту не відповідає жодна гра" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s — %d з %d ігор (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "Немає списку ходів гри" #: nhistory.c:109 msgid "Move list" msgstr "Список ходів" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: нерозпізнаний колір %s\n" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: не вдалося обробити колір тексту у «%s»\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "%s: не вдалося обробити назви кольорів; розфарбовування вимкнено\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "Помилка: невідомий користувач %s (шлях — %s)\n" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "Підтримку сокетів ще не налаштовано" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "вбудований rcmd ще не реалізовано для Unix" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "білий піксель = 0x%lx, чорний піксель = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "вибрати" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "Ctrl" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "Alt" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "Shift" #: xaw/xoptions.c:1314 msgid "OK" msgstr "Гаразд" #~ msgid " (for concurrent playing of a single" #~ msgstr " (для одночасної гри окремого" #~ msgid "Match Options" #~ msgstr "Параметри партії" #~ msgid "Chat box" #~ msgstr "Панель спілкування" #~ msgid "Open Chat Window" #~ msgstr "Відкрити вікно спілкування" #~ msgid "ICS ..." #~ msgstr "ICS…" #~ msgid "Match ..." #~ msgstr "Партія…" #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: не вдалося отримати доступ до каталогу XPM %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Доступні розміри «%s»:\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "Помилка: немає файлів «%s»!\n" #~ msgid "" #~ "Warning: No DIR structure found on this system --\n" #~ " Unable to autosize for XPM/XIM pieces.\n" #~ " Please report this error to %s.\n" #~ " Include system type & operating system in message.\n" #~ msgstr "" #~ "Попередження: у системі не виявлено структури DIR —\n" #~ " автоматична зміна розмірів фігур XPM/XIM неможлива.\n" #~ " Будь ласка, повідомте про цю помилку на адресу %s.\n" #~ " Включіть до повідомлення дані щодо типу та назви операційної системи.\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Помилка %d під час завантаження зображення піктограми\n" #~ msgid "cancel" #~ msgstr "скасувати" #~ msgid "recognized '%s' (%d) as variant %s\n" #~ msgstr "розпізнано «%s» (%d) як варіант %s\n" #~ msgid "Ratings from header: W %d, B %d\n" #~ msgstr "Рейтинги з заголовка: Б %d, Ч %d\n" #~ msgid "Parsing board: %s\n" #~ msgstr "Обробка дошки: %s\n" #~ msgid "Found unexpected active ICS engine analyze \n" #~ msgstr "Виявлено неочікуваний активний процес аналізу рушія ICS \n" #~ msgid "ICS engine analyze starting... \n" #~ msgstr "Розпочинаємо аналіз за допомогою рушія ICS… \n" #~ msgid "" #~ "resolved %s at pixel size %d\n" #~ " to %s\n" #~ msgstr "" #~ "визначено %s з розміром у пікселях %d\n" #~ " як %s\n" #~ msgid "New Game Ctrl+N" #~ msgstr "Нова гра Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "Новий варіант… Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "Завантажити гру Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Завантажити позицію Ctrl+Shift+O" #~ msgid "Prev Position Shift+PgUp" #~ msgstr "Попередня позиція Shift+PgUp" #~ msgid "Save Game Ctrl+S" #~ msgstr "Зберегти гру Ctrl+S" #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "Зберегти позицію Ctrl+Shift+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Вийти Ctr+Q" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Копіювати гру Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Редагувати гру Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Редагувати позицію Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "Скасувати Домівка" #~ msgid "Backward Alt+Left" #~ msgstr "Назад Alt+Ліворуч" #~ msgid "Forward Alt+Right" #~ msgstr "Вперед Alt+Праворуч" #~ msgid "Back to Start Alt+Home" #~ msgstr "Повернутися на початок Alt+Home" #~ msgid "Flip View F2" #~ msgstr "Розвернути F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "Вивід рушія Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Журнал ходів Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "Граф оцінки позиції Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Список ігор Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Комп’ютер-чорними Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Редагувати гру Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Редагувати позицію Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "Призупинити Pause" #~ msgid "Accept F3" #~ msgstr "Прийняти F3" #~ msgid "Decline F4" #~ msgstr "Відхилити F4" #~ msgid "Rematch F12" #~ msgstr "Перегравання F12" #~ msgid "Draw F6" #~ msgstr "Нічия F6" #~ msgid "Adjourn F7" #~ msgstr "Відкласти F7" #~ msgid "Abort F8" #~ msgstr "Перервати F8" #~ msgid "Resign F9" #~ msgstr "Здатися F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Ходити Ctrl+M" #~ msgid "Time Control ... Alt+Shift+T" #~ msgstr "Керування часом… Alt+Shift+T" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Завжди королева Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "Анімація ходів Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Автопрапорець Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Обдумати наступний хід Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Сховати обмірковування Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Перевірити коректність Ctrl+Shift+L" #~ msgid "Browse" #~ msgstr "Вибрати" #~ msgid "Filter on extensions:" #~ msgstr "Фільтр суфіксів:" #~ msgid "Pathname:" #~ msgstr "Назва шляху:" #~ msgid "XsraSelFile: can't get current directory" #~ msgstr "XsraSelFile: не вдалося отримати назву поточного каталогу" #~ msgid "%s: titleWidget geometry error %d %d %d %d %d\n" #~ msgstr "" #~ "%s: помилка у геометричних параметрах titleWidget — %d %d %d %d %d\n" #~ msgid "Error expanding path name \"%s\"\n" #~ msgstr "Помилка під час спроби розгортання адреси каталогу «%s»\n" #~ msgid "" #~ "XBoard square size (hint): %d\n" #~ "%s fulldir:%s:\n" #~ msgstr "" #~ "Розмір клітинки XBoard (hint): %d\n" #~ "%s fulldir:%s:\n" #~ msgid "Closest %s size: %d\n" #~ msgstr "Найближчий розмір %s: %d\n" #~ msgid "%s: messageWidget geometry error %d %d %d %d %d\n" #~ msgstr "" #~ "%s: помилка у геометричних параметрах messageWidget — %d %d %d %d %d\n" #~ msgid "%s: error loading XIM!\n" #~ msgstr "%s: помилка завантаження XIM!\n" #~ msgid "XIM pieces cannot be used in monochrome mode" #~ msgstr "У монохромному режимі не можна користуватися фігурами XIM" #~ msgid "" #~ "\n" #~ "Loading XIMs...\n" #~ msgstr "" #~ "\n" #~ "Завантаження XIM…\n" #~ msgid "(File:%s:) " #~ msgstr "(Файл:%s:) " #~ msgid "light square " #~ msgstr "світла клітинка " #~ msgid "dark square " #~ msgstr "темна клітинка " #~ msgid "Done.\n" #~ msgstr "Виконано.\n" #~ msgid "XPM pieces cannot be used in monochrome mode" #~ msgstr "У монохромному режимі не можна користуватися фігурами XPM" #~ msgid "No builtin XPM pieces of size %d\n" #~ msgstr "Немає вбудованих фігур XPM розміру %d\n" #~ msgid "Error %d loading XPM image \"%s\"\n" #~ msgstr "Помилка %d під час спроби завантаження зображення XPM «%s»\n" #~ msgid "" #~ "\n" #~ "Loading XPMs...\n" #~ msgstr "" #~ "\n" #~ "Завантаження XPM…\n" #~ msgid "(Replace by File:%s:) " #~ msgstr "(Замінено на File:%s:) " #~ msgid "Error %d loading XPM file \"%s\"\n" #~ msgstr "Помилка %d під час спроби завантаження файла XPM «%s»\n" #~ msgid "Can't open bitmap file %s" #~ msgstr "Не вдалося відкрити файл растрового зображення %s" #~ msgid "Invalid bitmap in file %s" #~ msgstr "Некоректне растрове зображення у файлі %s" #~ msgid "Ran out of memory reading bitmap file %s" #~ msgstr "" #~ "Під час читання растрового зображення %s було вичерпано обсяг пам’яті" #~ msgid "Unknown XReadBitmapFile error %d on file %s" #~ msgstr "Невідома помилка XReadBitmapFile %d під час обробки файла %s" #~ msgid "%s: %s...using built-in\n" #~ msgstr "%s: %s… використовуємо вбудоване\n" #~ msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n" #~ msgstr "" #~ "%s: розміри растрового зображення %s дорівнюють %dx%d, а не %dx%d… " #~ "використовуємо вбудоване\n" #~ msgid "----" #~ msgstr "----" #~ msgid "Drop" #~ msgstr "Викинути" #~ msgid "could not open: " #~ msgstr "Не вдалося відкрити:" #~ msgid "Can't open file" #~ msgstr "Не вдалося відкрити файл" #~ msgid "Promotion" #~ msgstr "Заміна" #~ msgid "Promote to what?" #~ msgstr "На що замінити?" #~ msgid "ok" #~ msgstr "гаразд" #~ msgid "AskQuestionProc needed 4 parameters, got %d\n" #~ msgstr "AskQuestionProc потребує 4 параметрів, отримано %d\n" #~ msgid "enter" #~ msgstr "увійти" #~ msgid "This feature is experimental" #~ msgstr "Цю можливість ще не перевірено" #~ msgid "Filter:" #~ msgstr "Фільтр:" #~ msgid "filtertext" #~ msgstr "текст фільтрування" #~ msgid "apply" #~ msgstr "застосувати" #~ msgid "load" #~ msgstr "завантажити" #~ msgid "prev" #~ msgstr "попер" #~ msgid "First Engine" #~ msgstr "Перший рушій" #~ msgid "Second Engine" #~ msgstr "Другий рушій" #~ msgid "" #~ "WARNING: variants with un-orthodox\n" #~ "pieces only have built-in bitmaps\n" #~ "for -boardSize middling, bulky and\n" #~ "petite, and substitute king or amazon\n" #~ "for missing bitmaps. (See manual.)" #~ msgstr "" #~ "УВАГА: для варіантів з неортодоксальними\n" #~ "фігурами використовуватимуться зображення\n" #~ "для -boardSize середнього, великого і\n" #~ "малого розмірів. Для фігур без зображень\n" #~ "буде використано зображення короля або\n" #~ "амазонки. (Див. підручник.)" #~ msgid "Directory with Bitmap Pieces:" #~ msgstr "Каталог bitmap фігур:" #~ msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n" #~ msgstr "Анімація ходів: фігура %d перестрибує з %d,%d до %d,%d \n" #~ msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n" #~ msgstr "Анімація ходів: фігура %d пересувається з %d,%d до %d,%d \n" #~ msgid "%s vs. %s" #~ msgstr "%s проти %s" #~ msgid "%s [%s] vs. %s [%s]" #~ msgstr "%s [%s] проти %s [%s]" #~ msgid "%s (%d) vs. %s (%d) {%d %d}" #~ msgstr "%s (%d) проти %s (%d) {%d %d}" #~ msgid "%s (%d) vs. %s (%d) {%d %d %s}" #~ msgstr "%s (%d) проти %s (%d) {%d %d %s}" #~ msgid "%s vs. %s (%d/%d%s)" #~ msgstr "%s проти %s (%d/%d%s)" #~ msgid "White " #~ msgstr "Білий " #~ msgid "Black " #~ msgstr "Чорний " #~ msgid "Close" #~ msgstr "Закрити" #~ msgid "off" #~ msgstr "вимкнено" #~ msgid "minutes for each" #~ msgstr "хвилин для кожного" #~ msgid " OK " #~ msgstr " Гаразд " #~ msgid "moves " #~ msgstr "ходів " xboard-4.8.0/po/pl.po0000644000175000001440000017773512422467103011335 00000000000000# Polish translations for GNU xboard package # Polskie tłumaczenia dla pakietu GNU xboard. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xboard package. # Paweł Żołnowski , 2014. # msgid "" msgstr "" "Project-Id-Version: GNU xboard 4.7.2\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2014-03-03 14:20+0100\n" "Last-Translator: Paweł Żołnowski \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "%s w pliku konfiguracyjnym\n" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Błędna wartość całkowita %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Nieznany parametr %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "Brak wartości parametru %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Niepełna sekwencja specjalna \\ w wartości dla %s" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Nie udało się otworzyć pliku pośredniego %s" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Nieznana wartość parametru logicznego %s" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "1." #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "2." #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "nieobsługiwana wersja %d protokołu" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "Nie podano pliku wykonywalnego silnika" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "zła opcja timeControl %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "zła opcja searchTime %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Wariant %s jest obsługiwany tylko w trybie ICS" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Nieznana nazwa wariantu %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Uruchamianie silnika szachowego" #: backend.c:1475 msgid "Bad game file" msgstr "Nieprawidłowy plik gry" #: backend.c:1482 msgid "Bad position file" msgstr "Nieprawidłowy plik pozycji" #: backend.c:1496 msgid "Pick new game" msgstr "Wybierz nową grę" #: backend.c:1565 #, fuzzy msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "Zrestartowano ukończony już turniej\n" "Zostanie dodany do niego jeszcze jeden cykl\n" "Gry rozpoczną się za 10 s" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "Wszystkie gry w turnieju \"%s\" zostały już rozegrane lub są w toku" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Konieczny jest wybór silnika szachowego" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Nie można otworzyć portu szeregowego %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Nie można się połączyć z hostem %s, port %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Nieznany initialMode %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "Tryb AnalyzeFile wymaga pliku gry" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "Tryb analizy wymaga silnika szachowego" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Tryb analizy nie działa w trybie ICS" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "Tryb MachineWhite wymaga silnika szachowego" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "Tryb MachineWhite nie działa w trybie ICS" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "Tryb MachineBlack wymaga silnika szachowego" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "Tryb MachineBlack nie działa w trybie ICS" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "Tryb TwoMachines wymaga silnika szachowego" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "Tryb TwoMachines nie działa w trybie ICS" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "Tryb treningu wymaga pliku gry" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Błąd zapisu do ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Błąd odczytu z klawiatury" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Wprowadzono EOF z klawiatury" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Nieznany typ wild %d" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Błąd zapisu do ekranu" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "przeciwnik doradza: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Błąd podczas tworzenia listy ruchów: dwa nagłówki" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Błąd podczas tworzenia listy ruchów: zagnieżdżona lista" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "vs." #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "Niedozwolony ruch (odrzucony przez ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Połączenie zamknięte przez ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Błąd odczytu z ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Nie udało się przetworzyć ciągu znaków szachownicy:\n" "\"%s\"" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" "Gra jest za długa; należy zwiększyć wartość MAX_MOVES i skompilować ponownie" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Błąd podczas tworzenia listy ruchów: dodatkowa szachownica" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Nie można przetworzyć ruchu \"%s\" z ICS" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "Błąd wewnętrzny; nieprawidłowy moveType %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "Nie można tego zrobić w czasie gry ani podczas obserwacji" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" "Należy skompilować ponownie, aby włączyć obsługę BOARD_RANKS lub BOARD_FILES!" #: backend.c:6700 msgid "You are playing Black" msgstr "Grasz czarnymi" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Grasz białymi" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Ruch należy do białych" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Ruch należy do czarnych" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Wyświetlona pozycja nie jest aktualna" #: backend.c:7007 msgid "Illegal move" msgstr "Niedozwolony ruch" #: backend.c:7084 msgid "End of game" msgstr "Koniec gry" #: backend.c:7087 msgid "Incorrect move" msgstr "Nieprawidłowy ruch" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Należy przeciągnąć pionek w tył, aby dokonać słabej promocji" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Zakończono turniej w systemie szwajcarskim" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "Nieprawidłowe kojarzenie par" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Niedozwolony ruch \"%s\" dokonany przez %s silnik" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "Nieprawidłowa notacja FEN otrzymana z silnika" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s nie obsługuje analizy" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Niedozwolony ruch \"%s\" (odrzucony przez %s silnik szachowy)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Nie udało się uruchomić %s silnika szachowego %s na %s: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Wskazówka: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "%2$s silnik szachowy zasugerował\n" "niedozwolony ruch \"%1$s\"" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Silnik przyjmuje propozycję remisu" #: backend.c:9404 #, fuzzy msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "Silnik proponuje remis\n" "Należy wybrać Działanie->Remis, żeby się zgodzić" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "nie udało się zapisać PV" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Niejednoznaczny ruch na wyjściu ICS: \"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Niedozwolony ruch na wyjściu ICS: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Luka na liście ruchów" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Odmiana %s nie jest obsługiwana przez %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Błąd uruchamiania w \"%s\"" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Oczekiwanie na pierwszy silnik szachowy" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Oczekiwanie na drugi silnik szachowy" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "Nieudany zapis do pliku turnieju" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "Nie można zastąpić silnika w trakcie jego pracy!\n" "Należy zakończyć najpierw jego grę." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "Silnik o podanej nazwie nie jest zainstalowany" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Należy najpierw zmienić silnik, edytując listę uczestników\n" "w oknie dialogowym Opcji turnieju." #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "Można jednocześnie modyfikować tylko jeden silnik" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "Silnik %s nie jest zainstalowany" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "Należy dostarczyć plik turnieju,\n" "żeby móc zapisać jego przebieg" #: backend.c:10837 msgid "Not enough participants" msgstr "Za mało uczestników" #: backend.c:11040 msgid "Bad tournament file" msgstr "Nieprawidłowy plik turnieju" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Oczekiwanie na pozostałe gry" #: backend.c:11065 msgid "No pairing engine specified" msgstr "Nie określono silnika do kojarzenia par" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Mecz %s vs. %s: ostateczny wynik %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Niedozwolony ruch: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Niejednoznaczny ruch: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Nie można otworzyć \"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Nie można utworzyć listy gier" #: backend.c:12190 msgid "No more games in this message" msgstr "Nie ma więcej gier w tej wiadomości" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Nie wczytano jeszcze żadnej gry" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Dalsze cofanie jest niemożliwe" #: backend.c:12678 msgid "Game number out of range" msgstr "Numer gry jest poza zakresem" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Niemożliwe przemieszczanie w pliku gry" #: backend.c:12747 msgid "Game not found in file" msgstr "Nie znaleziono gry w pliku" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Nieprawidłowa pozycja FEN w pliku" #: backend.c:13030 msgid "No moves in game" msgstr "Brak ruchów w grze" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Nie wczytano jeszcze żadnej pozycji" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Niemożliwe przemieszczanie w pliku pozycji" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Nie znaleziono pozycji w pliku" #: backend.c:13245 msgid "Black to play" msgstr "Czarne do gry" #: backend.c:13248 msgid "White to play" msgstr "Białe do gry" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Oczekiwanie na dostęp, aby zapisać plik" #: backend.c:13337 msgid "Saving game" msgstr "Zapisywanie gry" #: backend.c:13338 msgid "Bad Seek" msgstr "Nieprawidłowe szukanie" #: backend.c:13707 msgid "Saving position" msgstr "Zapisywanie pozycji" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "Zmodyfikowano historię gry.\n" "Należy wybrać Wczytaj grę ponownie i wykonać ruch jeszcze raz." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "Wprowadzono za dużo ruchów.\n" "Proszę cofnąć do prawidłowej pozycji i spróbować ponownie." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "Wyświetlona pozycja nie jest aktualna.\n" "Proszę przejść do przodu do prawidłowej pozycji i spróbować ponownie." #: backend.c:13890 msgid "You have not made a move yet" msgstr "Jeszcze nie wykonano ruchu" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "Nie wczytano wiadomości cmail.\n" "Należy wybrać Wczytaj wiadomość cmail ponownie i wykonać ruch jeszcze raz." #: backend.c:13916 msgid "No unfinished games" msgstr "Brak niedokończonych gier" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "Wysłano już ruch.\n" "Należy poczekać na nadejście ruchu od przeciwnika.\n" "Aby wysłać ruch ponownie, należy wpisać\n" "\"cmail -remail -game %s\"\n" "w wierszu poleceń." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Nie udało się wywołać cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Oczekiwanie na odpowiedź od przeciwnika\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Wciąż trzeba wykonać ruch w grze\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Wciąż trzeba wykonać ruch w obu grach\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Wciąż trzeba wykonać ruch we wszystkich grach %d\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Wciąż trzeba wykonać ruch w grze %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Brak niedokończonych gier\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Gotowy do wysłania wiadomości\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Wciąż trzeba wykonać ruch w grach %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Edytuj komentarz" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Edytowanie komentarza do %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "Gra nie jest obserwowana" #: backend.c:14420 msgid "It is not White's turn" msgstr "Ruch nie należy do białych" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Ruch nie należy do czarnych" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Uruchamianie %s silnika szachowego" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Proszę poczekać na swój ruch\n" "lub wybrać Wykonaj ruch" #: backend.c:14774 msgid "Training mode off" msgstr "Tryb treningu wył." #: backend.c:14782 msgid "Training mode on" msgstr "Tryb treningu wł." #: backend.c:14785 msgid "Already at end of game" msgstr "Zakończono już grę" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Ostrzeżenie: Nie zakończono jeszcze gry" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Ostrzeżenie: Nie zakończono obserwacji gry" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Ostrzeżenie: Nie zakończono badania gry" #: backend.c:14938 msgid "Click clock to clear board" msgstr "Kliknij zegar, aby wyczyścić szachownicę" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Zamknij analizę silnika ICS..." #: backend.c:15268 msgid "That square is occupied" msgstr "To pole jest zajęte" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "Brak oczekującej propozycji tego ruchu" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Przeciwnik nie przekroczył limitu czasu" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Przed zaproponowaniem remisu należy wykonać ruch" #: backend.c:15781 msgid "You are not examining a game" msgstr "Żadna gra nie jest badana" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Nie można cofać podczas pauzy" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Ruch należy do ciebie" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "Proszę poczekać na swój ruch" #: backend.c:15909 msgid "No hint available" msgstr "Brak wskazówek" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "Nie wczytano listy gier lub jest ona pusta" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "Plik książki już istnieje! Należy spróbować ponownie, aby nadpisać." #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Błąd zapisu do %s silnika szachowego" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "%s silnik znajduje się w martwej pozycji (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Błąd: %s silnik szachowy (%s) zakończył nieoczekiwanie pracę" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Błąd odczytu z %s silnika szachowego (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "%s silnik ma za dużo opcji\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Wyświetlony ruch nie jest aktualny" #: backend.c:17083 msgid "Could not parse move" msgstr "Nie można przetworzyć ruchu" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Spadły obie chorągiewki" #: backend.c:17210 msgid "White's flag fell" msgstr "Spadła chorągiewka białych" #: backend.c:17232 msgid "Black's flag fell" msgstr "Spadła chorągiewka czarnych" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "Nie można nastawiać zegara w trybie automatycznej chorągiewki" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Nieprawidłowa pozycja FEN w schowku" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "Nieprawidłowa książka polyglot" #: book.c:703 msgid "Book Fault" msgstr "Błąd książki" #: book.c:839 msgid "Hash keys are different" msgstr "Klucze hash nie są takie same" #: book.c:1015 msgid "Could not create book" msgstr "Nie można utworzyć książki" #: dialogs.c:283 msgid "Tournament file: " msgstr "Plik turnieju: " #: dialogs.c:284 #, fuzzy msgid "For concurrent playing of tourney with multiple XBoards:" msgstr " turnieju za pomocą wielu programów XBoard)" #: dialogs.c:285 msgid "Sync after round" msgstr "Synchronizacja po rundzie" #: dialogs.c:286 msgid "Sync after cycle" msgstr "Synchronizacja po cyklu" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Uczestnicy turnieju:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Wybór silnika:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Typ turnieju (0 = system-kołowy, 1 = system-gauntlet):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Liczba cykli turnieju (lub rund szwajcarskich)" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "Domyślna liczba gier podczas meczu (lub na parę)" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Pauza między grami meczowymi (ms):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Zapisuj gry turnieju do:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "Plik gry z wierszami otwierającymi:" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "Numer gry (-1 lub -2 = przyrost automatyczny):" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Plik z pozycjami startowymi:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "Numer pozycji (-1 lub -2 = przyrost automatyczny):" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "Przewiń indeks wstecz po liczbie gier równej (0 = nigdy):" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "Wyłącz domyślnie własne książki silnika" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Kontrola czasu" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Wspólne ustawienia silników..." #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Opcje ogólne" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "Zastąp silnik" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Aktualizuj silnik" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Skopiuj turniej" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "Należy najpierw określić istniejący plik turnieju do skopiowania" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "# nie zainstalowano żadnych silników" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Opcje dźwięków" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "Wyniki absolutnej analizy" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "Prawie zawsze hetman (okrężna słaba promocja)" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Animowane przesuwanie" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Animowany ruch" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Automatyczna chorągiewka" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Autoodwracanie szachownicy" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Niewidzialne bierki" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "Rozwijane menu" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "Włącz drzewo alternatywnych ruchów" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Ukryj myślenie przed graczem" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Podświetl ostatni ruch" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Podświetl kursorem" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Ruch jednym kliknięciem" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Częste aktualizacje (w trybie analizy)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "Odtwórz ruch(y) PV (analiza)" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Myślenie nad następnym ruchem" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Pytaj przed wyjściem" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Błędy ruchu w oknie podręcznym" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Wyniki na liście ruchów" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Wyświetlanie współrzędnych" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Wyświetlanie możliwych ruchów" #: dialogs.c:426 msgid "Sticky Windows" msgstr "Przyklejanie okien" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Blokowanie niedozwolonych ruchów" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "Okna dialogowe najwyższego poziomu" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "Migający ruch (0 = brak migania):" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "Szybkość migania (wysoka = szybka):" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "Szybkość animacji (wysoka = wolna):" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Współczynnik powiększenia na Wykresie wyników" #: dialogs.c:452 #, fuzzy msgid "Normal" msgstr "normalne" #: dialogs.c:453 #, fuzzy msgid "Makruk" msgstr "makruk" #: dialogs.c:454 msgid "FRC" msgstr "szachy losowe (960)" #: dialogs.c:455 #, fuzzy msgid "Shatranj" msgstr "szatrandż" #: dialogs.c:456 #, fuzzy msgid "Wild castle" msgstr "wild castle" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "knightmate" #: dialogs.c:458 #, fuzzy msgid "No castle" msgstr "bez roszady" #: dialogs.c:459 #, fuzzy msgid "Cylinder *" msgstr "cylindryczne *" #: dialogs.c:460 msgid "3-checks" msgstr "do 3 szachów" #: dialogs.c:461 msgid "berolina *" msgstr "berolina *" #: dialogs.c:462 msgid "atomic" msgstr "atomowe" #: dialogs.c:463 msgid "two kings" msgstr "dwa króle" #: dialogs.c:464 msgid " " msgstr " " #: dialogs.c:465 msgid "Spartan" msgstr "Spartan" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "Rozmiar szachownicy (-1 = domyślny dla wybranego wariantu):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Liczba rzędów szachownicy:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Liczba kolumn szachownicy:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "Rozmiar rezerwy:" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "wielki szatrandż (10x8)" #: dialogs.c:475 msgid "Seirawan" msgstr "Seirawan" #: dialogs.c:476 #, fuzzy msgid "Falcon (10x8)" msgstr "falcon (10x8)" #: dialogs.c:477 msgid "Superchess" msgstr "Superchess" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "szachy Capablanki (10x8)" #: dialogs.c:479 #, fuzzy msgid "Crazyhouse" msgstr "crazyhouse" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "Gothic (10x8)" #: dialogs.c:481 #, fuzzy msgid "Bughouse" msgstr "kloc" #: dialogs.c:482 #, fuzzy msgid "Janus (10x8)" msgstr "janus (10x8)" #: dialogs.c:483 #, fuzzy msgid "Suicide" msgstr "antyszachy (suicide)" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "losowe szachy Capablanki (10x8)" #: dialogs.c:485 msgid "give-away" msgstr "antyszachy (give-away)" #: dialogs.c:486 msgid "grand (10x10)" msgstr "grand (10x10)" #: dialogs.c:487 msgid "losers" msgstr "antyszachy (losers)" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "shōgi (9x9)" #: dialogs.c:489 msgid "fairy" msgstr "fairy" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "xiangqi (9x10)" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "courier (12x8)" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 #, fuzzy msgid "chu shogi (12x12)" msgstr "shōgi (9x9)" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Ostrzeżenie: drugi silnik (%s) nie obsługuje tego!" #: dialogs.c:566 #, fuzzy, c-format msgid "Only bughouse is not available in viewer mode." msgstr "Tylko odmiana kloc nie jest dostępna w trybie obserwatora" #: dialogs.c:567 #, fuzzy, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" "Odmiany nieobsługiwane przez pierwszy silnik\n" "(obecnie %s) są niedostępne" #: dialogs.c:589 msgid "New Variant" msgstr "Nowa odmiana" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Maksymalna liczba rdzeni na silnik:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Katalog książki polyglot:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Rozmiary tablicy mieszającej (MB)" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "Ścieżka do Nalimov EGTB:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Rozmiar pamięci podręcznej dla EGTB (MB):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "Używanie książki GUI" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Nazwa pliku książki otwarć:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Pojemność książki (w ruchach):" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Różnorodność (0) książki a siła (100):" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Silnik #1 ma własną książkę" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "Silnik #2 ma własną książkę " #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Wspólne ustawienia silników" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Wykrywanie wszystkich matów i patów" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Weryfikowanie żądań silnika o wynik" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Remis w przypadku niewystarczającego materiału matowego" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Rozstrzyganie zgodnych remisów (3-ruchowe opóźnienie)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "Liczba ruchów przed remisem:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "Liczba powtórzeń ruchu:" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Remis po całkowitej liczbie ruchów:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Próg zwycięstwa / przegranej" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Negacja wyniku silnika #1" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Negacja wyniku silnika #2" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "Rozstrzyganie gier spoza ICS" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Autodoradzanie" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Autokomentowanie" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Autoobserwacja" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Autowysuwanie szachownicy" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "Autotworzenie skryptu logowania" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Obserwacja w tle podczas gry" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Podwójna szachownica podczas obserwacji w tle" #: dialogs.c:684 msgid "Get Move List" msgstr "Pobieranie listy ruchów" #: dialogs.c:685 msgid "Quiet Play" msgstr "Cicha gra" #: dialogs.c:686 msgid "Seek Graph" msgstr "Wykres gier" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Autoodświeżanie wykresu gier" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "Podręczne okno poleceń" #: dialogs.c:689 #, fuzzy msgid "Quit after game" msgstr "Oczekiwanie na pozostałe gry" #: dialogs.c:690 msgid "Premove" msgstr "Premove" #: dialogs.c:691 msgid "Premove for White" msgstr "Premove dla białych" #: dialogs.c:692 msgid "First White Move:" msgstr "Pierwszy ruch białych:" #: dialogs.c:693 msgid "Premove for Black" msgstr "Premove dla czarnych" #: dialogs.c:694 msgid "First Black Move:" msgstr "Pierwszy ruch czarnych" #: dialogs.c:696 msgid "Alarm" msgstr "Alarm" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "Czas alarmu (ms):" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Kolorowanie wiadomości" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Kolory tekstu wiadomości shout" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "Kolory tekstu wiadomości S-Shout:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Kolory tekstu kanału #1:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Kolory tekstu pozostałych kanałów" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Kolory tekstu porad:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "Kolory tekstu wiadomości tell:" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "Kolory tekstu wyzwania:" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "Kolory tekstu prośby:" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Kolory tekstu propozycji gier:" #: dialogs.c:709 #, fuzzy msgid "Other Text Colors:" msgstr "Kolory tekstu pozostałych kanałów" #: dialogs.c:716 msgid "ICS Options" msgstr "Opcje ICS" #: dialogs.c:721 msgid "Exact position match" msgstr "Ścisłe dopasowanie pozycji" #: dialogs.c:721 msgid "Shown position is subset" msgstr "Wyświetlona pozycja jest podzbiorem" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Ten sam materiał z dokładnie takim samym szeregiem pionków" #: dialogs.c:722 msgid "Same material" msgstr "Ten sam materiał" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "Zasięg materiału (opcjonalnie górna połowa szachownicy)" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "Różnica materiału (zbalansowany materiał dodatkowy)" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "Autowyświetlanie znaczników" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "Autowyświetlanie komentarzy" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" "Szybkość rozgrywki wczytywanych gier\n" "(0 = natychmiastowa, -1 = wył.):" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Liczba sekund na ruch:" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" "\n" "opcje do użycia w trybie game-viewer:" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" "\n" "Próg filtrowania pozycji na liście gier:" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Najmniejsza liczba punktów elo najsilniejszego gracza:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Najmniejsza liczba punktów elo najsłabszego gracza:" #: dialogs.c:746 msgid "No games before year:" msgstr "Pominięcie gier sprzed roku:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "Minimum kolejnych pozycji:" #: dialogs.c:749 msgid "Search mode:" msgstr "Tryb wyszukiwania:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "Dopasowanie odwrotnych kolorów" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "Dopasowanie pozycji z prawej i lewej strony" #: dialogs.c:760 msgid "Load Game Options" msgstr "Opcje wczytywania gry" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Autozapis gier" #: dialogs.c:773 msgid "Own Games Only" msgstr "Tylko własne gry" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Zapisywanie gier do pliku:" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Zapisywanie końcowych pozycji do pliku:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "Nazwa turnieju w zapisie PGN:" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "Stary styl zapisu (zamiast PGN)" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "Umieść znacznik Number w zapisie PGN turnieju" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "Zapisywanie informacji o wyniku/głębokości do PGN" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "Zapisywanie informacji spoza książki do PGN " #: dialogs.c:787 msgid "Save Game Options" msgstr "Opcje zapisu gry" #: dialogs.c:796 msgid "No Sound" msgstr "Bez dźwięku" #: dialogs.c:797 msgid "Default Beep" msgstr "Domyślny sygnał" #: dialogs.c:798 msgid "Above WAV File" msgstr "Powyższy plik WAV" #: dialogs.c:799 msgid "Car Horn" msgstr "Klakson" #: dialogs.c:800 msgid "Cymbal" msgstr "Talerz" #: dialogs.c:801 msgid "Ding" msgstr "Bim" #: dialogs.c:802 msgid "Gong" msgstr "Gong" #: dialogs.c:803 msgid "Laser" msgstr "Laser" #: dialogs.c:804 msgid "Penalty" msgstr "Karny" #: dialogs.c:805 msgid "Phone" msgstr "Telefon" #: dialogs.c:806 msgid "Pop" msgstr "Wystrzał" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "Plaśnięcie" #: dialogs.c:809 msgid "Wood Thunk" msgstr "Stuknięcie drewna" #: dialogs.c:811 msgid "User File" msgstr "Własny plik" #: dialogs.c:834 msgid "User WAV File:" msgstr "Własny plik WAV:" #: dialogs.c:835 msgid "Sound Program:" msgstr "Odtwarzacz:" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Sprawdź dźwięk:" #: dialogs.c:837 msgid "Play" msgstr "Odtwórz" #: dialogs.c:838 msgid "Move:" msgstr "Ruch:" #: dialogs.c:839 msgid "Win:" msgstr "Wygrana:" #: dialogs.c:840 msgid "Lose:" msgstr "Przegrana:" #: dialogs.c:841 msgid "Draw:" msgstr "Remis:" #: dialogs.c:842 msgid "Unfinished:" msgstr "Niedokończenie:" #: dialogs.c:843 msgid "Alarm:" msgstr "Alarm:" #: dialogs.c:844 msgid "Challenge:" msgstr "Wyzwanie:" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Katalog z dźwiękami:" #: dialogs.c:847 msgid "Shout:" msgstr "Shout:" #: dialogs.c:848 msgid "S-Shout:" msgstr "S-Shout:" #: dialogs.c:849 msgid "Channel:" msgstr "Kanał:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Kanał 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Tell:" #: dialogs.c:852 msgid "Kibitz:" msgstr "Porada:" #: dialogs.c:853 msgid "Request:" msgstr "Prośba:" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "Wyszukanie gry:" #: dialogs.c:871 msgid "Sound Options" msgstr "Opcje dźwięków" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Kolor białych bierek:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "R" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "R" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "B" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "D" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Kolor czarnych bierek:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Kolor jasnych pól:" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Kolor ciemnych pól:" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Kolor podświetlenia:" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Kolor podświetlenia ruchu premove:" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" "Odwrócone bierki w odmianie shogi (Kolorowe przyciski przywracają " "ustawienia domyślne)" #: dialogs.c:934 msgid "Mono Mode" msgstr "Tryb mono" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 #, fuzzy msgid "Line Gap (-1 = default for board size):" msgstr "" "Grubość linii między polami (-1 = domyślnie dla danego rozmiaru szachownicy):" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Użycie tekstur szachownicy" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Plik tekstury jasnych pól:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Plik tekstury ciemnych pól:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "Użycie bitmap bierek z własnymi kolorami" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "Katalog obrazów bierek:" #: dialogs.c:1012 #, fuzzy msgid "# no themes are defined" msgstr "# nie zainstalowano żadnych silników" #: dialogs.c:1024 msgid "Board Options" msgstr "Opcje szachownicy" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "Menu tekstowe ICS" #: dialogs.c:1124 msgid "clear" msgstr "wyczyść" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "zapisz zmiany" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Myślenie nad następnym ruchem" #: dialogs.c:1247 msgid "Edit book" msgstr "Edytuj książkę" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Znaczniki" #: dialogs.c:1385 msgid "ICS input box" msgstr "Okno poleceń ICS" #: dialogs.c:1417 msgid "Type a move" msgstr "Proszę wpisać ruch" #: dialogs.c:1443 msgid "Engine has no options" msgstr "Brak opcji silnika" #: dialogs.c:1445 msgid "Engine Settings" msgstr "Ustawienia silnika" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Wybór silnika z listy:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "lub określenie go poniżej:" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Pseudonim (opcjonalnie):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" "Używanie pseudonimu w znacznikach gracza w zapisie PGN gier typu silnik vs. " "silnik" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "Katalog silnika:" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Polecenie silnika:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" "(Jeśli pole pozostanie puste, ścieżka pliku wykonywalnego silnika wyznaczy " "katalog)" #: dialogs.c:1479 msgid "UCI" msgstr "UCI" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "Protokół WB v1 (szybsze wczytywanie funkcji silnika)" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "Nieużywanie książki GUI" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Dodanie silnika do listy" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "Wymuszenie bieżącej odmiany na danym silniku" #: dialogs.c:1533 msgid "Load first engine" msgstr "Wczytaj pierwszy silnik" #: dialogs.c:1539 msgid "Load second engine" msgstr "Wczytaj drugi silnik" #: dialogs.c:1562 msgid "shuffle" msgstr "losowe rozstawienie" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Numer pozycji początkowej:" #: dialogs.c:1565 msgid "randomize" msgstr "losuj" #: dialogs.c:1566 msgid "pick fixed" msgstr "wybierz liczbę" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Nowa gra losowa" #: dialogs.c:1602 msgid "classical" msgstr "klasyczny" #: dialogs.c:1603 msgid "incremental" msgstr "przyrostowy" #: dialogs.c:1604 msgid "fixed max" msgstr "stały maksymalny czas" #: dialogs.c:1605 msgid "Moves per session:" msgstr "Liczba ruchów na sesję:" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "Czas początkowy (min):" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "Przyrost lub maksymalny czas (sekund/ruch):" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "Dzielniki czasu:" #: dialogs.c:1609 msgid "Engine #1" msgstr "Silnik #1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Silnik #2 / człowiek" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "Nieużywane" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Błąd zapisu do silnika szachowego" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Anuluj" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Król" #: dialogs.c:1776 msgid "Captain" msgstr "Kapitan" #: dialogs.c:1777 msgid "Lieutenant" msgstr "Porucznik" #: dialogs.c:1778 msgid "General" msgstr "Generał" #: dialogs.c:1779 msgid "Warlord" msgstr "Gubernator" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Skoczek" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Goniec" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Wieża" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Arcybiskup" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Kanclerz" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Hetman" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "Odłóż" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Promuj" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Nowa odmiana" #: dialogs.c:1862 msgid "Chat partner:" msgstr "Partner do rozmowy:" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "Opcje ICS" #: dialogs.c:2141 msgid "factory" msgstr "domyślne" #: dialogs.c:2142 msgid "up" msgstr "do góry" #: dialogs.c:2143 msgid "down" msgstr "na dół" #: dialogs.c:2162 msgid "No tag selected" msgstr "Nie zaznaczono żadnego znacznika" #: dialogs.c:2193 msgid "Game-list options" msgstr "Opcje listy gier" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Błąd" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Błąd krytyczny" #: dialogs.c:2306 msgid "Exiting" msgstr "Wychodzenie" #: dialogs.c:2317 msgid "Information" msgstr "Informacje" #: dialogs.c:2324 msgid "Note" msgstr "Uwaga" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Białe" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Pionek" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Słoń" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Armata" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Zdegraduj" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Puste pole" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Wyczyść szachownicę" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Czarne" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Plik" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Edytuj" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Widok" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Tryb" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Działanie" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Silnik" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Opcje" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Pomoc" #: dialogs.c:2491 msgid "<<" msgstr "<<" #: dialogs.c:2492 msgid "<" msgstr "<" #: dialogs.c:2494 msgid ">" msgstr ">" #: dialogs.c:2495 msgid ">>" msgstr ">>" #: dialogs.c:2774 msgid "Directories:" msgstr "Katalogi:" #: dialogs.c:2775 msgid "Files:" msgstr "Pliki:" #: dialogs.c:2776 msgid "by name" msgstr "wg nazwy" #: dialogs.c:2777 msgid "by type" msgstr "wg typu" #: dialogs.c:2780 msgid "Filename:" msgstr "Nazwa pliku:" #: dialogs.c:2781 msgid "New directory" msgstr "Nowy katalog" #: dialogs.c:2782 msgid "File type:" msgstr "Typ pliku:" #: dialogs.c:2857 msgid "Contents of" msgstr "Zawartość" #: dialogs.c:2883 msgid " next page" msgstr " następna strona" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "NAJPIERW NALEŻY TU WPISAĆ NAZWĘ KATALOGU" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "PROSZĘ SPRÓBOWAĆ INNĄ NAZWĘ" #: draw.c:354 #, fuzzy msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" "Nie zainstalowano domyślnych bierek\n" "Należy określić własny katalog bierek (-pieceImageDirectory)" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Komunikaty silnika" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "%s (%d odwracalny półruch)" msgstr[1] "%s (%d odwracalne półruchy)" msgstr[2] "%s (%d odwracalnych półruchów)" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Czytanie pliku gry (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: nie można wejść do CHESSDIR: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Nie udało się otworzyć pliku \"%s\"\n" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" "Należy skompilować ponownie z większą wartością dla BOARD_RANKS lub " "BOARD_FILES, aby obsługiwać ten rozmiar" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: błędna składnia boardSize %s\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: nieznana nazwa boardSize %s\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" "%s: za mało dostępnych kolorów; próba użycia trybu monochromatycznego\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "Nie można utworzyć zestawu czcionek dla %s.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: żadna czcionka nie pasuje do wzoru %s\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "Nie można otworzyć pliku temp" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Nie udało się otworzyć pliku" #: menus.c:134 msgid "Load game file name?" msgstr "Wczytać nazwę pliku gry?" #: menus.c:179 msgid "Load position file name?" msgstr "Wczytać nazwę pliku pozycji?" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "Zapisać nazwę pliku gry?" #: menus.c:194 msgid "Save position file name?" msgstr "Zapisać nazwę pliku pozycji?" #: menus.c:362 msgid " (with Zippy code)" msgstr " (z kodem Zippy)" #: menus.c:367 #, fuzzy, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2013 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s jest darmowym oprogramowaniem, które NIE posiada gwarancji. Więcej " "informacji można znaleźć w pliku COPYING.\n" "Interfejs GTK tej wersji programu jest eksperymentalny i niestabilny\n" "\n" "Zapraszamy na stronę programu XBoard: http://www.gnu.org/software/xboard/\n" "Najnowsze funkcje można poznać na: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Błędy prosimy zgłaszać na adres: \n" "\n" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "O programie XBoard" #: menus.c:601 msgid "New Game" msgstr "Nowa gra" #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Nowa gra losowa..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Nowa odmiana..." #: menus.c:605 msgid "Load Game" msgstr "Wczytaj grę" #: menus.c:606 msgid "Load Position" msgstr "Wczytaj pozycję" #: menus.c:607 msgid "Next Position" msgstr "Następna pozycja" #: menus.c:608 msgid "Prev Position" msgstr "Poprzednia pozycja" #: menus.c:610 msgid "Save Game" msgstr "Zapisz grę" #: menus.c:611 msgid "Save Position" msgstr "Zapisz pozycję" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Zapisz grę" #: menus.c:613 msgid "Save Games as Book" msgstr "Zapisz gry w postaci książki" #: menus.c:615 msgid "Mail Move" msgstr "Ruch mailowy" #: menus.c:616 msgid "Reload CMail Message" msgstr "Wczytaj wiadomość CMail ponownie" #: menus.c:618 msgid "Quit " msgstr "Wyjście " #: menus.c:623 msgid "Copy Game" msgstr "Skopiuj grę" #: menus.c:624 msgid "Copy Position" msgstr "Skopiuj pozycję" #: menus.c:625 msgid "Copy Game List" msgstr "Skopiuj listę gier" #: menus.c:627 msgid "Paste Game" msgstr "Wklej grę" #: menus.c:628 msgid "Paste Position" msgstr "Wklej pozycję" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "Edytuj grę" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "Edytuj pozycję" #: menus.c:632 msgid "Edit Tags" msgstr "Edytuj znaczniki" #: menus.c:633 msgid "Edit Comment" msgstr "Edytuj komentarz" #: menus.c:634 msgid "Edit Book" msgstr "Edytuj książkę" #: menus.c:636 msgid "Revert" msgstr "Cofnij" #: menus.c:637 msgid "Annotate" msgstr "Dodaj jako komentarz" #: menus.c:638 msgid "Truncate Game" msgstr "Porzuć grę" #: menus.c:640 msgid "Backward" msgstr "Do tyłu" #: menus.c:641 msgid "Forward" msgstr "Do przodu" #: menus.c:642 msgid "Back to Start" msgstr "Na początek" #: menus.c:643 msgid "Forward to End" msgstr "Na koniec" #: menus.c:648 msgid "Flip View" msgstr "Odwróć widok" #: menus.c:651 msgid "Move History" msgstr "Historia ruchów" #: menus.c:652 msgid "Evaluation Graph" msgstr "Wykres wyników" #: menus.c:653 msgid "Game List" msgstr "Lista gier" #: menus.c:657 msgid "Comments" msgstr "Komentarze" #: menus.c:658 msgid "ICS Input Box" msgstr "Okno poleceń ICS" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Szachownica..." #: menus.c:662 msgid "Game List Tags..." msgstr "Znaczniki listy gier..." #: menus.c:667 msgid "Machine White" msgstr "Silnik białe" #: menus.c:668 msgid "Machine Black" msgstr "Silnik czarne" #: menus.c:669 msgid "Two Machines" msgstr "Silnik vs. silnik" #: menus.c:670 msgid "Analysis Mode" msgstr "Tryb analizy" #: menus.c:671 msgid "Analyze Game" msgstr "Analizuj grę" #: menus.c:674 msgid "Training" msgstr "Trening" #: menus.c:675 msgid "ICS Client" msgstr "Klient ICS" #: menus.c:677 msgid "Machine Match" msgstr "Mecz silników" #: menus.c:678 msgid "Pause" msgstr "Pauza" #: menus.c:683 msgid "Accept" msgstr "Akceptuj" #: menus.c:684 msgid "Decline" msgstr "Odrzuć" #: menus.c:685 msgid "Rematch" msgstr "Ponowny mecz" #: menus.c:687 msgid "Call Flag" msgstr "Reklamuj przekroczenie czasu" #: menus.c:688 msgid "Draw" msgstr "Remis" #: menus.c:689 msgid "Adjourn" msgstr "Przerwa" #: menus.c:690 msgid "Abort" msgstr "Zaniechanie gry" #: menus.c:691 msgid "Resign" msgstr "Poddaj partię" #: menus.c:693 msgid "Stop Observing" msgstr "Przerwij obserwację" #: menus.c:694 msgid "Stop Examining" msgstr "Przerwij badanie" #: menus.c:695 msgid "Upload to Examine" msgstr "Wyślij do zbadania" #: menus.c:697 msgid "Adjudicate to White" msgstr "Rozstrzygnij na korzyść białych" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Rozstrzygnij na korzyść czarnych" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Ogłoś remis" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Wczytaj nowy 1. silnik..." #: menus.c:706 #, fuzzy msgid "Load New 1st Engine..." msgstr "Wczytaj nowy 1. silnik..." #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Wczytaj nowy 2. silnik..." #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Ustawienia silnika #1..." #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Ustawienia silnika #2..." #: menus.c:712 msgid "Hint" msgstr "Wskazówka" #: menus.c:713 msgid "Book" msgstr "Książka" #: menus.c:715 msgid "Move Now" msgstr "Wykonaj ruch" #: menus.c:716 msgid "Retract Move" msgstr "Cofnij ruch" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Ogólne..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Kontrola czasu..." #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Wspólne ustawienia silników..." #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Rozstrzyganie..." #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Wczytywanie gry..." #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Zapisywanie gry..." #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Lista gier..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Dźwięki..." #: menus.c:735 msgid "Always Queen" msgstr "Zawsze hetman" #: menus.c:741 msgid "Flash Moves" msgstr "Miganie po ruchu" #: menus.c:743 msgid "Highlight Dragging" msgstr "Podświetlenie podczas przeciągania" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Podświetlenie kursorem" #: menus.c:747 msgid "Move Sound" msgstr "Dźwięk ruchu" #: menus.c:749 msgid "Periodic Updates" msgstr "Częste aktualizacje" #: menus.c:751 msgid "Popup Exit Message" msgstr "Pytaj przed wyjściem" #: menus.c:753 msgid "Show Coords" msgstr "Wyświetlanie współrzędnych" #: menus.c:754 msgid "Hide Thinking" msgstr "Ukrywanie myślenia" #: menus.c:758 msgid "Save Settings Now" msgstr "Zapisz ustawienia" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Zapisz ustawienia przy wyjściu" #: menus.c:764 msgid "Info XBoard" msgstr "O programie" #: menus.c:765 msgid "Man XBoard" msgstr "Dokumentacja XBoard" #: menus.c:767 msgid "XBoard Home Page" msgstr "Strona domowa" #: menus.c:768 msgid "On-line User Guide" msgstr "Przewodnik online" #: menus.c:769 msgid "Development News" msgstr "Aktualności o postępach" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "Raporty o błędach (e-mail)" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "nazwa silnika" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "ruch" #: nengineoutput.c:155 msgid "Engine output" msgstr "Komunikaty silnika" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" "Niezgodność STRIDE w nengineoutput.c\n" "Należy zmienić i skompilować ponownie!" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Wykres wyników" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "Wykres wyników" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "Wyniki" #: ngamelist.c:87 msgid "find position" msgstr "znajdź pozycję" #: ngamelist.c:88 msgid "narrow" msgstr "zawęź" #: ngamelist.c:89 msgid "thresholds" msgstr "progi" #: ngamelist.c:90 msgid "tags" msgstr "znaczniki" #: ngamelist.c:91 msgid "next" msgstr "następny" #: ngamelist.c:92 msgid "close" msgstr "zamknij" #: ngamelist.c:116 msgid "No game selected" msgstr "Nie zaznaczono żadnej gry" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Dalej nie można" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Przeszukiwanie gier (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "poprzednia strona" #: ngamelist.c:214 msgid "next page" msgstr "następna strona" #: ngamelist.c:217 msgid "no games matched your request" msgstr "żadna gra nie spełnia podanych kryteriów" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s - %d/%d gier (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "Nie ma listy gier" #: nhistory.c:109 msgid "Move list" msgstr "Lista ruchów" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: nieznany kolor %s\n" #: usystem.c:230 #, fuzzy, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: nie można przetworzyć koloru tła w \"%s\"\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "%s: nie można przetworzyć nazw kolorów: wyłączenie kolorów\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "BŁĄD: Nieznany użytkownik %s (w ścieżce %s)\n" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "Nie skonfigurowano obsługi portu w" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "polecenie wewnętrzne rcmd nie zostało zaimplementowane w Uniksie" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "biały piksel = 0x%lx, czarny piksel = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "przeglądaj" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "Ctrl" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "Alt" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "Shift" #: xaw/xoptions.c:1314 msgid "OK" msgstr "OK" #~ msgid " (for concurrent playing of a single" #~ msgstr " (dla równoczesnego rozegrania pojedynczego" #~ msgid "Match Options" #~ msgstr "Opcje meczu" #~ msgid "Chat box" #~ msgstr "Okno rozmowy" #~ msgid "Open Chat Window" #~ msgstr "Otwórz okno rozmowy" #~ msgid "ICS ..." #~ msgstr "ICS..." #~ msgid "Match ..." #~ msgstr "Mecz..." #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: Brak dostępu do katalogu XPM %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Dostępne rozmiary dla \"%s\":\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "Błąd: Brak plików \"%s\"!\n" #~ msgid "" #~ "Warning: No DIR structure found on this system --\n" #~ " Unable to autosize for XPM/XIM pieces.\n" #~ " Please report this error to %s.\n" #~ " Include system type & operating system in message.\n" #~ msgstr "" #~ "Ostrzeżenie: Nie znaleziono struktury katalogów w tym systemie --\n" #~ " Niemożliwa automatyczna zmiana rozmiaru bierek XPM/XIM.\n" #~ " Proszę zgłosić ten błąd do %s.\n" #~ " Do wiadomości należy dołączyć informacje o rodzaju systemu " #~ "operacyjnego.\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Błąd %d wczytywania obrazka\n" #~ msgid "cancel" #~ msgstr "anuluj" xboard-4.8.0/po/insert-header.sin0000644000175000001440000000124012421746651013607 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } xboard-4.8.0/po/vi.gmo0000644000175000001440000000726512422467103011472 00000000000000@Y     $) 0 ;GP _l q ~   #.3: LZktw) : FT Ygp_   ' B N R k        - 6 R Y n  %    &  0 M j &v   !    ! * 0 K 'Q 'y "  #>Q d ny # !25, *1$(/.783 ' 0?-&: 9"<+@%64=>); About XBoardAdjudicate DrawAdjudicate to BlackAdjudicate to WhiteAnnotateArchbishopAuto FlagAuto Flip ViewAuto-Raise BoardBishopBlackBlindfoldBoard...BookCannonChancellorClear boardCommentsCopy Game ListDefault BeepEditEdit CommentEdit TagsElephantEmpty squareGame List Tags...GeneralGeneral OptionsHelpHighlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintICS ClientKingKnightLoad Game OptionsMachine MatchNew Shuffle GameNo SoundOKOne-Click MovingPawnPeriodic UpdatesPlayPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPromoteQueenRookSave Game OptionsSave Settings NowSave Settings on ExitShow CoordinatesShow CoordsSound OptionsTagsTest LegalityTrainingUpload to ExamineWhiteProject-Id-Version: GNU xboard master-20110507 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thông Tin Về XBoardPhân Xử HòaPhân Xử Đen ThắngPhân Xử Trắng ThắngChú GiảiSĩTự Động Đặt CờTự Động Xoay Bàn CờTự Động Hiện Bàn CờTượngĐenMù QuángBàn Cờ...Cẩm Nang Khai Cuộc...PháoXeXóa Bàn CờBình ChúCopy Danh Sách Các Ván Cờ Vào ClipboardTiếng tút ngầm địnhSoạnSoạn Bình Chú...Soạn Các Thẻ...TượngÔ TrốngCác Thẻ của Danh Sách Ván CờChung...Các Lựa Chọn ChungHướng DẫnĐánh Dấu Khi Đang Kéo Quân CờĐánh Dấu Nước CuốiĐánh Dấu Với Mũi TênĐánh Dấu Với Mũi TênGợi Ý...Kết Nối Chơi Với Máy Chủ ICSVuaMãCác Lựa Chọn Tải Ván CờTrận Đấu Với MáyTráo Bên...Không âm thanhĐượcĐi Quân Với Chỉ Một BấmTốtCập Nhật Theo Chu KỳChơiBật Cửa Sổ Thoát Chương trìnhBật Cửa Sổ Thoát Chương trìnhBật Cửa Sổ Lỗi Nước ĐiPhong CấpHoàng HậuXeCác Lựa Chọn Lưu Ván CờLưu Các Tham Số NgayLưu Các Tham Số Khi Kết ThúcHiện Tọa ĐộHiện Tọa ĐộÂm thanhCác ThẻKiểm Tra Hợp LệĐang Dậy MáyTải Để Trắngxboard-4.8.0/po/zh_TW.po0000644000175000001440000015604212422467103011741 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110507\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "通訊協定版本 %d 不被支持" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "非法的\"timeControl\"(時間控制)選項 %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "非法的\"searchTime\"(搜尋時間)選項 %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "變體 %s 只在ICS模式下支持" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "未知的變體名 %s" #: backend.c:1452 msgid "Starting chess program" msgstr "啟動國際象棋程式" #: backend.c:1475 msgid "Bad game file" msgstr "棋局檔案錯誤" #: backend.c:1482 msgid "Bad position file" msgstr "盤面檔案錯誤" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "沒有象棋程式時無法進行比賽" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "無法打開通訊連接埠 %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "無法連接主機 %s 連接埠 %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "未知的\"initialMode\"(初始模式)選項 %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "\"AnalyzeFile\"(分析檔案)模式必須指定一個棋局檔案" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "\"Analysis\"(分析)模式必須啟動國際象棋引擎" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "\"Analysis\"(分析)模式無法在ICS模式下工作" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "\"MachineWhite\"(電腦執紅)模式必須啟動國際象棋引擎" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "\"MachineWhite\"(電腦執紅)模式無法在ICS模式下運行" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "\"MachineBlack\"(電腦執黑)模式必須啟動國際象棋引擎" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "\"MachineBlack\"(電腦執黑)模式無法在ICS模式下運行" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "\"TwoMachines\"(分析)模式必須啟動國際象棋引擎" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "\"TwoMachines\"(電腦對弈)模式無法在ICS模式下運行" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "\"Training\"(訓練)模式必須指定一個棋局檔案" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "發送訊息給ICS時出錯" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "讀取鍵盤時出錯" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "讀取鍵盤時遇到檔案尾" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "發送訊息給顯示器時出錯" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "讀取著法時出錯,出現兩個開頭" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "讀取著法時出錯,巢狀錯誤" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "連接被ICS關閉" #: backend.c:4286 msgid "Error reading from ICS" msgstr "讀取ICS訊息時出錯" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "棋局太長,需要增加\"MAX_MOVES\"並重新編譯" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "讀取著法時出錯,超出棋盤" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "無法解析從ICS讀到的著法\"%s\"" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say 內部錯誤,非法的\"moveType\"(著法類型) %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "你在執黑" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "你在執紅" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "輪到紅方走棋" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "輪到黑方走棋" #: backend.c:6761 msgid "Displayed position is not current" msgstr "顯示的盤面不是當前盤面" #: backend.c:7007 msgid "Illegal move" msgstr "著法錯誤" #: backend.c:7084 msgid "End of game" msgstr "棋局結束" #: backend.c:7087 msgid "Incorrect move" msgstr "著法錯誤" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "從%s機器讀到不合法著法\"%s\"" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s 不支持分析功能" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "不合法著法\"%s\" (%s國際象棋程式拒絕接受該著法)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "無法啟動%s國際象棋程式 %s(在主機 %s 上),%s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "提示 %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "電腦同意和棋" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "ICS輸出不明確的著法\"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "ICS輸出不明確的著法\"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "著法斷開" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "變體 %s 不被 %s 所支持" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "無法啟動'%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "等待第一個國際象棋程式" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "等待第二個國際象棋程式" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 msgid "Bad tournament file" msgstr "" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "不合法著法 %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "不明確的著法 %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "無法打開\"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "無法建立棋局列表" #: backend.c:12190 msgid "No more games in this message" msgstr "這條訊息不包含更多的棋局" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "尚未有棋局載入" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "無法再後退了" #: backend.c:12678 msgid "Game number out of range" msgstr "棋局數量超出範圍" #: backend.c:12689 msgid "Can't seek on game file" msgstr "無法搜尋棋局檔案" #: backend.c:12747 msgid "Game not found in file" msgstr "檔案中沒有找到棋局" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "檔案中的FEN盤面錯誤" #: backend.c:13030 msgid "No moves in game" msgstr "棋局中沒有著法" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "尚未有盤面載入" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "無法搜尋盤面檔案" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "檔案中沒有找到盤面" #: backend.c:13245 msgid "Black to play" msgstr "輪到黑方走棋" #: backend.c:13248 msgid "White to play" msgstr "輪到紅方走棋" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "你尚未走棋" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "不存在未完成棋局" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "呼叫cmail失敗" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "等待對手回應\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "本棋局仍需走棋\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "兩棋局皆仍需走棋\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "所有 %d 棋局皆仍需走棋\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "棋局 %s 仍需走棋\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "不存在未完成棋局\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "準備送信就緒\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "棋局 %s 仍需走棋\n" #: backend.c:14252 msgid "Edit comment" msgstr "編輯註解" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "編輯註解 %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "沒有輪到紅方走棋" #: backend.c:14501 msgid "It is not Black's turn" msgstr "沒有輪到黑方走棋" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "等待對手走棋" #: backend.c:14774 msgid "Training mode off" msgstr "訓練模式已關閉" #: backend.c:14782 msgid "Training mode on" msgstr "訓練模式已打開" #: backend.c:14785 msgid "Already at end of game" msgstr "棋局已經結束" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "注意:你正在進行棋局" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "注意:你正在觀棋棋局" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "注意:你正在研究棋局" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "格子已有棋子" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "該著法沒有待定的提議" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "對手沒有超時" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "必須走完棋才能提和" #: backend.c:15781 msgid "You are not examining a game" msgstr "沒有分析棋局" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "暫停時不能復原棋局" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "輪到你走棋" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "等待對手走棋" #: backend.c:15909 msgid "No hint available" msgstr "沒有可用的提示" #: backend.c:15924 backend.c:15955 ngamelist.c:364 #, fuzzy msgid "Game list not loaded or empty" msgstr "尚未有棋局載入" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "發送訊息到%s國際象棋程式時出錯" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "錯誤:%s國際象棋程式(%s)異常終止" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "從%s國際象棋程式(%s)接收訊息時出錯" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "顯示的著法不是當前著法" #: backend.c:17083 msgid "Could not parse move" msgstr "無法解析著法" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "雙方都超時了" #: backend.c:17210 msgid "White's flag fell" msgstr "紅方超時" #: backend.c:17232 msgid "Black's flag fell" msgstr "黑方超時" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "剪貼簿的FEN盤面錯誤" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "無法解析著法" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "封盤(J) F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "通用引擎設定(E)... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "一般選項" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "聲音" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "動畫拖曳(D)" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "動畫走棋(A)" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "自動超時判負(F) Ctrl+Shift+F" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "自動翻轉棋盤(V)" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "盲棋(B)" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "與人對弈時隱藏思考細節" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "標記上一著法(M)" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "用箭頭突出移動" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "單擊移動(M)" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "定期更新(分析模式)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "同步思考(N)" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "離開時提示(P)" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "提示錯誤著法(E)" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "取得著法列表(G)" #: dialogs.c:424 msgid "Show Coordinates" msgstr "顯示坐標(C)" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "檢查著法合理性(L) Cl+Sh+L" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 #, fuzzy msgid "Zoom factor in Evaluation Graph:" msgstr "審局圖" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "馬" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "警告: 第二個引擎(%s) 不支持此!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "變種" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "最大CPU數" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "雜湊表大小(MB)" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "EGTB 路徑" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "EGTB 大小(MB)" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "庫著法深度" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "庫變例" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "引擎1有自用庫" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "通用引擎設定" #: dialogs.c:648 msgid "Detect all Mates" msgstr "檢測將殺(M)" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "驗證引擎聲明(V)" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "子力不足時判和(I)" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "簡易和棋判決(T)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "幾著後判和" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "輸/贏判決門檻" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "引擎 #1 是絕對分數" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "引擎 #2 是絕對分數" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "裁決紅贏 (W)" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "自動\"kibitz\"(A)" #: dialogs.c:678 msgid "Auto-Comment" msgstr "自動註解(A)" #: dialogs.c:679 msgid "Auto-Observe" msgstr "自動觀棋(O)" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "自動改變棋盤大小(R)" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "背景觀察(v)" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "雙棋盤(D)" #: dialogs.c:684 msgid "Get Move List" msgstr "取得著法列表(G)" #: dialogs.c:685 msgid "Quiet Play" msgstr "落子無聲(Q)" #: dialogs.c:686 msgid "Seek Graph" msgstr "可選對手圖表(k)" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "自動刷新圖表(R)" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "預先走棋(P)" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "紅方先走(W)" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "黑方先走(B)" #: dialogs.c:696 msgid "Alarm" msgstr "提示" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS設定" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 #, fuzzy msgid "No games before year:" msgstr "尚未有棋局載入" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "載入棋局選項" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "儲存棋局選項" #: dialogs.c:796 msgid "No Sound" msgstr "無聲" #: dialogs.c:797 msgid "Default Beep" msgstr "預設聲音" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "播放" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "聲音" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "黑子" #: dialogs.c:908 msgid "Light Square Color:" msgstr "白格" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "黑格" #: dialogs.c:920 msgid "Highlight Color:" msgstr "格子標記" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "預先走棋標記" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "黑白" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "棋盤選項" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "同步思考(N)" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "編輯(E)" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "編輯標籤(T)" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "啟動位置號碼(S)" #: dialogs.c:1565 #, fuzzy msgid "randomize" msgstr "隨機" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "洗牌遊戲(u)..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "時間倍數" #: dialogs.c:1609 #, fuzzy msgid "Engine #1" msgstr "引擎輸出" #: dialogs.c:1610 #, fuzzy msgid "Engine #2 / Human" msgstr "引擎1有自用庫" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "發送訊息給國際象棋程式時出錯" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "取消(C)" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "王" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "一般選項(G)..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "馬" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "象" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "車" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "國師" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "宰相" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "后" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "升變" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "變種" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "ICS設定" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "向上" #: dialogs.c:2143 msgid "down" msgstr "向下" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "載入棋局選項" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "錯誤" #: dialogs.c:2306 msgid "Fatal Error" msgstr "嚴重錯誤" #: dialogs.c:2306 msgid "Exiting" msgstr "離開" #: dialogs.c:2317 msgid "Information" msgstr "資訊" #: dialogs.c:2324 msgid "Note" msgstr "註解" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "紅方" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "兵" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "象" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "炮" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "降級" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "清空格子" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "清空棋盤" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "黑方" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "檔案(F)" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "編輯(E)" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "模式(M)" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "行為(A)" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "選項(O)" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "說明(H)" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "檔案(F)" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "過濾器" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "過濾器" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "編輯註解(C) *.*" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "引擎輸出" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, fuzzy, c-format msgid "Reading game file (%d)" msgstr "棋局檔案錯誤" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 #, fuzzy msgid "Failed to open file" msgstr "呼叫cmail失敗" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "關於XBoard(A)" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "洗牌遊戲(u)..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "洗牌遊戲(u)..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "變種" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "載入棋局選項(L)... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "盤面檔案錯誤" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "盤面檔案錯誤" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "升變" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "儲存局面(A)... Ctrl+Shift+S" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "複製遊戲列表到剪貼簿" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "複製局面到剪貼簿(Y) Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "複製遊戲列表到剪貼簿" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "貼上棋局自剪貼簿(P) Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "從剪貼簿貼上局面(T) Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "編輯註解" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "盤面檔案錯誤" #: menus.c:632 msgid "Edit Tags" msgstr "編輯標籤(T)" #: menus.c:633 msgid "Edit Comment" msgstr "編輯註解(C)..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "開局庫(B)..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "註解(A)" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "截斷後面的著法(T)" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "輪到黑方走棋" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "最後局面(E) Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "自動翻轉棋盤(V)" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "取得著法列表(G)" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "審局圖" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "遊戲列表..." #: menus.c:657 msgid "Comments" msgstr "編輯註解(C) *.*" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "棋盤選項(B)..." #: menus.c:662 msgid "Game List Tags..." msgstr "遊戲列表..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "電腦執紅(W) Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "電腦比賽(M)" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "電腦對弈(M) Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "分析模式(A) Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "分析檔案(F) Ctrl+F" #: menus.c:674 msgid "Training" msgstr "訓練(N)" #: menus.c:675 msgid "ICS Client" msgstr "ICS客戶端" #: menus.c:677 msgid "Machine Match" msgstr "電腦比賽(M)" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "超時判負(F) F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "停止觀棋(O) F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "停止研究(X) F11" #: menus.c:695 msgid "Upload to Examine" msgstr "上傳檢查(U)" #: menus.c:697 msgid "Adjudicate to White" msgstr "裁決紅贏 (W)" #: menus.c:698 msgid "Adjudicate to Black" msgstr "裁決黑贏 (B)" #: menus.c:699 msgid "Adjudicate Draw" msgstr "提請仲裁(D)" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "引擎 #1 設定" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "通用引擎設定(E)... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "引擎 #1 設定" #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "引擎 #2 設定" #: menus.c:712 msgid "Hint" msgstr "提示(H)..." #: menus.c:713 msgid "Book" msgstr "開局庫(B)..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "悔棋(R) Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "一般選項(G)..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "時間設定(T)... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "通用引擎設定(E)... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "判決(j)... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "載入棋局選項(L)... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "遊戲列表..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "聲音選項(D)..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "拖曳醒目提示(H)" #: menus.c:746 msgid "Highlight With Arrow" msgstr "用箭頭突出移動" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "定期更新(U)" #: menus.c:751 msgid "Popup Exit Message" msgstr "離開時提示(P)" #: menus.c:753 msgid "Show Coords" msgstr "顯示坐標(C)" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "與人對弈時隱藏思考細節" #: menus.c:758 msgid "Save Settings Now" msgstr "立即儲存設定(N)" #: menus.c:759 msgid "Save Settings on Exit" msgstr "離開時儲存設定(X)" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "關於XBoard(A)" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "引擎輸出" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "著法" #: nengineoutput.c:155 msgid "Engine output" msgstr "引擎輸出" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "審局圖" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "審局圖" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "盤面檔案錯誤" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "編輯標籤(T)" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "沒有選中棋局" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "無法再前進了" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, fuzzy, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d" #: ngamelist.c:283 msgid "There is no game list" msgstr "沒有棋局列表" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "確定" #~ msgid "ICS ..." #~ msgstr "ICS選項..." #~ msgid "cancel" #~ msgstr "取消(C)" #~ msgid "New Game Ctrl+N" #~ msgstr "開新棋局(N) Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "新變種(V)... Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "載入棋局(L)... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "載入局面(O)... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "儲存棋局(S)... Ctrl+S" #~ msgid "Quit Ctr+Q" #~ msgstr "離開(Q)" #~ msgid "Copy Game Ctrl+C" #~ msgstr "複製棋局到剪貼簿(C) Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "編輯棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "編輯局面(d) Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "恢復(V)" #~ msgid "Backward Alt+Left" #~ msgstr "下一著(B) Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "上一著(F) Alt+Right" #~ msgid "Back to Start Alt+Home" #~ msgstr "起始局面(S) Alt+Home" #~ msgid "Flip View F2" #~ msgstr "翻轉棋盤(V) F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "顯示引擎輸出 Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "顯示歷史著法 Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "顯示評價圖 Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "顯示棋局列表(L) Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "電腦執黑(B) Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "編輯棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "編輯局面(d) Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "暫停(P) Pause" #~ msgid "Accept F3" #~ msgstr "接受(A) F3" #~ msgid "Decline F4" #~ msgstr "拒絕(C) F4" #~ msgid "Rematch F12" #~ msgstr "重賽(M) F12" #~ msgid "Draw F6" #~ msgstr "提和(D) F6" #~ msgid "Adjourn F7" #~ msgstr "封盤(J) F7" #~ msgid "Abort F8" #~ msgstr "中止(B) F8" #~ msgid "Resign F9" #~ msgstr "認輸(R) F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "立即走棋(M) Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "總是升變為皇后(Q) Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "動畫走棋(A) Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "自動超時判負(F) Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "同步思考(N) Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "隱藏引擎思考 Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "檢查著法合理性(L) Cl+Sh+L" #~ msgid "Drop" #~ msgstr "取消" #, fuzzy #~ msgid "could not open: " #~ msgstr "無法解析著法" #~ msgid "ok" #~ msgstr "確定" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "拖曳醒目提示(H)" #~ msgid "White " #~ msgstr "紅方 " #~ msgid "Black " #~ msgstr "黑方 " #~ msgid "Close" #~ msgstr "關閉(C)" #~ msgid "sec/move" #~ msgstr "每走一步加" xboard-4.8.0/po/quot.sed0000644000175000001440000000023112421746651012026 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g xboard-4.8.0/po/de.gmo0000644000175000001440000010356612422467103011445 00000000000000d(( (())9)V)&v)))4) *5)*#_**7** ****++++?+S+Y+l+7s+++ +"++ ,),%F, l,%y,,,, , ,, ,, - -+-<-L- N- \-}----- --..,.3.9. L.Z. l. v.0... .*.. //-/)J/t/////////0 0 %000 H0S0 \0h0.0 00000 1 1&1 51%C1i1111!1111 2'2/252<2 M2Z2x2!2V233.3'43$\33 3 3 3 3 3 3 333!34 94F4 ]4i4 p4z44 444 44&4! 5&-5(T5}55!555606P6a6r6z666"6"6.7 47@7 E7P7 k7u7|77X787 28 >8H8P8_8 a8k8}888/88 99&9 69D9b9z999999999 : : : *: 8:,F: s:0:!:: :;#);M; \; h;#t;;;;;;;<<<$< *<5<I< e<o< <<<<<< < < ==-2=)`=-=)= = =%=">@> E>R> [> f>p> v>>>>>> > > >>??-5?c???????@#@3@G@!\@~@@@@+@@@ AA3A;AVA eApAA!AAA AAAAA BB3BEB `BnB$vBBBBB5BECJC_CnC uCCCC C*CC CDD+D ?DMD_DuDDD DDDD EE %E0EBEHEWEpEvEEE EE#E EEFF6FMF&eF!F*F(F&G)G8GGG^GoGGGGGGSGH&0H WHdHH-HHHH"H I I /I,m;9nun n(n*nnn noooo-o(1o(Zo oo ooooo*oApap{ppp*ppq&qBq^qvqqqqqqqrr+r ;r\rerrrrr&rrrrss6sLs)csss ss s-t4t=t?tUtFtt`tu9uPuYukupuuu3uuuvv:vWvjvvv v"vww'w>w Tw`w rw|www#wwwwwxx+&xRxexwxxxx1x2 y3s|;||5}<}K} e}}}1} }}~0~.F~ u~*~.~~)~0H g ))%= KQ g$t ̀0-;^B_݁B=u6j!89Dr1*1 O Ze n xԅ,#,0;l&} 3Ć  #(/.^RNP@(@!gi,l|-2$Ld5jt.F*+wi{ ,o+td%W45aL#*E/IYf'wXR86U]# nOSFB~~;gx s) u ;!J1T^?l"r8.b_oqW%`7|v7:U9yPzSN>x3A <<eXpC/c1A-Y"K]b?q\[3_ ZcMCm2`es O0huE\)p} JTfKj9(h[=krm'6a {4Q zVIvM:Q&$=B&VkDZ0yG>G^D}HnH  next page (with Zippy code)# no engines are installed%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s program exits in draw position (%s)%s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty)AbortAbout XBoardAcceptActionAdd this engine to the listAdjournAdjudicate DrawAdjudicate to BlackAdjudicate to WhiteAlarmAlarm Time (msec):Alarm:All games in tourney '%s' are already played or playingAlready at end of gameAltAlways QueenAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis ModeAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyze GameAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-Create Logon ScriptAuto-KibitzAuto-ObserveAuto-Raise BoardAuto-Save GamesBBack to StartBackground Observe while PlayingBackwardBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook FaultBook file exists! Try again for overwrite.Both flags fellCall FlagCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannonCannot build game listCaptainCar HornChallenge Text Colors:Challenge:ChancellorChannel #1 Text Colors:Channel 1:Channel:Clear boardClick clock to clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsConnection closed by ICSContents ofCopy GameCopy Game ListCopy PositionCould not connect to host %s, port %sCould not create bookCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCtrlDDark Square Color:Dark-Squares Texture File:DeclineDeferDemoteDevelopment NewsDirectories:Directory with Pieces Images:Displayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.DrawDraw after N Moves Total:Draw:Dual Board for Background-Observed GameERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit GameEdit PositionEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElephantElo of strongest player at least:Elo of weakest player at least:Empty squareEnable Variation TreesEnd of gameEngineEngine #1Engine #2 / HumanEngine Command:Engine OutputEngine SettingsEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation GraphEvaluation graphExitingFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Fatal ErrorFileFile type:File with Start Positions:Filename:Files:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFlash MovesFlip ViewForwardForward to EndGGame ListGame List Tags...Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash keys are differentHash-Table Size (MB):HelpHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS Input BoxICS OptionsICS input boxICS text menuIllegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sIncomplete \ escape in value for %sIncorrect moveInfo XBoardInformationInvalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKibitz Text Colors:Kibitz:KingKnightLaserLieutenantLight Square Color:Light-Squares Texture File:Load GameLoad Game OptionsLoad PositionLoad first engineLoad game file name?Load position file name?Load second engineLose:Machine BlackMachine MatchMachine WhiteMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMan XBoardMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMove HistoryMove NowMove SoundMove listMove:N-Move Rule:NPSNegate Score of Engine #1Negate Score of Engine #2New GameNew Shuffle GameNew VariantNew directoryNext PositionNickname (optional):No SoundNo engine %s is installedNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOn-line User GuideOne-Click MovingOpening-Book Filename:OptionsOther Channel Text Colors:Own Games OnlyPaste GamePaste PositionPausePause between Match Games (msec):PawnPeriodic UpdatesPick new gamePlayPolyglot book not validPolygot Directory:Ponder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePrev PositionPromotePull pawn backwards to under-promoteQueenRReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Recompile with larger BOARD_RANKS or BOARD_FILES to support this sizeReload CMail MessageReplace EngineResignRetract MoveRookS-Shout Text Colors:S-Shout:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save GameSave Game OptionsSave Games as BookSave Games on File:Save PositionSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:Select Engine:Select engine from list:ShiftShout Text Colors:Shout:Show CoordinatesShow CoordsShow Target SquaresSocket support is not configured inSound OptionsSounds Directory:Start-position number:Starting %s chess programStarting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Stop ExaminingStop ObservingSwiss tourney finishedSync after cycleSync after roundTRY ANOTHER NAMETagsTell Text Colors:Tell:That square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTournament file: Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTruncate GameTry-Out Sound:Two MachinesTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse external piece bitmaps with their own colorsUser FileVariant %s not supported by %sVariant %s supported only in ICS modeViewWaiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarlordWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWin / Loss Threshold:Win:XBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYour opponent is not out of timeZoom factor in Evaluation Graph:bad searchTime option %sbad timeControl option %sbrowseby nameby typeclassicalclosedowne-Mail Bug Reportengine namefactoryfailed writing PVfind positionfirstincrementalinternal rcmd not implemented for Unixmovenextnext pageno games matched your requestprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshufflethresholdstwo kingsupvs.white pixel = 0x%lx, black pixel = 0x%lx your opponent kibitzes: %sProject-Id-Version: xboard 4.7.2 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2013-11-24 18:22-0800 Last-Translator: Arun Persaud Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); nächste Seite (mit Zippy)# keine Schachprogramme installiert%s - %d/%d Spiele (%d-%d-%d)%s unterstützt keine AnalyseSchachprogramm %s hat zu viele Optionen %s Schachprogramm beendet in Remisstellung (%s)%s: falsche boardSize Syntax %s %s: cd zu CHESSDIR funktioniert nicht: %s: kann Farbname nicht parsen; deaktiere Farben %s: keine Schriften stimmen mit Muster %s überein %s: nicht genügend Farben vorhanden; versuche monochrom Modus %s: unbekannter Name fuer boardSize %s %s: nicht erkannte Farbe %s (Verzeichnis wird vom Schachprogrampfad genommen, falls leer)AbbrechenÜber XBoardAnnehmenAktionFüge diese Schachprogramm zur Liste hinzuAussetzenAls Remis abschätzenSchwarz den Gewinn zuerkennnenWeiß den Gewinn zuerkennenAlarmAlarmzeit (msek):Alarm:Alle Spiele im Turnier »%s« sind entweder beendet oder werden gespieltSchon am Ende der PartieAltImmer KöniginNicht eindeutiger Zug in der ICS-Ausgabe: »%s«Nicht eindeutiger Zug: %d.%s%sAnalyse-ModusAnalyse-Modus funktioniert nicht im ICS-ModusAnalyse-Modus benötigt ein SchachprogrammSpiel analysieren»Analysiere Datei«-Modus benötigt eine PartiedateiZiehen animierenZiehen animierenAnnotierenErzbischofZeit automatisch reklamierenBrett automatisch drehenAutomatische KommentareAutomatisch Login-skript erzeugenAuto-KibitzAutomatisch BeobachtenAutomatisch das Brett in den Vordergrung bringenAutomatisch Partien speichernBZurück zum AnfangBeobachte im Hintegrund während einer PartieZurückSchlechte FEN-Stellung in der ZwischenablageSchlechte FEN-Stellung in DateiSchlechte FEN vom Schachprogramm erhaltenFehlerhafte SucheFehler in PartiedateiFalscher Integer-wert %sFehler in PositionsdateiFehler in TurnierdateiLäuferSchwarzFarbe schwarze Figuren:Schwarz am ZugSchwarz überschritt die ZeitkontrolleBlindschachBretteinstellungenBrettgröße (-1 = default für gewählte Variante):Brett…BuchBuchfehlerBuchdatei existiert! Versuche erneut zum Überschreiben.Beide Zeitkontrollen überschrittenZeit reklamierenKann nicht weiter zurückgehenKann nicht weiter vorwärts gehenPartie ohne Schachprogram ist nicht möglichKann »%s« nicht öffnenKann temporäre Datei nicht öffnenKann nicht in der Partiedatei suchenKann nicht in Stellungsdatei suchenAbbrechenKanoneKann Zugliste nicht erstellenKapitänHupeTextfarbe Herausforderung:Herausforderung:KanlzerTextfarbe Kanal #1:Kanal 1:Kanal:Brett leerenKlicke auf eine Uhr, um das Brett zu leerenVeränderungen an der Uhr sind im »Auto-flag«-Modus nicht erlaubtKlone TurnierSchließe ICS Programmanalyse…Nachrichten kolorierenKommentareVerbindung zum ICS beendetInhalt vonPartie kopierenPartieliste kopierenStellung kopierenVerbindung zu Hostrechner %s, Portnummer %s konnte nicht hergestellt werdenKonnte Buch nicht erzeugenKonnte Kommunikationsport %s nicht öffnenKonnte Zug nicht parsenSchreibzugriff auf Turnierdatei nicht möglichKonnte Zug »%s« vom ICS nicht parsenStrgDSchwarzes Feld:Texturdatei für schwarze Felder:AblehnenvertagendegradierenEntwicklungsneuigkeitenVerzeichnisse:Verzeichnis mit Bildern für Figuren:Angezeigter Zug ist nicht aktuellAngezeigte Position ist nicht die AktuelleDie angezeigt Stellung ist nicht die aktuelle. Gehen Sie vorwärts zur richtigen Stellung und versuchen Sie es erneut.RemisRemis nach N Zügen (total):Remis:Zweites Brett für beobachtetes SpielFEHLER: unbekannter Benutzer %s (im Pfad %s) BearbeitenEditiere BuchKommentar bearbeitenPartie editiereStellung editierenMarkierung bearbeitenBuch editierenEditiere KommentarEditiere Kommentar für %d.%s%sElefantMind. Elo des stärksten Spielers:Mind. Elo des schwächsten Spielers:Leeres FeldErlaube VariantenEnde des SpielsSchachprogrammSchachprogramm #1Schachprogram #2 / SpielerSchachprogramkommando:SchachprogrammausgabeSchachprogrammeinstellungenSchachprogramm hat keine OptionenSchachprogrammausgabeFehlerFehler beim Erstellen der Zugliste: extra SchachbrettFehler beim Erstellen der Zugliste: verschachteltFehler beim Erstellen der Zugliste: zwei DateiköpfeFehler beim Lesen vom Schachprogramm %s (%s)Fehler beim Lesen vom ICSFehler beim Lesen der TastaturFehler beim Schreiben zum Schachprogramm %sFehler beim Schreiben zum ICSFehler beim Schreiben zum SchachprogrammFehler beim Schreiben auf dem DisplayFehler: %s Schachprogramm (%s) unerwartet beendetAuswertungsgraphAuswertungsgraphBeendeFehler beim Aufruf von cmailFehler beim Öffnen der DateiFehler beim Öffnen der Datei '%s' Fehler beim Öffnen der Datei »%s«Konnte Schachbrettzeichenkette nicht parsen: »%s«Konnte %s Schachprogram %s auf %s nicht starten: %s Schwerwiegender FehlerDateiDateientyp:Datei mit Startstellung:Dateinname:Dateien:Erster Zug von Schwarz:Erster Zug von Weiß:Ändern Sie ein Schachprogramm indem Sie die Liste der Teilnehmner im Turnieroptionendialog editierenBitte geben Sie zuerst eine existierende Turnierdatei, die geklont werden kannZüge aufblitzen lassenBrett drehenVorwärtsZur SchlussstellungGPartielistePartie Markierungen…Noch keine Partie geladenSpiel in Datei nicht gefundenPartienummer außerhalb des BereichsPartie zu lang; erhöhe MAX_MOVES und kompiliere neuSpieleliste-optionenLücke in ZuglisteGeneralAllgemeine EinstellungenZugliste abholenHabe Ende-der-Datei von der Tastatur erhaltenHash-schlüssel verschiedenGröße der Hashtabelle (MB):HilfeFarbe zum Hervorheben:Züge hervorhebenLetzten Zug hervorhebenMit Pfeil hervorhebenHervorhebung mit PfeilHinweisHinweis: %sICS-ClientICS EingabefeldICS OptionenICS EingabefeldICS-TextmenüIllegaler Zughinweis »%s« vom Schachprogramm %sUngültiger ZugIllegaler Zug »%s« (abgelehnt vom Schachprogram %s)Illegaler Zug »%s« vom Schachprogramm %sIllegaler Zug (abgelehnt vom ICS)Illegaler Zug in der ICS-Ausgabe: "%s"Illegaler Zug: %d.%s%sUnvollständiges \ escape im Wert von »%s«Ungültiger ZugInfo über XBoardInformationUngültige Paarungen vom PaarungsprogrammSchwarz ist am ZugWeiß ist am ZugSchwarz ist nicht am ZugWeiß ist nicht am ZugSie sind am ZugTextfarbe Kibitz:Kibitz:KönigSpringerLaserLeutnantWeißes Feld:Texturedatei für weiße Felder:Partie laden…Spieleinstellungen ladenStellung ladenLade erstes SchachprogrammLade Partiedatei mit Namen?Lade Stellungsdatei mit Namen?Lade zweites SchachprogrammVerloren:Schachprogramm schwarzSchachprogramm PartieSchachprogramm weißDas Schachprogramm akzeptiert dein Remisangebot»Schachprogramm Schwarz«-Modus funktioniert nicht im ICS-Modus»Schachprogramm Schwarz«-Modus benötigt ein Schachprogramm»Schachprogramm Weiß«-Modus funktioniert nicht im ICS-Modus»Schachprogramm Weiß«-Modus benötigt ein SchachprogrammVerschicke ZugXBoard-HilfePartie %s gegen %s: Endergebnis %d-%d-%dMaximal Anzahl der CPUs pro Schachprogram:ModusZuglisteJetzt ziehenKlang für ZugZuglisteZug:N-Züge Regel:NPSNegiere Bewertung des 1. SchachprogrammsNegiere Bewertung des 2. SchachprogrammsNeue PartieNeue Shuffle-PartieNeue VarianteNeues VerzeichnisNächste StellungSpitzname (optional):Kein TonDas Schachprogram %s ist nicht installiertEin Schachprogram mit dem angegebenen Namen ist nicht installiertNoch keine Partie geladenKeine Partie selektiertKeine Partie vor Jahr:Kein Hinweis erhältlichKeine weiteren Partien in dieser NachrichtKeine Züge in dem SpielKein Paarungsprogram angegebenNoch keine Stellung geladenKeine Markierung selektiertKeine laufenden PartienKeine laufenden Partien Fehlender Wert für Argument %sNicht genügend TeilnehmerNotizAnzahl der Linien:Anzahl der Reihen:Anzahl der Turnierrunden:OKOnline BenutzerhandbuchEin-Klick ZügeDateiname des Eröffnungsbuches:OptionenTextfarbe andere Kanäle:Nur eigene PartienPartie einfügenStellung einfügenPausePause zwischen Tournierspielen (msek):BauerPeriodische UpdatesWähle neues SpielSpielenPolyglot-buch nicht zulässigPolyglot-verzeichnis:Nächsten Zug abwägenDialogfenster für Nachricht beim BeendenPopup Nachricht beim BeendenDialogfenster für ZugfehlerStellung in Datei nicht gefundenVorherige StellungumwandlungBewege Bauern rückwärts zum UnterverwandelnKöniginRLese Partiedatei (%d)Bereit zum Versenden der Mail Kompiliere erneut mit Unterstützung von BOARD_RANKS oder BOARD_FILES!Kompiliere erneut mit größeren BOARD_RANKS oder BOARD_FILES, um diese Größe zu unterstützenCMail Nachricht erneut ladenErsetze SchachprogrammAufgebenZug zurücknehmenTurmTextfarbe S-Ruf:S-Ruf:Gleiches MaterialGleiches Material mit genau gleicher BauernstrukturSpeichere Endstellung in Datei:Partie speichern…Spieleinstellungen speichernPartien speichern als BuchPartien speichern als Datei:Speichere StellungEinstellungen jetzt speichernEinstellung am Ende speichernSpeichere Turnierspiele:Speichere Partiedatei mit Namen?Speicher Stellungsdatei mit Namen?Speichere SpielSpeichere Stellung Durchsuche Spiele (%d)Bewertung in ZuglisteSuch-modus:Sekunden pro Zug:SuchgraphTextfarbe Spielgesuch:Gesuch:Wähle Schachprogramm:Wähle Schachprogram aus der Liste:UmschaltTextfarbe Ruf:Ruf:Zeige KoordinatenZeige KoordinatenZeige ZielfeldSocketunterstützung ist nicht konfiguriertKlangeinstellungenKlangverzeichnis:Startposition-Nummer:Starte %s SchachprogrammStarte SchachprogrammFehler beim Starten »%s«Sie müssen noch einen Zug für Partie %s machen Sie müssen noch einen Zug für die Partie machen Sie müssen noch Züge für alle %d Partien machen Sie müssen noch Züge für beide Partien machen Sie müssen noch Züge für Partie %s machen Untersuchen beendenBeobachtung beendenTurnier im Schweizer System beendetSync. nach ZyklusSync. nach der RundeVERSUCHE EINEN ANDEREN NAMENMarkierungenTextfarbe Mitteilung:Mitteilung:Dieses Feld ist besetztDie CMail-Nachricht wurde noch nicht geladen. Benutzen sie »CMail Nachricht erneut laden« und führen Sie ihren Zug erneut aus.Partieliste existiert nichtEs liegt kein unbeantwortes Angebot für diesen Zug vorZeitkontrolleTurnierdatei: Tunierteilnehmer:Turniertyp (0 = round-robin, 1 = gauntlet):TrainingTrainier-Modus ausTrainier-Modus einTrainieren-Modus benötigt eine PartiedateiPartie abbrechenTeste Geräusch:Zwei Schachprogramme»Zwei Schachprogramme«-Modus funktioniert nicht im ICS-Modus»Zwei Schachprogramme«-Modus benötigt ein SchachprogrammGeben Sie einen Zug einNicht in der Lage Schriftsatz für %s zu generieren. Nicht beendet:Unbekannter initalMode %sUnbekannte Variante mit Namen %sUnbekannter wild-Variante %dNicht erkanntes Argument %sNicht anerkannter logischer Wert für Argument %sNicht benutztErsetze SchachprogrammHochladen zum UntersuchenBenutze BretttexturenBenutze externe Figurebitmaps mit deren FarbenBenutzerdateiVariante %s wird von %s nicht unterstütztVariante %s wird nur im ICS-Modus unterstütztAnzeigenWarte auf Zugriff zur Datei zum SpeichernWarte auf erstes SchachprogrammWarte auf weiter SpieleWarte auf Antwort des Gegners Warte auf zweites SchachprogrammKriegsherrWarnung: Sie untersuchen noch eine PartieWarnung: Sie schauen noch einer Partie zuWarnung: Sie spielen noch eine PartieWarnung: zweites Schachprogramm (%s) unterstützt dies nicht!WeißFarbe weiße Figuren:Weiß am ZugWeiß überschritt die ZeitkontrolleGewinn/Verlust Grenzwert:Gewonnen:XBoard HomepageSie untersuchen keine PartieSie schauen keiner Partie zuSie spielen SchwarzSie spielen WeißSie können immer nur ein Schachprogramm ändernSie können nicht zurücknehmen solange die Partie pausiertDies ist nicht möglich während oder beim Zuschauen eines SpielesErsetzen eines Schachprogramms während es läuft nicht möglich! Beenden Sie das Spiel zuerst.Das Computerprogramm für das Schachprogramm wurde nicht angegebenSie haben ihren Zug schon verschickt. Warten Sie bis der Zug ihres Gegners ankommt. Um denselben Zug erneut zu versenden, tippen Sie »cmail -remail -game %s« in die Kommandozeile.Sie haben die Partieentwicklung verändert. Benutzen Sie »Spiel erneut laden« und führen Sie ihren Zug erneut aus.Sie haben zu viele Züge eingegeben. Gehen Sie zur richtigen Stellung zurück und versuchen Sie es erneut.Sie haben noch keinen Zug gemachtSie müssem erst ziehen bevor Sie Remis anbieten könnenSie müssen eine Turnierdatei zum Speichern der Turnierdaten angebenIhr Gegner hat die Zeit noch nicht überschrittenVergrößerungsfaktor in Auswertungsgraph:falsche searchTime-Option %sfalsche timeControl-Option %sdurchsuchenach Namennach TypklassischschließenrunterSende FehlerberichtSchachprogrammFabrikschreiben des PV fehlgeschlagenSuche StellungerstesZuwachsInteres rcmd ist in UNIX nicht implementiertZugnächstenächste SeiteKeine Spiele stimmten mit ihrer Anfrage übereinVorheriges SpielProtokollversion %d nicht unterstütztzufälligspeichere ÄnderungenInterner Fehler; falscher moveType %d (%d,%d-%d,%d)zweitesShuffleSchwellenwertZwei Königehochgegenweißes Pixel = 0x%lx, schwarzes Pixel = 0x%lx Dein Gegner kibitzt: %sxboard-4.8.0/po/de.po0000644000175000001440000020702012422467103011267 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # Arun Persaud , 2009,2012,2013 # msgid "" msgstr "" "Project-Id-Version: xboard 4.7.2\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2013-11-24 18:22-0800\n" "Last-Translator: Arun Persaud \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Falscher Integer-wert %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Nicht erkanntes Argument %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "Fehlender Wert für Argument %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Unvollständiges \\ escape im Wert von »%s«" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Fehler beim Öffnen der Datei »%s«" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Nicht anerkannter logischer Wert für Argument %s" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "erstes" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "zweites" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "Protokollversion %d nicht unterstützt" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "Das Computerprogramm für das Schachprogramm wurde nicht angegeben" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "falsche timeControl-Option %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "falsche searchTime-Option %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Variante %s wird nur im ICS-Modus unterstützt" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Unbekannte Variante mit Namen %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Starte Schachprogramm" #: backend.c:1475 msgid "Bad game file" msgstr "Fehler in Partiedatei" #: backend.c:1482 msgid "Bad position file" msgstr "Fehler in Positionsdatei" #: backend.c:1496 msgid "Pick new game" msgstr "Wähle neues Spiel" #: backend.c:1565 #, fuzzy msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "Ein schon beendetes Turnier wurde neu gestartet\n" "Eine neue Runde wird hinzugefügt\n" "Die Spiele werden in 10 Sekunden starten" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "Alle Spiele im Turnier »%s« sind entweder beendet oder werden gespielt" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Partie ohne Schachprogram ist nicht möglich" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Konnte Kommunikationsport %s nicht öffnen" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "" "Verbindung zu Hostrechner %s, Portnummer %s konnte nicht hergestellt werden" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Unbekannter initalMode %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "»Analysiere Datei«-Modus benötigt eine Partiedatei" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "Analyse-Modus benötigt ein Schachprogramm" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Analyse-Modus funktioniert nicht im ICS-Modus" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "»Schachprogramm Weiß«-Modus benötigt ein Schachprogramm" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "»Schachprogramm Weiß«-Modus funktioniert nicht im ICS-Modus" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "»Schachprogramm Schwarz«-Modus benötigt ein Schachprogramm" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "»Schachprogramm Schwarz«-Modus funktioniert nicht im ICS-Modus" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "»Zwei Schachprogramme«-Modus benötigt ein Schachprogramm" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "»Zwei Schachprogramme«-Modus funktioniert nicht im ICS-Modus" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "Trainieren-Modus benötigt eine Partiedatei" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Fehler beim Schreiben zum ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Fehler beim Lesen der Tastatur" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Habe Ende-der-Datei von der Tastatur erhalten" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Unbekannter wild-Variante %d" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Fehler beim Schreiben auf dem Display" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "Dein Gegner kibitzt: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Fehler beim Erstellen der Zugliste: zwei Dateiköpfe" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Fehler beim Erstellen der Zugliste: verschachtelt" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "gegen" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "Illegaler Zug (abgelehnt vom ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Verbindung zum ICS beendet" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Fehler beim Lesen vom ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Konnte Schachbrettzeichenkette nicht parsen:\n" "»%s«" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "Partie zu lang; erhöhe MAX_MOVES und kompiliere neu" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Fehler beim Erstellen der Zugliste: extra Schachbrett" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Konnte Zug »%s« vom ICS nicht parsen" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "Interner Fehler; falscher moveType %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "Dies ist nicht möglich während oder beim Zuschauen eines Spieles" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "Kompiliere erneut mit Unterstützung von BOARD_RANKS oder BOARD_FILES!" #: backend.c:6700 msgid "You are playing Black" msgstr "Sie spielen Schwarz" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Sie spielen Weiß" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Weiß ist am Zug" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Schwarz ist am Zug" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Angezeigte Position ist nicht die Aktuelle" #: backend.c:7007 msgid "Illegal move" msgstr "Ungültiger Zug" #: backend.c:7084 msgid "End of game" msgstr "Ende des Spiels" #: backend.c:7087 msgid "Incorrect move" msgstr "Ungültiger Zug" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Bewege Bauern rückwärts zum Unterverwandeln" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Turnier im Schweizer System beendet" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "Ungültige Paarungen vom Paarungsprogramm" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Illegaler Zug »%s« vom Schachprogramm %s" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "Schlechte FEN vom Schachprogramm erhalten" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s unterstützt keine Analyse" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Illegaler Zug »%s« (abgelehnt vom Schachprogram %s)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Konnte %s Schachprogram %s auf %s nicht starten: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Hinweis: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "Illegaler Zughinweis »%s«\n" "vom Schachprogramm %s" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Das Schachprogramm akzeptiert dein Remisangebot" #: backend.c:9404 #, fuzzy msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "Das Schachprogramm bietet Remis an\n" "Wähle Aktion/Remis, um anzunehmen" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "schreiben des PV fehlgeschlagen" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Nicht eindeutiger Zug in der ICS-Ausgabe: »%s«" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Illegaler Zug in der ICS-Ausgabe: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Lücke in Zugliste" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Variante %s wird von %s nicht unterstützt" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Fehler beim Starten »%s«" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Warte auf erstes Schachprogramm" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Warte auf zweites Schachprogramm" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "Schreibzugriff auf Turnierdatei nicht möglich" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "Ersetzen eines Schachprogramms während es läuft nicht möglich!\n" "Beenden Sie das Spiel zuerst." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "Ein Schachprogram mit dem angegebenen Namen ist nicht installiert" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Ändern Sie ein Schachprogramm indem Sie die Liste der Teilnehmner\n" "im Turnieroptionendialog editieren" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "Sie können immer nur ein Schachprogramm ändern" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "Das Schachprogram %s ist nicht installiert" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "Sie müssen eine Turnierdatei zum Speichern\n" "der Turnierdaten angeben" #: backend.c:10837 msgid "Not enough participants" msgstr "Nicht genügend Teilnehmer" #: backend.c:11040 msgid "Bad tournament file" msgstr "Fehler in Turnierdatei" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Warte auf weiter Spiele" #: backend.c:11065 msgid "No pairing engine specified" msgstr "Kein Paarungsprogram angegeben" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Partie %s gegen %s: Endergebnis %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Illegaler Zug: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Nicht eindeutiger Zug: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Kann »%s« nicht öffnen" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Kann Zugliste nicht erstellen" #: backend.c:12190 msgid "No more games in this message" msgstr "Keine weiteren Partien in dieser Nachricht" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Noch keine Partie geladen" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Kann nicht weiter zurückgehen" #: backend.c:12678 msgid "Game number out of range" msgstr "Partienummer außerhalb des Bereichs" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Kann nicht in der Partiedatei suchen" #: backend.c:12747 msgid "Game not found in file" msgstr "Spiel in Datei nicht gefunden" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Schlechte FEN-Stellung in Datei" #: backend.c:13030 msgid "No moves in game" msgstr "Keine Züge in dem Spiel" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Noch keine Stellung geladen" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Kann nicht in Stellungsdatei suchen" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Stellung in Datei nicht gefunden" #: backend.c:13245 msgid "Black to play" msgstr "Schwarz am Zug" #: backend.c:13248 msgid "White to play" msgstr "Weiß am Zug" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Warte auf Zugriff zur Datei zum Speichern" #: backend.c:13337 msgid "Saving game" msgstr "Speichere Spiel" #: backend.c:13338 msgid "Bad Seek" msgstr "Fehlerhafte Suche" #: backend.c:13707 msgid "Saving position" msgstr "Speichere Stellung " #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "Sie haben die Partieentwicklung verändert.\n" "Benutzen Sie »Spiel erneut laden« und führen Sie ihren Zug erneut aus." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "Sie haben zu viele Züge eingegeben.\n" "Gehen Sie zur richtigen Stellung zurück und versuchen Sie es erneut." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "Die angezeigt Stellung ist nicht die aktuelle.\n" "Gehen Sie vorwärts zur richtigen Stellung und versuchen Sie es erneut." #: backend.c:13890 msgid "You have not made a move yet" msgstr "Sie haben noch keinen Zug gemacht" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "Die CMail-Nachricht wurde noch nicht geladen.\n" "Benutzen sie »CMail Nachricht erneut laden« und führen Sie ihren Zug erneut " "aus." #: backend.c:13916 msgid "No unfinished games" msgstr "Keine laufenden Partien" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "Sie haben ihren Zug schon verschickt.\n" "Warten Sie bis der Zug ihres Gegners ankommt.\n" "Um denselben Zug erneut zu versenden, tippen Sie\n" "»cmail -remail -game %s«\n" "in die Kommandozeile." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Fehler beim Aufruf von cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Warte auf Antwort des Gegners\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Sie müssen noch einen Zug für die Partie machen\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Sie müssen noch Züge für beide Partien machen\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Sie müssen noch Züge für alle %d Partien machen\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Sie müssen noch einen Zug für Partie %s machen\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Keine laufenden Partien\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Bereit zum Versenden der Mail\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Sie müssen noch Züge für Partie %s machen\n" #: backend.c:14252 msgid "Edit comment" msgstr "Editiere Kommentar" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Editiere Kommentar für %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "Sie schauen keiner Partie zu" #: backend.c:14420 msgid "It is not White's turn" msgstr "Weiß ist nicht am Zug" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Schwarz ist nicht am Zug" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Starte %s Schachprogramm" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Warte bis Sie am Zug sind\n" "oder wähle »Ziehe jetzt«" #: backend.c:14774 msgid "Training mode off" msgstr "Trainier-Modus aus" #: backend.c:14782 msgid "Training mode on" msgstr "Trainier-Modus ein" #: backend.c:14785 msgid "Already at end of game" msgstr "Schon am Ende der Partie" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Warnung: Sie spielen noch eine Partie" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Warnung: Sie schauen noch einer Partie zu" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Warnung: Sie untersuchen noch eine Partie" #: backend.c:14938 msgid "Click clock to clear board" msgstr "Klicke auf eine Uhr, um das Brett zu leeren" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Schließe ICS Programmanalyse…" #: backend.c:15268 msgid "That square is occupied" msgstr "Dieses Feld ist besetzt" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "Es liegt kein unbeantwortes Angebot für diesen Zug vor" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Ihr Gegner hat die Zeit noch nicht überschritten" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Sie müssem erst ziehen bevor Sie Remis anbieten können" #: backend.c:15781 msgid "You are not examining a game" msgstr "Sie untersuchen keine Partie" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Sie können nicht zurücknehmen solange die Partie pausiert" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Sie sind am Zug" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "Warten Sie bis Sie am Zug sind" #: backend.c:15909 msgid "No hint available" msgstr "Kein Hinweis erhältlich" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "Noch keine Partie geladen" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "Buchdatei existiert! Versuche erneut zum Überschreiben." #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Fehler beim Schreiben zum Schachprogramm %s" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "%s Schachprogramm beendet in Remisstellung (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Fehler: %s Schachprogramm (%s) unerwartet beendet" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Fehler beim Lesen vom Schachprogramm %s (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "Schachprogramm %s hat zu viele Optionen\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Angezeigter Zug ist nicht aktuell" #: backend.c:17083 msgid "Could not parse move" msgstr "Konnte Zug nicht parsen" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Beide Zeitkontrollen überschritten" #: backend.c:17210 msgid "White's flag fell" msgstr "Weiß überschritt die Zeitkontrolle" #: backend.c:17232 msgid "Black's flag fell" msgstr "Schwarz überschritt die Zeitkontrolle" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "Veränderungen an der Uhr sind im »Auto-flag«-Modus nicht erlaubt" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Schlechte FEN-Stellung in der Zwischenablage" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "Polyglot-buch nicht zulässig" #: book.c:703 msgid "Book Fault" msgstr "Buchfehler" #: book.c:839 msgid "Hash keys are different" msgstr "Hash-schlüssel verschieden" #: book.c:1015 msgid "Could not create book" msgstr "Konnte Buch nicht erzeugen" #: dialogs.c:283 msgid "Tournament file: " msgstr "Turnierdatei: " #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "Sync. nach der Runde" #: dialogs.c:286 msgid "Sync after cycle" msgstr "Sync. nach Zyklus" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Tunierteilnehmer:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Wähle Schachprogramm:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Turniertyp (0 = round-robin, 1 = gauntlet):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Anzahl der Turnierrunden:" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Pause zwischen Tournierspielen (msek):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Speichere Turnierspiele:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Datei mit Startstellung:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Zeitkontrolle" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Allgemein Schachprogramme…" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Allgemeine Einstellungen" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "Ersetze Schachprogramm" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Ersetze Schachprogramm" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Klone Turnier" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" "Bitte geben Sie zuerst eine existierende Turnierdatei, die geklont werden " "kann" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "# keine Schachprogramme installiert" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Klangeinstellungen" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Ziehen animieren" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Ziehen animieren" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Zeit automatisch reklamieren" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Brett automatisch drehen" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Blindschach" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "Erlaube Varianten" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Letzten Zug hervorheben" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Hervorhebung mit Pfeil" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Ein-Klick Züge" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Nächsten Zug abwägen" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Popup Nachricht beim Beenden" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Dialogfenster für Zugfehler" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Bewertung in Zugliste" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Zeige Koordinaten" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Zeige Zielfeld" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Vergrößerungsfaktor in Auswertungsgraph:" #: dialogs.c:452 #, fuzzy msgid "Normal" msgstr "Normal" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 #, fuzzy msgid "Wild castle" msgstr "keine Rochade" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "Springer" #: dialogs.c:458 #, fuzzy msgid "No castle" msgstr "keine Rochade" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "Zwei Könige" #: dialogs.c:464 msgid " " msgstr " " #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "Brettgröße (-1 = default für gewählte Variante):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Anzahl der Reihen:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Anzahl der Linien:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 #, fuzzy msgid "Bughouse" msgstr "Tandemschach" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 #, fuzzy msgid "Suicide" msgstr "Räuberschach" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Warnung: zweites Schachprogramm (%s) unterstützt dies nicht!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "Neue Variante" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Maximal Anzahl der CPUs pro Schachprogram:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Polyglot-verzeichnis:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Größe der Hashtabelle (MB):" #: dialogs.c:624 msgid "EGTB Path:" msgstr "" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Dateiname des Eröffnungsbuches:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "" #: dialogs.c:648 msgid "Detect all Mates" msgstr "" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "N-Züge Regel:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Remis nach N Zügen (total):" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Gewinn/Verlust Grenzwert:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Negiere Bewertung des 1. Schachprogramms" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Negiere Bewertung des 2. Schachprogramms" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "Gewinn Weiß zuerkennen" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Auto-Kibitz" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Automatische Kommentare" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Automatisch Beobachten" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Automatisch das Brett in den Vordergrung bringen" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "Automatisch Login-skript erzeugen" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Beobachte im Hintegrund während einer Partie" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Zweites Brett für beobachtetes Spiel" #: dialogs.c:684 msgid "Get Move List" msgstr "Zugliste abholen" #: dialogs.c:685 msgid "Quiet Play" msgstr "" #: dialogs.c:686 msgid "Seek Graph" msgstr "Suchgraph" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 #, fuzzy msgid "Quit after game" msgstr "Warte auf weiter Spiele" #: dialogs.c:690 msgid "Premove" msgstr "" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "Erster Zug von Weiß:" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "Erster Zug von Schwarz:" #: dialogs.c:696 msgid "Alarm" msgstr "Alarm" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "Alarmzeit (msek):" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Nachrichten kolorieren" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Textfarbe Ruf:" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "Textfarbe S-Ruf:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Textfarbe Kanal #1:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Textfarbe andere Kanäle:" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Textfarbe Kibitz:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "Textfarbe Mitteilung:" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "Textfarbe Herausforderung:" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Textfarbe Spielgesuch:" #: dialogs.c:709 #, fuzzy msgid "Other Text Colors:" msgstr "Textfarbe andere Kanäle:" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS Optionen" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Gleiches Material mit genau gleicher Bauernstruktur" #: dialogs.c:722 msgid "Same material" msgstr "Gleiches Material" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Sekunden pro Zug:" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Mind. Elo des stärksten Spielers:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Mind. Elo des schwächsten Spielers:" #: dialogs.c:746 msgid "No games before year:" msgstr "Keine Partie vor Jahr:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "Such-modus:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "Spieleinstellungen laden" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Automatisch Partien speichern" #: dialogs.c:773 msgid "Own Games Only" msgstr "Nur eigene Partien" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Partien speichern als Datei:" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Speichere Endstellung in Datei:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "Spieleinstellungen speichern" #: dialogs.c:796 msgid "No Sound" msgstr "Kein Ton" #: dialogs.c:797 msgid "Default Beep" msgstr "" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "Hupe" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "Laser" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "Benutzerdatei" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Teste Geräusch:" #: dialogs.c:837 msgid "Play" msgstr "Spielen" #: dialogs.c:838 msgid "Move:" msgstr "Zug:" #: dialogs.c:839 msgid "Win:" msgstr "Gewonnen:" #: dialogs.c:840 msgid "Lose:" msgstr "Verloren:" #: dialogs.c:841 msgid "Draw:" msgstr "Remis:" #: dialogs.c:842 msgid "Unfinished:" msgstr "Nicht beendet:" #: dialogs.c:843 msgid "Alarm:" msgstr "Alarm:" #: dialogs.c:844 msgid "Challenge:" msgstr "Herausforderung:" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Klangverzeichnis:" #: dialogs.c:847 msgid "Shout:" msgstr "Ruf:" #: dialogs.c:848 msgid "S-Shout:" msgstr "S-Ruf:" #: dialogs.c:849 msgid "Channel:" msgstr "Kanal:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Kanal 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Mitteilung:" #: dialogs.c:852 msgid "Kibitz:" msgstr "Kibitz:" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "Gesuch:" #: dialogs.c:871 msgid "Sound Options" msgstr "Klangeinstellungen" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Farbe weiße Figuren:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "R" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "G" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "B" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "D" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Farbe schwarze Figuren:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Weißes Feld:" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Schwarzes Feld:" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Farbe zum Hervorheben:" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Benutze Bretttexturen" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Texturedatei für weiße Felder:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Texturdatei für schwarze Felder:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "Benutze externe Figurebitmaps mit deren Farben" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "Verzeichnis mit Bildern für Figuren:" #: dialogs.c:1012 #, fuzzy msgid "# no themes are defined" msgstr "# keine Schachprogramme installiert" #: dialogs.c:1024 msgid "Board Options" msgstr "Bretteinstellungen" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "ICS-Textmenü" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "speichere Änderungen" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Nächstes Spiel laden" #: dialogs.c:1247 msgid "Edit book" msgstr "Buch editieren" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Markierungen" #: dialogs.c:1385 msgid "ICS input box" msgstr "ICS Eingabefeld" #: dialogs.c:1417 msgid "Type a move" msgstr "Geben Sie einen Zug ein" #: dialogs.c:1443 msgid "Engine has no options" msgstr "Schachprogramm hat keine Optionen" #: dialogs.c:1445 msgid "Engine Settings" msgstr "Schachprogrammeinstellungen" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Wähle Schachprogram aus der Liste:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Spitzname (optional):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Schachprogramkommando:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "(Verzeichnis wird vom Schachprogrampfad genommen, falls leer)" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Füge diese Schachprogramm zur Liste hinzu" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "Lade erstes Schachprogramm" #: dialogs.c:1539 msgid "Load second engine" msgstr "Lade zweites Schachprogramm" #: dialogs.c:1562 msgid "shuffle" msgstr "Shuffle" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Startposition-Nummer:" #: dialogs.c:1565 msgid "randomize" msgstr "zufällig" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Neue Shuffle-Partie" #: dialogs.c:1602 msgid "classical" msgstr "klassisch" #: dialogs.c:1603 msgid "incremental" msgstr "Zuwachs" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "" #: dialogs.c:1609 msgid "Engine #1" msgstr "Schachprogramm #1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Schachprogram #2 / Spieler" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "Nicht benutzt" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Fehler beim Schreiben zum Schachprogramm" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Abbrechen" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "König" #: dialogs.c:1776 msgid "Captain" msgstr "Kapitän" #: dialogs.c:1777 msgid "Lieutenant" msgstr "Leutnant" #: dialogs.c:1778 msgid "General" msgstr "General" #: dialogs.c:1779 msgid "Warlord" msgstr "Kriegsherr" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Springer" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Läufer" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Turm" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Erzbischof" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Kanlzer" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Königin" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "vertagen" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "umwandlung" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Neue Variante" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "ICS Optionen" #: dialogs.c:2141 msgid "factory" msgstr "Fabrik" #: dialogs.c:2142 msgid "up" msgstr "hoch" #: dialogs.c:2143 msgid "down" msgstr "runter" #: dialogs.c:2162 msgid "No tag selected" msgstr "Keine Markierung selektiert" #: dialogs.c:2193 msgid "Game-list options" msgstr "Spieleliste-optionen" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Fehler" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Schwerwiegender Fehler" #: dialogs.c:2306 msgid "Exiting" msgstr "Beende" #: dialogs.c:2317 msgid "Information" msgstr "Information" #: dialogs.c:2324 msgid "Note" msgstr "Notiz" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Weiß" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Bauer" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Elefant" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Kanone" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "degradieren" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Leeres Feld" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Brett leeren" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Schwarz" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Datei" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Bearbeiten" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Anzeigen" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Modus" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Aktion" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Schachprogramm" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Optionen" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Hilfe" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "Verzeichnisse:" #: dialogs.c:2775 msgid "Files:" msgstr "Dateien:" #: dialogs.c:2776 msgid "by name" msgstr "nach Namen" #: dialogs.c:2777 msgid "by type" msgstr "nach Typ" #: dialogs.c:2780 msgid "Filename:" msgstr "Dateinname:" #: dialogs.c:2781 msgid "New directory" msgstr "Neues Verzeichnis" #: dialogs.c:2782 msgid "File type:" msgstr "Dateientyp:" #: dialogs.c:2857 msgid "Contents of" msgstr "Inhalt von" #: dialogs.c:2883 msgid " next page" msgstr "nächste Seite" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "VERSUCHE EINEN ANDEREN NAMEN" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Schachprogrammausgabe" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Lese Partiedatei (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: cd zu CHESSDIR funktioniert nicht: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Fehler beim Öffnen der Datei '%s'\n" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" "Kompiliere erneut mit größeren BOARD_RANKS oder BOARD_FILES, um diese Größe " "zu unterstützen" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: falsche boardSize Syntax %s\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: unbekannter Name fuer boardSize %s\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "%s: nicht genügend Farben vorhanden; versuche monochrom Modus\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "Nicht in der Lage Schriftsatz für %s zu generieren.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: keine Schriften stimmen mit Muster %s überein\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "Kann temporäre Datei nicht öffnen" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Fehler beim Öffnen der Datei" #: menus.c:134 msgid "Load game file name?" msgstr "Lade Partiedatei mit Namen?" #: menus.c:179 msgid "Load position file name?" msgstr "Lade Stellungsdatei mit Namen?" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "Speichere Partiedatei mit Namen?" #: menus.c:194 msgid "Save position file name?" msgstr "Speicher Stellungsdatei mit Namen?" #: menus.c:362 msgid " (with Zippy code)" msgstr " (mit Zippy)" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Über XBoard" #: menus.c:601 msgid "New Game" msgstr "Neue Partie" #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Neue Shuffle Partie… " #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Neue Variante…" #: menus.c:605 msgid "Load Game" msgstr "Partie laden…" #: menus.c:606 msgid "Load Position" msgstr "Stellung laden" #: menus.c:607 msgid "Next Position" msgstr "Nächste Stellung" #: menus.c:608 msgid "Prev Position" msgstr "Vorherige Stellung" #: menus.c:610 msgid "Save Game" msgstr "Partie speichern…" #: menus.c:611 msgid "Save Position" msgstr "Speichere Stellung" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Partie speichern…" #: menus.c:613 msgid "Save Games as Book" msgstr "Partien speichern als Buch" #: menus.c:615 msgid "Mail Move" msgstr "Verschicke Zug" #: menus.c:616 msgid "Reload CMail Message" msgstr "CMail Nachricht erneut laden" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 msgid "Copy Game" msgstr "Partie kopieren" #: menus.c:624 msgid "Copy Position" msgstr "Stellung kopieren" #: menus.c:625 msgid "Copy Game List" msgstr "Partieliste kopieren" #: menus.c:627 msgid "Paste Game" msgstr "Partie einfügen" #: menus.c:628 msgid "Paste Position" msgstr "Stellung einfügen" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "Partie editiere" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "Stellung editieren" #: menus.c:632 msgid "Edit Tags" msgstr "Markierung bearbeiten" #: menus.c:633 msgid "Edit Comment" msgstr "Kommentar bearbeiten" #: menus.c:634 msgid "Edit Book" msgstr "Editiere Buch" #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "Annotieren" #: menus.c:638 msgid "Truncate Game" msgstr "Partie abbrechen" #: menus.c:640 msgid "Backward" msgstr "Zurück" #: menus.c:641 msgid "Forward" msgstr "Vorwärts" #: menus.c:642 msgid "Back to Start" msgstr "Zurück zum Anfang" #: menus.c:643 msgid "Forward to End" msgstr "Zur Schlussstellung" #: menus.c:648 msgid "Flip View" msgstr "Brett drehen" #: menus.c:651 msgid "Move History" msgstr "Zugliste" #: menus.c:652 msgid "Evaluation Graph" msgstr "Auswertungsgraph" #: menus.c:653 msgid "Game List" msgstr "Partieliste" #: menus.c:657 msgid "Comments" msgstr "Kommentare" #: menus.c:658 msgid "ICS Input Box" msgstr "ICS Eingabefeld" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Brett…" #: menus.c:662 msgid "Game List Tags..." msgstr "Partie Markierungen…" #: menus.c:667 msgid "Machine White" msgstr "Schachprogramm weiß" #: menus.c:668 msgid "Machine Black" msgstr "Schachprogramm schwarz" #: menus.c:669 msgid "Two Machines" msgstr "Zwei Schachprogramme" #: menus.c:670 msgid "Analysis Mode" msgstr "Analyse-Modus" #: menus.c:671 msgid "Analyze Game" msgstr "Spiel analysieren" #: menus.c:674 msgid "Training" msgstr "Training" #: menus.c:675 msgid "ICS Client" msgstr "ICS-Client" #: menus.c:677 msgid "Machine Match" msgstr "Schachprogramm Partie" #: menus.c:678 msgid "Pause" msgstr "Pause" #: menus.c:683 msgid "Accept" msgstr "Annehmen" #: menus.c:684 msgid "Decline" msgstr "Ablehnen" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 msgid "Call Flag" msgstr "Zeit reklamieren" #: menus.c:688 msgid "Draw" msgstr "Remis" #: menus.c:689 msgid "Adjourn" msgstr "Aussetzen" #: menus.c:690 msgid "Abort" msgstr "Abbrechen" #: menus.c:691 msgid "Resign" msgstr "Aufgeben" #: menus.c:693 msgid "Stop Observing" msgstr "Beobachtung beenden" #: menus.c:694 msgid "Stop Examining" msgstr "Untersuchen beenden" #: menus.c:695 msgid "Upload to Examine" msgstr "Hochladen zum Untersuchen" #: menus.c:697 msgid "Adjudicate to White" msgstr "Weiß den Gewinn zuerkennen" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Schwarz den Gewinn zuerkennnen" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Als Remis abschätzen" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Schachprogram #1 Einstellungen…" #: menus.c:706 #, fuzzy msgid "Load New 1st Engine..." msgstr "Neues erstes Schachprogramm laden…" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Neues zweites Schachprogramm laden…" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Schachprogram #1 Einstellungen…" #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Schachprogram #2 Einstellungen…" #: menus.c:712 msgid "Hint" msgstr "Hinweis" #: menus.c:713 msgid "Book" msgstr "Buch" #: menus.c:715 msgid "Move Now" msgstr "Jetzt ziehen" #: menus.c:716 msgid "Retract Move" msgstr "Zug zurücknehmen" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Allgemein…" #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Zeitkontrolle…" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Allgemein Schachprogramme…" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Zuerkennung…" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Partie laden…" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Partie speichern…" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Partieliste…" #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Klang…" #: menus.c:735 msgid "Always Queen" msgstr "Immer Königin" #: menus.c:741 msgid "Flash Moves" msgstr "Züge aufblitzen lassen" #: menus.c:743 msgid "Highlight Dragging" msgstr "Züge hervorheben" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Mit Pfeil hervorheben" #: menus.c:747 msgid "Move Sound" msgstr "Klang für Zug" #: menus.c:749 msgid "Periodic Updates" msgstr "Periodische Updates" #: menus.c:751 msgid "Popup Exit Message" msgstr "Dialogfenster für Nachricht beim Beenden" #: menus.c:753 msgid "Show Coords" msgstr "Zeige Koordinaten" #: menus.c:754 msgid "Hide Thinking" msgstr "" #: menus.c:758 msgid "Save Settings Now" msgstr "Einstellungen jetzt speichern" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Einstellung am Ende speichern" #: menus.c:764 msgid "Info XBoard" msgstr "Info über XBoard" #: menus.c:765 msgid "Man XBoard" msgstr "XBoard-Hilfe" #: menus.c:767 msgid "XBoard Home Page" msgstr "XBoard Homepage" #: menus.c:768 msgid "On-line User Guide" msgstr "Online Benutzerhandbuch" #: menus.c:769 msgid "Development News" msgstr "Entwicklungsneuigkeiten" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "Sende Fehlerbericht" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "Schachprogramm" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "Zug" #: nengineoutput.c:155 msgid "Engine output" msgstr "Schachprogrammausgabe" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Auswertungsgraph" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "Auswertungsgraph" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 msgid "find position" msgstr "Suche Stellung" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "Schwellenwert" #: ngamelist.c:90 msgid "tags" msgstr "" #: ngamelist.c:91 msgid "next" msgstr "nächste" #: ngamelist.c:92 msgid "close" msgstr "schließen" #: ngamelist.c:116 msgid "No game selected" msgstr "Keine Partie selektiert" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Kann nicht weiter vorwärts gehen" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Durchsuche Spiele (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "Vorheriges Spiel" #: ngamelist.c:214 msgid "next page" msgstr "nächste Seite" #: ngamelist.c:217 msgid "no games matched your request" msgstr "Keine Spiele stimmten mit ihrer Anfrage überein" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s - %d/%d Spiele (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "Partieliste existiert nicht" #: nhistory.c:109 msgid "Move list" msgstr "Zugliste" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: nicht erkannte Farbe %s\n" #: usystem.c:230 #, fuzzy, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: Kann Vordergrundfarbe in »%s« nicht parsen\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "%s: kann Farbname nicht parsen; deaktiere Farben\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "FEHLER: unbekannter Benutzer %s (im Pfad %s)\n" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "Socketunterstützung ist nicht konfiguriert" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "Interes rcmd ist in UNIX nicht implementiert" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "weißes Pixel = 0x%lx, schwarzes Pixel = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "durchsuche" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "Strg" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "Alt" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "Umschalt" #: xaw/xoptions.c:1314 msgid "OK" msgstr "OK" #~ msgid "Match Options" #~ msgstr "Partieeinstellungen" #~ msgid "ICS ..." #~ msgstr "ICS…" #~ msgid "Match ..." #~ msgstr "Partie…" #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: XPM-Ordner nicht erreichbar %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Mögliche »%s« Größen:\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "Fehler: Keine »%s« Datein!\n" #~ msgid "" #~ "Warning: No DIR structure found on this system --\n" #~ " Unable to autosize for XPM/XIM pieces.\n" #~ " Please report this error to %s.\n" #~ " Include system type & operating system in message.\n" #~ msgstr "" #~ "Warnung: Keine DIR-Struktur auf dem Rechner gefunden --\n" #~ " wählen einer automatischen Größe für XPM/XIM Figuren " #~ "fehlgeschlagen.\n" #~ " Bitte schicken Sie einen Bug-report and %s.\n" #~ " Geben Sie dabei den Rechnertyp und das Betriebsystem an.\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Fehler %d beim Laden von Icon\n" #~ msgid "cancel" #~ msgstr "abbrechen" #~ msgid "recognized '%s' (%d) as variant %s\n" #~ msgstr "erkenne '%s' (%d) als Variante %s\n" #~ msgid "Ratings from header: W %d, B %d\n" #~ msgstr "Spielstärke vom Dateikopf: W %d, S %d\n" #~ msgid "Parsing board: %s\n" #~ msgstr "Parse Schachbrett: %s\n" #~ msgid "Found unexpected active ICS engine analyze \n" #~ msgstr "Habe unerwartete aktive ICS Analyse vom Schachprogramm gefunden\n" #~ msgid "ICS engine analyze starting... \n" #~ msgstr "Schachprogramm started ICS Analyse…\n" #~ msgid "" #~ "resolved %s at pixel size %d\n" #~ " to %s\n" #~ msgstr "" #~ "Für %s mit Pixelgröße %d\n" #~ " verwende %s\n" #~ msgid "New Game Ctrl+N" #~ msgstr "Neue Partie Strg+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "Neue Variante… Alt+Umschalt+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "Partie Laden Strg+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Stellung laden Strg+Umschalt+O" #~ msgid "Next Position Shift+PgDn" #~ msgstr "Nächste Stellung Umschalt+Pgdn" #~ msgid "Prev Position Shift+PgUp" #~ msgstr "Vorherige Stellung Umschalt+PgUp" #~ msgid "Save Game Ctrl+S" #~ msgstr "Partie speichern Strg+S" #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "Stellung speichern Strg+Shift+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Beenden Strg+Q" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Partie kopieren Strg+C" #~ msgid "Paste Game Ctrl+V" #~ msgstr "Partie einfügen Strg+V" #~ msgid "Paste Position Ctrl+Shift+V" #~ msgstr "Stellung einfügen Strg+Umschalt+V" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Partie bearbeiten Strg+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Stellung bearbeiten Strg+Umschalt+E" #~ msgid "Revert Home" #~ msgstr "Zurücksetzen Home" #~ msgid "Backward Alt+Left" #~ msgstr "Zurück Alt+links" #~ msgid "Forward Alt+Right" #~ msgstr "Vorwärts Alt+rechts" #~ msgid "Back to Start Alt+Home" #~ msgstr "Zurück zum Anfang Alt+Home" #~ msgid "Flip View F2" #~ msgstr "Brett drehen F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "Schachprogramm-Ausgabe Alt+Umschalt+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Zugliste Alt+Umschalt+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "Auswertungsgraph Alt+Umschalt+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Partieliste Alt+Umschalt+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Schachprogramm schwarz Strg+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Partie editieren Strg+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Stellung editieren Strg+Umschalt+E" #~ msgid "Pause Pause" #~ msgstr "Pause Pause" #~ msgid "Accept F3" #~ msgstr "Annehmen F3" #~ msgid "Decline F4" #~ msgstr "Ablehnen F4" #~ msgid "Rematch F12" #~ msgstr "Revanche F12" #~ msgid "Draw F6" #~ msgstr "Remis F6" #~ msgid "Adjourn F7" #~ msgstr "Aussetzen F7" #~ msgid "Abort F8" #~ msgstr "Abbrechen F8" #~ msgid "Resign F9" #~ msgstr "Aufgeben F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Jetzt ziehen Strg+M" #~ msgid "Time Control ... Alt+Shift+T" #~ msgstr "Zeitkontrolle… Alt+Umschalt+T" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Immer Königin Strg+Umschalt+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "Züge animieren Strg+Umschalt+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Automatische Zeitreklamation Strg+Umschalt+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Nächsten Zug abwägen Strg+Umschalt+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Blende Zugsuche aus Strg+Umschalt+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Gültigkeit testen Strg+Umschalt+L" #~ msgid "Browse" #~ msgstr "Durchsuchen" #~ msgid "Filter on extensions:" #~ msgstr "filtere nach Dateinendung:" #~ msgid "Pathname:" #~ msgstr "Pfadname:" #~ msgid "XsraSelFile: can't get current directory" #~ msgstr "XsraSelFile: kann aktuelles Verzeichnis nicht laden" #~ msgid "%s: titleWidget geometry error %d %d %d %d %d\n" #~ msgstr "%s: titleWidget Geometriefehler %d %d %d %d %d\n" #~ msgid "Error expanding path name \"%s\"\n" #~ msgstr "Fehler beim Expandieren des Pfadnamens \"%s\"\n" #~ msgid "" #~ "XBoard square size (hint): %d\n" #~ "%s fulldir:%s:\n" #~ msgstr "" #~ "XBoard Feldgröße (Hinweis): %d\n" #~ "%s voller Pfad: %s\n" #~ msgid "Closest %s size: %d\n" #~ msgstr "Nächste %s Größe: %d\n" #~ msgid "%s: messageWidget geometry error %d %d %d %d %d\n" #~ msgstr "%s: messageWidget Geometriefehler %d %d %d %d %d\n" #~ msgid "%s: error loading XIM!\n" #~ msgstr "%s: Fehler beim Laden von XIM!\n" #~ msgid "XIM pieces cannot be used in monochrome mode" #~ msgstr "XIM Figuren können nicht im Monochrom-modus benutzt werden" #~ msgid "" #~ "\n" #~ "Loading XIMs...\n" #~ msgstr "" #~ "\n" #~ "Lade XIMs…\n" #~ msgid "(File:%s:) " #~ msgstr "(Datei:%s) " #~ msgid "light square " #~ msgstr "weißes Feld " #~ msgid "dark square " #~ msgstr "schwarzes Feld " #~ msgid "Done.\n" #~ msgstr "Fertig.\n" #~ msgid "XPM pieces cannot be used in monochrome mode" #~ msgstr "XPM Figuren können nicht im Monochrom-modus benutzt werden" #~ msgid "No builtin XPM pieces of size %d\n" #~ msgstr "Keine XPM-Figuren der Größe %d vorhanden\n" #~ msgid "Error %d loading XPM image \"%s\"\n" #~ msgstr "Fehler %d beim Laden von XPM-Bild »%s«\n" #~ msgid "" #~ "\n" #~ "Loading XPMs...\n" #~ msgstr "" #~ "\n" #~ "Lade XPMs…\n" #~ msgid "(Replace by File:%s:) " #~ msgstr "(Ersetze mit Datei:%s:) " #~ msgid "Error %d loading XPM file \"%s\"\n" #~ msgstr "Fehler %d beim Laden der XPM-Datei »%s«\n" #~ msgid "Can't open bitmap file %s" #~ msgstr "Bitmap file %s kann nicht geöffnet werden" #~ msgid "Invalid bitmap in file %s" #~ msgstr "Ungültiges Bitmap in Datei %s" #~ msgid "Ran out of memory reading bitmap file %s" #~ msgstr "Nicht genug Speicher, um Bitmapdatei %s zu laden" #~ msgid "Unknown XReadBitmapFile error %d on file %s" #~ msgstr "Unbekannter XReadBitmapFile-Fehler %d bei Datei %s" #~ msgid "%s: %s...using built-in\n" #~ msgstr "%s: %s… benutze integrierte\n" #~ msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n" #~ msgstr "%s: Bitmap %s ist %dx%d und nicht %dx%d... benutze integrierte\n" #~ msgid "----" #~ msgstr "----" #~ msgid "Drop" #~ msgstr "Absetzen" #~ msgid "could not open: " #~ msgstr "Konnte nicht öffnen: " #~ msgid "Can't open file" #~ msgstr "Datei kann nicht geöffnet werden" #~ msgid "Promotion" #~ msgstr "Umwandlung" #~ msgid "Promote to what?" #~ msgstr "In Was soll umgewandelt werden?" #~ msgid "ok" #~ msgstr "Ok" #~ msgid "AskQuestionProc needed 4 parameters, got %d\n" #~ msgstr "AskQuestionProc braucht 4 Parameter, habe %d erhlaten\n" #~ msgid "enter" #~ msgstr "Eingabe" #~ msgid "This feature is experimental" #~ msgstr "Dieses Feature is experimentell" #~ msgid "Filter:" #~ msgstr "Filter:" #~ msgid "filtertext" #~ msgstr "Filtertext" #~ msgid "apply" #~ msgstr "anwenden" #~ msgid "load" #~ msgstr "lade" #~ msgid "prev" #~ msgstr "vorh." #~ msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n" #~ msgstr "Animiere Züge: Figur %d hüpft von %d,%d zu %d,%d\n" #~ msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n" #~ msgstr "Animiere Züge: Figur %d gleitet von %d,%d zu %d,%d\n" #~ msgid "White " #~ msgstr "Weiss" #~ msgid "Black " #~ msgstr "Schwarz" #~ msgid "Close" #~ msgstr "Schließen" #~ msgid "off" #~ msgstr "aus" #~ msgid "minutes for each" #~ msgstr "Minuten pro" #~ msgid " " #~ msgstr " " #~ msgid "moves " #~ msgstr "Züge " #~ msgid "You can only start a match from the initial position." #~ msgstr "Sie können eine Partie nur von der Startaufstellunge starten." #~ msgid "Reload Same Game" #~ msgstr "Spiel erneut laden" #~ msgid "Reload Same Position" #~ msgstr "Stellung erneut laden" #~ msgid "Exit" #~ msgstr "Beenden" #~ msgid "Step" #~ msgstr "Züge" #~ msgid "P" #~ msgstr "P" #~ msgid "Analysis" #~ msgstr "Analyse" xboard-4.8.0/po/Rules-quot0000644000175000001440000000337612421746651012361 00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header xboard-4.8.0/po/xboard.pot0000644000175000001440000013073212422467103012347 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard 4.8.0\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "" #: backend.c:1452 msgid "Starting chess program" msgstr "" #: backend.c:1475 msgid "Bad game file" msgstr "" #: backend.c:1482 msgid "Bad position file" msgstr "" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "" #: backend.c:4286 msgid "Error reading from ICS" msgstr "" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "" #: backend.c:6761 msgid "Displayed position is not current" msgstr "" #: backend.c:7007 msgid "Illegal move" msgstr "" #: backend.c:7084 msgid "End of game" msgstr "" #: backend.c:7087 msgid "Incorrect move" msgstr "" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "" #: backend.c:9809 msgid "Gap in move list" msgstr "" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 msgid "Bad tournament file" msgstr "" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "" #: backend.c:12190 msgid "No more games in this message" msgstr "" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "" #: backend.c:12678 msgid "Game number out of range" msgstr "" #: backend.c:12689 msgid "Can't seek on game file" msgstr "" #: backend.c:12747 msgid "Game not found in file" msgstr "" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "" #: backend.c:13030 msgid "No moves in game" msgstr "" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "" #: backend.c:13245 msgid "Black to play" msgstr "" #: backend.c:13248 msgid "White to play" msgstr "" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "" #: backend.c:14252 msgid "Edit comment" msgstr "" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "" #: backend.c:14501 msgid "It is not Black's turn" msgstr "" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" #: backend.c:14774 msgid "Training mode off" msgstr "" #: backend.c:14782 msgid "Training mode on" msgstr "" #: backend.c:14785 msgid "Already at end of game" msgstr "" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "" #: backend.c:15781 msgid "You are not examining a game" msgstr "" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "" #: backend.c:15909 msgid "No hint available" msgstr "" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "" #: backend.c:17083 msgid "Could not parse move" msgstr "" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "" #: backend.c:17210 msgid "White's flag fell" msgstr "" #: backend.c:17232 msgid "Black's flag fell" msgstr "" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 msgid "Could not create book" msgstr "" #: dialogs.c:283 msgid "Tournament file: " msgstr "" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 msgid "Common Engine" msgstr "" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 msgid "Tournament Options" msgstr "" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "" #: dialogs.c:423 msgid "Scores in Move List" msgstr "" #: dialogs.c:424 msgid "Show Coordinates" msgstr "" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 msgid "Knightmate" msgstr "" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "" #: dialogs.c:624 msgid "EGTB Path:" msgstr "" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "" #: dialogs.c:648 msgid "Detect all Mates" msgstr "" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "" #: dialogs.c:678 msgid "Auto-Comment" msgstr "" #: dialogs.c:679 msgid "Auto-Observe" msgstr "" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "" #: dialogs.c:684 msgid "Get Move List" msgstr "" #: dialogs.c:685 msgid "Quiet Play" msgstr "" #: dialogs.c:686 msgid "Seek Graph" msgstr "" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "" #: dialogs.c:696 msgid "Alarm" msgstr "" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 msgid "No games before year:" msgstr "" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "" #: dialogs.c:796 msgid "No Sound" msgstr "" #: dialogs.c:797 msgid "Default Beep" msgstr "" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "" #: dialogs.c:908 msgid "Light Square Color:" msgstr "" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "" #: dialogs.c:920 msgid "Highlight Color:" msgstr "" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 msgid "add next move" msgstr "" #: dialogs.c:1247 msgid "Edit book" msgstr "" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "" #: dialogs.c:1565 msgid "randomize" msgstr "" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "" #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "" #: dialogs.c:1609 msgid "Engine #1" msgstr "" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "" #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 msgid "New Chat" msgstr "" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 msgid "ICS Interaction" msgstr "" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "" #: dialogs.c:2143 msgid "down" msgstr "" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 msgid "Game-list options" msgstr "" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "" #: dialogs.c:2306 msgid "Fatal Error" msgstr "" #: dialogs.c:2306 msgid "Exiting" msgstr "" #: dialogs.c:2317 msgid "Information" msgstr "" #: dialogs.c:2324 msgid "Note" msgstr "" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 msgid "Files:" msgstr "" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 msgid "Filename:" msgstr "" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 msgid "File type:" msgstr "" #: dialogs.c:2857 msgid "Contents of" msgstr "" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "" #: menus.c:601 msgid "New Game" msgstr "" #: menus.c:602 msgid "New Shuffle Game..." msgstr "" #: menus.c:603 msgid "New Variant..." msgstr "" #: menus.c:605 msgid "Load Game" msgstr "" #: menus.c:606 msgid "Load Position" msgstr "" #: menus.c:607 msgid "Next Position" msgstr "" #: menus.c:608 msgid "Prev Position" msgstr "" #: menus.c:610 msgid "Save Game" msgstr "" #: menus.c:611 msgid "Save Position" msgstr "" #: menus.c:612 msgid "Save Selected Games" msgstr "" #: menus.c:613 msgid "Save Games as Book" msgstr "" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 msgid "Copy Game" msgstr "" #: menus.c:624 msgid "Copy Position" msgstr "" #: menus.c:625 msgid "Copy Game List" msgstr "" #: menus.c:627 msgid "Paste Game" msgstr "" #: menus.c:628 msgid "Paste Position" msgstr "" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "" #: menus.c:632 msgid "Edit Tags" msgstr "" #: menus.c:633 msgid "Edit Comment" msgstr "" #: menus.c:634 msgid "Edit Book" msgstr "" #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "" #: menus.c:638 msgid "Truncate Game" msgstr "" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 msgid "Back to Start" msgstr "" #: menus.c:643 msgid "Forward to End" msgstr "" #: menus.c:648 msgid "Flip View" msgstr "" #: menus.c:651 msgid "Move History" msgstr "" #: menus.c:652 msgid "Evaluation Graph" msgstr "" #: menus.c:653 msgid "Game List" msgstr "" #: menus.c:657 msgid "Comments" msgstr "" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "" #: menus.c:662 msgid "Game List Tags..." msgstr "" #: menus.c:667 msgid "Machine White" msgstr "" #: menus.c:668 msgid "Machine Black" msgstr "" #: menus.c:669 msgid "Two Machines" msgstr "" #: menus.c:670 msgid "Analysis Mode" msgstr "" #: menus.c:671 msgid "Analyze Game" msgstr "" #: menus.c:674 msgid "Training" msgstr "" #: menus.c:675 msgid "ICS Client" msgstr "" #: menus.c:677 msgid "Machine Match" msgstr "" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 msgid "Call Flag" msgstr "" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 msgid "Stop Observing" msgstr "" #: menus.c:694 msgid "Stop Examining" msgstr "" #: menus.c:695 msgid "Upload to Examine" msgstr "" #: menus.c:697 msgid "Adjudicate to White" msgstr "" #: menus.c:698 msgid "Adjudicate to Black" msgstr "" #: menus.c:699 msgid "Adjudicate Draw" msgstr "" #: menus.c:704 msgid "Edit Engine List..." msgstr "" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 msgid "Load New 2nd Engine..." msgstr "" #: menus.c:709 msgid "Engine #1 Settings..." msgstr "" #: menus.c:710 msgid "Engine #2 Settings..." msgstr "" #: menus.c:712 msgid "Hint" msgstr "" #: menus.c:713 msgid "Book" msgstr "" #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 msgid "Retract Move" msgstr "" #: menus.c:722 msgid "General..." msgstr "" #: menus.c:724 msgid "Time Control..." msgstr "" #: menus.c:725 msgid "Common Engine..." msgstr "" #: menus.c:726 msgid "Adjudications..." msgstr "" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 msgid "Load Game..." msgstr "" #: menus.c:730 msgid "Save Game..." msgstr "" #: menus.c:731 msgid "Game List..." msgstr "" #: menus.c:732 msgid "Sounds..." msgstr "" #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "" #: menus.c:746 msgid "Highlight With Arrow" msgstr "" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "" #: menus.c:751 msgid "Popup Exit Message" msgstr "" #: menus.c:753 msgid "Show Coords" msgstr "" #: menus.c:754 msgid "Hide Thinking" msgstr "" #: menus.c:758 msgid "Save Settings Now" msgstr "" #: menus.c:759 msgid "Save Settings on Exit" msgstr "" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 msgid "Man XBoard" msgstr "" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "" #: nengineoutput.c:155 msgid "Engine output" msgstr "" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 msgid "find position" msgstr "" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 msgid "tags" msgstr "" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "" #: ngamelist.c:283 msgid "There is no game list" msgstr "" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "" xboard-4.8.0/po/nl.gmo0000644000175000001440000013115012422467103011454 00000000000000tm(66 6666/67!7>7^7&s779949)9&:5E:#{::7: ::; ; ;;; ;$;3;L;S;Z;v;~;';;;;;7<K@<*<<&<<= ="!=D= \=)j=%= =%=== >,> 5> @>J> Y>f>>> > >8>> ?!?1? 3? A?b?k???? ????@@@ 1@?@ Q@[@ c@ q@0@@@@ @$@*A-A=A FA QA[AuA)AAAAABB#B:BLBTB ]BhB BB BB BB.B B C)C;C DCRCiC CC CC C%CCDD1D!QD sD~D DDDDDD D.D EEE'E8E =EJE#hEE!EVE#F(F$BFgF mF'wFF F$FF F FG G G -G 7G AGNGfG!oGG GGG GG GGH(H :H[HqHH HH2HH HI&I!5I&WI(~III!IIJ0J0IJzJJJJJJJJK"!K"DK.gK K KK KK KKKKXL8iLL LLL L8M&;MbMjMyM{M MM M(MM N N/9NiN{NNN N NNN NNOO2O7O z]zwzzzz(z z%z {$>{c{|{{{{{{{|| ,|9|A|P|0a|||| |%|B|*}F} O} Z}h}}.}}!}" ~#/~ S~]~#c~~~~ ~~ ~~ ~~~#~4#X#h   1I/[$ǀ(݀" )4 9DLN#e 6 ׁ !%+Gs#`#=ai4x ʃ)ԃ (CSd t! ݄ "3D MXuÅ 4' \}*&+*;R*q'#6;L] y Èۈ$,9K   Љ މf7z&؊ C++o ! ݋0%Ek9 2>R+W Ǎ 0@Ugy~  Ύ ܎. 6.#e""Ϗ#) 4A a oz=#̐&: IVksz "ґ ؑ  : We{ ƒВ$ A/+q.+̓. '2 9,F2s1(ؔ&N(w} ȕו## : F Ta x Ŗ֖ W$]6ח$%Jcј$08K,]4*@O_%h$Қۚ ":?Tk1{ Λ֛ %: C OZnp?*3; J6W-2D^s"ݞ1DXr  ˟ӟܟ$'06J]p1נ  4So,.20-Dr ֢$ +6H\[ѣ 3C ^j0٤(!1F*U- * )?#Y}Ǧڦ)0)TZ(ا) )!Hj%! Ϩ7ڨ73J8~ϩީ  &/&D&k0'6^F&̫_wZ׬25MP}ԭRrѮ  '07?_nu %ܯ  1% W bnuz5%ɰ (+ T`=t űα ձ *(=LMo"w*OB8rJ`US@==.9K1:H/[8(-1ikC8l4^ %- ;&%Tee T;$ /`"Z VFGPm\}W{*Q5KbjAg$+kQX|S1HvY\?0dzA{MJqGlU,F~  LdI[?:z]2 Qfu6*OT%$.pcg[(xsyanjv ZNl))K ;N>6ECM]<W 9atmRnrGwEWp?CfwI}i'L|tvhR^9} !# 4iU _/#mn-.R3X4^SFq&x)\J0_7'<VdubN5(s6B+@D3<!fDyL EH0rk,h|btcP7+h@eoq#sa>j_ Y~5P2 x]X`:Yz!,{p"y O>DA&Vgo3ucI~B27=Z' next page (with Zippy code)# no engines are installed# no themes are defined%s (%d reversible ply)%s (%d reversible plies)%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s in settings file %s program exits in draw position (%s)%s%s Copyright 1991 Digital Equipment Corporation Enhancements Copyright 1992-2014 Free Software Foundation Enhancements Copyright 2005 Alessandro Scotti %s is free software and carries NO WARRANTY;see the file COPYING for more information. The GTK build of this version is experimental and unstable Visit XBoard on the web at: http://www.gnu.org/software/xboard/ Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html Report bugs via email at: %s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: can't parse foreground color in '%s' %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty), but %s is3-checks<<<>>>AbortAbout XBoardAbove WAV FileAbsolute Analysis ScoresAcceptActionAdd this engine to the listAdjournAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate non-ICS GamesAdjudicate to BlackAdjudicate to WhiteAdjudications...All games in tourney '%s' are already played or playingAll variants not supported by the first engine (currently %s) are disabled.Almost Always Queen (Detour Under-Promote)Already at end of gameAlso match left-right flipped positionAlso match reversed colorsAltAlways QueenAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis ModeAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyze GameAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnimation Speed (high = slow):AnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-Create Logon ScriptAuto-Display CommentAuto-Display TagsAuto-KibitzAuto-ObserveAuto-Play speed of loaded games (0 = instant, -1 = off):Auto-Raise BoardAuto-Refresh Seek GraphAuto-Save GamesBBack to StartBackground Observe while PlayingBackwardBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBlunderBlunder graphBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook Depth (moves):Book FaultBook Variety (0) vs. Strength (100):Book file exists! Try again for overwrite.Both flags fellBughouseCRC (10x8)Call FlagCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannonCannot build game listCapablanca (10x8)CaptainCar HornChancellorChannel #1 Text Colors:Channel 1:Channel:Chat partner:Chats:Clear boardClick clock to clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsCommon EngineCommon Engine SettingsConnection closed by ICSContents ofContinue LaterCopy GameCopy Game ListCopy PositionCould not connect to host %s, port %sCould not create bookCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCrazyhouseCtrlCylinder *CymbalDDark Square Color:Dark-Squares Texture File:DeclineDefault BeepDefault Number of Games in Match (or Pairing):DeferDemoteDetect all MatesDevelopment NewsDingDirectories:Directory with Pieces Images:Disable own engine books by defaultDisplayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.DrawDraw after N Moves Total:Draw if Insufficient Mating MaterialDraw:Drop MenuDual Board for Background-Observed GameEGTB Cache Size (MB):EGTB Path:ERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit Engine List...Edit GameEdit PositionEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElephantElo of strongest player at least:Elo of weakest player at least:Empty squareEnable Variation TreesEnd ChatEnd of gameEngineEngine #1Engine #1 Has Own BookEngine #1 Settings...Engine #2 / HumanEngine #2 Has Own Book Engine #2 Settings...Engine Command:Engine Directory:Engine OutputEngine SettingsEngine did not send setup for non-standard variantEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation GraphEvaluation graphExact position matchExitingFIRST TYPE DIRECTORY NAME HEREFRCFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Falcon (10x8)Fatal ErrorFileFile type:File with Start Positions:Filename:Files:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFischer castlingFlash MovesFlash Moves (0 = no flashing):Flash Rate (high = fast):Flip ViewFor concurrent playing of tourney with multiple XBoards:Force current variant with this engineForwardForward to EndGGame File with Opening Lines:Game ListGame List Tags...Game List...Game Number (-1 or -2 = Auto-Increment):Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneralGeneral OptionsGeneral...Get Move ListGongGot end of file from keyboardGothic (10x8)Great Shatranj (10x8)Hash keys are differentHash-Table Size (MB):HelpHideHide ThinkingHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sHoldings Size:ICS ClientICS Input BoxICS InteractionICS OptionsICS input boxICS text menuICS...Illegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sInclude Number Tag in tourney PGNIncomplete \ escape in value for %sIncorrect moveIncrement or max (sec/move):Info XBoardInformationInitial time (min):Internal error: PARTICIPANTS set wrongInvalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnJanus (10x8)Kibitz Text Colors:Kibitz:KingKnightKnightmateLaserLieutenantLight Square Color:Light-Squares Texture File:LionLion roar:Load GameLoad Game OptionsLoad Game...Load New 1st Engine...Load New 2nd Engine...Load PositionLoad first engineLoad game file name?Load position file name?Load second engineLose:Machine BlackMachine MatchMachine WhiteMachine accepts your draw offerMachine offers a draw. Select Action / Draw to accept.MachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMakrukMan XBoardMatch %s vs. %s: final score %d-%d-%dMaterial difference (optional stuff balanced)Material range (top board half optional)Maximum Number of CPUs per Engine:Minimum nr consecutive positions:Mismatch of STRIDE in nengineoutput.c Change and recompile!ModeMove HistoryMove NowMove SoundMove listMove:Moves per session:N-Move Rule:N-fold Repeats:NPSNegate Score of Engine #1Negate Score of Engine #2New ChatNew GameNew Shuffle GameNew Shuffle Game...New VariantNew Variant...New directoryNew name for current theme:Next PositionNickname (optional):No SoundNo castleNo default pieces installed! Select your own using '-pieceImageDirectory'.No engine %s is installedNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNormalNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOn-line User GuideOne-Click MovingOnly bughouse is not available in viewer mode.Opening-Book Filename:OptionsOther Channel Text Colors:Own Games OnlyPaste GamePaste PositionPausePause between Match Games (msec):PawnPenaltyPeriodic UpdatesPeriodic Updates (in Analysis Mode)PhonePick new gamePlayPolyglot book not validPolygot Directory:Ponder Next MovePopPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition Number (-1 or -2 = Auto-Increment):Position not found in filePremovePremove for BlackPremove for WhitePrev PositionPromotePull pawn backwards to under-promoteQueenQuiet PlayQuit Quit after gameRReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Reload CMail MessageReplace EngineRequest Text Colors:Request:ResignRetract MoveRevertRewind Index after this many Games (0 = never):RoarRookS-Shout Text Colors:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save GameSave Game OptionsSave Game...Save Games as BookSave Games on File:Save PositionSave Selected GamesSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:SeirawanSelect Engine:Select engine from list:Selectable themes:ShatranjShiftShout Text Colors:Show CoordinatesShow CoordsShow Target SquaresShown position is subsetSlapSocket support is not configured inSound OptionsSound Program:Sounds Directory:Sounds...SpartanStart-position number:Starting %s chess programStarting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Stop ExaminingStop ObservingSuicideSuperchessSwiss tourney finishedSync after cycleSync after roundTRY ANOTHER NAMETagsTell:Test LegalityThat square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTime Control...Time-Odds factors:Top-Level DialogsTournament OptionsTournament file: Tournament...Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTruncate GameTry-Out Sound:Two MachinesTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUCIUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse GUI BookUser FileUser WAV File:Variant %s not supported by %sVariant %s supported only in ICS modeVariants marked with * can only be played with legality testing off.Verify Engine Result ClaimsViewWait until your turn, or select 'Move Now'.Wait until your turn.Waiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarlordWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWild castleWin / Loss Threshold:Win:Wood ThunkXBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYou restarted an already completed tourney. One more cycle will now be added to it. Games commence in 10 sec.Your opponent is not out of timeZoom factor in Evaluation Graph:add next moveatomicbad searchTime option %sbad timeControl option %sberolina *browseby nameby typechu shogi (12x12)classicalclearclosecould not load EGBB librarycourier (12x8)downe-Mail Bug Reportelven chess (10x10)engine namefactoryfailed writing PVfairyfind positionfirstfixed maxgive-awaygrand (10x10)incrementalinternal rcmd not implemented for Unixlosersmighty lionmovenarrownextnext pageno games matched your requestonly marked squares are legalor specify one below:pick fixedprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshogi (9x9)shuffletagsthresholdstwo kingsupvs.white pixel = 0x%lx, black pixel = 0x%lx wrong EGBB versionxiangqi (9x10)your opponent kibitzes: %sProject-Id-Version: GNU xboard 4.8.0-pre1 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2014-10-02 10:54+0200 Last-Translator: Benno Schulenberg Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Lokalize 1.0 volgende pagina (met Zippy-code)# er zijn geen automaten geïnstalleerd# er zijn geen thema's gedefinieerd%s (%d omkeerbare ply)%s (%d omkeerbare plies)%s - %d/%d partijen (%d-%d-%d)%s ondersteunt analyse niet.%s automaat heeft te veel instellingen %s in instellingenbestand %s programma is geëindigd in remisepositie (%s)%s%s Copyright 1991 Digital Equipment Corporation Uitbreidingen Copyright 1992-2014 Free Software Foundation Uitbreidingen Copyright 2005 Alessandro Scotti %s is vrije software en kent GEEN GARANTIE; zie het bestand COPYING voor meer informatie. De GTK-versie is experimenteel en nog niet stabiel. Bezoek XBoard op het web: http://www.gnu.org/software/xboard/ Voor nieuwe functies zie: http://www.gnu.org/software/xboard/whats_new.html Rapporteer gebreken in het programma aan ; meld vertaalfouten aan . %s: onjuiste syntax %s voor 'boardSize' %s: Kan huidige map niet wijzigen naar CHESSDIR: %s: onbegrepen kleurnamen; kleuring wordt uitgeschakeld %s: onbegrepen voorgrondkleur in '%s' %s: er zijn geen lettertypen die overeenkomen met patroon %s %s: te weinig kleuren beschikbaar; monochroommodus wordt geprobeerd %s: onbekende naam %s voor 'boardSize' %s: niet-herkende kleur %s (map wordt afgeleid uit automaatpad indien leeg), maar %s isdrie keer schaak<<<>>>AfbrekenOver XBoardBovenstaande WAVAbsolute analysescoresAccepterenActiesDeze automaat aan de lijst toevoegenOpschortenTot remise besluitenEenvoudige remises beslissen (3 zetten uitstel)Non-ICS-partijen beslissenWinst aan zwart toekennenWinst aan wit toekennenBeslissingen...Alle partijen in toernooi '%s' zijn al gespeeld of spelen nogVarianten die de eerste automaat (momenteel %s) niet kent zijn onkiesbaar.Bijna altijd koningin (onderpromotie-omweg)Reeds aan einde van partij.Ook matchen met links-rechts gespiegelde positieOok matchen met verwisselde kleurenAltAltijd koninginNiet-eenduidige zet in ICS-uitvoer: '%s'Niet-eenduidige zet: %d.%s%sAnalysemodusAnalysemodus werkt niet met ICS-modusAnalysemodus vereist een schaakprogrammaPartij analyserenAnalyzeFile-modus vereist een partijbestandSlepen animerenZetten animerenAnimatiesnelheid (hoog = langzaam):AnnoterenAartsbisschopVanzelf vlaggenBord vanzelf draaienVanzelf becommentariërenAutomatisch een logon-script makenOpmerkingen vanzelf tonenLabels vanzelf tonenVanzelf kibitzenVanzelf observerenSpeelsnelheid van geladen partijen (0 = instantaan, -1 = uit):Bord automatisch focussenZoekgrafiek vanzelf verversenPartijen vanzelf opslaanBTerug naar beginOp achtergrond observeren tijdens spelenAchterwaartsOngeldige FEN-positie op het klembordOngeldige FEN-positie in bestandOngeldige FEN ontvangen van automaatOngeldige bestandssprongIncorrect partijbestandOngeldig geheel getal: %sIncorrect positiebestandIncorrect toernooibestandLoperZwartKleur van zwart stuk:Zwart is aan zetZwarts vlag is gevallenGeblinddoektBlunderBlundergrafiekBordinstellingenBordafmetingen (-1 = standaard voor de variant):Bord...BoekBoekdiepte (zetten):Fout in boekGevarieerdheid (0) tot Sterkte (100):Bestand bestaat al. Probeer het opnieuw om deze te overschrijven.Beide vlaggen zijn gevallenBughouseCRC (10x8)'Vlag' roepenKan niet nog verder teruggaanKan niet nog verder vooruitgaanEr is geen toernooi mogelijk zonder automaten.Kan '%s' niet openenKan tijdelijk bestand niet openenKan niet springen in partijbestandKan niet springen in positiebestandAnnulerenKanonKan partijenlijst niet samenstellenCapablanca (10x8)KapiteinClaxonKanselierKanaal-1-tekstkleuren:Kanaal 1:Kanaal:Chatpartner:Chats:Bord leegmakenKlik op klok om bord leeg te maken.Klokbijstelling is niet toegestaan in auto-vlagmodusToernooi klonenAnalyse van ICS-automaat sluiten...Berichten kleurenOpmerkingenGemeenschappelijke automaatAlgemene automaatinstellingenVerbinding is gesloten door ICSInhoud vanLater verdergaanPartij kopiërenPartijenlijst kopiërenPositie kopiërenKan geen verbinding maken met host %s, poort %sKan geen boek aanmakenKan communicatiepoort %s niet openenKan zet niet ontledenKan niet naar toernooibestand schrijven.Kan zet '%s' van ICS niet ontledenCrazyhouseCtrlcilinder *CymbaalDKleur van donker veld:Textuurbestand voor donkere velden:WeigerenStandaardpiepStandaard aantal partijen in een toernooi (of koppel):UitstellenDegraderenAlle matten detecterenOntwikkelingsnieuwsTinkMappen:Map met afbeeldingen van stukken:Eigen automaatboeken standaard uitschakelenGetoonde zet is niet de huidigeGetoonde positie is niet de huidigeGetoonde positie is niet de huidige. Ga vooruit naar de correcte positie en probeer het opnieuw.RemiseRemise na in totaal N zetten:Remise bij onvoldoende matmateriaalRemise:PlaatsingsmenuDubbel bord voor op achtergrond geobserveerde partijGrootte van EGTB-cache (MB):EGTB-pad:Fout: onbekende gebruiker %s (in pad %s) BewerkenBoek bewerkenOpmerking bewerkenAutomatenlijst bewerken...Partij bewerkenPositie bewerkenLabels bewerkenBoek bewerkenOpmerking bewerkenOpmerking op %d.%s%s bewerkenOlifantElo van sterkste speler minstens:Elo van zwakste speler minstens:Leeg veldVariatiebomen inschakelenChat beëindigenEinde van partijAutomaatAutomaat 1Automaat #1 heeft eigen boekInstellingen van automaat 1...Automaat 2 / MensAutomaat #2 heeft eigen boekInstellingen van automaat 2...Automaatopdracht:Automatenmap:AutomaatuitvoerAutomaatinstellingenAutomaat heeft geen opstelling gestuurd voor variantAutomaat kent geen instellingen.AutomaatuitvoerFoutFout bij lezen van zettenlijst: extra bordFout bij lezen van zettenlijst: genestFout bij lezen van zettenlijst: twee koppenFout bij lezen van %s schaakprogramma (%s)Fout bij lezen van ICSFout bij lezen van toetsenbordFout bij schrijven naar %s schaakprogrammaFout bij schrijven naar ICSFout bij schrijven naar schaakprogrammaFout bij schrijven naar beeldschermFout: %s schaakprogramma (%s) is onverwacht beëindigdEvaluatiegrafiekEvaluatiegrafiekExacte positie-overeenkomstAfsluitenTyp hier eerst een mapnaamFRCAanroepen van 'cmail' is misluktKan bestand niet openenKan bestand '%s' niet openen Kan indirectiebestand %s niet openenOntleden van bordtekenreeks is mislukt: '%s'Starten van %s schaakprogramma (%s) op %s is mislukt: %s Falcon (10x8)Fatale foutBestandBestandstype:Bestand met startposities:Bestandsnaam:Bestanden:Eerste zet van zwart:Eerste zet van wit:Wijzig eerst een automaat door de deelnemerslijst in de dialoog «Toernooi-instellingen» te bewerken.U dient eerst een bestaand toernooibestand op te geven.Fischer-rokadeZetten laten knipperenZetten knipperen (0 = niet knipperen):Knippersnelheid (hoog = snel):Bord draaienVoor het gelijktijdig spelen van een toernooi met meerdere XBoards:Huidige variant opdringen aan deze automaatVoorwaartsVooruit naar eindeGPartijbestand met openingsregels:PartijenlijstPartijenlijst-labels...Partijenlijst...Partijnummer (-1 of -2 = automatische ophoging):Partijenlijst is leeg of niet geladenPartij niet gevonden in bestandPartijnummer valt buiten bereik*** Partij is te lang; verhoog MAX_MOVES en hercompileer.Partijenlijst-instellingenGat in zettenlijstGeneraalAlgemene instellingenAlgemeen...Zettenlijst ophalenGongEinde-van-bestand ontvangen van toetsenbordGothic (10x8)Grote Shatranj (10x8)Hash-sleutels zijn verschillendGrootte van hash-tabel (MB):HulpVerbergenDenken verbergenDenken verbergen voor mensMarkeringskleur:Slepen markerenLaatste zet markerenMarkeren met pijlMarkeren met pijlHintHint: %sStalgrootte:ICS-cliëntICS-invoervakICS-interactieICS-instellingenICS-invoervakICS-tekstmenuICS...Ongeldige hintzet '%s' van %s schaakprogramma.Ongeldige zetOngeldige zet '%s' (geweigerd door %s schaakprogramma)Ongeldige zet '%s' van %s automaat.Ongeldige zet (geweigerd door ICS)Ongeldige zet in ICS-uitvoer: '%s'Ongeldige zet: %d.%s%sNummerlabel in toernooi-PGN opnemenOnvolledige \-stuurcode in waarde voor %sOnjuiste zetOphoging of maximaal (sec/zet):'info xboard'InformatieBegintijd (minuten)**Interne programmafout**: PARTICIPANTS is verkeerd ingesteldOngeldig koppel van koppelautomaat.Zwart is aan zetWit is aan zetZwart is niet aan zetWit is niet aan zetU bent aan zetJanus (10x8)Kibitz-tekstkleuren:Kibitz:KoningPaardpaardmatLaserLuitenantKleur van licht veld:Textuurbestand voor lichte velden:LeeuwLeeuwenbrul:Partij ladenPartij-instellingen ladenPartij laden...Nieuwe 1ste automaat laden...Nieuwe 2de automaat laden...Positie ladenEerste automaat ladenPartij laden uit bestand:Positie laden uit bestand:Tweede automaat ladenVerloren:Automaat heeft zwartAutomatentoernooiAutomaat heeft witAutomaat accepteert uw remise-aanbodAutomaat biedt remise aan. Kies Acties > Remise om te accepteren.MachineBlack-modus werkt niet met ICS-modusMachineBlack-modus vereist een schaakprogrammaMachineWhite-modus werkt niet met ICS-modusMachineWhite-modus vereist een schaakprogrammaZet mailenMakruk'man xboard'Toernooi van %s tegen %s: eindscore %d-%d-%dMateriaalverschil (optioneel spul is in evenwicht)Materiaalbereik (bovenste bordhelft is optioneel)Maximum aantal processoren per automaat:Minimum aantal opeenvolgende posities:*** Niet-passende 'STRIDE' in 'nengineoutput.c'. Pas deze aan en hercompileer.ModusZettengeschiedenisNu zettenZetgeluidZettenlijstZet:Zetten per sessie:N-zettenregel:N-voudige herhalingen:NPSScore van automaat 1 negatief makenScore van automaat 2 negatief makenNieuwe chatNieuwe partijHusselpartijNieuwe husselpartij...VariantenNieuwe variantpartij...Nieuwe mapNieuwe naam voor huidige thema:Volgende positieBijnaam (optioneel):(geen geluid)geen rokadeEr zijn geen standaardstukken geïnstalleerd! Kies uw eigen met '-pieceImageDirectory'.Automaat '%s' is niet geïnstalleerdEr is geen automaat met de gegeven naam geïnstalleerdEr is nog geen partij geladenGeen partij geselecteerdGeen partijen vóór het jaar:Geen hint beschikbaarGeen verdere partijen in dit berichtPartij bevat geen zettenGeen koppelautomaat gegevenEr is nog geen positie geladenGeen label geselecteerdGeen onafgemaakte partijenGeen onafgemaakte partijen. Geen waarde gegeven voor argument %snormaalTe weinig deelnemersNotitieAantal bordlijnen:Aantal bordrijen:Aantal toernooirondes (of Zwitserse rondes):OKOnline gebruikersgidsEenkliks zettenAlleen Bughouse is niet beschikbaar in viewer-modus.Bestandsnaam van openingenboek:OptiesAnderekanaal-tekstkleuren:Alleen eigen partijenPartij plakkenPositie plakkenPauzerenPauze tussen toernooipartijen (msec):PionZoemerPeriodieke updatesPeriodieke updates (in analysemodus)TelefoonKies een nieuwe partijAfspelenPolyglot-boek is ongeldigPolygot-map:Volgende zet overdenkenPlopPopup-afsluitberichtPopup-afsluitberichtenPopup-zetfoutenPositienummer (-1 of -2 = automatische ophoging):Positie niet gevonden in bestandVoorzetVoorzet voor zwartVoorzet voor witVorige positiePromoverenBeweeg pion terug voor onderpromotie.KoninginStil spelenAfsluiten Afsluiten na partijRLezen van partijbestand (%d)Klaar om mail te verzenden. *** Hercompileer om BOARD_RANKS of BOARD_FILES te ondersteunen.CMail-bericht herladenAutomaat vervangenVerzoek-tekstkleuren:Verzoek:OpgevenZet terugnemenTerugdraaienIndex terugspoelen na dit aantal partijen (0 = nooit):BrulTorenS-Shout-tekstkleuren:Zelfde materiaalZelfde materiaal met exact dezelfde pionketenEindposities opslaan in:Partij opslaanPartij-instellingen opslaanPartij opslaan...Partijen opslaan als boekPartijen opslaan in:Positie opslaanGeselecteerde partijen opslaanInstellingen nu opslaanInstellingen opslaan bij afsluitenToernooipartijen bewaren op:Partij opslaan in bestand:Positie opslaan in bestand:Opslaan van partijOpslaan van positieZoeken door partijen (%d)Scores in zettenlijstZoekmodus:Seconden per zet:ZoekgrafiekTekstkleuren voor zoeken:Zoeken:SeirawanKies automaat:Selecteer een automaat uit de lijst:Selecteerbare thema's:ShatranjShiftShout-tekstkleuren:Coördinaten tonenCoördinaten tonenDoelvelden tonenGetoonde positie is een subsetKlapOndersteuning voor sockets is niet geconfigureerdGeluidsinstellingenGeluidsprogramma:Geluidenmap:Geluiden...SpartaansStartpositienummer:Starten van %s schaakprogrammaStarten van schaakprogrammaOpstartfout bij '%s'U dient nog een zet te doen voor partij %s. U dient nog een zet te doen voor deze partij. U dient nog zetten te doen voor alle %d partijen. U dient nog zetten te doen voor beide partijen. U dient nog zetten te doen voor partijen %s. Stoppen met bestuderenStoppen met observerensuïcideSuperschaakZwitsers toernooi is beëindigd.Synchroniseren na een cyclusSynchroniseren na een rondeKies een andere naamLabelsMededelingGeldigheid testenDat veld is bezet.Het CMail-bericht is niet geladen. Gebruik «CMail-bericht herladen» en doe uw zet opnieuw.Er is geen partijenlijstEr is geen aanbod op deze zet.TijdsbeperkingTijdsbeperking...Tijdsfactoren:Topniveau-dialogenToornooi-optiesToernooibestand: Toernooi...Toernooi-deelnemers:Toernooitype (0 = op-de-rij-af, 1 = handschoen):TrainingTrainingsmodus is uitgeschakeldTrainingsmodus is ingeschakeldTrainingsmodus vereist een partijbestandPartij afkappenDit geluid proberen:Twee automatenTwoMachines-modus werkt niet met ICS-modusTwoMachines-modus vereist een schaakprogrammaTyp een zetUCIKan geen lettertypenset aanmaken voor %s. Onafgemaakt:Onbekende initialMode %sOnbekende variantnaam: %sOnbekend wild type %dNiet-herkend argument: %sNiet-herkende booleaanse waarde: %s(loos)Automaat upgradenUploaden om te bestuderenBordtexturen gebruikenGUI-boek gebruikenGebruikersbestandEigen WAV-bestand:Variant %s wordt niet ondersteund door %sVariant %s wordt alleen ondersteund in ICS-modusVarianten gemarkeerd met * kunnen alleen gespeeld met geldigheidstest uitgeschakeld.Resultaatclaims van automaat controlerenWeergaveWacht op uw beurt, of kies «Nu zetten».Wacht op uw beurt.Wachten op toegang om bestand op te slaanWachten op eerste schaakprogrammaWachten op andere partij(en)Wachten op antwoord van tegenstander Wachten op tweede schaakprogrammaKrijgsheerWaarschuwing: u bent nog een partij aan het bestuderen.Waarschuwing: u bent nog een partij aan het observeren.Waarschuwing: u bent nog een partij aan het spelen.Waarschuwing: tweede automaat (%s) ondersteunt dit niet.WitKleur van wit stuk:Wit is aan zetWits vlag is gevallenwilde rokadeWinst/verlies-grenswaarde:Gewonnen:HoutplokWebpagina van XBoardU bent geen partij aan het bestuderen.U bent geen partij aan het observeren.U speelt met zwartU speelt met witU kunt slechts één automaat tegelijk wijzigen.U kunt niet terugdraaien tijdens pauze.U kunt dit niet doen tijdens het spelen of observeren.U kunt een automaat niet vervangen terwijl deze gebruikt wordt. Beëindig eerst diens partij.U hebt geen automaatbestand opgegeven.U hebt al een zet gemaild. Wacht tot er een zet arriveert van uw tegenstander. Om dezelfde zet opnieuw te verzenden, typt u: "cmail -remail -game %s" op de opdrachtregel.U hebt de partijgeschiedenis bewerkt. Gebruik «Zelfde partij herladen» en doe uw zet opnieuw.U hebt te veel zetten ingevoerd. Ga terug naar de correcte positie en probeer het opnieuw.U hebt nog geen zet gedaanU dient uw zet te doen alvorens remise aan te bieden.U dient een toernooibestand op te geven, om de toernooivoortgang in op te slaan.U hebt een reeds voltooid toernooi herstart. Er wordt een extra cyclus aan toegevoegd. De partijen beginnen in tien seconden.Uw tegenstander heeft nog tijd.Zoomfactor in evaluatiegrafiek:Volgende zet toevoegenatomischongeldige searchTime-optie: %songeldige timeControl-optie: %sberolina *Bladerenop naamop typeChu shogi (12x12)Klassiekwissensluitenkan EGBB-bibliotheek niet ladenCourier (12x8)omlaagFoutrapportage mailenElvenschaak (10x10)automaatnaamorigineelschrijven van hoofdvariant is misluktFairypositie vindeneersteVast maximumweggeverGrand (10x10)Ophogendinterne 'rcmd' is niet geïmplementeerd voor UnixverliezersMighty Lionzettennauwvolgendevolgende paginaer zijn geen partijen die overeenkomen met uw verzoekalleen gemarkeerde velden zijn geldigof geef er hieronder een op:Vaste kiezenvoorgaande paginaprotocolversie %d wordt niet ondersteundWillekeurigwijzigingen opslaan**interne programmafout**; ongeldig moveType %d (%d,%d-%d,%d)tweedeShogi (9x9)Husselenlabelsgrenswaardentwee koningenomhoogtegenwitte pixel = 0x%lx, zwarte pixel = 0x%lx onjuiste EGBB-versieXiangqi (9x10)Uw tegenstander kibitzt: %sxboard-4.8.0/po/LINGUAS0000755000175000001440000000027712421746612011400 00000000000000# whitespace separated list of translated languages goes below # note: zh translations are untested; xboard fails to create a fontset for them da de es it nl pl ru tr uk vi zh_CN zh_HK zh_TW xboard-4.8.0/po/boldquot.sed0000644000175000001440000000033112421746651012670 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g xboard-4.8.0/po/ru.gmo0000644000175000001440000005146512422467103011503 00000000000000KLxy ' "'J)b%%   % 2?P h    *8AF$Z)4; R ]ir%!* =JQb!$'  $ 1 ;H` i v &!&($Md!0 19=.T /*;C Sa # . :0G!x  )@PU\p -)- )6 %` "      ! !!2!C!U!s!!!!!!!!!!#"("-">"Q"e"w""""" """"" # #*#3# D# P#^#u##&#!#*#($&A$h$ m${$$&$$$$"$,%(L%u%%%%%%%&& <& ]&'~&'&%&2&'' -';'M'c'''''.' (8(?(X(r(w((!((_(: *F*c*l*0*,*** +8 +=Y+*+G+P ,K[,-,,&,-/-#M-q-----^-H^.0.?./ !/./H/%\/// / ///20.D0*s0O0*0T1Gn1 1<11 2)2,@26m2.2@2,3<A3A~3333 4C%4bi4(454+5E5 [5(h5"5#5.566;26 n6%{66 6J6R7Ld7>7/7! 87B8:z8L8-9@09q9 99!9F9%:::C:\:1s:.:3:;); ;;.;I<h<<R<<4=*;=!f=!====.=>J7>X>;>(?@?X?m??%?#? ? ??@#@$9@7^@\@s@ZgAbAK%BqB BBB2B2B2#CVCgC=yC/CCRD&TD,{D,D-DEE Eyuq #;Hapk{S1o UJ8\nA%s does not support analysisAbout XBoardActionAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate to BlackAdjudicate to WhiteAlarmAlready at end of gameAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-ObserveAuto-Raise BoardAuto-Refresh Seek GraphBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad game fileBad position fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard...BookBook Depth (moves):Book Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't seek on game fileCan't seek on position fileCannonCannot build game listChancellorClear boardCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCouldn't parse move "%s" from ICSDark Square Color:Default BeepDemoteDetect all MatesDisplayed move is not currentDisplayed position is not currentDraw after N Moves Total:Draw if Insufficient Mating MaterialDual Board for Background-Observed GameEGTB Cache Size (MB):EditEdit CommentEdit TagsEdit commentEdit comment on %d.%s%sElephantEmpty squareEnd of gameEngineEngine #1 Has Own BookEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExitingFRCFailed to invoke cmailFailed to start %s chess program %s on %s: %s Fatal ErrorFileFirst Black Move:First White Move:Game List Tags...Game not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS OptionsIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move in ICS output: "%s"Illegal move: %d.%s%sIncorrect moveInformationIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKingKnightLight Square Color:Load Game OptionsMachine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMono ModeNPSNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNo SoundNo game has been loaded yetNo game selectedNo hint availableNo more games in this messageNo moves in gameNo position has been loaded yetNo unfinished gamesNo unfinished games NoteOKOne-Click MovingOptionsPawnPeriodic UpdatesPeriodic Updates (in Analysis Mode)PlayPonder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePremovePremove Highlight Color:PromoteQueenQuiet PlayReady to send mail RookSave Game OptionsSave Settings NowSave Settings on ExitSeek GraphSeirawanShow CoordinatesShow CoordsSound OptionsStart-position number:Starting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s TagsTest LegalityThat square is occupiedThere is no game listThere is no pending offer on this moveTrainingTraining mode offTraining mode onTraining mode requires a game fileTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineUnknown initialMode %sUnknown variant name %sUpload to ExamineVariant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsViewWaiting for first chess programWaiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite to playWhite's flag fellWin / Loss Threshold:You are not examining a gameYou are playing BlackYou are playing WhiteYou can't revert while pausingYou have not made a move yetYou must make your move before offering a drawYour opponent is not out of timeatomicbad searchTime option %sbad timeControl option %sdownfactorylosersprotocol version %d not supportedupProject-Id-Version: GNU xboard master-20110507 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s не поддерживает режим анализаО программе XBoardИграПрисудить ничьюНичья в технич. окончанияхПрисудить победу чернымПрисудить победу белымЗвонокСыграны все ходы данной партииНеоднозначный ход с сервера ICS: "%s"Неоднозначный ход: %d.%s%sРежим анализа не совместим с режимом ICSДля анализа необходима шахматная программаРежим анализа: не указан файл для анализаАнимация перетаскиванияАнимация ходовЗаписать и вернутьсяАрхиепископПроверять времяАвторазворот доскиКомментарииСледить за игройРаскрывать доскуАвтообновлениеСледить в фонеПозиция в буфере обмена не соответствует формату FENНеправильная позиция формата FEN в файлеНеправильный формат файлаНеправильный формат файла позицииСлонЧерныеЧерные фигурыХод черныхУ черных упал флажокНевидимые фигурыНастройки доскиДоска...Книга...Глубина книги:Варьирование:У обоих игроков время вышлоДостигнуто начало спискаДостигнут конец спискаНе подключено ни одной шахматной программыНе могу открыть файл "%s"Поиск в файлах записей партий не предусмотренПоиск в файлах позиций не предусмотренПушкаНе удалось создать список партийКанцлерОчистить доскуКомментарииОбщие настройки движковСервер ICS разорвал соединениеКопировать список партийНе могу установить связь с %s, порт %sНе могу открыть COM-порт %sНевозможно интерпретировать ходСтранный ход "%s" получен с сервера ICSЧерные поляПростой сигналРазжаловатьОпределять матПозиция не отвечает положению в игреПоказанная позиция не соответствует положению в игреПрисудить ничью послеНичья при нехватке материалаДвойная доскаКеш ЭБД (МБ):ПравкаПравить комментарий...Править описание...Правка комментарияПравка комментария к %d.%s%sСлон (стар.)Пустое полеСыгран последний записанный ходДвижокСвоя книга у движка 1Вывод движкаОшибкаОшибка чтения списка ходов: лишняя доскаОшибка чтения списка ходов: вложенные спискиОшибка чтения списка ходов: два заголовкаОшибка чтения с выхода движка %s (%s)Ошибка чтения с сервера ICSОшибка клавиатурыОшибка записи на вход движка %sОшибка записи на вход сервера ICSОшибка подключения к шахматной программеОшибка записи на дисплейОшибка: движок %s (%s) завершил работуОценка позицииВыходФишера (960)Ошибка запуска cmailНе удалось запустить %s движок %s на %s: %s Неисправимая ошибкаФайл1-й ход черных1-й ход белыхСодержание списка партий...Партия не найдена в файлеНомер партии - вне диапазонаСлишком длинная партия: увеличьте значение MAX_MOVES и перекомпилируйте программуПропуск в записи ходовОбщие...Общие настройкиЗапрашивать запись ходовПолучен символ конца файла с клавиатурыРазмер хеша (МБ):СправкаСкрывать вывод движка в игре против человекаВыделенное полеВыделять при перетаскиванииВыделять последний ходВыделять стрелкойВыделять стрелкойПодсказка...Подсказка: %sКлиент ICSНастройки соединения с ICSНеправильный ходНеправильный ход "%s" (не принят движком %s)Неправильный ход "%s" пытается выполнить движок %sНеправильный ход с сервера ICS: "%s"Неправильный ход: %d.%s%sНеверный ходИнформацияХод черныхХод белыхСейчас не ход черныхСейчас не ход белыхВаш ходКорольКоньБелые поляПараметры загрузкиНачать матч движковКомпьютер согласился на ничьюРежим "Компьютер черными" не совместим с режимом ICSВ режиме "Компьютер черными" нужна шахматная программа (движок)Режим "Компьютер белыми" не совместим с режимом ICSВ режиме "Компьютер белыми" нужна шахматная программаМатч %s против %s: финальный результат %d-%d-%dMax число CPU:РежимМонохромнаяNPS (Узл./сек.)Оценка движка 1 - абсолютнаяОценка движка 2 - абсолютнаяНовая в смешанные шахматы...ВариантыБез звукаНет загруженных шахматных партийВыберите партию из спискаПодсказок нетВ этом сообщении больше нет шахматных партийНет записанных ходовНет загруженных позицийНет неоконченных партийНет неоконченных партий ПримечаниеOKХод одним щелчкомНастройкиПешкаПериодически обновлятьПериодически обновлять (в режиме анализа)ПослушатьДумать всегдаСообщение при выходеСообщение при выходеСообщать о неправильном ходеПозиция не найдена в файлеПредварительный ходПредварит. ходПревратитьФерзьСпокойная играМожно отсылать почту ЛадьяНастройки сохраненияСохранить настройки сейчасСохранять настройки при выходеГрафик поискаСейраванаПоказывать координатыПоказывать координатыЗвукиНомер позиции:Запускается шахматная программаОшибка при запуске программы '%s'Все еще ваш ход в партии %s Все еще ваша очередь ходить в этой партии Все еще ваш ход во всех %d партиях Все еще ваша очередь ходить в обеих партиях Все еще ваша очередь ходить в партиях %s ОписаниеПроверять правильность хода CS+LЭто поле занятоНет списка партийК данному ходу никаких предложений не сделаноТренировкаТренировка оконченаТренировкаДля тренировки необходимо загрузить шахматную партию из файлаРежим "Два движка" не совместим с режимом ICSВ режиме "Два движка" нужна шахматная программаinitialMode: неизвестный режим %sНеизвестный вариант %sЗагрузить на сервер для изученияВариант %s не поддерживается %sВариант %s поддерживается только в режиме ICSПроверять требования движкаВидЖдем первую шахматную программуОжидание ответного хода Ждем вторую шахматную программуПредупреждение: вы все еще изучаете игруПредупреждение: вы все еще наблюдаете за игройПредупреждение: вы все еще продолжаете игратьПредупреждение: второй движок (%s) не поддерживает это!БелыеХод белыхУ белых упал флажокПобеда/поражение при перевесе вНе включен режим изучения шахматных партийВы играете чернымиВы играете белымиНельзя вернуться к началу пока выбрана "Пауза"Вы еще не сделали ходВы должны сделать свой ход прежде, чем предлагать ничьюУ вашего соперника еще есть времяатомныеsearchTime: неверный параметр %stimeControl: неверный параметр %sВнизСтандартподдавки (мат)версия протокола %d не поддерживаетсяВверхxboard-4.8.0/po/pl.gmo0000644000175000001440000012421512422467103011462 00000000000000a$5,&303$23W3 Y3e3x3/33334&14X4u444454#5>57Y5555555 555555 66'!6I6b6v666676*6 7&$7K7f7 j7"w77 7)7%7 8%8C8T8c88 8 88 88888 9 98)9b9s999 9 9999 :): 2:@:U:g:{::: :: : :0:; ;; &;$1;*V;; ; ;;;);<<,<D<`<g<n<<<<< < << << = ==.6= e=s===== = == =% >3>I>e>z>!>>>>>>> ?. ?SBSUSiS,{SSSSSS TT$TCT ITTTZT\TsT5TETUU U/UDUMU TUaU/hUUUU U*UU VV.VAV'UV }VVVVVVV W!W1WMW aWnW WWWWWWWWWW XX%X>X#CX gXuXXXXXXXX& Y!4Y*VY(Y&YYY YYZ"Z3ZDZIZ[Z aZoZSZZ&Z [%[8[J[e[-{[[[["[ [\ \,"\(O\ x\\"\ \\\\\&];]B]Q]c] v]0]6] ]]^%#^I^e^0j^^^^ ^ _7_'?_'g_%_2___ ``!`7` <`G`X`u```*``5aK>a)aaPNbObb. cC;c c cccc cd dd d'd-d3dBdGd Ydedmdd dd d d d d&dddde ee.e De Oe!]e e e1ee eee e eef)f.f=fXf+Ah'mhhhh&h\h?iZitii.i$i$jA&j+hjKj jkVk ok}kkkkkkkkk kkl l8lSl"pl"llllDl0mKm+ammm m*mm n%n&;n bn!pnnn%nn nno2oCocoooooHop8pWpfp hpupp$p"p.pq*q Bqcqqqqq qqqr<rPr _r"irr-rJrs0sPsmss(sss't+)tUt\tcttttt ttt ttuu+.u@Zuuuu uu! v .v :vGv[v0lvv)vv w(%wNwSwZw\wqwww2ww w%wx.x 2x  +8?VbnDр"'%J`pс.  #$% JU.m*ǂSSd|  ΃܃"7=Qo$„ڄ  $ 6@R:d;/''Em/2+ + 7BZxLJ& ,6J fs͈   )#7*[+*+݉ )*7T;#ȊPX ]g x ‹݋3MV f s .ڌ *Ec%s($֍!8Tp.Ď(A`$f ƏՏ#ۏ '!IQdm!ɐ  !2At#ԑCG N Xbd |Ts"f œ ԓ;#"*MV=h( ϔ۔ 8&_4o֕ )9Mf Ֆ<Cb $ Ǘ#ԗ -5"Qt'˜$4)D(n +ș & GQq!wo'0Xg#x7ʛ 1 P]p)*ל.0Hcx* ĝ֝*SI )/&=6C)z'̟)$ 9)D,n)4Š &Dcl С4ߡ;4[p&̢_^U2pD(1CKd ~  ¥ѥڥ +1BE\ s BЦ + 8Ue$w <   !,5-9gv:0T(?@FS1)#wd '\YJGRKQ<KQ) M[1|Z8b%FkST?3UU 2Xe`tF ` P]p9_AfV!C6 ,W 4rci2kisn,YH mRD__O*&UX.CA3Q`0}W6Npqt+6)>ME@:[29m#^J5*qBZ9L1l~{I*&h(5E%50fV=Iw 7-74\X'nlG"OPgSBsaV,8Reox$$3I-@\B<x!%Mv]A.| ZL^D>8/oy?"v"/z4]a;J;'G u~T& z>a(W7!g+/j{u-=NNK=DY.b+}:#[ $ yjdr   H;Chc^OE< LHP Thresholds for position filtering in game list: options to use in game-viewer mode: next page (with Zippy code)# no engines are installed%s (%d reversible ply)%s (%d reversible plies)%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s in settings file %s program exits in draw position (%s)%s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty)3-checks<<<>>>AbortAbout XBoardAbove WAV FileAbsolute Analysis ScoresAcceptActionAdd this engine to the listAdjournAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate non-ICS GamesAdjudicate to BlackAdjudicate to WhiteAlarmAlarm Time (msec):Alarm:All games in tourney '%s' are already played or playingAlmost Always Queen (Detour Under-Promote)Already at end of gameAlso match left-right flipped positionAlso match reversed colorsAltAlways QueenAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis ModeAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyze GameAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnimation Speed (high = slow):AnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-Create Logon ScriptAuto-Display CommentAuto-Display TagsAuto-InputBox PopUpAuto-KibitzAuto-ObserveAuto-Play speed of loaded games (0 = instant, -1 = off):Auto-Raise BoardAuto-Refresh Seek GraphAuto-Save GamesBBack to StartBackground Observe while PlayingBackwardBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook Depth (moves):Book FaultBook Variety (0) vs. Strength (100):Book file exists! Try again for overwrite.Both flags fellCRC (10x8)Call FlagCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannonCannot build game listCapablanca (10x8)CaptainCar HornChallenge Text Colors:Challenge:ChancellorChannel #1 Text Colors:Channel 1:Channel:Chat partner:Clear boardClick clock to clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsCommon Engine SettingsConnection closed by ICSContents ofCopy GameCopy Game ListCopy PositionCould not connect to host %s, port %sCould not create bookCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCtrlCymbalDDark Square Color:Dark-Squares Texture File:DeclineDefault BeepDefault Number of Games in Match (or Pairing):DeferDemoteDetect all MatesDevelopment NewsDingDirectories:Directory with Pieces Images:Disable own engine books by defaultDisplayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.DrawDraw after N Moves Total:Draw if Insufficient Mating MaterialDraw:Drop MenuDual Board for Background-Observed GameEGTB Cache Size (MB):ERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit GameEdit PositionEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElephantElo of strongest player at least:Elo of weakest player at least:Empty squareEnable Variation TreesEnd of gameEngineEngine #1Engine #1 Has Own BookEngine #2 / HumanEngine #2 Has Own Book Engine Command:Engine Directory:Engine OutputEngine SettingsEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvalEvaluation GraphEvaluation graphExact position matchExitingFIRST TYPE DIRECTORY NAME HEREFRCFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Fatal ErrorFileFile type:File with Start Positions:Filename:Files:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFlash MovesFlash Moves (0 = no flashing):Flash Rate (high = fast):Flip Pieces Shogi Style (Colored buttons restore default)Flip ViewForce current variant with this engineForwardForward to EndGGame File with Opening Lines:Game ListGame List Tags...Game Number (-1 or -2 = Auto-Increment):Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneralGeneral OptionsGet Move ListGongGot end of file from keyboardGothic (10x8)Great Shatranj (10x8)Hash keys are differentHash-Table Size (MB):HelpHide ThinkingHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sHoldings Size:ICS ClientICS Input BoxICS OptionsICS input boxICS text menuIllegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sInclude Number Tag in tourney PGNIncomplete \ escape in value for %sIncorrect moveIncrement or max (sec/move):Info XBoardInformationInitial time (min):Invalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKibitz Text Colors:Kibitz:KingKnightLaserLieutenantLight Square Color:Light-Squares Texture File:Load GameLoad Game OptionsLoad PositionLoad first engineLoad game file name?Load position file name?Load second engineLose:Machine BlackMachine MatchMachine WhiteMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMan XBoardMatch %s vs. %s: final score %d-%d-%dMaterial difference (optional stuff balanced)Material range (top board half optional)Maximum Number of CPUs per Engine:Minimum nr consecutive positions:Mismatch of STRIDE in nengineoutput.c Change and recompile!ModeMono ModeMove HistoryMove NowMove SoundMove listMove:Moves per session:Must not use GUI bookN-Move Rule:N-fold Repeats:NPSNegate Score of Engine #1Negate Score of Engine #2New GameNew Shuffle GameNew VariantNew directoryNext PositionNickname (optional):No SoundNo engine %s is installedNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOld Save Style (as opposed to PGN)On-line User GuideOne-Click MovingOpening-Book Filename:OptionsOther Channel Text Colors:Own Games OnlyPGN Event Header:Paste GamePaste PositionPausePause between Match Games (msec):PawnPenaltyPeriodic UpdatesPeriodic Updates (in Analysis Mode)PhonePick new gamePlayPlay Move(s) of Clicked PV (Analysis)Polyglot book not validPolygot Directory:Ponder Next MovePopPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition Number (-1 or -2 = Auto-Increment):Position not found in filePremovePremove Highlight Color:Premove for BlackPremove for WhitePrev PositionPromotePull pawn backwards to under-promoteQueenQuiet PlayQuit RReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Recompile with larger BOARD_RANKS or BOARD_FILES to support this sizeReload CMail MessageRematchReplace EngineRequest Text Colors:Request:ResignRetract MoveRevertRewind Index after this many Games (0 = never):RookS-Shout Text Colors:S-Shout:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save GameSave Game OptionsSave Games as BookSave Games on File:Save Out-of-Book Info in PGN Save PositionSave Score/Depth Info in PGNSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:SeirawanSelect Engine:Select engine from list:ShiftShout Text Colors:Shout:Show CoordinatesShow CoordsShow Target SquaresShown position is subsetSlapSocket support is not configured inSound OptionsSound Program:Sounds Directory:SpartanStart-position number:Starting %s chess programStarting chess programStartup failure on '%s'Sticky WindowsStill need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Stop ExaminingStop ObservingSuperchessSwiss tourney finishedSync after cycleSync after roundTRY ANOTHER NAMETagsTell Text Colors:Tell:Test LegalityThat square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTime-Odds factors:Top-Level DialogsTournament file: Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTruncate GameTry-Out Sound:Two MachinesTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUCIUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse GUI BookUse external piece bitmaps with their own colorsUse nickname in PGN player tags of engine-engine gamesUser FileUser WAV File:Variant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsViewWB protocol v1 (do not wait for engine features)Waiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarlordWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWin / Loss Threshold:Win:Wood ThunkXBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYour opponent is not out of timeZoom factor in Evaluation Graph:atomicbad searchTime option %sbad timeControl option %sberolina *browseby nameby typeclassicalclearclosecourier (12x8)downe-Mail Bug Reportengine namefactoryfailed writing PVfairyfind positionfirstfixed maxgive-awaygrand (10x10)incrementalinternal rcmd not implemented for Unixlosersmovenarrownextnext pageno games matched your requestor specify one below:pick fixedprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshogi (9x9)shuffletagsthresholdstwo kingsupvs.white pixel = 0x%lx, black pixel = 0x%lx xiangqi (9x10)your opponent kibitzes: %sProject-Id-Version: GNU xboard 4.7.2 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2014-03-03 14:20+0100 Last-Translator: Paweł Żołnowski Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Próg filtrowania pozycji na liście gier: opcje do użycia w trybie game-viewer: następna strona (z kodem Zippy)# nie zainstalowano żadnych silników%s (%d odwracalny półruch)%s (%d odwracalne półruchy)%s (%d odwracalnych półruchów)%s - %d/%d gier (%d-%d-%d)%s nie obsługuje analizy%s silnik ma za dużo opcji %s w pliku konfiguracyjnym %s silnik znajduje się w martwej pozycji (%s)%s: błędna składnia boardSize %s %s: nie można wejść do CHESSDIR: %s: nie można przetworzyć nazw kolorów: wyłączenie kolorów %s: żadna czcionka nie pasuje do wzoru %s %s: za mało dostępnych kolorów; próba użycia trybu monochromatycznego %s: nieznana nazwa boardSize %s %s: nieznany kolor %s (Jeśli pole pozostanie puste, ścieżka pliku wykonywalnego silnika wyznaczy katalog)do 3 szachów<<<>>>Zaniechanie gryO programie XBoardPowyższy plik WAVWyniki absolutnej analizyAkceptujDziałanieDodanie silnika do listyPrzerwaOgłoś remisRozstrzyganie zgodnych remisów (3-ruchowe opóźnienie)Rozstrzyganie gier spoza ICSRozstrzygnij na korzyść czarnychRozstrzygnij na korzyść białychAlarmCzas alarmu (ms):Alarm:Wszystkie gry w turnieju "%s" zostały już rozegrane lub są w tokuPrawie zawsze hetman (okrężna słaba promocja)Zakończono już gręDopasowanie pozycji z prawej i lewej stronyDopasowanie odwrotnych kolorówAltZawsze hetmanNiejednoznaczny ruch na wyjściu ICS: "%s"Niejednoznaczny ruch: %d.%s%sTryb analizyTryb analizy nie działa w trybie ICSTryb analizy wymaga silnika szachowegoAnalizuj gręTryb AnalyzeFile wymaga pliku gryAnimowane przesuwanieAnimowany ruchSzybkość animacji (wysoka = wolna):Dodaj jako komentarzArcybiskupAutomatyczna chorągiewkaAutoodwracanie szachownicyAutokomentowanieAutotworzenie skryptu logowaniaAutowyświetlanie komentarzyAutowyświetlanie znacznikówPodręczne okno poleceńAutodoradzanieAutoobserwacjaSzybkość rozgrywki wczytywanych gier (0 = natychmiastowa, -1 = wył.):Autowysuwanie szachownicyAutoodświeżanie wykresu gierAutozapis gierBNa początekObserwacja w tle podczas gryDo tyłuNieprawidłowa pozycja FEN w schowkuNieprawidłowa pozycja FEN w plikuNieprawidłowa notacja FEN otrzymana z silnikaNieprawidłowe szukanieNieprawidłowy plik gryBłędna wartość całkowita %sNieprawidłowy plik pozycjiNieprawidłowy plik turniejuGoniecCzarneKolor czarnych bierek:Czarne do grySpadła chorągiewka czarnychNiewidzialne bierkiOpcje szachownicyRozmiar szachownicy (-1 = domyślny dla wybranego wariantu):Szachownica...KsiążkaPojemność książki (w ruchach):Błąd książkiRóżnorodność (0) książki a siła (100):Plik książki już istnieje! Należy spróbować ponownie, aby nadpisać.Spadły obie chorągiewkilosowe szachy Capablanki (10x8)Reklamuj przekroczenie czasuDalsze cofanie jest niemożliweDalej nie możnaKonieczny jest wybór silnika szachowegoNie można otworzyć "%s"Nie można otworzyć pliku tempNiemożliwe przemieszczanie w pliku gryNiemożliwe przemieszczanie w pliku pozycjiAnulujArmataNie można utworzyć listy gierszachy Capablanki (10x8)KapitanKlaksonKolory tekstu wyzwania:Wyzwanie:KanclerzKolory tekstu kanału #1:Kanał 1:Kanał:Partner do rozmowy:Wyczyść szachownicęKliknij zegar, aby wyczyścić szachownicęNie można nastawiać zegara w trybie automatycznej chorągiewkiSkopiuj turniejZamknij analizę silnika ICS...Kolorowanie wiadomościKomentarzeWspólne ustawienia silnikówPołączenie zamknięte przez ICSZawartośćSkopiuj gręSkopiuj listę gierSkopiuj pozycjęNie można się połączyć z hostem %s, port %sNie można utworzyć książkiNie można otworzyć portu szeregowego %sNie można przetworzyć ruchuNieudany zapis do pliku turniejuNie można przetworzyć ruchu "%s" z ICSCtrlTalerzDKolor ciemnych pól:Plik tekstury ciemnych pól:OdrzućDomyślny sygnałDomyślna liczba gier podczas meczu (lub na parę)OdłóżZdegradujWykrywanie wszystkich matów i patówAktualności o postępachBimKatalogi:Katalog obrazów bierek:Wyłącz domyślnie własne książki silnikaWyświetlony ruch nie jest aktualnyWyświetlona pozycja nie jest aktualnaWyświetlona pozycja nie jest aktualna. Proszę przejść do przodu do prawidłowej pozycji i spróbować ponownie.RemisRemis po całkowitej liczbie ruchów:Remis w przypadku niewystarczającego materiału matowegoRemis:Rozwijane menuPodwójna szachownica podczas obserwacji w tleRozmiar pamięci podręcznej dla EGTB (MB):BŁĄD: Nieznany użytkownik %s (w ścieżce %s) EdytujEdytuj książkęEdytuj komentarzEdytuj gręEdytuj pozycjęEdytuj znacznikiEdytuj książkęEdytuj komentarzEdytowanie komentarza do %d.%s%sSłońNajmniejsza liczba punktów elo najsilniejszego gracza:Najmniejsza liczba punktów elo najsłabszego gracza:Puste poleWłącz drzewo alternatywnych ruchówKoniec grySilnikSilnik #1Silnik #1 ma własną książkęSilnik #2 / człowiekSilnik #2 ma własną książkę Polecenie silnika:Katalog silnika:Komunikaty silnikaUstawienia silnikaBrak opcji silnikaKomunikaty silnikaBłądBłąd podczas tworzenia listy ruchów: dodatkowa szachownicaBłąd podczas tworzenia listy ruchów: zagnieżdżona listaBłąd podczas tworzenia listy ruchów: dwa nagłówkiBłąd odczytu z %s silnika szachowego (%s)Błąd odczytu z ICSBłąd odczytu z klawiaturyBłąd zapisu do %s silnika szachowegoBłąd zapisu do ICSBłąd zapisu do silnika szachowegoBłąd zapisu do ekranuBłąd: %s silnik szachowy (%s) zakończył nieoczekiwanie pracęWynikiWykres wynikówWykres wynikówŚcisłe dopasowanie pozycjiWychodzenieNAJPIERW NALEŻY TU WPISAĆ NAZWĘ KATALOGUszachy losowe (960)Nie udało się wywołać cmailNie udało się otworzyć plikuNie udało się otworzyć pliku "%s" Nie udało się otworzyć pliku pośredniego %sNie udało się przetworzyć ciągu znaków szachownicy: "%s"Nie udało się uruchomić %s silnika szachowego %s na %s: %s Błąd krytycznyPlikTyp pliku:Plik z pozycjami startowymi:Nazwa pliku:Pliki:Pierwszy ruch czarnychPierwszy ruch białych:Należy najpierw zmienić silnik, edytując listę uczestników w oknie dialogowym Opcji turnieju.Należy najpierw określić istniejący plik turnieju do skopiowaniaMiganie po ruchuMigający ruch (0 = brak migania):Szybkość migania (wysoka = szybka):Odwrócone bierki w odmianie shogi (Kolorowe przyciski przywracają ustawienia domyślne)Odwróć widokWymuszenie bieżącej odmiany na danym silnikuDo przoduNa koniecRPlik gry z wierszami otwierającymi:Lista gierZnaczniki listy gier...Numer gry (-1 lub -2 = przyrost automatyczny):Nie wczytano listy gier lub jest ona pustaNie znaleziono gry w plikuNumer gry jest poza zakresemGra jest za długa; należy zwiększyć wartość MAX_MOVES i skompilować ponownieOpcje listy gierLuka na liście ruchówGenerałOpcje ogólnePobieranie listy ruchówGongWprowadzono EOF z klawiaturyGothic (10x8)wielki szatrandż (10x8)Klucze hash nie są takie sameRozmiary tablicy mieszającej (MB)PomocUkrywanie myśleniaUkryj myślenie przed graczemKolor podświetlenia:Podświetlenie podczas przeciąganiaPodświetl ostatni ruchPodświetlenie kursoremPodświetl kursoremWskazówkaWskazówka: %sRozmiar rezerwy:Klient ICSOkno poleceń ICSOpcje ICSOkno poleceń ICSMenu tekstowe ICS%2$s silnik szachowy zasugerował niedozwolony ruch "%1$s"Niedozwolony ruchNiedozwolony ruch "%s" (odrzucony przez %s silnik szachowy)Niedozwolony ruch "%s" dokonany przez %s silnikNiedozwolony ruch (odrzucony przez ICS)Niedozwolony ruch na wyjściu ICS: "%s"Niedozwolony ruch: %d.%s%sUmieść znacznik Number w zapisie PGN turniejuNiepełna sekwencja specjalna \ w wartości dla %sNieprawidłowy ruchPrzyrost lub maksymalny czas (sekund/ruch):O programieInformacjeCzas początkowy (min):Nieprawidłowe kojarzenie parRuch należy do czarnychRuch należy do białychRuch nie należy do czarnychRuch nie należy do białychRuch należy do ciebieKolory tekstu porad:Porada:KrólSkoczekLaserPorucznikKolor jasnych pól:Plik tekstury jasnych pól:Wczytaj gręOpcje wczytywania gryWczytaj pozycjęWczytaj pierwszy silnikWczytać nazwę pliku gry?Wczytać nazwę pliku pozycji?Wczytaj drugi silnikPrzegrana:Silnik czarneMecz silnikówSilnik białeSilnik przyjmuje propozycję remisuTryb MachineBlack nie działa w trybie ICSTryb MachineBlack wymaga silnika szachowegoTryb MachineWhite nie działa w trybie ICSTryb MachineWhite wymaga silnika szachowegoRuch mailowyDokumentacja XBoardMecz %s vs. %s: ostateczny wynik %d-%d-%dRóżnica materiału (zbalansowany materiał dodatkowy)Zasięg materiału (opcjonalnie górna połowa szachownicy)Maksymalna liczba rdzeni na silnik:Minimum kolejnych pozycji:Niezgodność STRIDE w nengineoutput.c Należy zmienić i skompilować ponownie!TrybTryb monoHistoria ruchówWykonaj ruchDźwięk ruchuLista ruchówRuch:Liczba ruchów na sesję:Nieużywanie książki GUILiczba ruchów przed remisem:Liczba powtórzeń ruchu:NPSNegacja wyniku silnika #1Negacja wyniku silnika #2Nowa graNowa gra losowaNowa odmianaNowy katalogNastępna pozycjaPseudonim (opcjonalnie):Bez dźwiękuSilnik %s nie jest zainstalowanySilnik o podanej nazwie nie jest zainstalowanyNie wczytano jeszcze żadnej gryNie zaznaczono żadnej gryPominięcie gier sprzed roku:Brak wskazówekNie ma więcej gier w tej wiadomościBrak ruchów w grzeNie określono silnika do kojarzenia parNie wczytano jeszcze żadnej pozycjiNie zaznaczono żadnego znacznikaBrak niedokończonych gierBrak niedokończonych gier Brak wartości parametru %sZa mało uczestnikówUwagaLiczba kolumn szachownicy:Liczba rzędów szachownicy:Liczba cykli turnieju (lub rund szwajcarskich)OKStary styl zapisu (zamiast PGN)Przewodnik onlineRuch jednym kliknięciemNazwa pliku książki otwarć:OpcjeKolory tekstu pozostałych kanałówTylko własne gryNazwa turnieju w zapisie PGN:Wklej gręWklej pozycjęPauzaPauza między grami meczowymi (ms):PionekKarnyCzęste aktualizacjeCzęste aktualizacje (w trybie analizy)TelefonWybierz nową gręOdtwórzOdtwórz ruch(y) PV (analiza)Nieprawidłowa książka polyglotKatalog książki polyglot:Myślenie nad następnym ruchemWystrzałPytaj przed wyjściemPytaj przed wyjściemBłędy ruchu w oknie podręcznymNumer pozycji (-1 lub -2 = przyrost automatyczny):Nie znaleziono pozycji w plikuPremoveKolor podświetlenia ruchu premove:Premove dla czarnychPremove dla białychPoprzednia pozycjaPromujNależy przeciągnąć pionek w tył, aby dokonać słabej promocjiHetmanCicha graWyjście RCzytanie pliku gry (%d)Gotowy do wysłania wiadomości Należy skompilować ponownie, aby włączyć obsługę BOARD_RANKS lub BOARD_FILES!Należy skompilować ponownie z większą wartością dla BOARD_RANKS lub BOARD_FILES, aby obsługiwać ten rozmiarWczytaj wiadomość CMail ponowniePonowny meczZastąp silnikKolory tekstu prośby:Prośba:Poddaj partięCofnij ruchCofnijPrzewiń indeks wstecz po liczbie gier równej (0 = nigdy):WieżaKolory tekstu wiadomości S-Shout:S-Shout:Ten sam materiałTen sam materiał z dokładnie takim samym szeregiem pionkówZapisywanie końcowych pozycji do pliku:Zapisz gręOpcje zapisu gryZapisz gry w postaci książkiZapisywanie gier do pliku:Zapisywanie informacji spoza książki do PGN Zapisz pozycjęZapisywanie informacji o wyniku/głębokości do PGNZapisz ustawieniaZapisz ustawienia przy wyjściuZapisuj gry turnieju do:Zapisać nazwę pliku gry?Zapisać nazwę pliku pozycji?Zapisywanie gryZapisywanie pozycjiPrzeszukiwanie gier (%d)Wyniki na liście ruchówTryb wyszukiwania:Liczba sekund na ruch:Wykres gierKolory tekstu propozycji gier:Wyszukanie gry:SeirawanWybór silnika:Wybór silnika z listy:ShiftKolory tekstu wiadomości shoutShout:Wyświetlanie współrzędnychWyświetlanie współrzędnychWyświetlanie możliwych ruchówWyświetlona pozycja jest podzbioremPlaśnięcieNie skonfigurowano obsługi portu wOpcje dźwiękówOdtwarzacz:Katalog z dźwiękami:SpartanNumer pozycji początkowej:Uruchamianie %s silnika szachowegoUruchamianie silnika szachowegoBłąd uruchamiania w "%s"Przyklejanie okienWciąż trzeba wykonać ruch w grze %s Wciąż trzeba wykonać ruch w grze Wciąż trzeba wykonać ruch we wszystkich grach %d Wciąż trzeba wykonać ruch w obu grach Wciąż trzeba wykonać ruch w grach %s Przerwij badaniePrzerwij obserwacjęSuperchessZakończono turniej w systemie szwajcarskimSynchronizacja po cykluSynchronizacja po rundziePROSZĘ SPRÓBOWAĆ INNĄ NAZWĘZnacznikiKolory tekstu wiadomości tell:Tell:Blokowanie niedozwolonych ruchówTo pole jest zajęteNie wczytano wiadomości cmail. Należy wybrać Wczytaj wiadomość cmail ponownie i wykonać ruch jeszcze raz.Nie ma listy gierBrak oczekującej propozycji tego ruchuKontrola czasuDzielniki czasu:Okna dialogowe najwyższego poziomuPlik turnieju: Uczestnicy turnieju:Typ turnieju (0 = system-kołowy, 1 = system-gauntlet):TreningTryb treningu wył.Tryb treningu wł.Tryb treningu wymaga pliku gryPorzuć gręSprawdź dźwięk:Silnik vs. silnikTryb TwoMachines nie działa w trybie ICSTryb TwoMachines wymaga silnika szachowegoProszę wpisać ruchUCINie można utworzyć zestawu czcionek dla %s. Niedokończenie:Nieznany initialMode %sNieznana nazwa wariantu %sNieznany typ wild %dNieznany parametr %sNieznana wartość parametru logicznego %sNieużywaneAktualizuj silnikWyślij do zbadaniaUżycie tekstur szachownicyUżywanie książki GUIUżycie bitmap bierek z własnymi koloramiUżywanie pseudonimu w znacznikach gracza w zapisie PGN gier typu silnik vs. silnikWłasny plikWłasny plik WAV:Odmiana %s nie jest obsługiwana przez %sWariant %s jest obsługiwany tylko w trybie ICSWeryfikowanie żądań silnika o wynikWidokProtokół WB v1 (szybsze wczytywanie funkcji silnika)Oczekiwanie na dostęp, aby zapisać plikOczekiwanie na pierwszy silnik szachowyOczekiwanie na pozostałe gryOczekiwanie na odpowiedź od przeciwnika Oczekiwanie na drugi silnik szachowyGubernatorOstrzeżenie: Nie zakończono badania gryOstrzeżenie: Nie zakończono obserwacji gryOstrzeżenie: Nie zakończono jeszcze gryOstrzeżenie: drugi silnik (%s) nie obsługuje tego!BiałeKolor białych bierek:Białe do grySpadła chorągiewka białychPróg zwycięstwa / przegranejWygrana:Stuknięcie drewnaStrona domowaŻadna gra nie jest badanaGra nie jest obserwowanaGrasz czarnymiGrasz białymiMożna jednocześnie modyfikować tylko jeden silnikNie można cofać podczas pauzyNie można tego zrobić w czasie gry ani podczas obserwacjiNie można zastąpić silnika w trakcie jego pracy! Należy zakończyć najpierw jego grę.Nie podano pliku wykonywalnego silnikaWysłano już ruch. Należy poczekać na nadejście ruchu od przeciwnika. Aby wysłać ruch ponownie, należy wpisać "cmail -remail -game %s" w wierszu poleceń.Zmodyfikowano historię gry. Należy wybrać Wczytaj grę ponownie i wykonać ruch jeszcze raz.Wprowadzono za dużo ruchów. Proszę cofnąć do prawidłowej pozycji i spróbować ponownie.Jeszcze nie wykonano ruchuPrzed zaproponowaniem remisu należy wykonać ruchNależy dostarczyć plik turnieju, żeby móc zapisać jego przebiegPrzeciwnik nie przekroczył limitu czasuWspółczynnik powiększenia na Wykresie wynikówatomowezła opcja searchTime %szła opcja timeControl %sberolina *przeglądajwg nazwywg typuklasycznywyczyśćzamknijcourier (12x8)na dółRaporty o błędach (e-mail)nazwa silnikadomyślnenie udało się zapisać PVfairyznajdź pozycję1.stały maksymalny czasantyszachy (give-away)grand (10x10)przyrostowypolecenie wewnętrzne rcmd nie zostało zaimplementowane w Uniksieantyszachy (losers)ruchzawęźnastępnynastępna stronażadna gra nie spełnia podanych kryteriówlub określenie go poniżej:wybierz liczbępoprzednia stronanieobsługiwana wersja %d protokołulosujzapisz zmianyBłąd wewnętrzny; nieprawidłowy moveType %d (%d,%d-%d,%d)2.shōgi (9x9)losowe rozstawienieznacznikiprogidwa króledo góryvs.biały piksel = 0x%lx, czarny piksel = 0x%lx xiangqi (9x10)przeciwnik doradza: %sxboard-4.8.0/po/uk.gmo0000644000175000001440000017447612422467103011504 00000000000000*H90I9$z99 9999/9#:?:\:|:&::<<4<)=D=5c=#==7= >>%>'>*>,>/>5> ;>H>W>p>w>~>>>'>>>??,?2?E?7L?K?*??&@9@T@ X@"e@@ @)@%@ @% A1ABAQApA yA AA AAAAA A B8BPBaByBB B BBBBBC C.CCCUCiCpCvC CC CC C C0CDDD *D$5D*ZDDD D DDD)DE$E9EQEmEtE{EEEEE E EE EF FF #F/F.JF yFFFF FFFF GG (G2G AG%OGuGGGG!G G H HH H"H5HPH XH.eHHHHHH HH#HI!5IVWIII$II I'J*J @J$KJpJ uJ JJ J J J J JJJ!JK q q q qqrr 6rArHrPrXr jrtrzrrrrrr rrrr ss s s *s 8s&Dsks rs~sss ssss s s!t &t 0t1=tot vttt t ttt)ttttud.w=ww#ww7x/Fxvx#ry0y]y&%z[Lzz9}G}v9~K~H~cE--  ˀـ./06gz\E,;*h(‚\`e H7iDN*WMI4JR+ɆF,?V4q4'2<o"#9C]%lj*ʉ9 /B:3}B+$ /E,u,ϋ ؋#(DS$mZ *$2O\qߍ(Qz#*TڎJ/oz+M4d<֐>7S%b- đ+ӑ 5EPez1@Q5ȓۓ0 *6K #(˔!I/`5+ƕN9A{)6!47N# & 6*Ya28' ˙2֙F P^Zt%ϚM Wb|+ț#"%<0bTPB2b! ˝ ֝+"25N"žݞpH˟j][`n?Nɡi?f¢/)lY ƣ$ӣ$$ BBM ,-ʤ5O.@~W)IR6g !}?%_H>Ψ QW Ub9#ҪO^_3B5&4ݬ##G([K٭&/1F>xƮ3ٮG U3v*9կ9IZoհ (/hOرD\8Jڲ(%@NEճ=1P2ejjn е޵'  $1: JU+h8_Ͷ-4E4c <<%3.Y=EƸ. \;˹ V byfydc&ȼ Jydm޽OLCv WbuϿ׿j^$~,,")%Lr53M_o8PN41!^=9:?+Q,}-A)+U+d+S U?s#[03d6w) 0 PQ[ 'H4 Cd:m8** 7CJ;OW2r:/-,!Z|W 9%<Cbz!=1J+f _f)o #[E'm0),@(iK,.710i9A#2/V'7 3?R.o+ )%0<V9B!(?h //, )7a,w)?<2K~-N0C2t& 5+'$Sx)EJo 7(1!Z%| K042eE.YoJs0/ +9&eH%,:BV}h=$4Z7HfdwZ&7`^SBGVS; aE2sN!Wy&+&!D2f MR'WzK];;A\}qLA6_& 343FUgwD O'%w ' % FWsF!EAR*!#'QK1   1!<^ r }G$6- ?'hM.%dAt0bh_zo?F(%vtaRM2Q <m6oW)|C7T ,("/Bi7c1-3@^$~O>s I]},p3|w'@e! 'X fYU6z$~ e!k"D4lG ?HQ:`_ x{1[Gg#kA]n=O$52ITeyVUzQ )6}p#\=+FNJRxF+ZyOaE>1a,KSUj:4< YX&HBq[CyKV)Dg0*YLPmu/9Psp``oA(dw lbj** ^{@f|r 9rR0v5;LGBc L58iI%;\PEM]WD._~nCbwrt.fu4n7J3mq}+8;u8kq:&-{cH[S"gV=9j^ #\ZTJ W<SvKi> l!sZh&NNExX2d/ Thresholds for position filtering in game list: options to use in game-viewer mode: next page (with Zippy code)# no engines are installed# no themes are defined%s (%d reversible ply)%s (%d reversible plies)%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s in settings file %s program exits in draw position (%s)%s%s Copyright 1991 Digital Equipment Corporation Enhancements Copyright 1992-2014 Free Software Foundation Enhancements Copyright 2005 Alessandro Scotti %s is free software and carries NO WARRANTY;see the file COPYING for more information. The GTK build of this version is experimental and unstable Visit XBoard on the web at: http://www.gnu.org/software/xboard/ Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html Report bugs via email at: %s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: can't parse foreground color in '%s' %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty), but %s is3-checks<<<>>>ASEANAbortAbout XBoardAbove WAV FileAbsolute Analysis ScoresAcceptActionAdd this engine to the listAdjournAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate non-ICS GamesAdjudicate to BlackAdjudicate to WhiteAdjudications...AlarmAlarm Time (msec):Alarm:All games in tourney '%s' are already played or playingAll variants not supported by the first engine (currently %s) are disabled.Almost Always Queen (Detour Under-Promote)Already at end of gameAlso match left-right flipped positionAlso match reversed colorsAltAlways QueenAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis ModeAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyze GameAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnimation Speed (high = slow):AnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-Create Logon ScriptAuto-Display CommentAuto-Display TagsAuto-InputBox PopUpAuto-KibitzAuto-ObserveAuto-Play speed of loaded games (0 = instant, -1 = off):Auto-Raise BoardAuto-Refresh Seek GraphAuto-Save GamesBBack to StartBackground Observe while PlayingBackwardBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBlunderBlunder graphBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook Depth (moves):Book FaultBook Variety (0) vs. Strength (100):Book file exists! Try again for overwrite.Both flags fellBughouseCRC (10x8)Call FlagCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannonCannot build game listCapablanca (10x8)CaptainCar HornChallenge Text Colors:Challenge:ChancellorChannel #1 Text Colors:Channel 1:Channel:Chat partner:Chats:Clear boardClick clock to clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsCommon EngineCommon Engine SettingsCommon Engine...Connection closed by ICSContents ofContinue LaterCopy GameCopy Game ListCopy PositionCould not connect to host %s, port %sCould not create bookCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCrazyhouseCtrlCylinder *CymbalDDark Square Color:Dark-Squares Texture File:DeclineDefault BeepDefault Number of Games in Match (or Pairing):DeferDemoteDetect all MatesDevelopment NewsDingDirectories:Directory with Pieces Images:Disable own engine books by defaultDisplayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.DrawDraw after N Moves Total:Draw if Insufficient Mating MaterialDraw:Drop MenuDual Board for Background-Observed GameEGTB Cache Size (MB):EGTB Path:ERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit Engine List...Edit GameEdit PositionEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElephantElo of strongest player at least:Elo of weakest player at least:Empty squareEnable Variation TreesEnd ChatEnd of gameEngineEngine #1Engine #1 Has Own BookEngine #1 Settings...Engine #2 / HumanEngine #2 Has Own Book Engine #2 Settings...Engine Command:Engine Directory:Engine OutputEngine SettingsEngine did not send setup for non-standard variantEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvalEvaluation GraphEvaluation graphExact position matchExitingFIRST TYPE DIRECTORY NAME HEREFRCFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Falcon (10x8)Fatal ErrorFileFile type:File with Start Positions:Filename:Files:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFischer castlingFlash MovesFlash Moves (0 = no flashing):Flash Rate (high = fast):Flip Pieces Shogi Style (Colored buttons restore default)Flip ViewFor concurrent playing of tourney with multiple XBoards:Force current variant with this engineForwardForward to EndGGame File with Opening Lines:Game ListGame List Tags...Game List...Game Number (-1 or -2 = Auto-Increment):Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneralGeneral OptionsGeneral...Get Move ListGongGot end of file from keyboardGothic (10x8)Great Shatranj (10x8)Hash keys are differentHash-Table Size (MB):Headers in Engine Output WindowHelpHideHide ThinkingHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sHoldings Size:ICS ClientICS Input BoxICS InteractionICS OptionsICS input boxICS text menuICS...ICS/Chat ConsoleIllegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sInclude Number Tag in tourney PGNIncomplete \ escape in value for %sIncorrect moveIncrement or max (sec/move):Info XBoardInformationInitial time (min):Internal error: PARTICIPANTS set wrongInvalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnJanus (10x8)Kibitz Text Colors:Kibitz:KingKnightKnightmateLaserLieutenantLight Square Color:Light-Squares Texture File:Line Gap (-1 = default for board size):LionLion roar:Load GameLoad Game OptionsLoad Game...Load New 1st Engine...Load New 2nd Engine...Load PositionLoad first engineLoad game file name?Load position file name?Load second engineLogo Size (0=off, requires restart):Lose:Machine BlackMachine MatchMachine WhiteMachine accepts your draw offerMachine offers a draw. Select Action / Draw to accept.MachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMakrukMan XBoardMatch %s vs. %s: final score %d-%d-%dMaterial difference (optional stuff balanced)Material range (top board half optional)Maximum Number of CPUs per Engine:Minimum nr consecutive positions:Mismatch of STRIDE in nengineoutput.c Change and recompile!ModeMono ModeMove HistoryMove NowMove SoundMove listMove:Moves per session:Must not use GUI bookN-Move Rule:N-fold Repeats:NPSNegate Score of Engine #1Negate Score of Engine #2New ChatNew GameNew Shuffle GameNew Shuffle Game...New VariantNew Variant...New directoryNew name for current theme:Next PositionNickname (optional):No SoundNo castleNo default pieces installed! Select your own using '-pieceImageDirectory'.No engine %s is installedNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNormalNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOld Save Style (as opposed to PGN)On-line User GuideOne-Click MovingOnly bughouse is not available in viewer mode.Opening-Book Filename:OptionsOther Channel Text Colors:Other Text Colors:Own Games OnlyPGN Event Header:Paste GamePaste PositionPausePause between Match Games (msec):PawnPenaltyPeriodic UpdatesPeriodic Updates (in Analysis Mode)PhonePick new gamePlayPlay Move(s) of Clicked PV (Analysis)Polyglot book not validPolygot Directory:Ponder Next MovePopPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition Number (-1 or -2 = Auto-Increment):Position not found in filePremovePremove Highlight Color:Premove for BlackPremove for WhitePrev PositionPromotePull pawn backwards to under-promoteQueenQuiet PlayQuit Quit after gameRReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Recompile with larger BOARD_RANKS or BOARD_FILES to support this sizeReload CMail MessageRematchReplace EngineRequest Text Colors:Request:ResignRetract MoveRevertRewind Index after this many Games (0 = never):RoarRookS-Shout Text Colors:S-Shout:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save GameSave Game OptionsSave Game...Save Games as BookSave Games on File:Save Out-of-Book Info in PGN Save PositionSave Score/Depth Info in PGNSave Selected GamesSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:SeirawanSelect Engine:Select engine from list:Selectable themes:ShatranjShiftShout Text Colors:Shout:Show CoordinatesShow CoordsShow Target SquaresShown position is subsetSlapSocket support is not configured inSound OptionsSound Program:Sounds Directory:Sounds...SpartanStart-position number:Starting %s chess programStarting chess programStartup failure on '%s'Sticky WindowsStill need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Stop ExaminingStop ObservingSuicideSuperchessSwiss tourney finishedSync after cycleSync after roundTRY ANOTHER NAMETagsTell Text Colors:Tell:Test LegalityThat square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTime Control...Time-Odds factors:Top-Level DialogsTournament OptionsTournament file: Tournament...Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTruncate GameTry-Out Sound:Two MachinesTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUCIUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse GUI BookUse external piece bitmaps with their own colorsUse nickname in PGN player tags of engine-engine gamesUser FileUser WAV File:Variant %s not supported by %sVariant %s supported only in ICS modeVariants marked with * can only be played with legality testing off.Verify Engine Result ClaimsViewWB protocol v1 (do not wait for engine features)Wait until your turn, or select 'Move Now'.Wait until your turn.Waiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarlordWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWild castleWin / Loss Threshold:Win:Wood ThunkXBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYou restarted an already completed tourney. One more cycle will now be added to it. Games commence in 10 sec.Your opponent is not out of timeZoom factor in Evaluation Graph:add next moveatomicbad searchTime option %sbad timeControl option %sberolina *browseby nameby typechu shogi (12x12)classicalclearclosecould not load EGBB librarycourier (12x8)downe-Mail Bug Reportelven chess (10x10)engine namefactoryfailed writing PVfairyfind positionfirstfixed maxgive-awaygrand (10x10)incrementalinternal rcmd not implemented for Unixlosersmighty lionmovenarrownextnext pageno games matched your requestonly marked squares are legalor specify one below:pick fixedprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshogi (9x9)shuffletagsthresholdstwo kingsupvs.white pixel = 0x%lx, black pixel = 0x%lx wrong EGBB versionxiangqi (9x10)your opponent kibitzes: %sProject-Id-Version: GNU xboard-4.8.0-pre1 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2014-09-30 22:13+0300 Last-Translator: Yuri Chornoivan Language-Team: Ukrainian Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.5 Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; Порогові значення фільтрування позицій у списку ігор: Параметри режиму перегляду ігор: наступна сторінка (з кодом Zippy)# не встановлено жодного рушія# не визначено жодної теми%s (з можливістю скасування %d ходу)%s (з можливістю скасування %d ходів)%s (з можливістю скасування %d ходів)%s (з можливістю скасування %d ходу)%s — %d з %d ігор (%d-%d-%d)У %s не передбачено аналізуДля рушія %s передбачено занадто багато параметрів %s у файлі параметрів Програма %s завершила роботу у нічийній позиції (%s)%s%s © Digital Equipment Corporation, 1991 © Free Software Foundation, 1992–2014 © Alessandro Scotti, 2005 %s є вільним програмним забезпеченням, його працездатність не гарантується. Докладніше про це у файлі COPYING. Збірка з GTK цієї версії є експериментальною і нестабільною Відвідайте сторінку XBoard у мережі за адресою: http://www.gnu.org/software/xboard/ Ознайомтеся з найсвіжішими можливостями програми: http://www.gnu.org/software/xboard/whats_new.html Надішліть повідомлення про ваду на адресу: %s: помилковий синтаксис boardSize %s %s: не вдалося перейти до каталогу CHESSDIR: %s: не вдалося обробити назви кольорів; розфарбовування вимкнено %s: не вдалося обробити колір тексту у «%s» %s: взірцеві %s не відповідає жоден шрифт %s: занадто мало кольорів; спробуємо монохромний режим %s: невідома назва boardSize %s %s: нерозпізнаний колір %s (Каталог буде визначено на основі шляху до рушія, якщо каталог не вказано), але %sТри шахи<<<>>>ASEANПерерватиПро XBoardФайл WAV вищеАбсолютні оцінки аналізуПрийнятиДіяДодати цей рушій до спискуВідкластиВизначити нічиюВизначати тривіальні нічиї (трикратне повторення)Судити ігри, що не належать до класу ICSВизначити виграш чорнихВизначити виграш білихВизначення…НагадуванняЧас нагадування (у мс):Нагадування:Всі ігри турніру «%s» вже зіграно або вже розпочатоВсі варіанти, які не підтримуються першим рушієм (зараз це %s), вимкнено.Майже завжди королева (відхиляти неповні перетворення)Гру вже завершеноШукати у симетричних позиціяхШукати у позиціях зворотних кольорівAltЗавжди королеваНеоднозначний хід у виведених ICS даних: «%s»Неоднозначний хід: %d.%s%sРежим аналізуРобота режиму разом з режимом ICS неможливаУ режимі аналізу потрібен шаховий рушійАналізувати груУ режимі аналізу файла потрібен файл гриАнімація перетягуванняАнімація ходівШвидкість анімації (висока = повільно):АнотуватиАрхієпископАвтопрапорецьАвтоматичне обертання дошкиАвтокоментаріАвтостворення скрипту входуАвтопоказ коментарівАвтопоказ мітокАвтоматичне вікно введенняАвтопорадиАвтоспостереженняШвидкість автогри у завантажених іграх (0 = негайний показ, -1 = вимкнути автогру):Автопідняття дошкиАвтоматичне оновлення графу пошуківАвтозбереження ігорСПовернутися до початкуСпостереження у тлі під час гриНазадПомилкова позиція FEN у буфері обмінуПомилкова позиція FEN у файліОтримано помилкові дані FEN від рушіяПомилкове позиціюванняПомилковий файл гриПомилкове ціле значення %sПомилковий файл позиціїПомилковий файл турніруСлонЧорніКолір фігур чорних:Хід чорнихПрапорець чорних впавНаосліпГруба помилкаГраф грубих помилокПараметри дошкиРозмір дошки ( -1 = типовий для вибраного варіанта):Дошка…КнигаГлибина книги (у ходах):Помилка бібліотеки позиційКомпроміс між різноманітністю (0) і силою (100) книги:Файл книги вже існує! Повторіть спробу, щоб перезаписати його.Обидва прапорці впалиШведськіРівноправність (10x8)Погодитися з програшемПодальше створення резервних копій неможливеПодальший рух вперед списком неможливийНе можна розпочати матч, якщо не встановлено шахових програмНе вдалося відкрити «%s»Не вдалося відкрити тимчасовий файл данихПошук у файлі гри неможливийПошук у файлі позицій неможливийСкасуватиГарматаНе вдалося побудувати список ігорКапабланка (10x8)КапітанАвтомобільний гудокКольори тексту викликів:Виклик:КанцлерКольори тексту каналу 1:Канал 1:Канал:Співрозмовник:Розмови:Спорожнити дошкуКлацніть на годиннику, щоб спорожнити дошкуКоригування годинника у режимі автоматичних прапорців забороненеКлонувати турнірЗавершити процес аналізу рушія ICS…Розфарбовувати повідомленняКоментаріЗагальний рушійЗагальні параметри рушіївЗагальний рушій…З’єднання розірвано з боку ICSВмістПродовжити пізнішеКопіювати груКопіювати список ігорКопіювати позиціюНе вдалося з’єднатися з вузлом %s, порт %sНе вдалося створити книгуНе вдалося відкрити порт comm %sНе вдалося обробити хідНе вдалося виконати запис до файла турніруНе вдалося обробити хід «%s» з ICSКрейзіхаусCtrlЦиліндричні *ЦимбалиТКолір темних клітинок:Файл текстур темних клітинок:ВідхилитиТиповий гудокТипова кількість ігор у матчі:Зменшити пріоритетРозжалуватиВиявляти всі матиНовини щодо розробкиДзвінокКаталоги:Каталог з зображеннями фігур:Типово вимкнути власні бібліотеки позицій рушіяПоказаний хід не є поточнимПоказана позиція не є поточноюПоказана позиція не є поточною. Продовжіть гру, щоб виправити позицію і повторіть спробу.НічияНічия після N ходів загалом:Нічия, якщо недостатньо фігур для матуНічиїх:Спадне менюПодвійна дошка для ігор з фоновим спостереженнямРозмір кешу EGTB (у МБ):Шлях до EGTB:Помилка: невідомий користувач %s (шлях — %s) ЗміниЗмінити книгуЗмінити коментарЗмінити список рушіїв…Редагувати груРедагувати позиціюЗмінити міткиЗмінити книгуРедагувати коментарЗмінити коментар щодо %d.%s%sСлонРейтинг Ело для сильнішого гравця не нижче за:Рейтинг Ело для слабшого гравця не нижче за:Порожня клітинкаУвімкнути дерево варіантівЗавершити розмовуКінець гриРушійРушій 1Рушій 1 має власну книгуПараметри рушія 1…Рушій 2 / ЛюдинаРушій 2 має власну книгу Параметри рушія 2…Команда рушія:Каталог рушія:Вивід рушіяПараметри рушіяРушієм не надіслано налаштувань для нестандартного варіантаРушієві не передаються жодні параметриВивід рушіяПомилкаПомилка під час збирання списку ходів: вихід за межі дошкиПомилка під час збирання списку ходів: вкладеністьПомилка під час збирання списку ходів: два заголовкиПомилка під час спроби читання даних з шахової програми %s (%s)Помилка під час спроби читання з ICSПомилка під час читання даних з клавіатуриПомилка під час спроби запису даних до шахової програми %sПомилка під час спроби запису до ICSПомилка під час спроби запису даних до шахової програмиПомилка запису на дисплейПомилка: шахова програма %s (%s) несподівано завершила роботуОцінкаГраф оцінки позиціїГраф оцінки позиціїТочний збіг позиційВихідСПОЧАТКУ ВКАЖІТЬ ТУТ НАЗВУ КАТАЛОГУФішераНе вдалося викликати cmailНе вдалося відкрити файлНе вдалося відкрити файл «%s» Не вдалося відкрити файл переспрямування %sНе вдалося обробити рядок дошки: "%s"Не вдалося запустити шахову програму %s %s на %s: %s Сокіл (10x8)Критична помилкаФайлТип файлів:Файл з початковими позиціями:Назва файла:Файли:Перший хід чорних:Перший хід білих:Спочатку змініть рушій редагуванням списку учасників турніру у діалоговому вікні «Параметри турніру»Спочатку вам слід вказати вже створений файл турніру для клонуванняРокіровка ФішераПідсвічування ходівБлимання під час ходів (0 = без блимання):Частота блимання (висока = швидко):Стиль обміну фігурами сьогі (Кольорові кнопки відновлюють типовий)Повернути дошкуДля сумісної турнірної гри з декількома XBoard:Примусово визначити поточний варіант для рушіяВпередВперед до кінцяЗФайл гри з початковими рядками:Список ігорМітки списку ігор…Список ігор…Номер гри (-1 або -2 = автоматичне збільшення):Список гри не завантажено або цей список є порожнімУ файлі немає даних щодо гриНомер гри поза доступним діапазономГра є занадто довгою. Збільшіть значення MAX_MOVES і перезберіть програму.Параметри списку гриПропущено хід у списку ходівЗагальнеЗагальні параметриЗагальне…Отримати список ходівГонгОтримано символ кінця файла з клавіатуриГотичні (10x8)Великий шатрандж (10x8)Ключі хешів не збігаютьсяРозмір таблиці хешів (у МБ):Заголовки у вікні виведення рушіяДовідкаПриховатиПриховувати обмірковуванняПриховувати обмірковування від людиниКолір позначення:Підсвічувати перетягуванняПозначати останній хідПозначити за допомогою стрілкиПозначити за допомогою стрілкиПідказкаПідказка: %sРозмір резерву:Клієнт ICSПоле введення ICSВзаємодія у ICSПараметри ICSПоле введення ICSТекстове меню ICSICS…Консоль ICS/розмовНекоректна підказка щодо ходу «%s» від шахової програми %sНедозволений хідНедозволений хід «%s» (у реєстрації ходу відмовлено шаховою програмою %s)Некоректний хід «%s» від комп’ютера %sНекоректний хід (заборонено ICS)Некоректний хід у виведених даних ICS: «%s»Недозволений хід: %d.%s%sВключити мітку номера до PGN турніруНеповне екранування \ у значенні для %sНекоректний хідЗбільшення або максимум (сек/хід):Інформація з XBoardІнформаціяПочатковий час (у хвилинах):Внутрішня помилка: встановлено помилкове значення PARTICIPANTSРушієм визначення пар повернуто некоректне значення париХід чорнихХід білихЗараз хід білихЗараз хід чорнихВаш хідЯнус (10x8)Кольори тексту порад:Порада:КорольКіньМат конюЛазерЛейтенантКолір світлих клітинок:Файл текстур світлих клітинок:Проміжок між рядами ( -1 = типовий для розмірів дошки):ЛевРев лева:Завантажити груПараметри завантаження ігорЗавантажити гру…Завантажити новий перший рушій…Завантажити новий другий рушій…Завантажити позиціюЗавантажити перший рушійНазва файла гри для завантаження?Назва файла позиції для завантаження?Завантажити другий рушійРозмір логотипу (0=вимкнути, потребує перезапуску):Програшів:Матч ком’ютерівМатч ком’ютерівКомп’ютер-білимиКом’ютер погодився з вашою пропозицією нічиєїКомп’ютером запропоновано нічию Скористайтеся пунктом меню «Дія->Нічия», щоб погодитися.Робота режиму гри комп’ютером білими разом з режимом ICS неможливаУ режимі гри комп’ютера чорними потрібен шаховий рушійРобота режиму гри комп’ютером білими разом з режимом ICS неможливаУ режимі гри комп’ютера білими потрібен шаховий рушійНадіслати хід поштоюМакрукПідручник з XBoardМатч між %s і %s: остаточний рахунок — %d-%d-%dВідмінність матеріалів (з додатковим врівноваженням можливостей)Діапазон матеріалу (верхня половина дошки, необов’язковий)Максимальна кількість процесорів на рушій:Мінімальна к-ть послідовних позицій:Невідповідність STRIDE у nengineoutput.c Змініть і зберіть програму знову!РежимМонорежимЖурнал ходівХодити заразЗвук ходуСписок ходівХід:Ходів за сеанс:Не повинен використовувати книгу з графічним інтерфейсомПравило N-го ходу:N-кратне повторення:NPSНегативна оцінка рушія 1Негативна оцінка рушія 2Нова розмоваНова граНова випадкова граНова випадкова гра…Новий варіантНовий варіант…Новий каталогНова назва для поточної теми:Наступна позиціяПсевдонім (необов’язковий):Без звукуБез туриТипових зображень фігур не встановлено. Вкажіть власні за допомогою параметра -pieceImageDirectoryНе встановлено жодного рушія %sРушія з вказаною вами назвою не встановленоЩе не завантажено жодної гриНе вибрано гриНе показувати ігри до року:Немає підказкиУ цьому повідомленні більше немає результатів ігорУ записі гри немає жодного ходуНе вказано рушія визначення парЖодної з позицій ще не завантаженоНе вибрано жодної міткиНемає незавершених ігорНемає незавершених ігор Не вказано значення для аргументу %sЗвичайніНедостатньо учасниківНотаткаКількість файлів дошки:Кількість рангів дошки:Кількість кіл турніру (швейцарських раундів):ГараздЗастарілий стиль збереження (на відміну від PGN)Підручник користувача у інтернетіХід у одне клацанняУ режимі перегляду недоступні лише шведські шахи.Назва файла даних дебютів:ПараметриКольори тексту інших каналів:Кольори іншого тексту:Лише власні ігриОбробник подій PGN:Вставити груВставити позиціюПаузаПроміжок між іграми у матчі (у мілісекундах):ПішакШтрафПеріодичні оновленняПеріодичні оновлення (у режимі аналізу)ТелефонВиберіть нову груПускГрати ходи натиснутих PV (аналіз)Некоректна бібліотека позиційКаталог бібліотек Polygot:Обдумати наступний хідПлесканняПоказувати повідомлення щодо виходуКонтекстні підказки щодо виходуКонтекстні підказки з помилками щодо ходівНомер позиції (-1 або -2 = автоматичне збільшення):У файлі не знайдено позиціїПопередній хідКолір підсвічування плану ходу:Попередній хід для чорнихПопередній хід для білихПопередня позиціяПідвищитиПотягніть пішака назад, щоб знизити ранг фігуриКоролеваМовчазна граВийти Вийти після гриЧЧитання файла гри (%d)Програма готова до надсилання пошти Повторно зберіть програму з підтримкою цих значень BOARD_RANKS і BOARD_FILES!Для того, щоб скористатися підтримкою цього розміру, слід зібрати програму з більшими значеннями BOARD_RANKS або BOARD_FILESПерезавантажити повідомлення CMailПереграванняЗамінити рушійКольори тексту запитів:Запит:ЗдатисьВідкликати хідПовернутиВідновлювати початковий номер після вказаної кількості ігор (0=ніколи):РевТураКолір тексту S-вигуків:S-вигук:Однаковий матеріалОднаковий матеріал з однаковим ланцюжком пішаківЗберігати остаточні позиції до файла:Зберегти груПараметри збереження ігорЗберегти гру…Зберегти ігри як книгуЗберігати ігри до файла:Зберігати сторонні дані до PGN Зберегти позиціюЗберігати дані щодо рейтингу/глибини у PGNЗберегти позначені ігриЗберегти параметри заразЗберегти параметри при виходіЗберігати ігри турніру до:Назва файли гри для збереження?Назва файла позиції для збереження?Збереження гриЗбереження позиціїСканування списку ігор (%d)Оцінки у списку ходівРежим пошуку:Секунд на хід:Граф викликівКольори тексту під час пошуку:Пошук:СейраванаВиберіть рушій:Виберіть рушій зі списку:Можливі теми:ШатранджShiftКольори тексту вигуків:Вигук:Показувати координатиПоказати координатиПоказувати клітинки призначенняПоказана позиція є підмножиноюКлацанняПідтримку сокетів ще не налаштованоПараметри звукуПрограма відтворення:Каталог звуків:Звуки…спартанськіНомер початкової позиції:Запуск шахової програми %sЗапуск шахової програмиПомилка запуску на «%s»Липкі вікнаСлід зробити хід у грі %s Слід зробити хід у грі Слід зробити ходити у всіх %d іграх Слід зробити ходити у обох іграх Слід зробити ходи у іграх %s Припинити аналізПрипинити спостереженняСамовбивчіСупершахиТурнір за швейцарською системою завершеноСинхронізувати після колаСинхронізувати після раудуСПРОБУЙТЕ ІНШУ НАЗВУМіткиКольори тексту висловлювань:Висловлення:Перевіряти коректністьЦю клітинку зайнятоПовідомлення cmail не завантажено. Скористайтеся пунктом «Перезавантажити повідомлення CMail» і повторіть ваш хід.Немає списку ходів гриУ черзі немає пропозицій щодо цього ходуКерування часомКерування часом…Коефіцієнти виправлення часу:Вікна верхнього рівняПараметри турніруФайл турніру: Турнір…Учасники турніру:Система турніру (0 = кругова, 1 = почергова):ТренуванняРежим тренування вимкненоРежим тренування увімкненоУ режимі тренування потрібен файл гриОбрізати груТестовий звук:Два комп’ютераРобота режиму гри між двома комп’ютерами разом з режимом ICS неможливаРежимом гри між двома комп’ютерами можна скористатися, лише якщо встановлено шаховий рушійВведіть хідUCIНе вдалося створити набір шрифтів для %s. Незавершених:Невідоме значення initialMode %sНевідома назва варіанта %sНевідомий «дикий» тип %dНевідомий аргумент %sНевідоме значення булевого аргументу %sНе використовуєтьсяОновити рушійВивантажити для аналізуВикористовувати текстури дошкиВикористовувати книгу з графічним інтерфейсомЗовнішні растрові зображення фігур з власними кольорамиВикористовувати псевдонім у мітках гравця PGN під час ігор між рушіямиФайл користувачаФайл WAV користувача:Варіант %s не підтримується %sПідтримку варіанта %s передбачено лише у режимі ICSУ варіанти позначені * можна грати лише з вимкненою перевіркою коректності.Перевіряти вимоги до результатів рушіяПереглядПротокол WB версії 1 (не чекати на дані щодо можливостей)Зачекайте на ваш хід або виберіть пункт «Ходити».Очікувати на ваш хід.Очікування на доступ до можливості збереження файлаОчікування на запуск першої шахової програмиОчікування на результати інших ігорОчікування на відповідь від суперника Очікування на запуск другої шахової програмиПолководецьПопередження: ви ще вивчаєте груПопередження: ви ще продовжуєте спостерігати за гроюПопередження: гра ще триваєПопередження: ця можливість не підтримується другим рушієм (%s)!БіліКолір фігур білих:Хід білихПрапорець білих впавДика тураПоріг виграшу/програшу:Виграшів:Удар об деревоДомашня сторінка XBoardВи не вивчаєте груВи не спостерігаєте за гроюВи граєте чорнимиВи граєте білимиОдночасно змінювати можна лише один рушійСкасовувати ходи у призупиненій грі не можнаЦя дія неможлива у режимі гри або спостереженняНе можна міняти рушій, який зараз використовується! Спочатку перервіть гру.Вами не вказано виконуваного файла рушіяВи вже надіслали хід поштою. Зачекайте, доки буде отримано хід від вашого суперника. Щоб повторно надіслати той самий хід, віддайте команду "cmail -remail -game %s" у командному рядку.Вами внесено зміни до журналу гри. Скористайтеся пунктом «Перезавантажити гру» і повторіть ваш хід.Вами введено занадто багато ходів. Поверніться до правильної позиції і повторіть спробу.Вами ще не зроблено жодного ходуПерш ніж запропонувати нічию, вам слід зробити хідДля запису результатів турніру вам слід вказати файл турніру.Вами перезапущено вже завершений турнір. Тепер до турніру буде додано ще одне коло. Ігри розпочнуться за 10 секунд.У вашого суперника ще залишився часМасштаб графу оцінки позиції:додати наступний хідатомніпомилковий параметр searchTime %sпомилковий параметр timeControl %sбероліна *вибратиза назвоюза типомчу сьогі (12x12)класичніспорожнитизакритине вдалося завантажити бібліотеку EGBBкур’єр (12x8)внизНадіслати звіт про ваду електронною поштоюельфійські шахи (10x10)назва рушіятиповіне вдалося записати PVказковізнайти позиціюпершийфіксований максимумпіддавкигранд-шахи (10x10)нарощувальнийвбудований rcmd ще не реалізовано для UnixАнтишахимогутній левхідзвуженнядалінаступна сторінкавашому запиту не відповідає жодна граправилами дозволено лише позначені клітинкиабо вкажіть його нижче:вибрати фіксованупопередня сторінкапідтримки версії протоколу %d не передбаченовипадковозберегти зміниsay Internal error; bad moveType %d (%d,%d-%d,%d)другийсьогі (9x9)перемішатиміткипорогові значеннядва королівгорупротибілий піксель = 0x%lx, чорний піксель = 0x%lx помилкова версія EGBBсянці (9x10)втручання вашого суперника: %sxboard-4.8.0/po/en@quot.header0000644000175000001440000000226312421746651013135 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # xboard-4.8.0/po/es.po0000644000175000001440000020271012422467103011307 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # Traducción por Óscar Toledo G., 2010 # Antonio Ceballos , 2014 # msgid "" msgstr "" "Project-Id-Version: GNU xboard 4.8.0-pre1\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2014-10-01 23:14+0200\n" "Last-Translator: Antonio Ceballos \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "%s en el fichero de configuración\n" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Valor entero malo %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Argumento no reconocido %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "No se ha dado valor al argumento %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Carácter de escape \\ incompleto en el valor de %s" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Fallo al abrir fichero de indirección %s" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Valor del argumento lógico %s no reconocido" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "primer" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "segundo" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "versión %d del protocolo no es admitida" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "No se especificó el ejecutable del motor" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "opción timeControl incorrecta %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "opción searchTime incorrecta %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "La variante %s solo se admite en modo ICS" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Nombre de variante desconocido %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Iniciando programa de ajedrez" #: backend.c:1475 msgid "Bad game file" msgstr "archivo de partidas incorrecto" #: backend.c:1482 msgid "Bad position file" msgstr "archivo de posición incorrecto" #: backend.c:1496 msgid "Pick new game" msgstr "Seleccionar una nueva partida" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "Se ha reiniciado un torneo que ya había concluido.\n" "Se le va a añadir un nuevo ciclo.\n" "Las partidas comienzan dentro de 10 s." #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" "Ya se han disputado o se están disputando todas las partidas del torneo '%s'" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "No se puede tener una partida sin programas de ajedrez" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "No se pudo abrir la puerta de comunicaciones %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "No se pudo conectar al servidor %s, puerta %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Modo inicial desconocido %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "El modo análisis de archivo requiere un archivo de partidas" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "El modo de análisis requiere un motor de ajedrez" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "El modo de análisis no funciona con el modo ICS" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "El modo de máquina con blancas requiere un motor de ajedrez" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "El modo de máquina con blancas no funciona con el modo ICS" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "El modo de máquina con negras requiere un motor de ajedrez" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "El modo de máquina con negras no funciona con el modo ICS" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "El modo de dos máquinas requiere un motor de ajedrez" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "El modo de dos máquinas no funciona con el modo ICS" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "El modo de entrenamiento requiere un archivo de partidas" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Error al escribir a ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Error al leer el teclado" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Se obtuvo del teclado un fin de archivo" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Tipo «wild» %d desconocido" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Error al escribir en la pantalla" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "información kibitz de su oponente: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Error al recolectar lista de jugadas: dos encabezados" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Error al recolectar lista de jugadas: anidado" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "contra" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "La jugada no es válida (la ha rechazado ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Conexión cerrada por ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Error al leer de ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Fallo al analizar texto del tablero:\n" "\"%s\"" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "Partida demasiado larga; incremente MAX_MOVES y recompile" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Error al recolectar lista de jugadas: tablero extra" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "No se pudo analizar la jugada \"%s\" de ICS" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say Error interno; moveType incorrecto %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "No se puede hacer esto mientras se está jugando u observando" #  TRANSLATORS: BOARDS_RANKS, BOARD_FILES translatable? #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "¡Hace falta recompilar para disponer de BOARD_RANKS o BOARD_FILES!" #: backend.c:6700 msgid "You are playing Black" msgstr "Usted juega negras" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Usted juega blancas" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Turno de las blancas" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Turno de las negras" #: backend.c:6761 msgid "Displayed position is not current" msgstr "La posición mostrada no es la actual" #: backend.c:7007 msgid "Illegal move" msgstr "Jugada ilegal" #: backend.c:7084 msgid "End of game" msgstr "Fin del juego" #: backend.c:7087 msgid "Incorrect move" msgstr "Jugada incorrecta" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Retrasar el peón a la posición previa a la coronación" #: backend.c:7588 msgid "only marked squares are legal" msgstr "solo son legales los escaques señalados" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Torneo suizo terminado" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" "no se ha podido cargar la biblioteca de base de datos de finales de partida" #: backend.c:8395 msgid "wrong EGBB version" msgstr "versión incorrecta de base de datos de finales de partida" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "El bando del otro motor no es válido" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Jugada ilegal \"%s\" del %s motor" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "El FEN recibido del motor es incorrecto" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "El motor no ha enviado la configuración para la variante no estándar" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s no admite análisis" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Jugada ilegal \"%s\" (rechazada por el programa de ajedrez %s)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Fallo al iniciar el programa de ajedrez %s %s en %s: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Sugerencia: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "La jugada sugerida \"%s\"\n" "por el programa de ajedrez %s no es válida" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "La máquina acepta su oferta de tablas" # TRANSLATORS: Action / Draw translatable? #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "La máquina ofrece tablas.\n" "Seleccione Action / Draw si está de acuerdo." #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "fallo al escribir la PV" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Jugada ambigua en la salida ICS: \"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Jugada ilegal en la salida ICS: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Hueco en la lista de jugadas" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "La variante %s no es admitida por %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr ", pero %s es" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Fallo al iniciar '%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Esperando al primer programa de ajedrez" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Esperando al segundo programa de ajedrez" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "No se ha podido escribir en el fichero de torneos" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "¡No se puede reemplazar un motor mientras está ocupado!\n" "Termine primero la partida del motor." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "No hay ningún motor instalado con el nombre indicado" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Cambie primero un motor editando la lista de participantes\n" "en el diálogo de las Opciones de Torneo" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "Solo se puede cambiar un motor a la vez" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "No hay ningún motor %s instalado" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "Hay que proporcionar un fichero de torneos,\n" "para almacenar el progreso del torneo" #: backend.c:10837 msgid "Not enough participants" msgstr "No hay suficientes participantes" #: backend.c:11040 msgid "Bad tournament file" msgstr "Archivo de torneos incorrecto" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Esperando por otra(s) partida(s)" #: backend.c:11065 msgid "No pairing engine specified" msgstr "iNo se ha especificado el otro motor" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Encuentro %s - %s: puntuación final %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Jugada ilegal: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Jugada ambigua: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "No se puede abrir \"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "No se pudo construir la lista de partidas" #: backend.c:12190 msgid "No more games in this message" msgstr "No hay más partidas en este mensaje" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Ninguna partida se ha cargado aún" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Ya no se puede ir más atrás" #: backend.c:12678 msgid "Game number out of range" msgstr "Número de partida fuera de rango" #: backend.c:12689 msgid "Can't seek on game file" msgstr "No se puede buscar en archivo de partidas" #: backend.c:12747 msgid "Game not found in file" msgstr "Partida no hallada en archivo" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Posición FEN incorrecta en archivo" #: backend.c:13030 msgid "No moves in game" msgstr "Ninguna jugada en la partida" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Ninguna posición se ha cargado aún" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "No se puede buscar en archivo de aperturas" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "No se halló la posición en el archivo" #: backend.c:13245 msgid "Black to play" msgstr "Negras juegan" #: backend.c:13248 msgid "White to play" msgstr "Blancas juegan" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Esperando a tener acceso para guardar el fichero" #: backend.c:13337 msgid "Saving game" msgstr "Guardando partida" #: backend.c:13338 msgid "Bad Seek" msgstr "Búsqueda incorrecta" #: backend.c:13707 msgid "Saving position" msgstr "Guardando posición" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "Usted ha editado el historial de la partida.\n" "Use «Reload Same Game» y vuelva a realizar un movimiento." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "Usted ha introducido demasiadas jugadas.\n" "Retroceda hasta la posición correcta e inténtelo de nuevo." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "La posición que se está mostrando no es la actual.\n" "Avance hasta la posición correcta e inténtelo de nuevo." #: backend.c:13890 msgid "You have not made a move yet" msgstr "Usted no ha realizado todavía ninguna jugada" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "El mensaje «cmail» no está cargado.\n" "Use «Reload CMail Message» y vuelva a realizar un movimiento." #: backend.c:13916 msgid "No unfinished games" msgstr "No hay partidas sin terminar" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "Ya ha enviado una jugada por correo.\n" "Espere hasta recibir una jugada de su adversario.\n" "Para volver a enviar la misma jugada, teclee\n" "\"cmail -remail -game %s\"\n" "en la línea de órdenes." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Fallo al invocar cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Esperando respuesta del oponente\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Todavía necesita hacer una jugada para la partida\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Todavía necesita hacer jugadas para ambas partidas\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Todavía necesita hacer jugadas para las %d partidas\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Todavía necesita hacer una jugada para la partida %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "No hay juegos sin terminar\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Listo para enviar correo\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Todavía necesita hacer jugadas para las partidas %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Editar comentario" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Editar comentario en %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "Usted no está observando una partida" #: backend.c:14420 msgid "It is not White's turn" msgstr "No es turno de las blancas" #: backend.c:14501 msgid "It is not Black's turn" msgstr "No es turno de las negras" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Iniciando el programa de ajedrez %s" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Espere su turno.\n" "o seleccione 'Move Now'." #: backend.c:14774 msgid "Training mode off" msgstr "Modo de entrenamiento apagado" #: backend.c:14782 msgid "Training mode on" msgstr "Modo de entrenamiento activo" #: backend.c:14785 msgid "Already at end of game" msgstr "Ya se encuentra al final de la partida" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Advertencia: Usted todavía está jugando una partida" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Advertencia: Usted todavía está observando una partida" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Advertencia: Usted todavía está examinando una partida" #: backend.c:14938 msgid "Click clock to clear board" msgstr "Pinche el reloj para limpiar el tablero" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Cerrar el modo de análisis del motor ICS..." #: backend.c:15268 msgid "That square is occupied" msgstr "Ese cuadro está ocupado" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "No hay oferta pendiente para esta jugada" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Su oponente no está fuera de tiempo" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Debe hacer su jugada antes de ofrecer tablas" #: backend.c:15781 msgid "You are not examining a game" msgstr "Usted no está examinando una partida" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "No puede revertir si está en pausa" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Es su turno" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "Espero su turno." #: backend.c:15909 msgid "No hint available" msgstr "No hay sugerencia disponible" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "La lista de partidas no se ha cargado o está vacía" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" "¡Ya existe el fichero del libro! Inténtelo de nuevo si quiere " "sobreescribirlo." #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Error al escribir al %s programa de ajedrez" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "El programa %s termina en posición de tablas (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Error: el %s programa de ajedrez (%s) terminó inesperadamente" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Error al leer del %s programa de ajedrez (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "El motor %s tiene demasiadas opciones\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "La jugada ilustrada no es la actual" #: backend.c:17083 msgid "Could not parse move" msgstr "No se pudo analizar la jugada" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Ambas banderas cayeron" #: backend.c:17210 msgid "White's flag fell" msgstr "La bandera blanca cayó" #: backend.c:17232 msgid "Black's flag fell" msgstr "La bandera negra cayó" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" "El ajuste del reloj no está permitido en el modo de advertencia de tiempo " "automático" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Posición FEN incorrecta en portapapeles" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "El libro de Polyglot no es válido" #: book.c:703 msgid "Book Fault" msgstr "Error en el libro" #: book.c:839 msgid "Hash keys are different" msgstr "Las claves «hash» son diferentes" #: book.c:1015 msgid "Could not create book" msgstr "No se ha podido crear el libro" #: dialogs.c:283 msgid "Tournament file: " msgstr "Fichero de torneos: " #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "Para jugar en torneos de forma concurrente con múltiples XBoards:" #: dialogs.c:285 msgid "Sync after round" msgstr "Sincronizar después de la ronda" #: dialogs.c:286 msgid "Sync after cycle" msgstr "Sincronizar después de una vuelta" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Participantes del torneo:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Seleccione Motor:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Tipo de torneo (0 = liga, 1 = uno contra todos):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Número de vueltas del torneo (o rondas de torneo suizo)" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "Número predeterminado de partidas del encuentro (o emparejamiento):" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Pausa entre partidas del encuentro (ms):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Guardar partidas del torneo en:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "Fichero de partidas con líneas de apertura:" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "Número de la partida (-1 o -2 = incremento automático):" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Fichero con posiciones iniciales:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "Número de la posición (-1 o -2 = incremento automático):" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "Rebobinar Índice después de este número de Partidas (0 = nunca)" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "Inicialmente, desactivar los libros propios del motor" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Control de tiempo" #: dialogs.c:308 msgid "Common Engine" msgstr "General de los motores" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Opciones generales" #: dialogs.c:310 msgid "Continue Later" msgstr "Seguir más tarde" #: dialogs.c:311 msgid "Replace Engine" msgstr "Reemplazar motor" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Actualizar motor" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Clonar torneo" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" "En primer lugar, debe usted especificar un fichero de torneos que exista, " "para ser clonado" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "# no hay ningún motor instalado" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "Error interno: PARTICIPANTS incorrecto" #: dialogs.c:383 msgid "Tournament Options" msgstr "Opciones de Torneo" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "Puntuaciones absolutas del análisis" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "Casi siempre dama (rodeo para subcoronar)" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Animar arrastre" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Animar movimiento" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Bandera automática" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Cambio de lado automático" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "A ciegas" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "Menú «drop»" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "Activar árboles de variaciones" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "Cabeceras en la ventana de salida del motor" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Ocultar cogitaciones al jugar contra humano" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Iluminar última jugada" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Iluminar con flecha" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Moviemento de un click" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Actualización periódica (en análisis)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "Realizar la(s) jugada(s) de la PV escogida (análisis)" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Prever siguente jugada" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Ventana emergente al salir" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Ventana emergente si error en jugada" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Puntuaciones de la lista de jugadas" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Mostrar coordenadas" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Mostrar casillas objetivo" #: dialogs.c:426 msgid "Sticky Windows" msgstr "Ventanas adhesivas" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Verificar legalidad" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "Diálogos de alto nivel" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "Destello en las jugadas (0 = sin destello):" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "Velocidad de destello (high = rápido):" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "Velocidad de animación (high = lenta):" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Factor de «zoom» en el grafo de evaluación:" #: dialogs.c:452 msgid "Normal" msgstr "Normal" #: dialogs.c:453 msgid "Makruk" msgstr "«Makruk» (tailandés)" #: dialogs.c:454 msgid "FRC" msgstr "FRC (ajedrez aleatorio de Fischer)" #: dialogs.c:455 msgid "Shatranj" msgstr "«Shatranj»" #: dialogs.c:456 msgid "Wild castle" msgstr "Enroque salvaje" #: dialogs.c:457 msgid "Knightmate" msgstr "Mate al caballo" #: dialogs.c:458 msgid "No castle" msgstr "Sin enroque" #: dialogs.c:459 msgid "Cylinder *" msgstr "Cilíndrico *" #: dialogs.c:460 msgid "3-checks" msgstr "tres jaques" #: dialogs.c:461 msgid "berolina *" msgstr "belorina *" #: dialogs.c:462 msgid "atomic" msgstr "atómico" #: dialogs.c:463 msgid "two kings" msgstr "dos reyes" #: dialogs.c:464 msgid " " msgstr " " #: dialogs.c:465 msgid "Spartan" msgstr "espartano" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" "Tamaño del tablero ( -1 = el predeterminado para la variante seleccionada):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Número de filas del tablero:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Número de columnas del tablero:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "Tamaño tenencias:" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" "Las variantes señaladas con * solo pueden jugarse\n" "con la comprobación de legalidad desactivada." # What's this? #: dialogs.c:473 msgid "ASEAN" msgstr "ASEAN" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "Gran shatranj (10x8)" #: dialogs.c:475 msgid "Seirawan" msgstr "Seirawan" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "Halcón (10x8)" #: dialogs.c:477 msgid "Superchess" msgstr "Superajedrez" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "Capablanca (10x8)" #: dialogs.c:479 msgid "Crazyhouse" msgstr "«Crazyhouse»" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "Gótico (10x8)" #: dialogs.c:481 msgid "Bughouse" msgstr "Pasapiezas" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "Janus (10x8)" #: dialogs.c:483 msgid "Suicide" msgstr "Suicida" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "CRC (10x8)" # TRANSLATORS: give-away = losers? #: dialogs.c:485 msgid "give-away" msgstr "pierde gana" #: dialogs.c:486 msgid "grand (10x10)" msgstr "gran ajedrez (10x10)" # TRANSLATORS: give-away = losers? #: dialogs.c:487 msgid "losers" msgstr "pierde gana" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "japonés (9x9)" #: dialogs.c:489 msgid "fairy" msgstr "mágico" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "chino" #: dialogs.c:491 msgid "mighty lion" msgstr "león poderoso" #: dialogs.c:492 msgid "courier (12x8)" msgstr "ajedrez del mensajero (12x8)" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "ajedrez élfico (10x10)" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "japonés (12x12)" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Advertencia: ¡el segundo motor (%s) no admite esto!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "Solo pasapiezas no está disponible en el modo visor." #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" "Todas las variantes no disponibles en el primer motor\n" "(actualmente %s) están desactivas." #: dialogs.c:589 msgid "New Variant" msgstr "Nueva variante" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Número max. CPUs por motor:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Directorio de Ployglot:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Tamaño de la tabla de transposición (MB):" #: dialogs.c:624 msgid "EGTB Path:" msgstr "Carpeta de la EGTB:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Tamaño de la caché de la EGTB (MB):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "Usar el libro de la GUI" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Fichero del libro de aperturas:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Profundidad del libro (jugadas):" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Variedad del libro (0) frente a fuerza (100):" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "El motor 1 tiene libro propio" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "El motor 2 tiene libro propio" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Configuración general de los motores" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Detectar todos los mates" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Verificar avisos del motor" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Tablas si el material es insuficiente" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Adjudicar tablas triviales (regla de las tres jugadas)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "Regla de las N jugadas:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "N repeticiones:" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Adjudicar mate después de:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Límite para adjudicar juego:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Negar puntuación del motor #1" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Negar puntuación del motor #2" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "Adjudicar partidas no ICS" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Auto Kibitz" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Auto-comentario" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Auto-Observar" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Tablero al frente (automático)" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "Creación de fichero de registro automática" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Seguir observando mientras se juega" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Tablero dual para partidas observadas" #: dialogs.c:684 msgid "Get Move List" msgstr "Leer lista de jugadas" #: dialogs.c:685 msgid "Quiet Play" msgstr "Jugar en silencio" #: dialogs.c:686 msgid "Seek Graph" msgstr "Buscar gráfica" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Grafo de búsqueda con refresco automático" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "Ventana emergente de buzón automática" #: dialogs.c:689 msgid "Quit after game" msgstr "Después de la partida salir" #: dialogs.c:690 msgid "Premove" msgstr "Pre-jugada" #: dialogs.c:691 msgid "Premove for White" msgstr "Prejugada de las blancas" #: dialogs.c:692 msgid "First White Move:" msgstr "1er. mov. blancas" #: dialogs.c:693 msgid "Premove for Black" msgstr "Prejugada de las negras" #: dialogs.c:694 msgid "First Black Move:" msgstr "1er. mov. negras" #: dialogs.c:696 msgid "Alarm" msgstr "Alarma" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "Tiempo de la alarma (ms):" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Mensajes coloreados" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Colores del texto que se expresa en voz alta:" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "Colores «S» del texto que se expresa en voz alta:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Colores del texto del canal 1:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Colores del texto del otro canal:" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Colores del texto kibitz:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "Colores del texto de hablar con otros:" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "Colores del texto de desafíos:" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "Colores del texto de peticiones:" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Colores del texto de búsqueda:" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "Colores del otro texto:" #: dialogs.c:716 msgid "ICS Options" msgstr "Opciones ICS" #: dialogs.c:721 msgid "Exact position match" msgstr "Coincidencia exacta de la posición" #: dialogs.c:721 msgid "Shown position is subset" msgstr "La posición mostrada es un subconjunto" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Mismo material con exactamente la misma cadena de peones" #: dialogs.c:722 msgid "Same material" msgstr "Mismo material" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "Rango de material (mitad superior del tablero opcional)" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "Diferencia de material (situación equilibrada opcional)" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "Etiquetas de visualización automática" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "Comentario de visualización automática" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" "Velocidad de juego automático de las partidas cargadas\n" "(0 = instantánea, -1 = desactivada):" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Segundos por jugadas:" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" "\n" "opciones para el modo de visualización de partidas:" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" "\n" "Umbral para filtrar posiciones en la lista de partidas:" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Elo del mejor jugador como mínimo:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Elo del peor jugador como mínimo:" #: dialogs.c:746 msgid "No games before year:" msgstr "Número de partidas antes del año:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "Número mínimo de posiciones consecutivas:" #: dialogs.c:749 msgid "Search mode:" msgstr "Modo de búsqueda:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "También colores invertidos" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "También posición volteada izquierda-derecha" #: dialogs.c:760 msgid "Load Game Options" msgstr "Opciones al leer partida" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Guardar partidas automáticamente" #: dialogs.c:773 msgid "Own Games Only" msgstr "Solo partidas propias" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Guardar partidas en fichero" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Guardar en fichero posiciones finales:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "Cabecera PGN del evento:" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "Estilo de guardado antiguo (en contraposición a PGN)" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "Incluir etiqueta de número en el PGN del torneo" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "Guardar la información de puntuación/profundidad en el PGN" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "Guardar información fuera-de-libro en PGN " #: dialogs.c:787 msgid "Save Game Options" msgstr "Opciones al salvar partida" #: dialogs.c:796 msgid "No Sound" msgstr "Sin sonido" #: dialogs.c:797 msgid "Default Beep" msgstr "Bip predeterminado" #: dialogs.c:798 msgid "Above WAV File" msgstr "Fichero WAV de arriba" #: dialogs.c:799 msgid "Car Horn" msgstr "Bocina de coche" #: dialogs.c:800 msgid "Cymbal" msgstr "Platillos" #: dialogs.c:801 msgid "Ding" msgstr "Timbre" #: dialogs.c:802 msgid "Gong" msgstr "«Gong»" #: dialogs.c:803 msgid "Laser" msgstr "Láser" # TRANSLATORS #: dialogs.c:804 msgid "Penalty" msgstr "Penalización" #: dialogs.c:805 msgid "Phone" msgstr "Teléfono" #: dialogs.c:806 msgid "Pop" msgstr "«Pop»" #: dialogs.c:807 msgid "Roar" msgstr "Rugido" #: dialogs.c:808 msgid "Slap" msgstr "Palmada" # TRANSLATORS #: dialogs.c:809 msgid "Wood Thunk" msgstr "«Wood thunk»" #: dialogs.c:811 msgid "User File" msgstr "Fichero del usuario" #: dialogs.c:834 msgid "User WAV File:" msgstr "Fichero WAV del usuario:" #: dialogs.c:835 msgid "Sound Program:" msgstr "Programa de sonido:" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Sonido de prueba" #: dialogs.c:837 msgid "Play" msgstr "Reproducir" #: dialogs.c:838 msgid "Move:" msgstr "Jugada:" # TRANSLATORS #: dialogs.c:839 msgid "Win:" msgstr "Victorias:" #: dialogs.c:840 msgid "Lose:" msgstr "Derrotas:" #: dialogs.c:841 msgid "Draw:" msgstr "Tablas" #: dialogs.c:842 msgid "Unfinished:" msgstr "No terminadas:" #: dialogs.c:843 msgid "Alarm:" msgstr "Alarma:" #: dialogs.c:844 msgid "Challenge:" msgstr "Desafío:" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Carpeta de sonidos:" #: dialogs.c:847 msgid "Shout:" msgstr "En voz alta:" # TRANSLATORS #: dialogs.c:848 msgid "S-Shout:" msgstr "En voz alta S" #: dialogs.c:849 msgid "Channel:" msgstr "Canal:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Canal 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Decir:" #: dialogs.c:852 msgid "Kibitz:" msgstr "Kibitz:" #: dialogs.c:853 msgid "Request:" msgstr "Pedir:" #: dialogs.c:854 msgid "Lion roar:" msgstr "Rugido de león:" #: dialogs.c:855 msgid "Seek:" msgstr "Buscar:" #: dialogs.c:871 msgid "Sound Options" msgstr "Opciones de sonido" #: dialogs.c:887 msgid "Selectable themes:" msgstr "Temas seleccionables:" #: dialogs.c:889 msgid "New name for current theme:" msgstr "Nuevo nombre para el tema actual:" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Color de las piezas blancas:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "R" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "V" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "A" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "O" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Color de las piezas negras:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Color de los escaques claros" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Color de los escaques oscuros" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Color de escaque iluminado" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Color de iluminación de prejugada:" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "Voltear piezas estilo Shogi (Botones de colores predefinidos)" #: dialogs.c:934 msgid "Mono Mode" msgstr "Modo mono" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "Tamaño del logo (0=desactivado, requiere reiniciar):" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "Hueco de la línea (-1 = el predeterminado para el tamaño del tablero):" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Utilizar tablero con texturas" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Fichero de texturas para escaques claros:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Fichero de texturas para escaques oscuros:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "Utilizar «bitmaps» externos para las piezas con sus propios colores" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "Carpeta con imágenes de piezas:" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "# no hay ningún tema definido" #: dialogs.c:1024 msgid "Board Options" msgstr "Opciones de tablero" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "Menú de texto ICS" #: dialogs.c:1124 msgid "clear" msgstr "borrar" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "guardar cambios" #: dialogs.c:1223 msgid "add next move" msgstr "añadir siguente jugada" #: dialogs.c:1247 msgid "Edit book" msgstr "Editar libro" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Etiquetas" #: dialogs.c:1385 msgid "ICS input box" msgstr "Cuadro de entrada ICS" #: dialogs.c:1417 msgid "Type a move" msgstr "Teclear una jugada" #: dialogs.c:1443 msgid "Engine has no options" msgstr "El motor no tiene opciones" #: dialogs.c:1445 msgid "Engine Settings" msgstr "Configuración del motor" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Seleccionar un motor de la lista:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "o especificar uno debajo:" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Sobrenombre (opcional):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" "Usar el sobrenombre de las etiquetas de jugadores del PGN en las partidas " "motor-motor" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "Carpeta del motor:" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Instrucción para el motor:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "(La carpeta se derivará de la del motor cuando esté vacía)" #: dialogs.c:1479 msgid "UCI" msgstr "UCI" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "Protocolo WB v1 (no esperar por las características del motor)" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "No debe utilizar el libro de la GUI" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Añadir este motor a la lista" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "Forzar la variante actual con este motor" #: dialogs.c:1533 msgid "Load first engine" msgstr "Cargar el primer motor" #: dialogs.c:1539 msgid "Load second engine" msgstr "Cargar el segundo motor" #: dialogs.c:1562 msgid "shuffle" msgstr "barajar" #: dialogs.c:1563 msgid "Fischer castling" msgstr "Enroque de Fischer" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Núm. de pos. inicial:" #: dialogs.c:1565 msgid "randomize" msgstr "aleatorizar" #: dialogs.c:1566 msgid "pick fixed" msgstr "selección fijada" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Nueva partida revuelta..." #: dialogs.c:1602 msgid "classical" msgstr "clásica" #: dialogs.c:1603 msgid "incremental" msgstr "incremental" #: dialogs.c:1604 msgid "fixed max" msgstr "máximo fijado" #: dialogs.c:1605 msgid "Moves per session:" msgstr "Jugadas por sesión:" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "Tiempo inicial (min):" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "Incremento o máximo (s(jugada):" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "Factores de tiempo extra:" #: dialogs.c:1609 msgid "Engine #1" msgstr "Motor 1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Motor 2 / Humano" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "No se usa" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Error al escribir al programa de ajedrez" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Cancelar" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Rey" #: dialogs.c:1776 msgid "Captain" msgstr "Capitán" #: dialogs.c:1777 msgid "Lieutenant" msgstr "Teniente" #: dialogs.c:1778 msgid "General" msgstr "General" #: dialogs.c:1779 msgid "Warlord" msgstr "Caudillo" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Caballo" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Alfil" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Torre" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Arzobispo" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Canciller" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Dama" #: dialogs.c:1792 msgid "Lion" msgstr "León" #: dialogs.c:1796 msgid "Defer" msgstr "Diferir" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Coronar" #: dialogs.c:1854 msgid "Chats:" msgstr "Charlas:" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 msgid "New Chat" msgstr "Nueva Charla" #: dialogs.c:1862 msgid "Chat partner:" msgstr "Charlar con compañero:" #: dialogs.c:1863 msgid "End Chat" msgstr "Fin de la charla" #: dialogs.c:1864 msgid "Hide" msgstr "Ocultar" #: dialogs.c:2074 msgid "ICS Interaction" msgstr "Interacciones ICS" #: dialogs.c:2141 msgid "factory" msgstr "De fábrica" #: dialogs.c:2142 msgid "up" msgstr "arriba" #: dialogs.c:2143 msgid "down" msgstr "abajo" #: dialogs.c:2162 msgid "No tag selected" msgstr "Número de la etiqueta seleccionada" #: dialogs.c:2193 msgid "Game-list options" msgstr "Opciones de la lista de partidas" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Error" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Error fatal" #: dialogs.c:2306 msgid "Exiting" msgstr "Saliendo" #: dialogs.c:2317 msgid "Information" msgstr "Información" #: dialogs.c:2324 msgid "Note" msgstr "Nota" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Blancas" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Peón" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Elefante" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Cañón" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Degradar" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Vaciar el escaque" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Limpiar el tablero" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Negras" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Archivo" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Editar" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Ver" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Modo" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Acción" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Motor" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Opciones" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Ayuda" #: dialogs.c:2491 msgid "<<" msgstr "<<" #: dialogs.c:2492 msgid "<" msgstr "<" #: dialogs.c:2494 msgid ">" msgstr ">" #: dialogs.c:2495 msgid ">>" msgstr ">>" #: dialogs.c:2774 msgid "Directories:" msgstr "Carpetas:" #: dialogs.c:2775 msgid "Files:" msgstr "Archivos:" #: dialogs.c:2776 msgid "by name" msgstr "por nombre" #: dialogs.c:2777 msgid "by type" msgstr "por tipo" #: dialogs.c:2780 msgid "Filename:" msgstr "Nombre del fichero:" #: dialogs.c:2781 msgid "New directory" msgstr "Nueva carpeta" #: dialogs.c:2782 msgid "File type:" msgstr "Tipo de fichero:" #: dialogs.c:2857 msgid "Contents of" msgstr "Contenido de" #: dialogs.c:2883 msgid " next page" msgstr " siguiente página" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "NOMBRE DEL DIRECTORIO PRIMERO AQUÍ" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "INTENTAR OTRO NOMBRE" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" "No hay piezas predeterminadas instaladas\n" "Seleccione su propio '-pieceImageDirectory'." #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Salida del motor" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "%s (%d media-jugada reversible)" msgstr[1] "%s (%d medias-jugadas reversibles)" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Leyendo fichero de partidas (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: no se puede ir a la carpeta CHESSDIR: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Fallo al abrir el fichero '%s'\n" #  TRANSLATORS: BOARDS_RANKS, BOARD_FILES translatable? #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" "Recompilar con BOARD_RANKS o BOARD_FILES mayor para admitir este tamaño" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: sintaxis de boardSize incorrecta %s\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: nombre de boardSize no reconocido %s\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "%s: insuficientes colores disponibles: probando modo monocromo\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "No se ha podido crear conjunto de fuentes para %s.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: ninguna fuente concuerda con el patrón %s\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "No se puede abrir el fichero temporal" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Fallo al abrir fichero" #: menus.c:134 msgid "Load game file name?" msgstr "¿Nombre del fichero de partidas para cargar?" #: menus.c:179 msgid "Load position file name?" msgstr "¿Nombre del fichero de posiciones para cargar?" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "¿Nombre del fichero de partidas para guardar?" #: menus.c:194 msgid "Save position file name?" msgstr "¿Nombre del fichero de posiciones para guardar?" #: menus.c:362 msgid " (with Zippy code)" msgstr " (con el código de Zippy)" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Copyright de las mejoras 1992-2014 Free Software Foundation\n" "Copyright de las mejoras 2005 Alessandro Scotti\n" "\n" "%s es software libre SIN NINGUNA GARANTÍA; ver el fichero COPYING para más " "información.\n" "La versión de GTK utilizada es experimental e inestable\n" "\n" "Visite XBoard en la web en: http://www.gnu.org/software/xboard/\n" "Obtenga las características más recientes en: http://www.gnu.org/software/" "xboard/whats_new.html\n" "\n" "Informe de errores por correo a: \n" "\n" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Acerca de XBoard" #: menus.c:601 msgid "New Game" msgstr "Nueva partida" #: menus.c:602 msgid "New Shuffle Game..." msgstr "Nueva partida revuelta..." #: menus.c:603 msgid "New Variant..." msgstr "Nueva variante..." #: menus.c:605 msgid "Load Game" msgstr "Cargar partida" #: menus.c:606 msgid "Load Position" msgstr "Cargar posición" #: menus.c:607 msgid "Next Position" msgstr "Siguiente posición" #: menus.c:608 msgid "Prev Position" msgstr "Posición previa" #: menus.c:610 msgid "Save Game" msgstr "Guardar partida" #: menus.c:611 msgid "Save Position" msgstr "Guardar posición" #: menus.c:612 msgid "Save Selected Games" msgstr "Guardar partidas seleccionadas" #: menus.c:613 msgid "Save Games as Book" msgstr "Guardar partidas como libro" #: menus.c:615 msgid "Mail Move" msgstr "Jugada por correo" #: menus.c:616 msgid "Reload CMail Message" msgstr "Volver a cargar mensaje CMail" #: menus.c:618 msgid "Quit " msgstr "Salir " #: menus.c:623 msgid "Copy Game" msgstr "Copiar partida" #: menus.c:624 msgid "Copy Position" msgstr "Copiar posición" #: menus.c:625 msgid "Copy Game List" msgstr "Copiar lista de partidas" #: menus.c:627 msgid "Paste Game" msgstr "Pegar partida" #: menus.c:628 msgid "Paste Position" msgstr "Pegar posición" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "Editar partida" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "Editar posición" #: menus.c:632 msgid "Edit Tags" msgstr "Editar etiquetas" #: menus.c:633 msgid "Edit Comment" msgstr "Editar comentario" #: menus.c:634 msgid "Edit Book" msgstr "Editar libro" #: menus.c:636 msgid "Revert" msgstr "Revertir" #: menus.c:637 msgid "Annotate" msgstr "Anotar" #: menus.c:638 msgid "Truncate Game" msgstr "Truncar partida" #: menus.c:640 msgid "Backward" msgstr "Hacia atrás" #: menus.c:641 msgid "Forward" msgstr "Hacia delante" #: menus.c:642 msgid "Back to Start" msgstr "Volver a empezar" #: menus.c:643 msgid "Forward to End" msgstr "Avanzar hasta el final" #: menus.c:648 msgid "Flip View" msgstr "Voltear vista" #: menus.c:651 msgid "Move History" msgstr "Historial de jugadas" #: menus.c:652 msgid "Evaluation Graph" msgstr "Gráfica de evaluación" #: menus.c:653 msgid "Game List" msgstr "Lista de partidas" #: menus.c:657 msgid "Comments" msgstr "Comentarios" #: menus.c:658 msgid "ICS Input Box" msgstr "Cuatro de entrada ICS" #: menus.c:659 msgid "ICS/Chat Console" msgstr "Consola de ICS/Charla" #: menus.c:661 msgid "Board..." msgstr "Tablero..." #: menus.c:662 msgid "Game List Tags..." msgstr "Etiquetas de la lista de partidas..." #: menus.c:667 msgid "Machine White" msgstr "El programa con blancas" #: menus.c:668 msgid "Machine Black" msgstr "El programa con negras" #: menus.c:669 msgid "Two Machines" msgstr "Dos programas" #: menus.c:670 msgid "Analysis Mode" msgstr "Modo de análisis" #: menus.c:671 msgid "Analyze Game" msgstr "Analizar partida" #: menus.c:674 msgid "Training" msgstr "Entrenamiento" #: menus.c:675 msgid "ICS Client" msgstr "Cliente ICS" #: menus.c:677 msgid "Machine Match" msgstr "Torneo de dos programas" #: menus.c:678 msgid "Pause" msgstr "Pausa" #: menus.c:683 msgid "Accept" msgstr "Aceptar" #: menus.c:684 msgid "Decline" msgstr "Declinar" #: menus.c:685 msgid "Rematch" msgstr "Revancha" #: menus.c:687 msgid "Call Flag" msgstr "Pedir la bandera" #: menus.c:688 msgid "Draw" msgstr "Tablas" #: menus.c:689 msgid "Adjourn" msgstr "Aplazar" #: menus.c:690 msgid "Abort" msgstr "Abortar" #: menus.c:691 msgid "Resign" msgstr "Rendirse" #: menus.c:693 msgid "Stop Observing" msgstr "Dejar de observar" #: menus.c:694 msgid "Stop Examining" msgstr "Dejar de examinar" #: menus.c:695 msgid "Upload to Examine" msgstr "Enviar para examinar" #: menus.c:697 msgid "Adjudicate to White" msgstr "Adjudicar a blancas" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Adjudicar a negras" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Adjudicar tablas" #: menus.c:704 msgid "Edit Engine List..." msgstr "Editar lista de motores..." #: menus.c:706 msgid "Load New 1st Engine..." msgstr "Cargar un nuevo primer motor..." #: menus.c:707 msgid "Load New 2nd Engine..." msgstr "Cargar un nuevo segundo motor..." #: menus.c:709 msgid "Engine #1 Settings..." msgstr "Configuración del motor #1..." #: menus.c:710 msgid "Engine #2 Settings..." msgstr "Configuración del motor #2..." #: menus.c:712 msgid "Hint" msgstr "Pista" #: menus.c:713 msgid "Book" msgstr "Repertorio de aperturas" #: menus.c:715 msgid "Move Now" msgstr "Mover ahora" #: menus.c:716 msgid "Retract Move" msgstr "Revocar jugada" #: menus.c:722 msgid "General..." msgstr "General..." #: menus.c:724 msgid "Time Control..." msgstr "Controles de tiempo..." #: menus.c:725 msgid "Common Engine..." msgstr "General de los motores..." #: menus.c:726 msgid "Adjudications..." msgstr "Adjudicaciones..." #: menus.c:727 msgid "ICS..." msgstr "ICS..." #: menus.c:728 msgid "Tournament..." msgstr "Torneo..." #: menus.c:729 msgid "Load Game..." msgstr "Cargar partida..." #: menus.c:730 msgid "Save Game..." msgstr "Guardar partida..." #: menus.c:731 msgid "Game List..." msgstr "Lista de partidas..." #: menus.c:732 msgid "Sounds..." msgstr "Sonidos..." #: menus.c:735 msgid "Always Queen" msgstr "Siempre dama" #: menus.c:741 msgid "Flash Moves" msgstr "Destello en las jugadas" #: menus.c:743 msgid "Highlight Dragging" msgstr "Iluminar arrastre" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Iluminar con flecha" #: menus.c:747 msgid "Move Sound" msgstr "Sonido en jugadas" #: menus.c:749 msgid "Periodic Updates" msgstr "Actualización periódica" #: menus.c:751 msgid "Popup Exit Message" msgstr "Mensaje de salida en venta emergente" #: menus.c:753 msgid "Show Coords" msgstr "Mostrar coordenadas" #: menus.c:754 msgid "Hide Thinking" msgstr "Ocultar cogitaciones" #: menus.c:758 msgid "Save Settings Now" msgstr "Guardar config. ahora" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Guardar config. al salir del programa" #: menus.c:764 msgid "Info XBoard" msgstr "Información XBoard" #: menus.c:765 msgid "Man XBoard" msgstr "Manual de XBoard" #: menus.c:767 msgid "XBoard Home Page" msgstr "Página web de XBoard" #: menus.c:768 msgid "On-line User Guide" msgstr "Guía del usuario en línea" #: menus.c:769 msgid "Development News" msgstr "Noticias sobre el desarrollo" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "correo-e para informar de errores" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "nombre del motor" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "jugada" #: nengineoutput.c:155 msgid "Engine output" msgstr "Salida del motor" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" "STRIDE desajustado en nengineoutput.c\n" "¡Cambiar y recompilar!" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Gráfica de evaluación" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "Gráfica de fallos garrafales" #: nevalgraph.c:106 msgid "Blunder" msgstr "Fallo garrafal" #: nevalgraph.c:106 msgid "Eval" msgstr "Evaluación" #: ngamelist.c:87 msgid "find position" msgstr "encontrar posición" #: ngamelist.c:88 msgid "narrow" msgstr "estrecho" #: ngamelist.c:89 msgid "thresholds" msgstr "umbrales" #: ngamelist.c:90 msgid "tags" msgstr "etiquetas" #: ngamelist.c:91 msgid "next" msgstr "siguiente" #: ngamelist.c:92 msgid "close" msgstr "cerrar" #: ngamelist.c:116 msgid "No game selected" msgstr "Ninguna partida seleccionada" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Ya no se puede ir más adelante" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Explorando partidas (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "página anterior" #: ngamelist.c:214 msgid "next page" msgstr "página siguiente" #: ngamelist.c:217 msgid "no games matched your request" msgstr "ninguna partida responde a su búsqueda" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s - %d/%d partidas (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "No hay lista de partidas" #: nhistory.c:109 msgid "Move list" msgstr "Lista de jugadas" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: color no reconocido %s\n" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: no se puede analizar el color de primer plano en '%s'\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" "%s: no se puede analizar los nombres de los colores; desactivando colorido\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "ERROR: usuario desconocido %s (en carpeta %s)\n" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "La capacidad de «socket» no está configurada en" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "rcmd interno no implementado para Unix" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "pixel blanco = 0x%lx, pixel negro = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "navegar" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "Ctrl" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "Alt" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "Mayús" #: xaw/xoptions.c:1314 msgid "OK" msgstr "Aceptar" #~ msgid " (for concurrent playing of a single" #~ msgstr " (para jugar simultáneamente en un solo" #~ msgid "Match Options" #~ msgstr "Opciones del encuentro" #~ msgid "Chat box" #~ msgstr "Cuadro de charla" #~ msgid "Open Chat Window" #~ msgstr "Abrir ventana de conversación" #~ msgid "ICS ..." #~ msgstr "ICS ..." #~ msgid "Match ..." #~ msgstr "Encuentro ..." #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: No se puede acceder a la carpeta XPM %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Disponibles `%s' tamaños:\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "¡Error: no hay ficheros `%s'!\n" #~ msgid "" #~ "Warning: No DIR structure found on this system --\n" #~ " Unable to autosize for XPM/XIM pieces.\n" #~ " Please report this error to %s.\n" #~ " Include system type & operating system in message.\n" #~ msgstr "" #~ "ATENCIÓN: No se ha encontrado estructura DIR en este sistema --\n" #~ " No se puede asignar tamaño automáticamente a las piezas XPM/" #~ "XIM.\n" #~ " Por favor, informe de este error a %s.\n" #~ " Incluya en su mensaje el tipo de sistema y de sistema operativo.\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Error %d cargando imagen de icono\n" #~ msgid "cancel" #~ msgstr "Cancelar" xboard-4.8.0/po/da.po0000644000175000001440000021460012422467103011265 00000000000000# Danish translation for xboard. # # Copyright (C) 2011, 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the xboard package. # # Note: Jeg har foreløbig efterladt navne på varianter og uortodokse brikker mv. # uoversatte fordi jeg ikke kender dansk sprogbrug for dette om nogen. Byrial. # # Sprogbrug: # Chess engine, engine, chess program, chess machine: Disse bruges i flæng # i originalen. Er oversat til skakprogram. # Pairing engine: Paringsprogram # # Korrektur og gode forslag: # Morten Bo Johansen, dec. 2011 # Joe Dalton, feb. 2012 # # Oversætter: # Byrial Ole Jensen , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: GNU xboard 4.6.0.20120304\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2012-03-06 12:27+0100\n" "Last-Translator: Byrial Ole Jensen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "%s i indstillingsfil\n" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Forkert heltalsværdi %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Ikke genkendt argument %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "Ingen værdi givet for argumentet %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Ukomplet \\-undvigesekvens i værdi for %s" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Åbning af inkluderet fil \"%s\" mislykkedes" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Ikke genkendt boolesk argumentværdi %s" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "første" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "det andet" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "protokolversion %d er ikke understøttet" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "Du angav ikke et kørbart skakprogram" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "forkert timeControl-tilvalg %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "forkert searchTime-tilvalg %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Varianten %s er kun understøttet i ICS-tilstand" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Ukendt variantnavn %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Starter skakprogram" #: backend.c:1475 msgid "Bad game file" msgstr "Fejl i partifil" #: backend.c:1482 msgid "Bad position file" msgstr "Fejl i stillingsfil" #: backend.c:1496 msgid "Pick new game" msgstr "Vælg nyt spil" # cycle = runde? #: backend.c:1565 #, fuzzy msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "Du genstartede en allerede afsluttet turnering\n" "En mere cyklus vil nu blive tilføjet\n" "Partierne starter om 10 sekunder" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "Alle partier i turneringen \"%s\" er allerede færdige eller i gang" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Kan ikke have en match uden skakprogrammer" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Kunne ikke åbne seriel port %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Kunne ikke forbinde til vært %s, port %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Ukendt initialMode %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "AnalyzeFile-tilstand kræver en partifil" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "Analysetilstand kræver et skakprogram" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Analysetilstand virker ikke sammen med ICS-tilstand" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "MachineWhite-tilstand kræver et skakprogram" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "MachineWhite-tilstand virker ikke sammen med ICS-tilstand" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "MachineBlack-tilstand kræver et skakprogram" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "MachineBlack-tilstand virker ikke sammen med ICS-tilstand" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "TwoMachines-tilstand kræver et skakprogram" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "TwoMachines-tilstand virker ikke sammen med ICS-tilstand" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "Træningstilstand kræver en partifil" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Fejl ved skrivning til ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Fejl ved læsning fra tastatur" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Fik filafslutning fra tastatur" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Ukendt vild type %d" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Fejl ved skrivning til skærm" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "din modstander kommenterer: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Fejl ved tolkning af trækliste: to teksthoveder" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Fejl ved tolkning af trækliste: indlejret" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "–" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "Ulovligt træk (afvist af ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Forbindelse lukket af ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Fejl ved læsning fra ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Fortolkning af brætstreng mislykkedes:\n" "\"%s\"" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "Parti for langt; forøg MAX_MOVES og genoversæt" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Fejl ved tolkning af trækliste: ekstra bræt" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Kunne ikke fortolke \"%s\" fra ICS" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say Intern fejl; forkert moveType%d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "Du kan ikke gøre dette, mens du spiller eller observerer" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "Genoversæt for at understøtte denne BOARD_RANKS eller BOARD_FILES!" #: backend.c:6700 msgid "You are playing Black" msgstr "Du spiller sort" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Du spiller hvid" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Det er hvids tur" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Det er sorts tur" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Den viste stilling er ikke den aktuelle" #: backend.c:7007 msgid "Illegal move" msgstr "Ulovligt træk" #: backend.c:7084 msgid "End of game" msgstr "Slutningen af partiet" #: backend.c:7087 msgid "Incorrect move" msgstr "Ukorrekt træk" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Træk bonde baglæns for at underforvandle" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Svejtserturnering afsluttet" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "Ikke tilladt parring fra parringsprogram" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Ulovligt træk \"%s\" fra %s skakprogram" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "Fejl i FEN modtaget fra skakprogram" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s understøtter ikke analyse" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Ulovligt træk \"%s\" (afvist af %s skakprogram)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Fejl ved start af %s skakprogram %s på %s: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Tip: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "Ulovligt tip om træk \"%s\"\n" "fra %s skakprogram" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Skakprogrammet accepterer dit remistilbud" #: backend.c:9404 #, fuzzy msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "Skakprogrammet tilbyder remis\n" "Vælg Handlinger / Remis for at acceptere" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "skrivning af analysevariant mislykkedes" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Flertydigt træk i ICS-output: \"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Ulovligt træk i ICS-output: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Hul i trækliste" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Variant %s understøttes ikke af %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Opstartsfejl på \"%s\"" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Venter på første skakprogram" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Venter på andet skakprogram" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "Kunne ikke skrive turneringsfil" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "Du kan ikke udskifte et skakprogram, mens det bruges!\n" "Afslut dets parti først." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "Der er ikke installeret et skakprogram med det angivne navn" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Ændr først skakprogram ved at redigere deltagerlisten\n" "i turneringsindstillingerne" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "Du kan kun ændre et skakprogram ad gangen" #: backend.c:10807 backend.c:10956 #, fuzzy, c-format msgid "No engine %s is installed" msgstr "Der er ikke installeret et skakprogram med det angivne navn" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "Du skal angive en turneringsfil\n" "til at gemme turneringens afvikling" #: backend.c:10837 msgid "Not enough participants" msgstr "Der er ikke nok deltagere" #: backend.c:11040 msgid "Bad tournament file" msgstr "Fejl i turneringsfil" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Venter på andet parti/andre partier" #: backend.c:11065 msgid "No pairing engine specified" msgstr "Der er ikke noget parringsprogram specificeret" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Match %s - %s: slutscore %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Ulovligt træk: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Flertydigt træk: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Kan ikke åbne \"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Kan ikke konstruere partiliste" #: backend.c:12190 msgid "No more games in this message" msgstr "Der er ikke flere partier i denne besked" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Der er endnu ingen indlæste partier" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Kan ikke gå længere tilbage" #: backend.c:12678 msgid "Game number out of range" msgstr "Partinummer findes ikke" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Kan ikke spole i partifil" #: backend.c:12747 msgid "Game not found in file" msgstr "Parti ikke fundet i fil" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Fejl i FEN-stilling i fil" #: backend.c:13030 msgid "No moves in game" msgstr "Ingen træk i partiet" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Ingen stilling er endnu indlæst" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Kan ikke spole i stillingsfil" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Stilling er ikke fundet i fil" #: backend.c:13245 msgid "Black to play" msgstr "Sort i trækket" #: backend.c:13248 msgid "White to play" msgstr "Hvid i trækket" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Venter på adgang til gemmefil" #: backend.c:13337 msgid "Saving game" msgstr "Gemmer parti" #: backend.c:13338 msgid "Bad Seek" msgstr "Søgning mislykkedes" #: backend.c:13707 msgid "Saving position" msgstr "Gemmer stilling" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "Du har redigeret i parti-historikken.\n" "Genindlæs partiet og udfør trækket igen." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "Du har indtastet for mange træk.\n" "Gå tilbage til den aktuelle stilling og prøv igen." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "Den viste stilling er ikke den aktuelle.\n" "Gå fremad til den korrekte stilling og prøv igen." #: backend.c:13890 msgid "You have not made a move yet" msgstr "Du har ikke trukket endnu" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "Cmail-beskeden er ikke indlæst.\n" "Brug Genindlæs CMail-besked og lav dit træk igen." #: backend.c:13916 msgid "No unfinished games" msgstr "Der er ingen uafsluttede partier" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "Du har allerede sendt et træk.\n" "Vent indtil der kommer et træk fra din modstander.\n" "For at gensende det samme træk, tast\n" "\"cmail -remail -game %s\"\n" "på kommandolinjen." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Start af cmail mislykkedes" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Venter på svar fra modstander\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Der er stadig nødvendigt at trække i partiet\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Der er stadig nødvendigt at trække i begge partier\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Der er stadig nødvendigt at trække i alle %d partier\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Der er stadig nødvendigt at trække i partiet %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Der er ingen uafsluttede partier\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Klar til at sende e-mail\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Der er stadig nødvendigt at trække i partierne %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Redigér kommentar" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Redigér kommentar til %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "Du observerer ikke et parti" #: backend.c:14420 msgid "It is not White's turn" msgstr "Hvid er ikke i trækket" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Sort er ikke i trækket" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Starter %s skakprogram" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Vent på din tur,\n" "eller vælg Træk nu" #: backend.c:14774 msgid "Training mode off" msgstr "Træningstilstand fra" #: backend.c:14782 msgid "Training mode on" msgstr "Træningstilstand til" #: backend.c:14785 msgid "Already at end of game" msgstr "Allerede ved slutningen af partiet" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Advarsel: Du spiller stadig et parti" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Advarsel: Du observerer stadig et parti" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Advarsel: Du undersøger stadig et parti" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Lukker skakprogram til ICS-analyse ..." #: backend.c:15268 msgid "That square is occupied" msgstr "Det felt er besat" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "Der er ingen aktuelle tilbud ved dette træk" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Din modstander har ikke overskredet tiden" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Du skal trække før du tilbyder remis" #: backend.c:15781 msgid "You are not examining a game" msgstr "Du undersøger ikke et parti" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Du kan ikke annullere variantlinje under pause" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Det er dig som er i trækket" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "Vent til du kommer i trækket" #: backend.c:15909 msgid "No hint available" msgstr "Tip er ikke tilgængeligt" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "Partiliste ikke indlæst eller tom" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Fejl ved skrivning til %s skakprogram" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "%s program afslutter i remisstilling (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Fejl: %s skakprogram (%s) afsluttede uventet" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Fejl ved læsning fra %s skakprogram (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "%s skakprogram har for mange tilvalg\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Det viste træk er ikke det aktuelle" #: backend.c:17083 msgid "Could not parse move" msgstr "Kunne ikke fortolke træk" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Begge flag er faldet" #: backend.c:17210 msgid "White's flag fell" msgstr "Hvids flag er faldet" #: backend.c:17232 msgid "Black's flag fell" msgstr "Sorts flag er faldet" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "Det er ikke tilladt er stille på uret i auto-flag-tilstand" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Fejl i FEN-stilling i udklipsholder" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "Fejl i polyglyt-åbningsbog" #: book.c:703 msgid "Book Fault" msgstr "Fejl i åbningsbog" #: book.c:839 msgid "Hash keys are different" msgstr "Hashnøgler er forskellige" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "Kunne ikke fortolke træk" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "Turneringsfil:" #: dialogs.c:284 #, fuzzy msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "Synkronisér efter cyklus turnering med flere XBoard'er)" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Turneringsdeltagere:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Vælg skakprogram:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Turneringstype (0 = alle mod alle, 1 = en imod resten):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Antal cyklusser i turneringen (eller svejtserrunder):" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "Standard for antal partier i match (eller parring):" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Pause imellem matchpartier (millisekunder):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Gem turneringspartier i:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "Partifil med åbninger:" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "Partinummer (-1 eller -2 = automatisk forøgelse):" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Fil med startstillinger:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "Stillingsnummer (-1 eller -2 = automatisk forøgelse):" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "Genstart nummering efter dette antal partier (0 = aldrig):" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "Deaktivér skakprogrammets egen åbningsbog som standard" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Betænkningstid" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Skakprogram ... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Generelle indstillinger" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "Udskift skakprogram" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Opgradér skakprogram" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Kopiér turnering" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "Du skal angive en eksisterende turneringsfil til at kopiere" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Lydindstillinger" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "Absolutte analysescorer" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "Næsten altid dronning (Omvejs-underforvandling)" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Animeret trækudførelse" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Animeret flytning" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Automatisk annoncering af tidsoverskridelse" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Automatisk vending af brættet" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Blindskak" # Menu til indsætning af brik på brættet i babyskak mv. #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "Placér brik-menu" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Skjul tænkning fra menneske" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Fremhæv sidste træk" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Fremhæv med pil" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Ét-klikstræk" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Periodisk opdatering (i analysetilstand)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" # ... mens modstanderen er i trækket #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Spekulér på næste træk" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Pop op med afslutningsbeskeder" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Pop op ved trækfejl" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Scorer i trækliste" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Vis koordinater" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Vis målfelter" #: dialogs.c:426 msgid "Sticky Windows" msgstr "Klæbrige vinduer" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Test lovlighed" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "Blink ved træk (0 = ingen blink):" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "Blinkhastighed (høj = hurtig):" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "Animeringshastighed (høj = langsom):" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Zoomfaktor i evalueringsgraf:" #: dialogs.c:452 #, fuzzy msgid "Normal" msgstr "normal" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "skak960" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "Springer" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "Brætstørrelse (-1 = standard for valgt variant):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Antal brætrækker:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Antal brætlinjer:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "Depotstørrelse:" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Advarsel: det andet skakprogram (%s) understøtter ikke dette!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "Ny variant" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Maksimalt antal CPU'er pr. skakprogram:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Polyglot-katalog:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Hashtabel-størrelse (MB):" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "Sti til Nalimov-EGTB:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "EGTB-cachestørrelse (MB):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "Brug GUI's åbningsbog" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Åbningsbogsfilnavn:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Åbningsbogsdybde (træk):" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Åbningsbogvariation (0) vs. styrke (100):" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Skakprogram nr. 1 har egen åbningsbog" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "Skakprogram nr. 2 har egen åbningsbog" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Indstillinger for skakprogrammer" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Find alle matter" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Efterprøv resultatangivelser fra skakprogrammer" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Remis ved utilstrækkeligt matsættende materiale" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Døm trivielle remiser (3-træks forsinkelse)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "N-træksregel:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "N-gange gentagelser:" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Remis efter i alt N træk:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Gevinst/tabs-tærskel:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Negér skakprogram nr. 1's score" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Negér skakprogram nr. 2's score" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "Døm ikke-ICS partier" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Send kommentarer fra skakprogram" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Gem kommentarer til træk" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Observér automatisk" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Bræt øverst ved partistart" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Obsevér i baggrunden når der spilles" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Andet bræt til baggrundsobservede partier" #: dialogs.c:684 msgid "Get Move List" msgstr "Hent trækliste" #: dialogs.c:685 msgid "Quiet Play" msgstr "Stille spil" #: dialogs.c:686 msgid "Seek Graph" msgstr "Søgegraf" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Automatisk opdatering af søgegraf" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 #, fuzzy msgid "Quit after game" msgstr "Venter på andet parti/andre partier" #: dialogs.c:690 msgid "Premove" msgstr "Forhåndstræk" #: dialogs.c:691 msgid "Premove for White" msgstr "Forhåndstræk for hvid" #: dialogs.c:692 msgid "First White Move:" msgstr "Hvids første træk:" #: dialogs.c:693 msgid "Premove for Black" msgstr "Forhåndstræk for sort" #: dialogs.c:694 msgid "First Black Move:" msgstr "Sorts første træk:" #: dialogs.c:696 msgid "Alarm" msgstr "Alarm" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "Alarmtid (millisekunder):" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Farv meddelelser" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Tekstfarver for råb:" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "Tekstfarver for s-råb:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Tekstfarver for kanal nr. 1:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Tekstfarver for andre kanaler:" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Tekstfarver for kommentar:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "Tekstfarver for tale:" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "Tekstfarver for udfordring:" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "Tekstfarver for forespørgsel:" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Tekstfarver for søgning:" #: dialogs.c:709 #, fuzzy msgid "Other Text Colors:" msgstr "Tekstfarver for andre kanaler:" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS-indstillinger" #: dialogs.c:721 msgid "Exact position match" msgstr "Eksakt stilling" #: dialogs.c:721 msgid "Shown position is subset" msgstr "Viste stilling er en delmængde" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Samme materiale med samme bondestruktur" #: dialogs.c:722 msgid "Same material" msgstr "Samme materiale" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "Materiale-interval (øverste halvdel af brættet valgfrit)" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "Materiale-forskel (balanceret valgfrit materiale)" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "Automatisk visning af partidata" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "Automatisk visning af kommentarer" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" "Hastighed af gennemspilning af indlæste partier\n" "(0 = øjeblikkeligt, -1 fra):" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Sekunder pr. træk:" # Ingen grund til ikke at bruge stort begyndelsesbogstav her. #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" "\n" "Indstillinger til brug ved gennemkigning af partier:" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" "\n" "Grænseværdier for stillingsfiltrering i partiliste:" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Stærkeste spillers rating er mindst:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Svageste spillers rating er mindst:" #: dialogs.c:746 msgid "No games before year:" msgstr "Ingen partier før år:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "Mindste antal stillinger i følge ad gangen:" #: dialogs.c:749 msgid "Search mode:" msgstr "Søgemetode:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "Match også omvendte farver" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "Match også spejlvendt stilling" #: dialogs.c:760 msgid "Load Game Options" msgstr "Indstillinger for indlæsning af parti" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Gem partier automatisk" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Gem partier i filen:" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Gem slutstillinger i filen:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "Event-tekst i PGN-fil:" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "Gammel gemmestil (i modsætning til PGN)" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "Brug partinumre i PGN-fil for turnering" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "Gem score/dybde-information i PGN" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "Gem ud af åbningsbog-info i PGN " #: dialogs.c:787 msgid "Save Game Options" msgstr "Indstillinger for gemning af parti" #: dialogs.c:796 msgid "No Sound" msgstr "Ingen lyd" #: dialogs.c:797 msgid "Default Beep" msgstr "Standard bip" #: dialogs.c:798 msgid "Above WAV File" msgstr "WAV-filen ovenfor" #: dialogs.c:799 msgid "Car Horn" msgstr "Bilhorn" #: dialogs.c:800 msgid "Cymbal" msgstr "Bækken" #: dialogs.c:801 msgid "Ding" msgstr "Ding" #: dialogs.c:802 msgid "Gong" msgstr "Gongon" #: dialogs.c:803 msgid "Laser" msgstr "Laser" #: dialogs.c:804 msgid "Penalty" msgstr "Straffe" #: dialogs.c:805 msgid "Phone" msgstr "Telefon" #: dialogs.c:806 msgid "Pop" msgstr "Plop" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "Slag" #: dialogs.c:809 msgid "Wood Thunk" msgstr "Dunk" #: dialogs.c:811 msgid "User File" msgstr "Brugerfil" #: dialogs.c:834 msgid "User WAV File:" msgstr "Bruger WAV-fil:" #: dialogs.c:835 msgid "Sound Program:" msgstr "Lydprogram:" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Afprøv lyd:" #: dialogs.c:837 msgid "Play" msgstr "Afspil" #: dialogs.c:838 msgid "Move:" msgstr "Træk:" #: dialogs.c:839 msgid "Win:" msgstr "Gevinst:" #: dialogs.c:840 msgid "Lose:" msgstr "Tab:" #: dialogs.c:841 msgid "Draw:" msgstr "Remis:" #: dialogs.c:842 msgid "Unfinished:" msgstr "Uafsluttet:" #: dialogs.c:843 msgid "Alarm:" msgstr "Alarm:" #: dialogs.c:844 msgid "Challenge:" msgstr "Udfodring:" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Lydkatalog:" #: dialogs.c:847 msgid "Shout:" msgstr "Råb:" #: dialogs.c:848 msgid "S-Shout:" msgstr "S-råb:" #: dialogs.c:849 msgid "Channel:" msgstr "Kanal:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Kanal 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Tale:" #: dialogs.c:852 msgid "Kibitz:" msgstr "Kommentar:" #: dialogs.c:853 msgid "Request:" msgstr "Forespøgsel:" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "Søgning:" #: dialogs.c:871 msgid "Sound Options" msgstr "Lydindstillinger" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Farve for hvide brikker:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "R" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "G" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "B" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "M" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Farve for sorte brikker:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Farve for lyse felter:" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Farve for mørke felter:" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Farve til fremhævelse:" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Farve til forhåndstræk:" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "Ombyt brikker som i shogi (Farvede knapper gendanner standard)" #: dialogs.c:934 msgid "Mono Mode" msgstr "Monokrom-tilstand" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 #, fuzzy msgid "Line Gap (-1 = default for board size):" msgstr "Mellemrum mellem felter (-1 = standard for brætstørrelsen):" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Brug brætteksturer" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Teksturfil for lyse felter:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Teksturfil for mørke felter:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 #, fuzzy msgid "Directory with Pieces Images:" msgstr "Katalog med bitmap-brikker:" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "Brætindstillinger" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "ICS-tekstmenu" #: dialogs.c:1124 msgid "clear" msgstr "ryd" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "gem ændringer" # ... mens modstanderen er i trækket #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Spekulér på næste træk" #: dialogs.c:1247 msgid "Edit book" msgstr "Redigér åbningsbog" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Partidata" #: dialogs.c:1385 msgid "ICS input box" msgstr "ICS-inputboks" #: dialogs.c:1417 msgid "Type a move" msgstr "Tast et træk" #: dialogs.c:1443 msgid "Engine has no options" msgstr "Skakprogrammet har ingen tilvalg" #: dialogs.c:1445 msgid "Engine Settings" msgstr "Indstillinger for skakprogram" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Vælg skakprogram fra liste:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "eller specificér en herunder:" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Kaldenavn (ikke nødvendigt):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "Brug kaldenavnet som spillerbetegnelse i PGN-filer" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "Skakprogramkatalog:" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Skakprogramkommando:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "(Katalog vil blive udledt fra programstien hvis ikke udfyldt)" #: dialogs.c:1479 msgid "UCI" msgstr "UCI" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "WB-protokol v1 (brug ikke særlige skakprogramfunktioner)" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "Må ikke bruge GUI's åbningsbog" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Tilføj dette skakprogram til listen" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "Brug aktuel variant med dette skakprogram" #: dialogs.c:1533 #, fuzzy msgid "Load first engine" msgstr "Indlæs skakprogram" #: dialogs.c:1539 #, fuzzy msgid "Load second engine" msgstr "Indlæs skakprogrammet som" #: dialogs.c:1562 msgid "shuffle" msgstr "bland brikker" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Startstillingsnummer:" #: dialogs.c:1565 msgid "randomize" msgstr "vælg tilfældigt" #: dialogs.c:1566 msgid "pick fixed" msgstr "vælg bestemt" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Nyt blandet parti" # Stort begyndelsesbogstav med vilje #: dialogs.c:1602 msgid "classical" msgstr "Klassisk" # Stort begyndelsesbogstav med vilje #: dialogs.c:1603 msgid "incremental" msgstr "Tillægstid" # Stort begyndelsesbogstav med vilje #: dialogs.c:1604 msgid "fixed max" msgstr "Maks. pr. træk" #: dialogs.c:1605 msgid "Moves per session:" msgstr "Træk pr. tidsperiode:" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "Tid fra start (minutter):" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "Tillægstid eller maks. pr. træk (sekunder):" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "Tidsforkortelses-faktorer:" #: dialogs.c:1609 msgid "Engine #1" msgstr "Skakprogram nr. 1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Skakprogram nr. 2 / menneske" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "Ubrugt" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Fejl ved skrivning til skakprogram" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Annullér" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Konge" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "" #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Springer" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Løber" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Tårn" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Dronning" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Bondeforvandling" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Ny variant" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "ICS-indstillinger" #: dialogs.c:2141 msgid "factory" msgstr "standard" #: dialogs.c:2142 msgid "up" msgstr "op" #: dialogs.c:2143 msgid "down" msgstr "ned" #: dialogs.c:2162 msgid "No tag selected" msgstr "Ingen overskrift valgt" #: dialogs.c:2193 msgid "Game-list options" msgstr "Indstillinger for partiliste" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Fejl" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Fatal fejl" #: dialogs.c:2306 msgid "Exiting" msgstr "Afslutter" #: dialogs.c:2317 msgid "Information" msgstr "Meddelelse" #: dialogs.c:2324 msgid "Note" msgstr "Notits" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Hvid" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Bonde" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Tomt felt" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Ryd bræt" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Sort" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Fil" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Redigér" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Vis" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Tilstand" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Handlinger" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Skakprogram" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Indstillinger" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Hjælp" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 #, fuzzy msgid "Directories:" msgstr "Lydkatalog:" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "Fil" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "Filter:" #: dialogs.c:2781 #, fuzzy msgid "New directory" msgstr "Skakprogramkatalog:" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "Filter:" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "Kommentarer" #: dialogs.c:2883 #, fuzzy msgid " next page" msgstr "næste side" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Output fra skakprogram" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "%s (%d reversibelt træk)" msgstr[1] "%s (%d reversible træk)" # NPS = Nodes pr. second # SPS = Stillinger pr. sekund (i motoranalyse) #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "SPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Læser partifil (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: kan ikke cd til CHESSDIR: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Åbning af filen \"%s\" mislykkedes\n" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" "Genoversæt med større BOARD_RANKS eller BOARD_FILES for at understøtte denne " "størrelse" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: forkert boardSize-syntaks %s\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: ikke genkendt boardSize-navn %s\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "%s: for få farver tilgængelige; prøver monokrom tilstand\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "Kan ikke lave skrifttypegruppe for %s.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: Ingen skrifttyper matcher mønstret %s\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "Kan ikke åbne midlertidig fil" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Åbning af fil mislykkedes" #: menus.c:134 msgid "Load game file name?" msgstr "Filnavn for indlæsning af parti?" #: menus.c:179 msgid "Load position file name?" msgstr "Filnavn for indlæsning af stilling?" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "Filnavn for gemning af parti?" #: menus.c:194 msgid "Save position file name?" msgstr "Filnavn for gemning af stilling?" #: menus.c:362 msgid " (with Zippy code)" msgstr " (med Zippy-kode)" #: menus.c:367 #, fuzzy, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Ændringer Copyright 1992-2012 Free Software Foundation\n" "Ændringer Copyright 2005 Alessandro Scotti\n" "\n" "%s er frit programmel og er uden nogen form for garanti; se filen COPYING " "for mere information. \n" "Besøg XBoard på nettet på http://www.gnu.org/software/xboard/\n" "Se de nyeste funktioner på http://www.gnu.org/software/xboard/whats_new." "html\n" "\n" "Rapportér fejl via e-mail til \n" "Rapportér fejl i den danske oversættelse til \n" "\n" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Om Xboard" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "Nyt blandet parti" #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Nyt blandet parti ..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Ny variant" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "Indlæs parti ..." #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "find stilling" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "Næste stilling Shift+PgDn" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "Gemmer stilling" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "Gem parti ..." #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "Gemmer stilling" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Gem parti ..." #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "Gem partier i filen:" #: menus.c:615 msgid "Mail Move" msgstr "Send træk med e-post" #: menus.c:616 msgid "Reload CMail Message" msgstr "Genindlæs CMail-besked" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "Kopiér partiliste" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "Kopiér stilling Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "Kopiér partiliste" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "Indsæt parti Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "Indsæt stilling Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "Redigér kommentar" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "find stilling" # Partibeskrivelse i PGN-fil #: menus.c:632 msgid "Edit Tags" msgstr "Redigér partidata" #: menus.c:633 msgid "Edit Comment" msgstr "Redigér kommentar" #: menus.c:634 msgid "Edit Book" msgstr "Redigér åbningsbog" #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "Kommentér" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "Afkort partiet End" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "Sort i trækket" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "Frem til enden Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "Automatisk vending af brættet" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "Trækliste" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "Evalueringsgraf" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "Partiliste ..." #: menus.c:657 msgid "Comments" msgstr "Kommentarer" #: menus.c:658 msgid "ICS Input Box" msgstr "ICS-inputboks" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Bræt..." #: menus.c:662 msgid "Game List Tags..." msgstr "Partidata-overskrifter ..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "Skakprogram har hvid Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "Skakprogrammatch" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "To skakprogrammer Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "Analysetilstand Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "Analysér parti Ctrl+G" #: menus.c:674 msgid "Training" msgstr "Træning" #: menus.c:675 msgid "ICS Client" msgstr "ICS-klient" #: menus.c:677 msgid "Machine Match" msgstr "Skakprogrammatch" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "Annoncér tidsoverskridelse F5" #: menus.c:688 #, fuzzy msgid "Draw" msgstr "Remis:" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "Stop observation F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "Stop undersøgelse F11" #: menus.c:695 msgid "Upload to Examine" msgstr "Overfør til undersøgelse" #: menus.c:697 msgid "Adjudicate to White" msgstr "Døm hvid gevinst" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Døm sort gevinst" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Døm remis" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Indstillinger for skakprogram nr. 1 ..." #: menus.c:706 #, fuzzy msgid "Load New 1st Engine..." msgstr "Indlæs nyt skakprogram ..." #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Indlæs nyt skakprogram ..." #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Indstillinger for skakprogram nr. 1 ..." #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Indstillinger for skakprogram nr. 2 ..." #: menus.c:712 msgid "Hint" msgstr "Tip" #: menus.c:713 msgid "Book" msgstr "Åbningsbog" #: menus.c:715 #, fuzzy msgid "Move Now" msgstr "Lyd ved træk" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "Annullér træk Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Generelle ..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Betænkningstid" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Skakprogram ... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Afgørelser ... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Indlæs parti ..." #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Gem parti ..." #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Partiliste ..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Lyde ..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "Blink ved træk" #: menus.c:743 msgid "Highlight Dragging" msgstr "Fremhæv flytning" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Fremhæv med pil" #: menus.c:747 msgid "Move Sound" msgstr "Lyd ved træk" #: menus.c:749 msgid "Periodic Updates" msgstr "Periodisk opdatering" #: menus.c:751 msgid "Popup Exit Message" msgstr "Pop op med afslutningsbeskeder" #: menus.c:753 msgid "Show Coords" msgstr "Vis koordinater" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "Skjul tænkning fra menneske" #: menus.c:758 msgid "Save Settings Now" msgstr "Gem indstillinger nu" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Gem indstillinger ved afslutning" #: menus.c:764 msgid "Info XBoard" msgstr "Info XBoard" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "Man XBoard F1" #: menus.c:767 msgid "XBoard Home Page" msgstr "XBoards hjemmeside (engelsk)" #: menus.c:768 msgid "On-line User Guide" msgstr "Online brugervejledning (engelsk)" #: menus.c:769 msgid "Development News" msgstr "Nyheder i denne version (engelsk)" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "E-mail fejlrapport" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "Skakprogram nr. 1" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "Forhåndstræk" #: nengineoutput.c:155 msgid "Engine output" msgstr "Output fra skakprogram" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Evalueringsgraf" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "Evalueringsgraf" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 msgid "find position" msgstr "find stilling" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "grænseværdier" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "Partidata" #: ngamelist.c:91 msgid "next" msgstr "næste" #: ngamelist.c:92 msgid "close" msgstr "luk" #: ngamelist.c:116 msgid "No game selected" msgstr "Der er ikke valgt et parti" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Kan ikke gå længere fremad" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Skanner gennem partier (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "forrige side" #: ngamelist.c:214 msgid "next page" msgstr "næste side" #: ngamelist.c:217 msgid "no games matched your request" msgstr "ingen partier svarer til din forespørgsel" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s - %d/%d partier (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "Der er ingen partiliste" #: nhistory.c:109 msgid "Move list" msgstr "Trækliste" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: ikke genkendt farve %s\n" #: usystem.c:230 #, fuzzy, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: kan ikke fortolke forgrundsfarve i \"%s\"\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "%s: kan ikke fortolke farvenavne; deaktiverer farvning\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "FEJL: Ukendt bruger %s (i stien %s)\n" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "Er ikke konfigureret med sokkelunderstøttelse" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "intern rcmd er ikke implementeret til Unix" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "hvid pixel = 0x%lx, sort pixel = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "gennemse" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "o.k." #, fuzzy #~ msgid " (for concurrent playing of a single" #~ msgstr "Synkronisér efter runde (for samtidig afvikling af en" #~ msgid "Match Options" #~ msgstr "Matchindstillinger" #~ msgid "ICS ..." #~ msgstr "ICS ..." #~ msgid "Match ..." #~ msgstr "Match ..." #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: Har ikke adgang til XPM-katalog %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Tilgængelige \"%s\"-størrelser:\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "Fejl: Ingen \"%s\"-filer!\n" #~ msgid "" #~ "Warning: No DIR structure found on this system --\n" #~ " Unable to autosize for XPM/XIM pieces.\n" #~ " Please report this error to %s.\n" #~ " Include system type & operating system in message.\n" #~ msgstr "" #~ "Advarsel: Ingen DIR-struktur fundet på dette system --\n" #~ " Kan ikke vælge størrelse for XPM/XIM-brikker.\n" #~ " Rappotér venligst denne fejl til %s.\n" #~ " Inkludér systemtype og styresystem i beskeden.\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Fejl %d ved indlæsning af ikonbillede\n" #~ msgid "cancel" #~ msgstr "annullér" #~ msgid "recognized '%s' (%d) as variant %s\n" #~ msgstr "genkendte \"%s\" (%d) som variant %s\n" #~ msgid "Ratings from header: W %d, B %d\n" #~ msgstr "Ratinger fra teksthovede: H %d, S %d\n" #~ msgid "Parsing board: %s\n" #~ msgstr "Fortolker bræt: %s\n" #~ msgid "Found unexpected active ICS engine analyze \n" #~ msgstr "Fandt uventet aktivt skakprogram til ICS-analyse\n" #~ msgid "ICS engine analyze starting... \n" #~ msgstr "Starter skakprogram til ICS-analyse ...\n" #~ msgid "" #~ "resolved %s at pixel size %d\n" #~ " to %s\n" #~ msgstr "" #~ "løste %s ved pixelstørrelse %d\n" #~ " til %s\n" #~ msgid "New Game Ctrl+N" #~ msgstr "Nyt parti Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "Ny variant ... Alt-shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "Indlæs parti Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Indlæs stilling Ctrl+Shift+O" #~ msgid "Prev Position Shift+PgUp" #~ msgstr "Forrige stilling Shift+PgUp" #~ msgid "Save Game Ctrl+S" #~ msgstr "Gem parti Ctrl+S" #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "Gem stilling Ctrl+Shift+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Afslut Ctrl+Q" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Kopiér parti Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Redigér parti Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Redigér stilling Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "Annullér variantlinje Home" #~ msgid "Backward Alt+Left" #~ msgstr "Tilbage Alt+Venstre" #~ msgid "Forward Alt+Right" #~ msgstr "Fremad Alt+Højre" #~ msgid "Back to Start Alt+Home" #~ msgstr "Tilbage til start Alt+Home" #~ msgid "Flip View F2" #~ msgstr "Vend brættet F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "Output fra skakprogram Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Trækliste Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "Evalueringsgraf Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Partiliste Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Skakprogram har sort Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Redigér parti Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Redigér stilling Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "Pause Pause" #~ msgid "Accept F3" #~ msgstr "Godkend F3" #~ msgid "Decline F4" #~ msgstr "Afvis F4" #~ msgid "Rematch F12" #~ msgstr "Ny match F12" #~ msgid "Draw F6" #~ msgstr "Remis F6" #~ msgid "Adjourn F7" #~ msgstr "Udsæt partiet F7" #~ msgid "Abort F8" #~ msgstr "Annullér partiet F8" #~ msgid "Resign F9" #~ msgstr "Opgiv F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Træk nu Ctrl+M" #~ msgid "Time Control ... Alt+Shift+T" #~ msgstr "Betænkningstid ... Alt+Shift+T" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Altid dronning Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "Animeret flytning Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Automatisk tidsoverskridelse Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Spekulér på næste træk Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Skjul tænkning Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Test lovlighed Ctrl+Shift+L" #~ msgid "" #~ "WARNING: variants with un-orthodox\n" #~ "pieces only have built-in bitmaps\n" #~ "for -boardSize middling, bulky and\n" #~ "petite, and substitute king or amazon\n" #~ "for missing bitmaps. (See manual.)" #~ msgstr "" #~ "ADVARSEL: varianter med uortodokse\n" #~ "brikker har kun indbyggede bitmaps\n" #~ "for -boardSize middling, bulky og\n" #~ "petite, og bruger konge eller amazone\n" #~ "for manglende bitmaps. (Se manualen.)" #~ msgid "Directory with Pixmap Pieces:" #~ msgstr "Katalog med pixmap-brikker:" #~ msgid "Error expanding path name \"%s\"\n" #~ msgstr "Fejl ved udfoldning af stinavn \"%s\"\n" #~ msgid "" #~ "XBoard square size (hint): %d\n" #~ "%s fulldir:%s:\n" #~ msgstr "" #~ "XBoard feltstørrelse (tip): %d\n" #~ "%s-fuldt katalog: %s:\n" #~ msgid "Closest %s size: %d\n" #~ msgstr "Nærmeste %s størrelse: %d\n" #~ msgid "%s: error loading XIM!\n" #~ msgstr "%s: fejl ved indlæsning af XIM!\n" #~ msgid "XIM pieces cannot be used in monochrome mode" #~ msgstr "XIM-brikker kan ikke bruges i monokrom-tilstand" #~ msgid "" #~ "\n" #~ "Loading XIMs...\n" #~ msgstr "" #~ "\n" #~ "Indlæser XIM'er ...\n" #~ msgid "(File:%s:) " #~ msgstr "(Fil:%s:) " #~ msgid "light square " #~ msgstr "lyst felt " #~ msgid "dark square " #~ msgstr "mørkt felt " #~ msgid "Done.\n" #~ msgstr "Udført.\n" #~ msgid "XPM pieces cannot be used in monochrome mode" #~ msgstr "XPM-brikker kan ikke bruges i monokrom-tilstand" #~ msgid "No builtin XPM pieces of size %d\n" #~ msgstr "Der er ingen indbyggede XPM-brikker af størrelse %d\n" #~ msgid "Error %d loading XPM image \"%s\"\n" #~ msgstr "Error %d ved indlæsning af XPM-billede \"%s\"\n" #~ msgid "" #~ "\n" #~ "Loading XPMs...\n" #~ msgstr "" #~ "\n" #~ "Indlæser XPM'er ...\n" #~ msgid "(Replace by File:%s:) " #~ msgstr "(Erstatter med fil: %s) " #~ msgid "Error %d loading XPM file \"%s\"\n" #~ msgstr "Error %d ved indlæsning af XPM-fil \"%s\"\n" #~ msgid "Can't open bitmap file %s" #~ msgstr "Kan ikke åbne bitmapfil %s" #~ msgid "Invalid bitmap in file %s" #~ msgstr "Ukorrekt bitmap i fil %s" #~ msgid "Ran out of memory reading bitmap file %s" #~ msgstr "Ikke nok hukommelse til at læse bitmapfil %s" #~ msgid "Unknown XReadBitmapFile error %d on file %s" #~ msgstr "Ukendt XReadBitmapFile-fejl %d på fil %s" #~ msgid "%s: %s...using built-in\n" #~ msgstr "%s: %s ... bruger indbygget\n" #~ msgid "%s: Bitmap %s is %dx%d, not %dx%d...using built-in\n" #~ msgstr "%s: Bitmap %s er %dx%d, ikke %dx%d ... bruger indbygget\n" #~ msgid "Browse" #~ msgstr "Gennemse" #~ msgid "Filter on extensions:" #~ msgstr "Filter for filendelser:" #~ msgid "Pathname:" #~ msgstr "Stinavn:" #~ msgid "XsraSelFile: can't get current directory" #~ msgstr "XsraSelFile: Kan ikke hente det aktuelle katalog" #~ msgid "%s: titleWidget geometry error %d %d %d %d %d\n" #~ msgstr "%s: titleWidget-geometrifejl %d %d %d %d %d\n" #~ msgid "%s: messageWidget geometry error %d %d %d %d %d\n" #~ msgstr "%s: messageWidget-geometrifejl %d %d %d %d %d\n" #~ msgid "Drop" #~ msgstr "Placér" #~ msgid "could not open: " #~ msgstr "kunne ikke åbne: " #~ msgid "Can't open file" #~ msgstr "Kan ikke åbne fil" #~ msgid "Promotion" #~ msgstr "Bondeforvandling" #~ msgid "Promote to what?" #~ msgstr "Hvad skal bonden forvandles til?" #~ msgid "ok" #~ msgstr "o.k." #~ msgid "AskQuestionProc needed 4 parameters, got %d\n" #~ msgstr "AskQuestionProc skal have 4 parametre, men fik %d\n" #~ msgid "enter" #~ msgstr "udfør" #~ msgid "This feature is experimental" #~ msgstr "Denne funktion er eksperimental" #~ msgid "filtertext" #~ msgstr "filtertekst" #~ msgid "apply" #~ msgstr "anvend" #~ msgid "load" #~ msgstr "indlæs" #~ msgid "prev" #~ msgstr "forrige" #~ msgid "First Engine" #~ msgstr "Første skakprogram" #~ msgid "Second Engine" #~ msgstr "Andet skakprogram" #~ msgid "AnimateMove: piece %d hops from %d,%d to %d,%d \n" #~ msgstr "AnimateMove: brik %d hopper fra %d,%d til %d,%d\n" #~ msgid "AnimateMove: piece %d slides from %d,%d to %d,%d \n" #~ msgstr "AnimateMove: brik %d glider fra %d,%d til %d,%d\n" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "Fremhæv flytning (vis trækmål)" xboard-4.8.0/po/zh_HK.po0000644000175000001440000015665112422467103011717 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110411\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: zh_HK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "通訊協定版本 %d 不被支持" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "非法的\"timeControl\"(時間控制)選項 %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "非法的\"searchTime\"(搜尋時間)選項 %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "變體 %s 只在ICS模式下支持" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "未知的變體名 %s" #: backend.c:1452 msgid "Starting chess program" msgstr "啟動國際象棋程式" #: backend.c:1475 msgid "Bad game file" msgstr "棋局檔案錯誤" #: backend.c:1482 msgid "Bad position file" msgstr "盤面檔案錯誤" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "沒有象棋程式時無法進行比賽" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "無法打開通訊連接埠 %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "無法連接主機 %s 連接埠 %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "未知的\"initialMode\"(初始模式)選項 %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "\"AnalyzeFile\"(分析檔案)模式必須指定一個棋局檔案" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "\"Analysis\"(分析)模式必須啟動國際象棋引擎" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "\"Analysis\"(分析)模式無法在ICS模式下工作" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "\"MachineWhite\"(電腦執紅)模式必須啟動國際象棋引擎" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "\"MachineWhite\"(電腦執紅)模式無法在ICS模式下運行" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "\"MachineBlack\"(電腦執黑)模式必須啟動國際象棋引擎" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "\"MachineBlack\"(電腦執黑)模式無法在ICS模式下運行" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "\"TwoMachines\"(分析)模式必須啟動國際象棋引擎" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "\"TwoMachines\"(電腦對弈)模式無法在ICS模式下運行" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "\"Training\"(訓練)模式必須指定一個棋局檔案" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "發送訊息給ICS時出錯" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "讀取鍵盤時出錯" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "讀取鍵盤時遇到檔案尾" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "發送訊息給顯示器時出錯" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "讀取著法時出錯,出現兩個開頭" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "讀取著法時出錯,巢狀錯誤" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "連接被ICS關閉" #: backend.c:4286 msgid "Error reading from ICS" msgstr "讀取ICS訊息時出錯" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "棋局太長,需要增加\"MAX_MOVES\"並重新編譯" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "讀取著法時出錯,超出棋盤" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "無法解析從ICS讀到的著法\"%s\"" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say 內部錯誤,非法的\"moveType\"(著法類型) %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "你在執黑" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "你在執紅" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "輪到紅方走棋" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "輪到黑方走棋" #: backend.c:6761 msgid "Displayed position is not current" msgstr "顯示的盤面不是當前盤面" #: backend.c:7007 msgid "Illegal move" msgstr "著法錯誤" #: backend.c:7084 msgid "End of game" msgstr "棋局結束" #: backend.c:7087 msgid "Incorrect move" msgstr "著法錯誤" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "從%s機器讀到不合法著法\"%s\"" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s 不支持分析功能" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "不合法著法\"%s\" (%s國際象棋程式拒絕接受該著法)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "無法啟動%s國際象棋程式 %s(在主機 %s 上),%s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "提示 %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "電腦同意和棋" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "ICS輸出不明確的著法\"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "ICS輸出不明確的著法\"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "著法斷開" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "變體 %s 不被 %s 所支持" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "無法啟動'%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "等待第一個國際象棋程式" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "等待第二個國際象棋程式" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 #, fuzzy msgid "Bad tournament file" msgstr "棋局檔案錯誤" #: backend.c:11052 #, fuzzy msgid "Waiting for other game(s)" msgstr "等待第一個國際象棋程式" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "不合法著法 %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "不明確的著法 %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "無法打開\"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "無法建立棋局列表" #: backend.c:12190 msgid "No more games in this message" msgstr "這條訊息不包含更多的棋局" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "尚未有棋局載入" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "無法再後退了" #: backend.c:12678 msgid "Game number out of range" msgstr "棋局數量超出範圍" #: backend.c:12689 msgid "Can't seek on game file" msgstr "無法搜尋棋局檔案" #: backend.c:12747 msgid "Game not found in file" msgstr "檔案中沒有找到棋局" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "檔案中的FEN盤面錯誤" #: backend.c:13030 msgid "No moves in game" msgstr "棋局中沒有著法" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "尚未有盤面載入" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "無法搜尋盤面檔案" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "檔案中沒有找到盤面" #: backend.c:13245 msgid "Black to play" msgstr "輪到黑方走棋" #: backend.c:13248 msgid "White to play" msgstr "輪到紅方走棋" #: backend.c:13335 backend.c:13705 #, fuzzy msgid "Waiting for access to save file" msgstr "等待第二個國際象棋程式" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 #, fuzzy msgid "Saving position" msgstr "盤面檔案錯誤" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "你尚未走棋" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "不存在未完成棋局" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "呼叫cmail失敗" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "等待對手回應\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "本棋局仍需走棋\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "兩棋局皆仍需走棋\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "所有 %d 棋局皆仍需走棋\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "棋局 %s 仍需走棋\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "不存在未完成棋局\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "準備送信就緒\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "棋局 %s 仍需走棋\n" #: backend.c:14252 msgid "Edit comment" msgstr "編輯註解" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "編輯註解 %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "沒有輪到紅方走棋" #: backend.c:14501 msgid "It is not Black's turn" msgstr "沒有輪到黑方走棋" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "等待對手走棋" #: backend.c:14774 msgid "Training mode off" msgstr "訓練模式已關閉" #: backend.c:14782 msgid "Training mode on" msgstr "訓練模式已打開" #: backend.c:14785 msgid "Already at end of game" msgstr "棋局已經結束" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "注意:你正在進行棋局" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "注意:你正在觀棋棋局" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "注意:你正在研究棋局" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "格子已有棋子" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "該著法沒有待定的提議" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "對手沒有超時" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "必須走完棋才能提和" #: backend.c:15781 msgid "You are not examining a game" msgstr "沒有分析棋局" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "暫停時不能復原棋局" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "輪到你走棋" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "等待對手走棋" #: backend.c:15909 msgid "No hint available" msgstr "沒有可用的提示" #: backend.c:15924 backend.c:15955 ngamelist.c:364 #, fuzzy msgid "Game list not loaded or empty" msgstr "尚未有棋局載入" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "發送訊息到%s國際象棋程式時出錯" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "錯誤:%s國際象棋程式(%s)異常終止" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "從%s國際象棋程式(%s)接收訊息時出錯" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "顯示的著法不是當前著法" #: backend.c:17083 msgid "Could not parse move" msgstr "無法解析著法" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "雙方都超時了" #: backend.c:17210 msgid "White's flag fell" msgstr "紅方超時" #: backend.c:17232 msgid "Black's flag fell" msgstr "黑方超時" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "剪貼簿的FEN盤面錯誤" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "無法解析著法" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "封盤(J) F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 #, fuzzy msgid "Default Number of Games in Match (or Pairing):" msgstr "預設比賽對局數" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 #, fuzzy msgid "Save Tourney Games on:" msgstr "儲存棋局選項" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "通用引擎設定(E)... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "一般選項" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "聲音" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "動畫拖曳(D)" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "動畫走棋(A)" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "自動超時判負(F) Ctrl+Shift+F" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "自動翻轉棋盤(V)" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "盲棋(B)" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "與人對弈時隱藏思考細節" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "標記上一著法(M)" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "用箭頭突出移動" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "單擊移動(M)" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "定期更新(分析模式)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "同步思考(N)" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "離開時提示(P)" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "提示錯誤著法(E)" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "取得著法列表(G)" #: dialogs.c:424 msgid "Show Coordinates" msgstr "顯示坐標(C)" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "檢查著法合理性(L) Cl+Sh+L" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 #, fuzzy msgid "Zoom factor in Evaluation Graph:" msgstr "審局圖" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "馬" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "警告: 第二個引擎(%s) 不支持此!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "變種" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "最大CPU數" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "雜湊表大小(MB)" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "EGTB 路徑" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "EGTB 大小(MB)" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "庫著法深度" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "庫變例" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "引擎1有自用庫" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "通用引擎設定" #: dialogs.c:648 msgid "Detect all Mates" msgstr "檢測將殺(M)" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "驗證引擎聲明(V)" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "子力不足時判和(I)" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "簡易和棋判決(T)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "幾著後判和" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "輸/贏判決門檻" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "引擎 #1 是絕對分數" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "引擎 #2 是絕對分數" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "裁決紅贏 (W)" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "自動\"kibitz\"(A)" #: dialogs.c:678 msgid "Auto-Comment" msgstr "自動註解(A)" #: dialogs.c:679 msgid "Auto-Observe" msgstr "自動觀棋(O)" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "自動改變棋盤大小(R)" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "背景觀察(v)" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "雙棋盤(D)" #: dialogs.c:684 msgid "Get Move List" msgstr "取得著法列表(G)" #: dialogs.c:685 msgid "Quiet Play" msgstr "落子無聲(Q)" #: dialogs.c:686 msgid "Seek Graph" msgstr "可選對手圖表(k)" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "自動刷新圖表(R)" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 #, fuzzy msgid "Quit after game" msgstr "等待第一個國際象棋程式" #: dialogs.c:690 msgid "Premove" msgstr "預先走棋(P)" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "紅方先走(W)" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "黑方先走(B)" #: dialogs.c:696 msgid "Alarm" msgstr "提示" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS設定" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 #, fuzzy msgid "No games before year:" msgstr "尚未有棋局載入" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "載入棋局選項" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "儲存棋局選項" #: dialogs.c:796 msgid "No Sound" msgstr "無聲" #: dialogs.c:797 msgid "Default Beep" msgstr "預設聲音" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "播放" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "聲音" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "黑子" #: dialogs.c:908 msgid "Light Square Color:" msgstr "白格" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "黑格" #: dialogs.c:920 msgid "Highlight Color:" msgstr "格子標記" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "預先走棋標記" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "黑白" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "棋盤選項" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "同步思考(N)" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "編輯(E)" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "編輯標籤(T)" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 #, fuzzy msgid "Engine has no options" msgstr "引擎1有自用庫" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "啟動位置號碼(S)" #: dialogs.c:1565 #, fuzzy msgid "randomize" msgstr "隨機" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "洗牌遊戲(u)..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "時間倍數" #: dialogs.c:1609 #, fuzzy msgid "Engine #1" msgstr "引擎輸出" #: dialogs.c:1610 #, fuzzy msgid "Engine #2 / Human" msgstr "引擎1有自用庫" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "發送訊息給國際象棋程式時出錯" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "取消(C)" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "王" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "一般選項(G)..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "馬" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "象" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "車" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "國師" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "宰相" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "后" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "升變" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "變種" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "ICS設定" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "向上" #: dialogs.c:2143 msgid "down" msgstr "向下" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "載入棋局選項" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "錯誤" #: dialogs.c:2306 msgid "Fatal Error" msgstr "嚴重錯誤" #: dialogs.c:2306 msgid "Exiting" msgstr "離開" #: dialogs.c:2317 msgid "Information" msgstr "資訊" #: dialogs.c:2324 msgid "Note" msgstr "註解" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "紅方" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "兵" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "象" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "炮" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "降級" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "清空格子" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "清空棋盤" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "黑方" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "檔案(F)" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "編輯(E)" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "模式(M)" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "行為(A)" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "選項(O)" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "說明(H)" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "檔案(F)" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "過濾器" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "過濾器" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "編輯註解(C) *.*" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "引擎輸出" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, fuzzy, c-format msgid "Reading game file (%d)" msgstr "棋局檔案錯誤" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 #, fuzzy msgid "Failed to open file" msgstr "呼叫cmail失敗" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "關於XBoard(A)" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "洗牌遊戲(u)..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "洗牌遊戲(u)..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "變種" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "載入棋局選項(L)... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "盤面檔案錯誤" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "盤面檔案錯誤" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "盤面檔案錯誤" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "盤面檔案錯誤" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "複製遊戲列表到剪貼簿" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "複製局面到剪貼簿(Y) Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "複製遊戲列表到剪貼簿" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "貼上棋局自剪貼簿(P) Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "從剪貼簿貼上局面(T) Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "編輯註解" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "盤面檔案錯誤" #: menus.c:632 msgid "Edit Tags" msgstr "編輯標籤(T)" #: menus.c:633 msgid "Edit Comment" msgstr "編輯註解(C)..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "開局庫(B)..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "註解(A)" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "截斷後面的著法(T)" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "輪到黑方走棋" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "最後局面(E) Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "自動翻轉棋盤(V)" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "取得著法列表(G)" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "審局圖" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "遊戲列表..." #: menus.c:657 msgid "Comments" msgstr "編輯註解(C) *.*" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "棋盤選項(B)..." #: menus.c:662 msgid "Game List Tags..." msgstr "遊戲列表..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "電腦執紅(W) Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "電腦比賽(M)" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "電腦對弈(M) Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "分析模式(A) Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "分析檔案(F) Ctrl+F" #: menus.c:674 msgid "Training" msgstr "訓練(N)" #: menus.c:675 msgid "ICS Client" msgstr "ICS客戶端" #: menus.c:677 msgid "Machine Match" msgstr "電腦比賽(M)" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "超時判負(F) F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "停止觀棋(O) F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "停止研究(X) F11" #: menus.c:695 msgid "Upload to Examine" msgstr "上傳檢查(U)" #: menus.c:697 msgid "Adjudicate to White" msgstr "裁決紅贏 (W)" #: menus.c:698 msgid "Adjudicate to Black" msgstr "裁決黑贏 (B)" #: menus.c:699 msgid "Adjudicate Draw" msgstr "提請仲裁(D)" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "引擎 #1 設定" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "通用引擎設定(E)... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "引擎 #1 設定" #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "引擎 #2 設定" #: menus.c:712 msgid "Hint" msgstr "提示(H)..." #: menus.c:713 msgid "Book" msgstr "開局庫(B)..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "悔棋(R) Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "一般選項(G)..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "時間設定(T)... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "通用引擎設定(E)... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "判決(j)... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "載入棋局選項(L)... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "儲存棋局選項(S)... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "遊戲列表..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "聲音選項(D)..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "拖曳醒目提示(H)" #: menus.c:746 msgid "Highlight With Arrow" msgstr "用箭頭突出移動" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "定期更新(U)" #: menus.c:751 msgid "Popup Exit Message" msgstr "離開時提示(P)" #: menus.c:753 msgid "Show Coords" msgstr "顯示坐標(C)" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "與人對弈時隱藏思考細節" #: menus.c:758 msgid "Save Settings Now" msgstr "立即儲存設定(N)" #: menus.c:759 msgid "Save Settings on Exit" msgstr "離開時儲存設定(X)" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "關於XBoard(A)" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "引擎輸出" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "著法" #: nengineoutput.c:155 msgid "Engine output" msgstr "引擎輸出" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "審局圖" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "審局圖" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "盤面檔案錯誤" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "編輯標籤(T)" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "沒有選中棋局" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "無法再前進了" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, fuzzy, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "比賽 %s vs. %s: 最終比分 %d-%d-%d" #: ngamelist.c:283 msgid "There is no game list" msgstr "沒有棋局列表" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "確定" #~ msgid "ICS ..." #~ msgstr "ICS選項..." #~ msgid "cancel" #~ msgstr "取消(C)" #~ msgid "New Game Ctrl+N" #~ msgstr "開新棋局(N) Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "新變種(V)... Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "載入棋局(L)... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "載入局面(O)... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "儲存棋局(S)... Ctrl+S" #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "儲存局面(A)... Ctrl+Shift+S" #~ msgid "Quit Ctr+Q" #~ msgstr "離開(Q)" #~ msgid "Copy Game Ctrl+C" #~ msgstr "複製棋局到剪貼簿(C) Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "編輯棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "編輯局面(d) Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "恢復(V)" #~ msgid "Backward Alt+Left" #~ msgstr "下一著(B) Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "上一著(F) Alt+Right" #~ msgid "Back to Start Alt+Home" #~ msgstr "起始局面(S) Alt+Home" #~ msgid "Flip View F2" #~ msgstr "翻轉棋盤(V) F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "顯示引擎輸出 Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "顯示歷史著法 Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "顯示評價圖 Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "顯示棋局列表(L) Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "電腦執黑(B) Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "編輯棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "編輯局面(d) Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "暫停(P) Pause" #~ msgid "Accept F3" #~ msgstr "接受(A) F3" #~ msgid "Decline F4" #~ msgstr "拒絕(C) F4" #~ msgid "Rematch F12" #~ msgstr "重賽(M) F12" #~ msgid "Draw F6" #~ msgstr "提和(D) F6" #~ msgid "Adjourn F7" #~ msgstr "封盤(J) F7" #~ msgid "Abort F8" #~ msgstr "中止(B) F8" #~ msgid "Resign F9" #~ msgstr "認輸(R) F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "立即走棋(M) Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "總是升變為皇后(Q) Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "動畫走棋(A) Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "自動超時判負(F) Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "同步思考(N) Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "隱藏引擎思考 Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "檢查著法合理性(L) Cl+Sh+L" #~ msgid "Drop" #~ msgstr "取消" #, fuzzy #~ msgid "could not open: " #~ msgstr "無法解析著法" #~ msgid "Promotion" #~ msgstr "升變" #~ msgid "ok" #~ msgstr "確定" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "拖曳醒目提示(H)" #~ msgid "White " #~ msgstr "紅方 " #~ msgid "Black " #~ msgstr "黑方 " #~ msgid "Close" #~ msgstr "關閉(C)" #~ msgid "sec/move" #~ msgstr "每走一步加" xboard-4.8.0/po/POTFILES.in0000755000175000001440000000037012420374633012121 00000000000000args.h backend.c book.c dialogs.c draw.c engineoutput.c gamelist.c gtk/xboard.c gtk/xengineoutput.c gtk/xoptions.c menus.c nengineoutput.c nevalgraph.c ngamelist.c nhistory.c usystem.c xaw/xboard.c xaw/xengineoutput.c xaw/xhistory.c xaw/xoptions.c xboard-4.8.0/po/vi.po0000644000175000001440000014472612422467103011332 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # , 2010 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110507\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "" #: backend.c:1452 msgid "Starting chess program" msgstr "" #: backend.c:1475 msgid "Bad game file" msgstr "" #: backend.c:1482 msgid "Bad position file" msgstr "" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "" #: backend.c:4286 msgid "Error reading from ICS" msgstr "" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "" #: backend.c:6761 msgid "Displayed position is not current" msgstr "" #: backend.c:7007 msgid "Illegal move" msgstr "" #: backend.c:7084 msgid "End of game" msgstr "" #: backend.c:7087 msgid "Incorrect move" msgstr "" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "" #: backend.c:9809 msgid "Gap in move list" msgstr "" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 msgid "Bad tournament file" msgstr "" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "" #: backend.c:12190 msgid "No more games in this message" msgstr "" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "" #: backend.c:12678 msgid "Game number out of range" msgstr "" #: backend.c:12689 msgid "Can't seek on game file" msgstr "" #: backend.c:12747 msgid "Game not found in file" msgstr "" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "" #: backend.c:13030 msgid "No moves in game" msgstr "" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "" #: backend.c:13245 msgid "Black to play" msgstr "" #: backend.c:13248 msgid "White to play" msgstr "" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "" #: backend.c:14252 msgid "Edit comment" msgstr "" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "" #: backend.c:14501 msgid "It is not Black's turn" msgstr "" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" #: backend.c:14774 msgid "Training mode off" msgstr "" #: backend.c:14782 msgid "Training mode on" msgstr "" #: backend.c:14785 msgid "Already at end of game" msgstr "" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "" #: backend.c:15781 msgid "You are not examining a game" msgstr "" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "" #: backend.c:15909 msgid "No hint available" msgstr "" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "" #: backend.c:17083 msgid "Could not parse move" msgstr "" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "" #: backend.c:17210 msgid "White's flag fell" msgstr "" #: backend.c:17232 msgid "Black's flag fell" msgstr "" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 msgid "Could not create book" msgstr "" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr " F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Chương Trình Cờ Chung... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Các Lựa Chọn Chung" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Âm thanh" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Tự Động Đặt Cờ" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Tự Động Xoay Bàn Cờ" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Mù Quáng" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Đánh Dấu Nước Cuối" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Đánh Dấu Với Mũi Tên" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Đi Quân Với Chỉ Một Bấm" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Bật Cửa Sổ Thoát Chương trình" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Bật Cửa Sổ Lỗi Nước Đi" #: dialogs.c:423 msgid "Scores in Move List" msgstr "" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Hiện Tọa Độ" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Kiểm Tra Hợp Lệ" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "Mã" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "" #: dialogs.c:624 msgid "EGTB Path:" msgstr "" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "" #: dialogs.c:648 msgid "Detect all Mates" msgstr "" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "Phân Xử Trắng Thắng" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "" #: dialogs.c:678 msgid "Auto-Comment" msgstr "" #: dialogs.c:679 msgid "Auto-Observe" msgstr "" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Tự Động Hiện Bàn Cờ" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "" #: dialogs.c:684 msgid "Get Move List" msgstr "" #: dialogs.c:685 msgid "Quiet Play" msgstr "" #: dialogs.c:686 msgid "Seek Graph" msgstr "" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "" #: dialogs.c:696 msgid "Alarm" msgstr "" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 msgid "No games before year:" msgstr "" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "Các Lựa Chọn Tải Ván Cờ" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "Các Lựa Chọn Lưu Ván Cờ" #: dialogs.c:796 msgid "No Sound" msgstr "Không âm thanh" #: dialogs.c:797 msgid "Default Beep" msgstr "Tiếng tút ngầm định" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "Chơi" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "Âm thanh" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "" #: dialogs.c:908 msgid "Light Square Color:" msgstr "" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "" #: dialogs.c:920 msgid "Highlight Color:" msgstr "" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 msgid "add next move" msgstr "" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "Soạn" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Các Thẻ" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "" #: dialogs.c:1565 msgid "randomize" msgstr "" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Tráo Bên..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "Hệ số thời gian lẻ" #: dialogs.c:1609 msgid "Engine #1" msgstr "" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "Bỏ" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Vua" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "Chung..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Mã" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Tượng" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Xe" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Sĩ" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Xe" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Hoàng Hậu" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Phong Cấp" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Tráo Bên..." #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 msgid "ICS Interaction" msgstr "" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "" #: dialogs.c:2143 msgid "down" msgstr "" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "Các Lựa Chọn Tải Ván Cờ" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "" #: dialogs.c:2306 msgid "Fatal Error" msgstr "" #: dialogs.c:2306 msgid "Exiting" msgstr "" #: dialogs.c:2317 msgid "Information" msgstr "" #: dialogs.c:2324 msgid "Note" msgstr "" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Trắng" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Tốt" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Tượng" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Pháo" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Ô Trống" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Xóa Bàn Cờ" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Đen" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Soạn" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Hướng Dẫn" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "Lọc" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "Lọc" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "Lọc" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "Bình Chú" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "In Ra Của Các Chương Trình Cờ Alt+Shift+O" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Thông Tin Về XBoard" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "Tráo Bên..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Tráo Bên..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Biến Mới... Alt+Shift+V" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "Tải Ván Cờ... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "Âm thanh" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "Âm thanh" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "Phong cấp" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "Lưu Ván Cờ... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "Lưu Thế Cờ... Ctrl+Shift+S" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Lưu Ván Cờ... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "Lưu Ván Cờ... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "Copy Danh Sách Các Ván Cờ Vào Clipboard" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "Chép Thế Cờ Vào Clipboard Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "Copy Danh Sách Các Ván Cờ Vào Clipboard" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "Dán Ván Cờ Từ Clipboard Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "Dán Thế Cờ Từ Clipboard Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "Soạn Các Thẻ..." #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "Âm thanh" #: menus.c:632 msgid "Edit Tags" msgstr "Soạn Các Thẻ..." #: menus.c:633 msgid "Edit Comment" msgstr "Soạn Bình Chú..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "Cẩm Nang Khai Cuộc..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "Chú Giải" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "Cắt Ngắn Ván Cờ End" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "Quay Lại Đến Đầu Alt+Home" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "Đi Tiếp Tới Cuối Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "Tự Động Xoay Bàn Cờ" #: menus.c:651 msgid "Move History" msgstr "" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "Đồ Thị Lượng Giá Alt+Shift+E" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "Danh Sách Ván Cờ" #: menus.c:657 msgid "Comments" msgstr "Bình Chú" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Bàn Cờ..." #: menus.c:662 msgid "Game List Tags..." msgstr "Các Thẻ của Danh Sách Ván Cờ" #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "Máy Chơi Bên Trắng Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "Trận Đấu Với Máy" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "Máy Chơi Cả Hai Bên Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "Chế Độ Phân Tích Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "Phân Tích File Ctrl+F" #: menus.c:674 msgid "Training" msgstr "Đang Dậy Máy" #: menus.c:675 msgid "ICS Client" msgstr "Kết Nối Chơi Với Máy Chủ ICS" #: menus.c:677 msgid "Machine Match" msgstr "Trận Đấu Với Máy" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "Đặt Cờ F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "Ngừng Xem" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "Ngừng Thử" #: menus.c:695 msgid "Upload to Examine" msgstr "Tải Để " #: menus.c:697 msgid "Adjudicate to White" msgstr "Phân Xử Trắng Thắng" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Phân Xử Đen Thắng" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Phân Xử Hòa" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Đặt Tham Số Cho Chương Trình Chơi 1..." #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Chương Trình Cờ Chung... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Đặt Tham Số Cho Chương Trình Chơi 1..." #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Đặt Tham Số Cho Chương Trình Chơi 2..." #: menus.c:712 msgid "Hint" msgstr "Gợi Ý..." #: menus.c:713 msgid "Book" msgstr "Cẩm Nang Khai Cuộc..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "Hoãn Nước Đi Vừa Rồi Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Chung..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Đặt Thời Gian... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Chương Trình Cờ Chung... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Phân Xử Kết Quả... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Tải Ván Cờ... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Lưu Ván Cờ... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Danh Sách Ván Cờ" #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Âm Thanh" #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "Đánh Dấu Khi Đang Kéo Quân Cờ" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Đánh Dấu Với Mũi Tên" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "Cập Nhật Theo Chu Kỳ" #: menus.c:751 msgid "Popup Exit Message" msgstr "Bật Cửa Sổ Thoát Chương trình" #: menus.c:753 msgid "Show Coords" msgstr "Hiện Tọa Độ" #: menus.c:754 msgid "Hide Thinking" msgstr "" #: menus.c:758 msgid "Save Settings Now" msgstr "Lưu Các Tham Số Ngay" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Lưu Các Tham Số Khi Kết Thúc" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "Thông Tin Về XBoard" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "số giây mỗi nước" #: nengineoutput.c:155 msgid "Engine output" msgstr "" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "Âm thanh" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "Các Thẻ" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "" #: ngamelist.c:283 msgid "There is no game list" msgstr "" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "Được" #~ msgid "ICS ..." #~ msgstr "ICS..." #~ msgid "cancel" #~ msgstr "Bỏ" #~ msgid "New Game Ctrl+N" #~ msgstr "Ván Mới Ctrl+N" #~ msgid "Load Game Ctrl+O" #~ msgstr "Tải Ván Cờ... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Tải Thế Cờ... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "Lưu Ván Cờ... Ctrl+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Thoát" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Chép Ván Cờ Vào Clipboard Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Soạn Ván Cờ Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Soạn Thế Cờ Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "Ngược Lại Home" #~ msgid "Backward Alt+Left" #~ msgstr "Quay Trở Lại Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "Đi Tiếp Alt+Right" #~ msgid "Flip View F2" #~ msgstr "Lật Ngược Bàn Cờ F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "In Ra Của Các Chương Trình Cờ Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Các Nước Đi Alt+Shift+H" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Danh Sách Các Ván Cờ Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Máy Chơi Bên Đen Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Soạn Ván Cờ Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Soạn Thế Cờ Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "Tạm Dừng Pause" #~ msgid "Accept F3" #~ msgstr "Chấp Nhận F3" #~ msgid "Decline F4" #~ msgstr "Từ Chối F4" #~ msgid "Rematch F12" #~ msgstr "Chơi Ván Nữa F12" #~ msgid "Draw F6" #~ msgstr "Hòa F6" #~ msgid "Adjourn F7" #~ msgstr " F7" #~ msgid "Abort F8" #~ msgstr "Bỏ F8" #~ msgid "Resign F9" #~ msgstr "Nhận Thua F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Phải Đi Ngay Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Luôn Là Hoàng Hậu Ctrl+Shift+Q" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Tự Động Đặt Cờ" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Tiếp Tục Tính Trước" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Ẩn Suy Nghĩ" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Kiểm Tra Hợp Lệ" #~ msgid "Drop" #~ msgstr "Đứt" #~ msgid "ok" #~ msgstr "Được" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "Đánh Dấu Khi Đang Kéo Quân Cờ" #~ msgid "White " #~ msgstr " " #~ msgid "Black " #~ msgstr " " #~ msgid "Close" #~ msgstr "Đóng" xboard-4.8.0/po/ru.po0000644000175000001440000017413312422467103011335 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # Перевод: А.В.Сердюков (2003), Hr.Burunduk (2011), 2010 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110507\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "версия протокола %d не поддерживается" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "timeControl: неверный параметр %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "searchTime: неверный параметр %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Вариант %s поддерживается только в режиме ICS" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Неизвестный вариант %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Запускается шахматная программа" #: backend.c:1475 msgid "Bad game file" msgstr "Неправильный формат файла" #: backend.c:1482 msgid "Bad position file" msgstr "Неправильный формат файла позиции" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Не подключено ни одной шахматной программы" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Не могу открыть COM-порт %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Не могу установить связь с %s, порт %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "initialMode: неизвестный режим %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "Режим анализа: не указан файл для анализа" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "Для анализа необходима шахматная программа" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Режим анализа не совместим с режимом ICS" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "В режиме \"Компьютер белыми\" нужна шахматная программа" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "Режим \"Компьютер белыми\" не совместим с режимом ICS" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "В режиме \"Компьютер черными\" нужна шахматная программа (движок)" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "Режим \"Компьютер черными\" не совместим с режимом ICS" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "В режиме \"Два движка\" нужна шахматная программа" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "Режим \"Два движка\" не совместим с режимом ICS" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "Для тренировки необходимо загрузить шахматную партию из файла" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Ошибка записи на вход сервера ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Ошибка клавиатуры" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Получен символ конца файла с клавиатуры" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Ошибка записи на дисплей" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Ошибка чтения списка ходов: два заголовка" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Ошибка чтения списка ходов: вложенные списки" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Сервер ICS разорвал соединение" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Ошибка чтения с сервера ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" "Слишком длинная партия: увеличьте значение MAX_MOVES и перекомпилируйте " "программу" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Ошибка чтения списка ходов: лишняя доска" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Странный ход \"%s\" получен с сервера ICS" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "Вы играете черными" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Вы играете белыми" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Ход белых" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Ход черных" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Показанная позиция не соответствует положению в игре" #: backend.c:7007 msgid "Illegal move" msgstr "Неправильный ход" #: backend.c:7084 msgid "End of game" msgstr "Сыгран последний записанный ход" #: backend.c:7087 msgid "Incorrect move" msgstr "Неверный ход" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Неправильный ход \"%s\" пытается выполнить движок %s" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s не поддерживает режим анализа" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Неправильный ход \"%s\" (не принят движком %s)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Не удалось запустить %s движок %s на %s: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Подсказка: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Компьютер согласился на ничью" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Неоднозначный ход с сервера ICS: \"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Неправильный ход с сервера ICS: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Пропуск в записи ходов" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Вариант %s не поддерживается %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Ошибка при запуске программы '%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Ждем первую шахматную программу" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Ждем вторую шахматную программу" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 msgid "Bad tournament file" msgstr "" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Матч %s против %s: финальный результат %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Неправильный ход: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Неоднозначный ход: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Не могу открыть файл \"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Не удалось создать список партий" #: backend.c:12190 msgid "No more games in this message" msgstr "В этом сообщении больше нет шахматных партий" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Нет загруженных шахматных партий" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Достигнуто начало списка" #: backend.c:12678 msgid "Game number out of range" msgstr "Номер партии - вне диапазона" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Поиск в файлах записей партий не предусмотрен" #: backend.c:12747 msgid "Game not found in file" msgstr "Партия не найдена в файле" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Неправильная позиция формата FEN в файле" #: backend.c:13030 msgid "No moves in game" msgstr "Нет записанных ходов" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Нет загруженных позиций" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Поиск в файлах позиций не предусмотрен" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Позиция не найдена в файле" #: backend.c:13245 msgid "Black to play" msgstr "Ход черных" #: backend.c:13248 msgid "White to play" msgstr "Ход белых" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "Вы еще не сделали ход" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "Нет неоконченных партий" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Ошибка запуска cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Ожидание ответного хода\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Все еще ваша очередь ходить в этой партии\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Все еще ваша очередь ходить в обеих партиях\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Все еще ваш ход во всех %d партиях\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Все еще ваш ход в партии %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Нет неоконченных партий\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Можно отсылать почту\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Все еще ваша очередь ходить в партиях %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Правка комментария" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Правка комментария к %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "Сейчас не ход белых" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Сейчас не ход черных" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "Подождите своей очереди ходить" #: backend.c:14774 msgid "Training mode off" msgstr "Тренировка окончена" #: backend.c:14782 msgid "Training mode on" msgstr "Тренировка" #: backend.c:14785 msgid "Already at end of game" msgstr "Сыграны все ходы данной партии" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Предупреждение: вы все еще продолжаете играть" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Предупреждение: вы все еще наблюдаете за игрой" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Предупреждение: вы все еще изучаете игру" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "Это поле занято" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "К данному ходу никаких предложений не сделано" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "У вашего соперника еще есть время" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Вы должны сделать свой ход прежде, чем предлагать ничью" #: backend.c:15781 msgid "You are not examining a game" msgstr "Не включен режим изучения шахматных партий" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Нельзя вернуться к началу пока выбрана \"Пауза\"" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "Ваш ход" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "Подождите своей очереди ходить" #: backend.c:15909 msgid "No hint available" msgstr "Подсказок нет" #: backend.c:15924 backend.c:15955 ngamelist.c:364 #, fuzzy msgid "Game list not loaded or empty" msgstr "Нет загруженных шахматных партий" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Ошибка записи на вход движка %s" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Ошибка: движок %s (%s) завершил работу" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Ошибка чтения с выхода движка %s (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Позиция не отвечает положению в игре" #: backend.c:17083 msgid "Could not parse move" msgstr "Невозможно интерпретировать ход" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "У обоих игроков время вышло" #: backend.c:17210 msgid "White's flag fell" msgstr "У белых упал флажок" #: backend.c:17232 msgid "Black's flag fell" msgstr "У черных упал флажок" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Позиция в буфере обмена не соответствует формату FEN" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "Невозможно интерпретировать ход" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "Отложить F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Общие для движков... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Общие настройки" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 #, fuzzy msgid "Replace Engine" msgstr "Движок" #: dialogs.c:312 #, fuzzy msgid "Upgrade Engine" msgstr "Движок" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Звуки" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Анимация перетаскивания" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Анимация ходов" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Проверять время" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Авторазворот доски" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Невидимые фигуры" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Скрывать вывод движка в игре против человека" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Выделять последний ход" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Выделять стрелкой" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Ход одним щелчком" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Периодически обновлять (в режиме анализа)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Думать всегда" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Сообщение при выходе" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Сообщать о неправильном ходе" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "Запрашивать запись ходов" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Показывать координаты" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Проверять правильность хода CS+L" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 #, fuzzy msgid "Zoom factor in Evaluation Graph:" msgstr "Оценка позиции" #: dialogs.c:452 #, fuzzy msgid "Normal" msgstr "обычные" #: dialogs.c:453 #, fuzzy msgid "Makruk" msgstr "макрук" #: dialogs.c:454 msgid "FRC" msgstr "Фишера (960)" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "Конь" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 #, fuzzy msgid "Cylinder *" msgstr "цилиндрические" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "атомные" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "Сейравана" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 #, fuzzy msgid "Bughouse" msgstr "шведки" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "поддавки (мат)" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Предупреждение: второй движок (%s) не поддерживает это!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "Варианты" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Max число CPU:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Размер хеша (МБ):" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "Путь к ЭБД:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Кеш ЭБД (МБ):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Глубина книги:" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Варьирование:" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Своя книга у движка 1" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Общие настройки движков" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Определять мат" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Проверять требования движка" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Ничья при нехватке материала" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Ничья в технич. окончаниях" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Присудить ничью после" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Победа/поражение при перевесе в" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Оценка движка 1 - абсолютная" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Оценка движка 2 - абсолютная" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "Присудить победу белым" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Комментарии" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Следить за игрой" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Раскрывать доску" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Следить в фоне" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Двойная доска" #: dialogs.c:684 msgid "Get Move List" msgstr "Запрашивать запись ходов" #: dialogs.c:685 msgid "Quiet Play" msgstr "Спокойная игра" #: dialogs.c:686 msgid "Seek Graph" msgstr "График поиска" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Автообновление" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "Предварительный ход" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "1-й ход белых" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "1-й ход черных" #: dialogs.c:696 msgid "Alarm" msgstr "Звонок" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "Настройки соединения с ICS" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 #, fuzzy msgid "No games before year:" msgstr "Нет загруженных шахматных партий" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "Параметры загрузки" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "Настройки сохранения" #: dialogs.c:796 msgid "No Sound" msgstr "Без звука" #: dialogs.c:797 msgid "Default Beep" msgstr "Простой сигнал" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "Послушать" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "Звуки" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Черные фигуры" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Белые поля" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Черные поля" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Выделенное поле" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Предварит. ход" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "Монохромная" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "Настройки доски" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Думать всегда" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "Правка" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Описание" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Номер позиции:" #: dialogs.c:1565 #, fuzzy msgid "randomize" msgstr "Случайно" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Новая в смешанные шахматы..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "Фактор времени движков:" #: dialogs.c:1609 #, fuzzy msgid "Engine #1" msgstr "Движок" #: dialogs.c:1610 #, fuzzy msgid "Engine #2 / Human" msgstr "Своя книга у движка 1" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Ошибка подключения к шахматной программе" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "Отмена" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Король" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "Общие..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Конь" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Слон" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Ладья" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Архиепископ" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Канцлер" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Ферзь" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Превратить" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Варианты" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "Настройки соединения с ICS" #: dialogs.c:2141 msgid "factory" msgstr "Стандарт" #: dialogs.c:2142 msgid "up" msgstr "Вверх" #: dialogs.c:2143 msgid "down" msgstr "Вниз" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "Параметры загрузки" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Ошибка" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Неисправимая ошибка" #: dialogs.c:2306 msgid "Exiting" msgstr "Выход" #: dialogs.c:2317 msgid "Information" msgstr "Информация" #: dialogs.c:2324 msgid "Note" msgstr "Примечание" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Белые" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Пешка" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Слон (стар.)" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Пушка" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Разжаловать" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Пустое поле" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Очистить доску" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Черные" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Файл" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Правка" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Вид" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Режим" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Игра" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Движок" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Настройки" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Справка" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "Файл" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "Фильтр" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "Фильтр" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "Комментарии" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "Вывод движка" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS (Узл./сек.)" #: gamelist.c:376 #, fuzzy, c-format msgid "Reading game file (%d)" msgstr "Неправильный формат файла" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 #, fuzzy msgid "Failed to open file" msgstr "Ошибка запуска cmail" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "О программе XBoard" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "Новая в смешанные шахматы..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Новая в смешанные шахматы..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Варианты" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "Загрузка... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "Неправильный формат файла позиции" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "Неправильный формат файла позиции" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "Превращение" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "Сохранение... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "Сохранить позицию... Ctrl+Shift+S" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Сохранение... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "Сохранение... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "Копировать список партий" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "Копировать позицию Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "Копировать список партий" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "Вставить партию Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "Вставить позицию Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "Правка комментария" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "Неправильный формат файла позиции" #: menus.c:632 msgid "Edit Tags" msgstr "Править описание..." #: menus.c:633 msgid "Edit Comment" msgstr "Править комментарий..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "Книга..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "Записать и вернуться" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "Отбросить последующие ходы End" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "Ход черных" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "В конец Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "Авторазворот доски" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "Запрашивать запись ходов" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "Оценка позиции" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "Список партий..." #: menus.c:657 msgid "Comments" msgstr "Комментарии" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Доска..." #: menus.c:662 msgid "Game List Tags..." msgstr "Содержание списка партий..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "Компьютер белыми Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "Начать матч движков" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "Два движка Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "Анализ Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "Анализировать файл Ctrl+F" #: menus.c:674 msgid "Training" msgstr "Тренировка" #: menus.c:675 msgid "ICS Client" msgstr "Клиент ICS" #: menus.c:677 msgid "Machine Match" msgstr "Начать матч движков" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "Проверить время F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "Прекратить наблюдение за игрой F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "Прекратить изучение партии F11" #: menus.c:695 msgid "Upload to Examine" msgstr "Загрузить на сервер для изучения" #: menus.c:697 msgid "Adjudicate to White" msgstr "Присудить победу белым" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Присудить победу черным" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Присудить ничью" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Настройки движка 1..." #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Общие для движков... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Настройки движка 1..." #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Настройки движка 2..." #: menus.c:712 msgid "Hint" msgstr "Подсказка..." #: menus.c:713 msgid "Book" msgstr "Книга..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "Взять ход назад Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Общие..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Контроль времени... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Общие для движков... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Присуждение... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Загрузка... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Сохранение... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Список партий..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Звуки..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "Выделять при перетаскивании" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Выделять стрелкой" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "Периодически обновлять" #: menus.c:751 msgid "Popup Exit Message" msgstr "Сообщение при выходе" #: menus.c:753 msgid "Show Coords" msgstr "Показывать координаты" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "Скрывать вывод движка в игре против человека" #: menus.c:758 msgid "Save Settings Now" msgstr "Сохранить настройки сейчас" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Сохранять настройки при выходе" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "О программе XBoard" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "Движок" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "ходов" #: nengineoutput.c:155 msgid "Engine output" msgstr "Вывод движка" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Оценка позиции" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "Оценка позиции" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "Неправильный формат файла позиции" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "Описание" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "Выберите партию из списка" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Достигнут конец списка" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, fuzzy, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "Матч %s против %s: финальный результат %d-%d-%d" #: ngamelist.c:283 msgid "There is no game list" msgstr "Нет списка партий" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "OK" #~ msgid "ICS ..." #~ msgstr "ICS..." #~ msgid "cancel" #~ msgstr "Отмена" #~ msgid "New Game Ctrl+N" #~ msgstr "Новая партия Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "Новый вариант... Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "Загрузить партию... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Загрузить позицию... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "Сохранить партию... Ctrl+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Выход" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Копировать партию Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Править партию Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Править позицию Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "Вернуться Home" #~ msgid "Backward Alt+Left" #~ msgstr "Назад Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "Вперед Alt+Right" #~ msgid "Back to Start Alt+Home" #~ msgstr "В начало Alt+Home" #~ msgid "Flip View F2" #~ msgstr "Развернуть доску F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "Вывод движка Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Список ходов Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "График оценки Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Список партий Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Компьютер черными Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Править партию Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Править позицию Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "Пауза" #~ msgid "Accept F3" #~ msgstr "Принять F3" #~ msgid "Decline F4" #~ msgstr "Отклонить F4" #~ msgid "Rematch F12" #~ msgstr "Переиграть F12" #~ msgid "Draw F6" #~ msgstr "Ничья F6" #~ msgid "Adjourn F7" #~ msgstr "Отложить F7" #~ msgid "Abort F8" #~ msgstr "Прервать F8" #~ msgid "Resign F9" #~ msgstr "Сдаться F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Делай ход! Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Всегда в ферзя CS+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "Анимация ходов CS+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Проверять время CS+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Думать всегда CS+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Скрыть главный вариант CS+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Проверять правильность хода CS+L" #~ msgid "Drop" #~ msgstr "Выставить" #, fuzzy #~ msgid "could not open: " #~ msgstr "Невозможно интерпретировать ход" #~ msgid "ok" #~ msgstr "OK" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "Выделять при перетаскивании" #~ msgid "White " #~ msgstr "Белые " #~ msgid "Black " #~ msgstr "Черные " #~ msgid "Close" #~ msgstr "Закрыть" #~ msgid "sec/move" #~ msgstr "сек. на ход" xboard-4.8.0/po/stamp-po0000644000175000001440000000001212422467103012012 00000000000000timestamp xboard-4.8.0/po/Makevars0000755000175000001440000000341612420374633012044 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = xboard-4.8.0/po/zh_HK.gmo0000644000175000001440000003710512422467103012053 00000000000000= "'2Zn")%%*Pap y      + DRdkq   $-)Jt   &%5[w! !&$@'e      +&1!X&z(!4S0l.  1CZ/s ,=Pdy   0! 4J Yex  -))W-)%"" ' 1 5 O i z        !1!F!K!N!_!g!l!#}!!!!!!! "","4" :"E"Y"^"p"" "" " """"&#!;#*]#(#&## ##$&$@$I$[$"l$,$($$$%&%%E%k%% % %'%'&%9&2_&& &&&&&''6'.S' ''''!'1'/(b2()) )))))****J*3e*6*?*+ + 0+:+"A+d+z+++++++ ,&,9,L,P,W,^, q, ~, ,,,, ,,,,' -3-D-]-v-z-- -----".#.B.%U.{. ...!.!... / / 0/:/M/ ]/j// / // //$/$/*00:0k00,00*0!1-01 ^1h1o1;1 1 11112 2592 o2|2 2222 2!2 3343J3`3 v3 3 3 3 3?3$3464 N4[4b4u4444444444=5@M5=5@5' 6 56 B6L6S6W6q6666666$67&7<7U7o7v7}7 777777778858E8X8_8c8s888888889 9 999J9b9 y9999 99:#: B:L:b:6x:<:9:-&;T;j;z;";;!;;!<)<H<g<)<<< <<< < ==4=D=`=,s=-=="=E=>>bk2X#/Yd[LU0QC{*fo>DG3~]6'}Ov4_ux.FZa`(T|5Jcn%&1y=IeNi,lgw9 z"+ \s M;8?h-:P EtVjWp$A!K @mr)<^BR7qHS%s does not support analysisAbout XBoardActionAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate to BlackAdjudicate to WhiteAlarmAlready at end of gameAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-KibitzAuto-ObserveAuto-Raise BoardAuto-Refresh Seek GraphBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad game fileBad position fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard...BookBook Depth (moves):Book Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't seek on game fileCan't seek on position fileCannonCannot build game listChancellorClear boardCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCouldn't parse move "%s" from ICSDark Square Color:Default BeepDemoteDetect all MatesDisplayed move is not currentDisplayed position is not currentDraw after N Moves Total:Draw if Insufficient Mating MaterialDual Board for Background-Observed GameEGTB Cache Size (MB):EditEdit CommentEdit TagsEdit commentEdit comment on %d.%s%sElephantEmpty squareEnd of gameEngine #1 Has Own BookEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExitingFailed to invoke cmailFailed to start %s chess program %s on %s: %s Fatal ErrorFileFirst Black Move:First White Move:Game List Tags...Game not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS OptionsIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move in ICS output: "%s"Illegal move: %d.%s%sIncorrect moveInformationIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKingKnightLight Square Color:Load Game OptionsMachine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMono ModeNPSNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNo SoundNo game has been loaded yetNo game selectedNo hint availableNo more games in this messageNo moves in gameNo position has been loaded yetNo unfinished gamesNo unfinished games NoteOKOne-Click MovingOptionsPawnPeriodic UpdatesPeriodic Updates (in Analysis Mode)PlayPonder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePremovePremove Highlight Color:PromoteQueenQuiet PlayReady to send mail RookSave Game OptionsSave Settings NowSave Settings on ExitSeek GraphShow CoordinatesShow CoordsSound OptionsStart-position number:Starting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s TagsTest LegalityThat square is occupiedThere is no game listThere is no pending offer on this moveTrainingTraining mode offTraining mode onTraining mode requires a game fileTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineUnknown initialMode %sUnknown variant name %sUpload to ExamineVariant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsWaiting for first chess programWaiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite to playWhite's flag fellWin / Loss Threshold:You are not examining a gameYou are playing BlackYou are playing WhiteYou can't revert while pausingYou have not made a move yetYou must make your move before offering a drawYour opponent is not out of timebad searchTime option %sbad timeControl option %sdownprotocol version %d not supportedsay Internal error; bad moveType %d (%d,%d-%d,%d)upProject-Id-Version: GNU xboard master-20110411 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: zh_HK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s 不支持分析功能關於XBoard(A)行為(A)提請仲裁(D)簡易和棋判決(T)裁決黑贏 (B)裁決紅贏 (W)提示棋局已經結束ICS輸出不明確的著法"%s"不明確的著法 %d.%s%s"Analysis"(分析)模式無法在ICS模式下工作"Analysis"(分析)模式必須啟動國際象棋引擎"AnalyzeFile"(分析檔案)模式必須指定一個棋局檔案動畫拖曳(D)動畫走棋(A)註解(A)國師自動超時判負(F) Ctrl+Shift+F自動翻轉棋盤(V)自動註解(A)自動"kibitz"(A)自動觀棋(O)自動改變棋盤大小(R)自動刷新圖表(R)背景觀察(v)剪貼簿的FEN盤面錯誤檔案中的FEN盤面錯誤棋局檔案錯誤盤面檔案錯誤象黑方黑子輪到黑方走棋黑方超時盲棋(B)棋盤選項棋盤選項(B)...開局庫(B)...庫著法深度庫變例雙方都超時了無法再後退了無法再前進了沒有象棋程式時無法進行比賽無法打開"%s"無法搜尋棋局檔案無法搜尋盤面檔案炮無法建立棋局列表宰相清空棋盤編輯註解(C) *.*通用引擎設定連接被ICS關閉複製遊戲列表到剪貼簿無法連接主機 %s 連接埠 %s無法打開通訊連接埠 %s無法解析著法無法解析從ICS讀到的著法"%s"黑格預設聲音降級檢測將殺(M)顯示的著法不是當前著法顯示的盤面不是當前盤面幾著後判和子力不足時判和(I)雙棋盤(D)EGTB 大小(MB)編輯(E)編輯註解(C)...編輯標籤(T)編輯註解編輯註解 %d.%s%s象清空格子棋局結束引擎1有自用庫引擎輸出錯誤讀取著法時出錯,超出棋盤讀取著法時出錯,巢狀錯誤讀取著法時出錯,出現兩個開頭從%s國際象棋程式(%s)接收訊息時出錯讀取ICS訊息時出錯讀取鍵盤時出錯發送訊息到%s國際象棋程式時出錯發送訊息給ICS時出錯發送訊息給國際象棋程式時出錯發送訊息給顯示器時出錯錯誤:%s國際象棋程式(%s)異常終止審局圖離開呼叫cmail失敗無法啟動%s國際象棋程式 %s(在主機 %s 上),%s 嚴重錯誤檔案(F)黑方先走(B)紅方先走(W)遊戲列表...檔案中沒有找到棋局棋局數量超出範圍棋局太長,需要增加"MAX_MOVES"並重新編譯著法斷開一般選項(G)...一般選項取得著法列表(G)讀取鍵盤時遇到檔案尾雜湊表大小(MB)說明(H)與人對弈時隱藏思考細節格子標記拖曳醒目提示(H)標記上一著法(M)用箭頭突出移動用箭頭突出移動提示(H)...提示 %sICS客戶端ICS設定著法錯誤不合法著法"%s" (%s國際象棋程式拒絕接受該著法)從%s機器讀到不合法著法"%s"ICS輸出不明確的著法"%s"不合法著法 %d.%s%s著法錯誤資訊輪到黑方走棋輪到紅方走棋沒有輪到黑方走棋沒有輪到紅方走棋輪到你走棋王馬白格載入棋局選項電腦比賽(M)電腦同意和棋"MachineBlack"(電腦執黑)模式無法在ICS模式下運行"MachineBlack"(電腦執黑)模式必須啟動國際象棋引擎"MachineWhite"(電腦執紅)模式無法在ICS模式下運行"MachineWhite"(電腦執紅)模式必須啟動國際象棋引擎比賽 %s vs. %s: 最終比分 %d-%d-%d最大CPU數模式(M)黑白NPS引擎 #1 是絕對分數引擎 #2 是絕對分數洗牌遊戲(u)...變種無聲尚未有棋局載入沒有選中棋局沒有可用的提示這條訊息不包含更多的棋局棋局中沒有著法尚未有盤面載入不存在未完成棋局不存在未完成棋局 註解確定單擊移動(M)選項(O)兵定期更新(U)定期更新(分析模式)播放同步思考(N)離開時提示(P)離開時提示(P)提示錯誤著法(E)檔案中沒有找到盤面預先走棋(P)預先走棋標記升變后落子無聲(Q)準備送信就緒 車儲存棋局選項立即儲存設定(N)離開時儲存設定(X)可選對手圖表(k)顯示坐標(C)顯示坐標(C)聲音啟動位置號碼(S)啟動國際象棋程式無法啟動'%s'棋局 %s 仍需走棋 本棋局仍需走棋 所有 %d 棋局皆仍需走棋 兩棋局皆仍需走棋 棋局 %s 仍需走棋 編輯標籤(T)檢查著法合理性(L) Cl+Sh+L格子已有棋子沒有棋局列表該著法沒有待定的提議訓練(N)訓練模式已關閉訓練模式已打開"Training"(訓練)模式必須指定一個棋局檔案"TwoMachines"(電腦對弈)模式無法在ICS模式下運行"TwoMachines"(分析)模式必須啟動國際象棋引擎未知的"initialMode"(初始模式)選項 %s未知的變體名 %s上傳檢查(U)變體 %s 不被 %s 所支持變體 %s 只在ICS模式下支持驗證引擎聲明(V)等待第一個國際象棋程式等待對手回應 等待第二個國際象棋程式注意:你正在研究棋局注意:你正在觀棋棋局注意:你正在進行棋局警告: 第二個引擎(%s) 不支持此!紅方輪到紅方走棋紅方超時輸/贏判決門檻沒有分析棋局你在執黑你在執紅暫停時不能復原棋局你尚未走棋必須走完棋才能提和對手沒有超時非法的"searchTime"(搜尋時間)選項 %s非法的"timeControl"(時間控制)選項 %s向下通訊協定版本 %d 不被支持say 內部錯誤,非法的"moveType"(著法類型) %d (%d,%d-%d,%d)向上xboard-4.8.0/po/it.gmo0000644000175000001440000004257712422467103011475 00000000000000KLxy ' "'J)b%%   % 2 >K\ t    $2;@$Ty).5 L Wcl%!$ 7DK\!z$'  + 5BZ c p| &!&(G^!z0+37.N }/$5= M[y  ( 40A!r   #:JOVj |-)- )0 %Z "     ! !(!9!K!i!z!!!!!!!!!#!"#"4"G"["m""""" """""" # # 1# =#K#b#y#&#!#*#($&.$U$ Z$h$$&$$$$"$, %(9%b%y%%%%%%& & )& J&'k&'&%&2&' '(':'P'm''''.' (%(,(E(_(d(l(r(!y(1((_(0*J*c*j******(* +:#+0^+5++ ++ ++,,, @,L,d, y,,0,+,,-4-<- A-L- a-l- -----!- .D&.k.5.7..). #///A/J/g//)/$//0/ 00:0?0G0(^0,00!00011 21S1e11 111111H1682Fo2-222*3H3'e33F334 4'$42L4 444444%4G5 [5 |55545554686I6a6z666666667*97)d777 7777 8&86898 A8N8l828I8@9KF9B9)99 : :)':)Q:{:: :,:::3;N;.b;-;.;;;; <<"<19<k<s<<<<<= =='=-=M=k= q=======>)>C>4Y>0>6>6>0-?^?s???0? ?!?@18@Hj@H@+@ (AIA&eA2AA A#A&B%5B*[B*B(BGB"C)C@C#]C"CCC7C!D44D9iDD#D$D DDE E)E8=EvEPhD ,$TQeF3Oc2*_K=@IRN[%! gW9Bj'vw^`0)/rs|+&:X<xYd]Lf5}7."E4 l(C-Gtzb?#6MZ~mVi >yuq ;Hapk{S1o UJ8\nA%s does not support analysisAbout XBoardActionAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate to BlackAdjudicate to WhiteAlarmAlready at end of gameAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-KibitzAuto-ObserveAuto-Raise BoardAuto-Refresh Seek GraphBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad game fileBad position fileBishopBlackBlack Piece Color:Black to playBlindfoldBoard OptionsBoard...BookBook Depth (moves):Book Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't seek on game fileCan't seek on position fileCannonCannot build game listChancellorClear boardCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCouldn't parse move "%s" from ICSDark Square Color:Default BeepDemoteDetect all MatesDisplayed move is not currentDisplayed position is not currentDraw after N Moves Total:Draw if Insufficient Mating MaterialDual Board for Background-Observed GameEGTB Cache Size (MB):EditEdit CommentEdit TagsEdit commentEdit comment on %d.%s%sElephantEmpty squareEnd of gameEngineEngine #1 Has Own BookEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExitingFRCFailed to invoke cmailFailed to start %s chess program %s on %s: %s Fatal ErrorFileFirst Black Move:First White Move:Game List Tags...Game not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS OptionsIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move in ICS output: "%s"Illegal move: %d.%s%sIncorrect moveInformationIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKingKnightLight Square Color:Load Game OptionsMachine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMono ModeNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNo SoundNo game has been loaded yetNo game selectedNo hint availableNo more games in this messageNo moves in gameNo position has been loaded yetNo unfinished gamesNo unfinished games NoteOKOne-Click MovingOptionsPawnPeriodic UpdatesPeriodic Updates (in Analysis Mode)PlayPonder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePremovePremove Highlight Color:PromoteQueenQuiet PlayReady to send mail RookSave Game OptionsSave Settings NowSave Settings on ExitSeek GraphShow CoordinatesShow CoordsSound OptionsStart-position number:Starting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s TagsTest LegalityThat square is occupiedThere is no game listThere is no pending offer on this moveTrainingTraining mode offTraining mode onTraining mode requires a game fileTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineUnknown initialMode %sUnknown variant name %sUpload to ExamineVariant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsViewWaiting for first chess programWaiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite to playWhite's flag fellWin / Loss Threshold:You are not examining a gameYou are playing BlackYou are playing WhiteYou can't revert while pausingYou have not made a move yetYou must make your move before offering a drawYour opponent is not out of timeatomicbad searchTime option %sbad timeControl option %sdownfactoryfairylosersprotocol version %d not supportedsay Internal error; bad moveType %d (%d,%d-%d,%d)upProject-Id-Version: GNU xboard master-20110411 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s non supporta l'analisiInformazioni su WinboardAzioniAggiudica come PattaAggiudica patte trivialiAggiudica al NeroAggiudica al BiancoAllarmeGià alla fine della partitaMossa ambigua nell'output dell'ICS: "%s"Mossa ambigua: %d.%s%sLa funzione di Analisi non è disponibile in modalità ICSLa modalità Analisi richiede un motore di giocoLa modalità 'Analizza file' richiede un file partitaTrascinamento animatoMosse animateAnnotaArcivescovoAggiudica sul tempoRuota vista automaticamenteCommenti automaticiAuto KibitzOsserva automaticamentePorta in primo pianoAuto aggiornaOsserva in bckgndStringa FEN di posizione scorretta negli AppuntiStringa FEN di posizione scorretta nel fileFile partita non riconosciutoFile posizione non riconosciutoAlfiereNeroPezzi neriIl tratto è al NeroAlla ciecaImpostazioni scacchieraScacchiera...Libro delle aperture...Profondità Libro:Varianti Libro:Tempo esaurito per entrambiImpossibile tornare più indietroImpossibile avanzare oltreImpossibile avviare un match senza specificare alcun motore di giocoImpossibile aprire "%s"Impossibile effettuare la ricerca nel file di partitaImpossibile effettuare la ricerca nel file di posizioneCannoneImpossibile costruire lista delle partiteCancelliereSvuota scacchieraCommentiImpostazioni motori di giocoConnessione chiusa dal'ICSCopia lista partiteConnessione all'host %s, porta %s fallitaApertura della porta comm %s fallitaImpossibile leggere mossaImpossibile interpretare la mossa dall'ICS: "%s"Case nereBeepDegradaIndividua scacco mattoLa mossa mostrata non è quella correnteLa posizione mostrata non è quella correnteAggiudica patta dopo:Patta per materiale insufficienteDoppia scacchieraDimensione EGTB [MB]:ModificaModifica commento...Modifica informazioni partita...Modifica commentoModifica commento a %d.%s%sElefanteCasa vuotaTermine della partitaMotoreLibro proprio per motore 1Output del motore di giocoErroreErrore nela lettura della lista mosse: è presente una posizione in piùErrore nella lettura della lista mosse: mosse annidateErrore nella lettura della lista mosse: sono presenti due intestazioniErrore in lettura dal %s motore di gioco (%s)Errore in lettura dall'ICSErrore in lettura da tastieraErrore in scrittura sul %s motore di giocoErrore in scrittura sull'ICSErrore in scrittura sul motore di giocoErrore in scrittura sul displayErrore: il %s motore di gioco (%s) è terminato in maniera inaspettataGrafico della valutazioneChiusura in corsoFRCImpossibile aprire l'applicazione cmailAvvio del %s motore di gioco %s su %s fallito: %s Errore fataleFile1° mossa Nero1° mossa BiancoImpostazioni lista partite...Partita non trovata nel fileIndice superiore al numero di partitePartita troppo lunga; incrementare il valore di MAX_MOVES e ricompilareMosse mancanti nella lista mosseGenerali...Impostazioni generaliScarica lista mosseRicevuto carattere di Fine file (EOF) dalla tastieraDimensione Hash [MB]:AiutoNascondi l'output del motore se gioca contro un uomoCase evidenziateEvidenzia trascinamentoEvidenzia l'ultima mossaEvidenzia con una frecciaEvidenzia con una frecciaSuggerimento...Suggerimento: %sConnetti ad un ICSImpostazioni ICSMossa illegaleMossa illegale "%s" (rifiutata dal %s motore di gioco)Mossa illegale "%s" dal %s motore di giocoMossa illegale nell'output dell'ICS: "%s"Mossa illegale: %d.%s%sMossa non correttaInformazioneIl tratto è al NeroIl tratto è al BiancoIl tratto non è al NeroIl tratto non è al BiancoE' il tuo turnoReCavalloCase biancheImpostazioni apertura partitaMatch tra i motori di giocoIl motore di gioco accetta la tua offerta di pattaLa funzione 'Nero al motore di gioco' non è disponibile in modalità ICSLa modalità 'Nero al motore di gioco' richiede almeno un motoreLa funzione 'Bianco al motore di gioco' non è disponibile in modalità ICSLa modalità 'Bianco al motore di gioco' richiede almeno un motoreMatch %s vs %s: punteggio finale %d-%d-%dNum max di CPU:ModalitàMonocromaticoOutput motore 1 sempre riferito al BiancoOutput motore 2 sempre riferito al BiancoNuova partita Shuffle...Varianti di giocoSilenziosoNon è ancora stata caricata nessuna partitaNessuna partita selezionataNessun suggerimento disponibileIn questo messaggio non sono presenti altre partitePartita senza mosseNon è ancora stata caricata nessuna posizioneNon è presente nessuna partita non terminataNon è presente nessuna partita non terminata NotaOKMuovi con click singoloImpostazioniPedoneAggiornamenti continuiAggiornamenti continui (per Modalità di analisi)AscoltaPensa sul mio tempoChiedi conferma alla chiusuraChiedi conferma alla chiusuraMostra popup per mosse erratePosizione non trovata nel filePremossaPremosse evidenziatePromuoviDonnaNon disturbare durante il giocoPronto all'invio della posta TorreImpostazioni salvataggio partitaSalva impostazioniSalva impostazioni all'uscitaGrafico delle richiesteMostra coordinateMostra coordinateImpostazioni suoniDisposizione iniziale:Avvio del motore di giocoAvvio di '%s' fallitoOccorre ancora eseguire una mossa per la partita %s Occorre ancora eseguire la mossa per la partita Occorre ancora eseguire mosse per tutte le %d partite Occorre ancora eseguire mosse per entrambe le partite Occorre ancora eseguire mosse per le partite %s Informazioni partitaVerifica mosse illegaliLa casa è già occupataNessuna lista partiteNon vi è alcuna offerta pendente a questa mossaAllenamentoModalità Allenamento disattivataModalità Allenamento attivataLa modalità Allenamento richiede un file partitaLa funzione 'Motore di gioco 1 vs 2' non è disponibile in modalità ICSLa modalità 'Motore di gioco 1 vs 2' richiede almeno un motore di giocoValore per initialMode non riconosciuto: %sNome di variante sconosciuto: %sCarica su ICS per esaminareLa variante %s non è supportata da %sLa variante %s è supportata solo in modalità ICSVerifica gli annunci del motoreVisualizzaIn attesa del primo motore di giocoIn attesa di risposta dall'avversario In attesa del secondo motore di giocoAvviso: Stai ancora esaminando una partitaAvviso: Stai ancora osservando una partitaAvviso: Stai ancora giocando una partitaAttenzione: il secondo motore di gioco (%s) non supporta questa azione!BiancoIl tratto è al BiancoTempo esaurito per il BiancoLimite per aggiudicare vinta/persa:Non stai esaminando alcuna partitaStai giocando con il NeroStai giocando con il BiancoNon è possibile ripristinare mentre la pausa è attivaNon hai ancora fatto alcuna mossaDevi eseguire la tua mossa prima di offrire la pattaIl tuo avversario non ha ancora esaurito il proprio tempoAtomicOpzione searchTime non corretta: %sOpzione timeControl non corretta: %sMuovi giuFabbricaFairyLosersVersione %d del protocollo non supportatasay Errore interno; moveType malformato %d (%d,%d-%d,%d)Muovi suxboard-4.8.0/po/it.po0000644000175000001440000016343012422467103011321 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # Traduzione di Giorgio Medeot, 2010 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110411\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "Versione %d del protocollo non supportata" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "Opzione timeControl non corretta: %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "Opzione searchTime non corretta: %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "La variante %s è supportata solo in modalità ICS" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Nome di variante sconosciuto: %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Avvio del motore di gioco" #: backend.c:1475 msgid "Bad game file" msgstr "File partita non riconosciuto" #: backend.c:1482 msgid "Bad position file" msgstr "File posizione non riconosciuto" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Impossibile avviare un match senza specificare alcun motore di gioco" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Apertura della porta comm %s fallita" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Connessione all'host %s, porta %s fallita" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Valore per initialMode non riconosciuto: %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "La modalità 'Analizza file' richiede un file partita" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "La modalità Analisi richiede un motore di gioco" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "La funzione di Analisi non è disponibile in modalità ICS" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "La modalità 'Bianco al motore di gioco' richiede almeno un motore" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "" "La funzione 'Bianco al motore di gioco' non è disponibile in modalità ICS" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "La modalità 'Nero al motore di gioco' richiede almeno un motore" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "" "La funzione 'Nero al motore di gioco' non è disponibile in modalità ICS" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "" "La modalità 'Motore di gioco 1 vs 2' richiede almeno un motore di gioco" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "La funzione 'Motore di gioco 1 vs 2' non è disponibile in modalità ICS" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "La modalità Allenamento richiede un file partita" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Errore in scrittura sull'ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Errore in lettura da tastiera" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Ricevuto carattere di Fine file (EOF) dalla tastiera" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Errore in scrittura sul display" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Errore nella lettura della lista mosse: sono presenti due intestazioni" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Errore nella lettura della lista mosse: mosse annidate" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Connessione chiusa dal'ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Errore in lettura dall'ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" "Partita troppo lunga; incrementare il valore di MAX_MOVES e ricompilare" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Errore nela lettura della lista mosse: è presente una posizione in più" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Impossibile interpretare la mossa dall'ICS: \"%s\"" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say Errore interno; moveType malformato %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "Stai giocando con il Nero" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Stai giocando con il Bianco" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Il tratto è al Bianco" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Il tratto è al Nero" #: backend.c:6761 msgid "Displayed position is not current" msgstr "La posizione mostrata non è quella corrente" #: backend.c:7007 msgid "Illegal move" msgstr "Mossa illegale" #: backend.c:7084 msgid "End of game" msgstr "Termine della partita" #: backend.c:7087 msgid "Incorrect move" msgstr "Mossa non corretta" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Mossa illegale \"%s\" dal %s motore di gioco" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s non supporta l'analisi" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Mossa illegale \"%s\" (rifiutata dal %s motore di gioco)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Avvio del %s motore di gioco %s su %s fallito: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Suggerimento: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Il motore di gioco accetta la tua offerta di patta" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Mossa ambigua nell'output dell'ICS: \"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Mossa illegale nell'output dell'ICS: \"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "Mosse mancanti nella lista mosse" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "La variante %s non è supportata da %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Avvio di '%s' fallito" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "In attesa del primo motore di gioco" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "In attesa del secondo motore di gioco" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 #, fuzzy msgid "Bad tournament file" msgstr "File partita non riconosciuto" #: backend.c:11052 #, fuzzy msgid "Waiting for other game(s)" msgstr "In attesa del primo motore di gioco" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Match %s vs %s: punteggio finale %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Mossa illegale: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Mossa ambigua: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Impossibile aprire \"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Impossibile costruire lista delle partite" #: backend.c:12190 msgid "No more games in this message" msgstr "In questo messaggio non sono presenti altre partite" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Non è ancora stata caricata nessuna partita" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Impossibile tornare più indietro" #: backend.c:12678 msgid "Game number out of range" msgstr "Indice superiore al numero di partite" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Impossibile effettuare la ricerca nel file di partita" #: backend.c:12747 msgid "Game not found in file" msgstr "Partita non trovata nel file" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Stringa FEN di posizione scorretta nel file" #: backend.c:13030 msgid "No moves in game" msgstr "Partita senza mosse" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Non è ancora stata caricata nessuna posizione" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Impossibile effettuare la ricerca nel file di posizione" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Posizione non trovata nel file" #: backend.c:13245 msgid "Black to play" msgstr "Il tratto è al Nero" #: backend.c:13248 msgid "White to play" msgstr "Il tratto è al Bianco" #: backend.c:13335 backend.c:13705 #, fuzzy msgid "Waiting for access to save file" msgstr "In attesa del secondo motore di gioco" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 #, fuzzy msgid "Saving position" msgstr "File posizione non riconosciuto" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "Non hai ancora fatto alcuna mossa" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "Non è presente nessuna partita non terminata" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Impossibile aprire l'applicazione cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "In attesa di risposta dall'avversario\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Occorre ancora eseguire la mossa per la partita\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Occorre ancora eseguire mosse per entrambe le partite\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Occorre ancora eseguire mosse per tutte le %d partite\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Occorre ancora eseguire una mossa per la partita %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Non è presente nessuna partita non terminata\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Pronto all'invio della posta\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Occorre ancora eseguire mosse per le partite %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "Modifica commento" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Modifica commento a %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "Il tratto non è al Bianco" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Il tratto non è al Nero" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "Attendi il tuo turno" #: backend.c:14774 msgid "Training mode off" msgstr "Modalità Allenamento disattivata" #: backend.c:14782 msgid "Training mode on" msgstr "Modalità Allenamento attivata" #: backend.c:14785 msgid "Already at end of game" msgstr "Già alla fine della partita" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Avviso: Stai ancora giocando una partita" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Avviso: Stai ancora osservando una partita" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Avviso: Stai ancora esaminando una partita" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "La casa è già occupata" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "Non vi è alcuna offerta pendente a questa mossa" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Il tuo avversario non ha ancora esaurito il proprio tempo" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "Devi eseguire la tua mossa prima di offrire la patta" #: backend.c:15781 msgid "You are not examining a game" msgstr "Non stai esaminando alcuna partita" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "Non è possibile ripristinare mentre la pausa è attiva" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "E' il tuo turno" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "Attendi il tuo turno" #: backend.c:15909 msgid "No hint available" msgstr "Nessun suggerimento disponibile" #: backend.c:15924 backend.c:15955 ngamelist.c:364 #, fuzzy msgid "Game list not loaded or empty" msgstr "Non è ancora stata caricata nessuna partita" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Errore in scrittura sul %s motore di gioco" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Errore: il %s motore di gioco (%s) è terminato in maniera inaspettata" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Errore in lettura dal %s motore di gioco (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "La mossa mostrata non è quella corrente" #: backend.c:17083 msgid "Could not parse move" msgstr "Impossibile leggere mossa" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Tempo esaurito per entrambi" #: backend.c:17210 msgid "White's flag fell" msgstr "Tempo esaurito per il Bianco" #: backend.c:17232 msgid "Black's flag fell" msgstr "" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Stringa FEN di posizione scorretta negli Appunti" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "Impossibile leggere mossa" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "Aggiorna F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 #, fuzzy msgid "Select Engine:" msgstr "Motore" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 #, fuzzy msgid "Default Number of Games in Match (or Pairing):" msgstr "Partite per match:" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 #, fuzzy msgid "Save Tourney Games on:" msgstr "Impostazioni salvataggio partita" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "Motori di gioco... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Impostazioni generali" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 #, fuzzy msgid "Replace Engine" msgstr "Motore" #: dialogs.c:312 #, fuzzy msgid "Upgrade Engine" msgstr "Motore" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Impostazioni suoni" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Trascinamento animato" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Mosse animate" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Aggiudica sul tempo" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Ruota vista automaticamente" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Alla cieca" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Nascondi l'output del motore se gioca contro un uomo" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Evidenzia l'ultima mossa" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Evidenzia con una freccia" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Muovi con click singolo" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Aggiornamenti continui (per Modalità di analisi)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Pensa sul mio tempo" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Chiedi conferma alla chiusura" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Mostra popup per mosse errate" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "Scarica lista mosse" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Mostra coordinate" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Verifica mosse illegali" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 #, fuzzy msgid "Zoom factor in Evaluation Graph:" msgstr "Grafico della valutazione" #: dialogs.c:452 #, fuzzy msgid "Normal" msgstr "Normale" #: dialogs.c:453 #, fuzzy msgid "Makruk" msgstr "Makruk" #: dialogs.c:454 msgid "FRC" msgstr "FRC" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "Knightmate" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 #, fuzzy msgid "Cylinder *" msgstr "Cilindrici" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "Atomic" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 #, fuzzy msgid "Crazyhouse" msgstr "Crazyhouse" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 #, fuzzy msgid "Bughouse" msgstr "Bughouse" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 #, fuzzy msgid "Suicide" msgstr "Suicide" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "Losers" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "Fairy" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "" "Attenzione: il secondo motore di gioco (%s) non supporta questa azione!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "Varianti di gioco" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Num max di CPU:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Dimensione Hash [MB]:" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "Cartella EGTB:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Dimensione EGTB [MB]:" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Profondità Libro:" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Varianti Libro:" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Libro proprio per motore 1" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Impostazioni motori di gioco" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Individua scacco matto" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Verifica gli annunci del motore" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Patta per materiale insufficiente" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Aggiudica patte triviali" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Aggiudica patta dopo:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Limite per aggiudicare vinta/persa:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Output motore 1 sempre riferito al Bianco" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Output motore 2 sempre riferito al Bianco" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "Aggiudica al Bianco" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Auto Kibitz" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Commenti automatici" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Osserva automaticamente" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Porta in primo piano" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Osserva in bckgnd" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Doppia scacchiera" #: dialogs.c:684 msgid "Get Move List" msgstr "Scarica lista mosse" #: dialogs.c:685 msgid "Quiet Play" msgstr "Non disturbare durante il gioco" #: dialogs.c:686 msgid "Seek Graph" msgstr "Grafico delle richieste" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Auto aggiorna" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 #, fuzzy msgid "Quit after game" msgstr "In attesa del primo motore di gioco" #: dialogs.c:690 msgid "Premove" msgstr "Premossa" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "1° mossa Bianco" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "1° mossa Nero" #: dialogs.c:696 msgid "Alarm" msgstr "Allarme" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "Impostazioni ICS" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 #, fuzzy msgid "No games before year:" msgstr "Non è ancora stata caricata nessuna partita" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "Impostazioni apertura partita" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "Impostazioni salvataggio partita" #: dialogs.c:796 msgid "No Sound" msgstr "Silenzioso" #: dialogs.c:797 msgid "Default Beep" msgstr "Beep" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "Ascolta" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "Impostazioni suoni" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Pezzi neri" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Case bianche" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Case nere" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Case evidenziate" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "Premosse evidenziate" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "Monocromatico" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "Impostazioni scacchiera" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Pensa sul mio tempo" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "Modifica" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Informazioni partita" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 #, fuzzy msgid "Engine has no options" msgstr "Libro proprio per motore 1" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Disposizione iniziale:" #: dialogs.c:1565 #, fuzzy msgid "randomize" msgstr "Casuale" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Nuova partita Shuffle..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "Riduci il tempo di un fattore:" #: dialogs.c:1609 #, fuzzy msgid "Engine #1" msgstr "Motore" #: dialogs.c:1610 #, fuzzy msgid "Engine #2 / Human" msgstr "Libro proprio per motore 1" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Errore in scrittura sul motore di gioco" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "Cancella" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Re" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "Generali..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Cavallo" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Alfiere" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Torre" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Arcivescovo" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Cancelliere" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Donna" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Promuovi" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Varianti di gioco" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "Impostazioni ICS" #: dialogs.c:2141 msgid "factory" msgstr "Fabbrica" #: dialogs.c:2142 msgid "up" msgstr "Muovi su" #: dialogs.c:2143 msgid "down" msgstr "Muovi giu" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "Impostazioni apertura partita" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Errore" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Errore fatale" #: dialogs.c:2306 msgid "Exiting" msgstr "Chiusura in corso" #: dialogs.c:2317 msgid "Information" msgstr "Informazione" #: dialogs.c:2324 msgid "Note" msgstr "Nota" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Bianco" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Pedone" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Elefante" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Cannone" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Degrada" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Casa vuota" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Svuota scacchiera" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Nero" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "File" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Modifica" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Visualizza" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Modalità" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Azioni" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Motore" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Impostazioni" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Aiuto" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "File" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "Filtro" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "Filtro" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "Commenti" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "Output del motore di gioco" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "" #: gamelist.c:376 #, fuzzy, c-format msgid "Reading game file (%d)" msgstr "File partita non riconosciuto" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 #, fuzzy msgid "Failed to open file" msgstr "Impossibile aprire l'applicazione cmail" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Informazioni su Winboard" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "Nuova partita Shuffle..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Nuova partita Shuffle..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "Varianti di gioco" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "Apertura partita... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "File posizione non riconosciuto" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "File posizione non riconosciuto" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "File posizione non riconosciuto" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "Salvataggio partita... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "File posizione non riconosciuto" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Salvataggio partita... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "Salvataggio partita... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "Copia lista partite" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "Copia posizione Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "Copia lista partite" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "Incolla partita Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "Incolla posizione Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "Modifica commento" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "File posizione non riconosciuto" #: menus.c:632 msgid "Edit Tags" msgstr "Modifica informazioni partita..." #: menus.c:633 msgid "Edit Comment" msgstr "Modifica commento..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "Libro delle aperture..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "Annota" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "Tronca la partita End" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "Il tratto è al Nero" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "Vai alla fine Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "Ruota vista automaticamente" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "Scarica lista mosse" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "Grafico della valutazione" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "Lista partite..." #: menus.c:657 msgid "Comments" msgstr "Commenti" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Scacchiera..." #: menus.c:662 msgid "Game List Tags..." msgstr "Impostazioni lista partite..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "Bianco al motore di gioco Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "Match tra i motori di gioco" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "Motore di gioco 1 vs 2 Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "Avvia analisi Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "Analizza file Ctrl+F" #: menus.c:674 msgid "Training" msgstr "Allenamento" #: menus.c:675 msgid "ICS Client" msgstr "Connetti ad un ICS" #: menus.c:677 msgid "Machine Match" msgstr "Match tra i motori di gioco" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "Chiama il Tempo F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "Smetti di osservare F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "Smetti di esaminare F11" #: menus.c:695 msgid "Upload to Examine" msgstr "Carica su ICS per esaminare" #: menus.c:697 msgid "Adjudicate to White" msgstr "Aggiudica al Bianco" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Aggiudica al Nero" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Aggiudica come Patta" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "Impostazioni motore 1" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "Motori di gioco... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "Impostazioni motore 1" #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "Impostazioni motore 2" #: menus.c:712 msgid "Hint" msgstr "Suggerimento..." #: menus.c:713 msgid "Book" msgstr "Libro delle aperture..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "Annulla mossa Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "Generali..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "Controllo Tempo... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Motori di gioco... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Aggiudicazioni... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Apertura partita... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Salvataggio partita... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Lista partite..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "Suoni..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "Evidenzia trascinamento" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Evidenzia con una freccia" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "Aggiornamenti continui" #: menus.c:751 msgid "Popup Exit Message" msgstr "Chiedi conferma alla chiusura" #: menus.c:753 msgid "Show Coords" msgstr "Mostra coordinate" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "Nascondi l'output del motore se gioca contro un uomo" #: menus.c:758 msgid "Save Settings Now" msgstr "Salva impostazioni" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Salva impostazioni all'uscita" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "Informazioni su Winboard" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "Motore" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "mosse" #: nengineoutput.c:155 msgid "Engine output" msgstr "Output del motore di gioco" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Grafico della valutazione" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "Grafico della valutazione" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "File posizione non riconosciuto" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "Informazioni partita" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "Nessuna partita selezionata" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Impossibile avanzare oltre" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, fuzzy, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "Match %s vs %s: punteggio finale %d-%d-%d" #: ngamelist.c:283 msgid "There is no game list" msgstr "Nessuna lista partite" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "OK" #~ msgid "ICS ..." #~ msgstr "ICS..." #~ msgid "cancel" #~ msgstr "Cancella" #~ msgid "New Game Ctrl+N" #~ msgstr "Nuova partita Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "Nuova variante... Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "Apri partita da file... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Apri posizione da file... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "Salva partita... Ctrl+S" #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "Salva posizione... Ctrl+Shift+S" #~ msgid "Quit Ctr+Q" #~ msgstr "Esci" #~ msgid "Copy Game Ctrl+C" #~ msgstr "Copia partita Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Modifica partita Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Modifica posizione Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "Ripristina Home" #~ msgid "Backward Alt+Left" #~ msgstr "Indietro Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "Avanti Alt+Right" #~ msgid "Back to Start Alt+Home" #~ msgstr "Torna all'inizio Alt+Home" #~ msgid "Flip View F2" #~ msgstr "Ruota la scacchiera F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "Output del motore di gioco Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "Lista mosse Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "Grafico della valutazione Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "Lista partite Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "Nero al motore di gioco Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "Modifica partita Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Modifica posizione Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "Pausa Pause" #~ msgid "Accept F3" #~ msgstr "Accetta F3" #~ msgid "Decline F4" #~ msgstr "Declina F4" #~ msgid "Rematch F12" #~ msgstr "Rigioca F12" #~ msgid "Draw F6" #~ msgstr "Offri Patta F6" #~ msgid "Adjourn F7" #~ msgstr "Aggiorna F7" #~ msgid "Abort F8" #~ msgstr "Interrompi F8" #~ msgid "Resign F9" #~ msgstr "Abbandona F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "Muovi subito Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "Promuovi a Donna Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "Mosse animate Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "Aggiudica sul tempo Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "Pensa sul mio tempo Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "Nascondi analisi Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "Verifica mosse illegali Ctrl+Shift+L" #~ msgid "Drop" #~ msgstr "Paracadutaggio" #, fuzzy #~ msgid "could not open: " #~ msgstr "Impossibile leggere mossa" #~ msgid "Promotion" #~ msgstr "Promozione" #~ msgid "ok" #~ msgstr "OK" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "Evidenzia trascinamento" #~ msgid "You can only start a match from the initial position." #~ msgstr "Un match può essere avviato solo dalla posizione iniziale." #~ msgid "White " #~ msgstr "Bianco " #~ msgid "Black " #~ msgstr "Nero " #~ msgid "Close" #~ msgstr "Chiudi" #~ msgid "sec/move" #~ msgstr "secondi per mossa" xboard-4.8.0/po/tr.po0000644000175000001440000014013712422467103011331 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # A. Alper Atc , 2003. # msgid "" msgstr "" "Project-Id-Version: XBoard 4.2.7\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2003-12-26 16:38+0200\n" "Last-Translator: A. Alper Atc \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-9\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, fuzzy, c-format msgid "Failed to open indirection file %s" msgstr "Dosya alamad" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "" #: backend.c:1452 msgid "Starting chess program" msgstr "" #: backend.c:1475 msgid "Bad game file" msgstr "" #: backend.c:1482 msgid "Bad position file" msgstr "" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "" #: backend.c:4286 msgid "Error reading from ICS" msgstr "" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "Siz Siyah'snz" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "Siz Beyaz'snz" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Sra Beyaz'da" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Sra Siyah'ta" #: backend.c:6761 msgid "Displayed position is not current" msgstr "" #: backend.c:7007 msgid "Illegal move" msgstr "Geersiz hamle" #: backend.c:7084 msgid "End of game" msgstr "Oyun sonu" #: backend.c:7087 msgid "Incorrect move" msgstr "Yanl hamle" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "" #: backend.c:9221 #, fuzzy, c-format msgid "Hint: %s" msgstr "pucu" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "" #: backend.c:9809 msgid "Gap in move list" msgstr "" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 #, fuzzy msgid "Bad tournament file" msgstr "Dosya alamad" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "" #: backend.c:12190 msgid "No more games in this message" msgstr "" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "" #: backend.c:12678 msgid "Game number out of range" msgstr "" #: backend.c:12689 msgid "Can't seek on game file" msgstr "" #: backend.c:12747 msgid "Game not found in file" msgstr "" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "" #: backend.c:13030 msgid "No moves in game" msgstr "" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "" #: backend.c:13245 msgid "Black to play" msgstr "" #: backend.c:13248 msgid "White to play" msgstr "" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "" #: backend.c:14252 msgid "Edit comment" msgstr "" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "" #: backend.c:14501 msgid "It is not Black's turn" msgstr "" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" #: backend.c:14774 msgid "Training mode off" msgstr "" #: backend.c:14782 msgid "Training mode on" msgstr "" #: backend.c:14785 msgid "Already at end of game" msgstr "" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "" #: backend.c:15781 msgid "You are not examining a game" msgstr "" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "" #: backend.c:15909 msgid "No hint available" msgstr "" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "" #: backend.c:17083 msgid "Could not parse move" msgstr "" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Berabere" #: backend.c:17210 msgid "White's flag fell" msgstr "Beyaz ah mat" #: backend.c:17232 msgid "Black's flag fell" msgstr "Siyah ah mat" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 msgid "Could not create book" msgstr "" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "Dosya alamad" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 #, fuzzy msgid "Save Tourney Games on:" msgstr "Oyunu Kaydet" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 msgid "Common Engine" msgstr "" #: dialogs.c:309 dialogs.c:441 #, fuzzy msgid "General Options" msgstr "Seenekler" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 msgid "Replace Engine" msgstr "" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "Seenekler" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Tahtay Grmeden" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 #, fuzzy msgid "Ponder Next Move" msgstr "Sonraki Oyunu Ykle" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "Hamle Listesini Gster" #: dialogs.c:424 msgid "Show Coordinates" msgstr "" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "At" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 #, fuzzy msgid "losers" msgstr "kapat" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "" #: dialogs.c:624 msgid "EGTB Path:" msgstr "" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "" #: dialogs.c:648 msgid "Detect all Mates" msgstr "" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "Oyunu Kaydet" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "" #: dialogs.c:678 msgid "Auto-Comment" msgstr "" #: dialogs.c:679 msgid "Auto-Observe" msgstr "" #: dialogs.c:680 #, fuzzy msgid "Auto-Raise Board" msgstr "XBoard Hakknda" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "" #: dialogs.c:684 #, fuzzy msgid "Get Move List" msgstr "Hamle Listesini Gster" #: dialogs.c:685 msgid "Quiet Play" msgstr "" #: dialogs.c:686 msgid "Seek Graph" msgstr "" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "" #: dialogs.c:696 msgid "Alarm" msgstr "" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 #, fuzzy msgid "ICS Options" msgstr "Seenekler" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 msgid "No games before year:" msgstr "" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 #, fuzzy msgid "Load Game Options" msgstr "Oyun Ykle" #: dialogs.c:772 #, fuzzy msgid "Auto-Save Games" msgstr "Oyunu Kaydet" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 #, fuzzy msgid "Save Games on File:" msgstr "Oyunu Kaydet" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 #, fuzzy msgid "Save Game Options" msgstr "Oyunu Kaydet" #: dialogs.c:796 msgid "No Sound" msgstr "" #: dialogs.c:797 msgid "Default Beep" msgstr "" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 #, fuzzy msgid "User File" msgstr "Dosya" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 #, fuzzy msgid "Draw:" msgstr "Berabere" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 #, fuzzy msgid "Channel:" msgstr "iptal" #: dialogs.c:850 #, fuzzy msgid "Channel 1:" msgstr "iptal" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 #, fuzzy msgid "Sound Options" msgstr "Seenekler" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "" #: dialogs.c:908 msgid "Light Square Color:" msgstr "" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "" #: dialogs.c:920 msgid "Highlight Color:" msgstr "" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 #, fuzzy msgid "Mono Mode" msgstr "Kip" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 #, fuzzy msgid "Board Options" msgstr "Seenekler" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "temizle" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "Sonraki Oyunu Ykle" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "Oyunu Dzenle" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "" #: dialogs.c:1385 #, fuzzy msgid "ICS input box" msgstr "ICS stemcisi" #: dialogs.c:1417 #, fuzzy msgid "Type a move" msgstr "Geersiz hamle" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "" #: dialogs.c:1565 msgid "randomize" msgstr "" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "" #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "" #: dialogs.c:1609 msgid "Engine #1" msgstr "" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "iptal" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "ah" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "" #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "At" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Fil" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Kale" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 #, fuzzy msgid "Archbishop" msgstr "Fil" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 #, fuzzy msgid "Chancellor" msgstr "iptal" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Vezir" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 #, fuzzy msgid "Promote" msgstr "Terfi" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "Oyunu Sfrla" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "Seenekler" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "" #: dialogs.c:2143 msgid "down" msgstr "" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "Oyun Ykle" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Hata" #: dialogs.c:2306 msgid "Fatal Error" msgstr "" #: dialogs.c:2306 msgid "Exiting" msgstr "" #: dialogs.c:2317 msgid "Information" msgstr "Bilgi" #: dialogs.c:2324 msgid "Note" msgstr "Not" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Beyaz" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Piyon" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Kareyi Boalt" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Tahtay Temizle" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Siyah" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Dosya" #: dialogs.c:2475 menus.c:810 #, fuzzy msgid "Edit" msgstr "Oyunu Dzenle" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Kip" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Eylem" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Seenekler" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Yardm" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "Dosya" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "Dosya ad girii" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "Analiz edilecek dosya" #: dialogs.c:2857 msgid "Contents of" msgstr "" #: dialogs.c:2883 #, fuzzy msgid " next page" msgstr "sonraki" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, fuzzy, c-format msgid "Failed to open file '%s'\n" msgstr "Dosya alamad" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Dosya alamad" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "XBoard Hakknda" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "Oyunu Sfrla" #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "Oyunu Kaydet" #: menus.c:603 msgid "New Variant..." msgstr "" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "Oyun Ykle" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "Sonraki Pozisyonu Ykle" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "Sonraki Pozisyonu Ykle" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "nceki Pozisyonu Ykle" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "Oyunu Kaydet" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "Ayn Pozisyonu Tekrar Ykle" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "Oyunu Kaydet" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "Oyunu Kaydet" #: menus.c:615 msgid "Mail Move" msgstr "Hamleyi Postala" #: menus.c:616 msgid "Reload CMail Message" msgstr "CMail letisini Tekrar Ykle" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "Oyun Listesini Gster" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "Pozisyonu Kopyala" #: menus.c:625 #, fuzzy msgid "Copy Game List" msgstr "Oyun Listesini Gster" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "Oyunu Sfrla" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "Sonraki Pozisyonu Ykle" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "Oyunu Sfrla" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "Sonraki Pozisyonu Ykle" #: menus.c:632 msgid "Edit Tags" msgstr "" #: menus.c:633 msgid "Edit Comment" msgstr "" #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "Kitap" #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "" #: menus.c:638 msgid "Truncate Game" msgstr "" #: menus.c:640 msgid "Backward" msgstr "Geri" #: menus.c:641 msgid "Forward" msgstr "leri" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "En Baa" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "En Sona" #: menus.c:648 msgid "Flip View" msgstr "" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "Hamle listesi" #: menus.c:652 msgid "Evaluation Graph" msgstr "" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "Oyun Listesini Gster" #: menus.c:657 msgid "Comments" msgstr "" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "" #: menus.c:662 msgid "Game List Tags..." msgstr "" #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "Bilgisayar Beyaz" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "Bilgisayar Siyah" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "kisi de Bilgisayar" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "Analiz Kipi" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "Analiz Dosyas" #: menus.c:674 msgid "Training" msgstr "Eitim" #: menus.c:675 msgid "ICS Client" msgstr "ICS stemcisi" #: menus.c:677 #, fuzzy msgid "Machine Match" msgstr "Bilgisayar Siyah" #: menus.c:678 msgid "Pause" msgstr "Duraklat" #: menus.c:683 msgid "Accept" msgstr "Kabul et" #: menus.c:684 msgid "Decline" msgstr "Red et" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "Terk et" #: menus.c:688 #, fuzzy msgid "Draw" msgstr "Berabere" #: menus.c:689 msgid "Adjourn" msgstr "Ertele" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 msgid "Stop Observing" msgstr "" #: menus.c:694 msgid "Stop Examining" msgstr "" #: menus.c:695 msgid "Upload to Examine" msgstr "" #: menus.c:697 msgid "Adjudicate to White" msgstr "" #: menus.c:698 msgid "Adjudicate to Black" msgstr "" #: menus.c:699 msgid "Adjudicate Draw" msgstr "" #: menus.c:704 msgid "Edit Engine List..." msgstr "" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 msgid "Load New 2nd Engine..." msgstr "" #: menus.c:709 msgid "Engine #1 Settings..." msgstr "" #: menus.c:710 msgid "Engine #2 Settings..." msgstr "" #: menus.c:712 msgid "Hint" msgstr "pucu" #: menus.c:713 msgid "Book" msgstr "Kitap" #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "Hamleyi Geri Al" #: menus.c:722 msgid "General..." msgstr "" #: menus.c:724 msgid "Time Control..." msgstr "" #: menus.c:725 msgid "Common Engine..." msgstr "" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "Oyunu Kaydet" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "Oyun Ykle" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "Oyunu Kaydet" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "Oyun Listesini Gster" #: menus.c:732 msgid "Sounds..." msgstr "" #: menus.c:735 msgid "Always Queen" msgstr "Hep Vezir Olsun" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "" #: menus.c:746 msgid "Highlight With Arrow" msgstr "" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "" #: menus.c:751 msgid "Popup Exit Message" msgstr "" #: menus.c:753 msgid "Show Coords" msgstr "" #: menus.c:754 msgid "Hide Thinking" msgstr "" #: menus.c:758 msgid "Save Settings Now" msgstr "" #: menus.c:759 msgid "Save Settings on Exit" msgstr "" #: menus.c:764 msgid "Info XBoard" msgstr "XBoard Info Sayfas" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "XBoard Man Sayfas" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "" #: nengineoutput.c:155 msgid "Engine output" msgstr "" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "Seenekler" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 msgid "tags" msgstr "" #: ngamelist.c:91 msgid "next" msgstr "sonraki" #: ngamelist.c:92 msgid "close" msgstr "kapat" #: ngamelist.c:116 msgid "No game selected" msgstr "" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 #, fuzzy msgid "previous page" msgstr "nceki Oyunu Ykle" #: ngamelist.c:214 #, fuzzy msgid "next page" msgstr "sonraki" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "" #: ngamelist.c:283 msgid "There is no game list" msgstr "" #: nhistory.c:109 msgid "Move list" msgstr "Hamle listesi" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "" #, fuzzy #~ msgid "Match Options" #~ msgstr "Seenekler" #~ msgid "cancel" #~ msgstr "iptal" #, fuzzy #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "Pozisyon Ykle" #, fuzzy #~ msgid "Save Position Ctrl+Shift+S" #~ msgstr "Pozisyonu Kaydet" #, fuzzy #~ msgid "Copy Game Ctrl+C" #~ msgstr "Oyunu Kopyala" #, fuzzy #~ msgid "Paste Game Ctrl+V" #~ msgstr "Oyunu Yaptr" #, fuzzy #~ msgid "Paste Position Ctrl+Shift+V" #~ msgstr "Pozisyonu Yaptr" #, fuzzy #~ msgid "Edit Game Ctrl+E" #~ msgstr "Oyunu Dzenle" #, fuzzy #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "Pozisyonu Dzenle" #, fuzzy #~ msgid "Machine Black Ctrl+B" #~ msgstr "Bilgisayar Siyah" #~ msgid "Can't open file" #~ msgstr "Dosya alamyor" #~ msgid "Promotion" #~ msgstr "Terfi" #, fuzzy #~ msgid "Promote to what?" #~ msgstr "Piyon hangi taa terfi edilsin?" #~ msgid "ok" #~ msgstr "tamam" #~ msgid "enter" #~ msgstr "gir" #~ msgid "load" #~ msgstr "ykle" #~ msgid "prev" #~ msgstr "nceki" #~ msgid "White " #~ msgstr "Beyaz " #~ msgid "Black " #~ msgstr "Siyah " #~ msgid "Close" #~ msgstr "Kapat" #, fuzzy #~ msgid " " #~ msgstr "Terk et" #~ msgid "Reload Same Game" #~ msgstr "Ayn Oyunu Tekrar Ykle" #~ msgid "Exit" #~ msgstr "k" #~ msgid "Step" #~ msgstr "Adm" #~ msgid "P" #~ msgstr "D" #~ msgid "edit" #~ msgstr "dzenle" xboard-4.8.0/po/zh_CN.po0000644000175000001440000015620312422467103011706 00000000000000# XBoard -- a graphical chessboard for X # Copyright (C) 1991 by Digital Equipment Corporation, Maynard, Massachusetts. # Enhancements Copyright (C) 1992-98 Free Software Foundation, Inc. # This file is distributed under the same license as the XBoard package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU xboard master-20110507\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "协议版本 %d 不被支持" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "" #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "非法的\"timeControl\"(时间控制)选项 %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "非法的\"searchTime\"(搜索时间)选项 %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "变体 %s 只在ICS模式下支持" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "未知的变体名 %s" #: backend.c:1452 msgid "Starting chess program" msgstr "启动国际象棋程序" #: backend.c:1475 msgid "Bad game file" msgstr "棋局文件错误" #: backend.c:1482 msgid "Bad position file" msgstr "局面文件错误" #: backend.c:1496 msgid "Pick new game" msgstr "" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "没有象棋程序时无法进行比赛" #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "无法打开通讯端口 %s" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "无法连接主机 %s 端口 %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "未知的\"initialMode\"(初始模式)选项 %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "\"AnalyzeFile\"(分析文件)模式必须指定一个棋局文件" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "\"Analysis\"(分析)模式必须启动国际象棋引擎" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "\"Analysis\"(分析)模式无法在ICS模式下工作" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "\"MachineWhite\"(电脑执白)模式必须启动国际象棋引擎" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "\"MachineWhite\"(电脑执白)模式无法在ICS模式下运行" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "\"MachineBlack\"(电脑执黑)模式必须启动国际象棋引擎" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "\"MachineBlack\"(电脑执黑)模式无法在ICS模式下运行" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "\"TwoMachines\"(分析)模式必须启动国际象棋引擎" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "\"TwoMachines\"(电脑对弈)模式无法在ICS模式下运行" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "\"Training\"(训练)模式必须指定一个棋局文件" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "发送信息给ICS时出错" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "读取键盘时出错" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "读取键盘时遇到文件尾" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "发送信息给显示器时出错" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "读取着法时出错,出现两个开头" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "读取着法时出错,嵌套错误" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "连接被ICS关闭" #: backend.c:4286 msgid "Error reading from ICS" msgstr "读取ICS信息时出错" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "棋局太长,需要增加\"MAX_MOVES\"并重新编译" #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "读取着法时出错,超出棋盘" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "无法解析从ICS读到的着法\"%s\"" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "say 内部错误,非法的\"moveType\"(着法类型) %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "" #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "" #: backend.c:6700 msgid "You are playing Black" msgstr "你在执黑" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "你在执白" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "轮到白方走棋" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "轮到黑方走棋" #: backend.c:6761 msgid "Displayed position is not current" msgstr "显示的局面不是当前局面" #: backend.c:7007 msgid "Illegal move" msgstr "着法错误" #: backend.c:7084 msgid "End of game" msgstr "棋局结束" #: backend.c:7087 msgid "Incorrect move" msgstr "着法错误" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "" #: backend.c:7588 msgid "only marked squares are legal" msgstr "" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "" #: backend.c:8392 msgid "could not load EGBB library" msgstr "" #: backend.c:8395 msgid "wrong EGBB version" msgstr "" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "" #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "从%s机器读到不合理着法\"%s\"" #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s 不支持分析功能" #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "不合理着法\"%s\" (%s国际象棋程序拒绝接受该着法)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "无法启动%s国际象棋程序 %s(在主机 %s 上),%s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "提示 %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr " *.*" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "ICS输出不明确的着法\"%s\"" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "ICS输出不明确的着法\"%s\"" #: backend.c:9809 msgid "Gap in move list" msgstr "着法断开" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "变体 %s 不被 %s 所支持" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr "" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "无法启动'%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "等待第一个国际象棋程序" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "等待第二个国际象棋程序" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "" #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "" #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "" #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" #: backend.c:10837 msgid "Not enough participants" msgstr "" #: backend.c:11040 msgid "Bad tournament file" msgstr "" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "" #: backend.c:11065 msgid "No pairing engine specified" msgstr "" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "比赛 %s vs. %s: 最终比分 %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "不合理着法 %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "不明确的着法 %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "无法打开\"%s\"" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "无法建立棋局列表" #: backend.c:12190 msgid "No more games in this message" msgstr "这条信息不包含更多的棋局" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "尚未有棋局载入" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "无法再后退了" #: backend.c:12678 msgid "Game number out of range" msgstr "棋局数量超出范围" #: backend.c:12689 msgid "Can't seek on game file" msgstr "无法搜索棋局文件" #: backend.c:12747 msgid "Game not found in file" msgstr "文件中没有找到棋局" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "文件中的FEN局面错误" #: backend.c:13030 msgid "No moves in game" msgstr "棋局中没有着法" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "尚未有局面载入" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "无法搜索局面文件" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "文件中没有着到局面" #: backend.c:13245 msgid "Black to play" msgstr "轮到黑方走棋" #: backend.c:13248 msgid "White to play" msgstr "轮到白方走棋" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "" #: backend.c:13337 msgid "Saving game" msgstr "" #: backend.c:13338 msgid "Bad Seek" msgstr "" #: backend.c:13707 msgid "Saving position" msgstr "" #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" #: backend.c:13890 msgid "You have not made a move yet" msgstr "一步棋也没走过" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" #: backend.c:13916 msgid "No unfinished games" msgstr "No unfinished games" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Failed to invoke cmail" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Waiting for reply from opponent\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "Still need to make move for game\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "Still need to make moves for both games\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "Still need to make moves for all %d games\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "Still need to make a move for game %s\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "No unfinished games\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Ready to send mail\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "Still need to make moves for games %s\n" #: backend.c:14252 msgid "Edit comment" msgstr "编辑注释" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "编辑注释 %d.%s%s" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "" #: backend.c:14420 msgid "It is not White's turn" msgstr "没有轮到白方走棋" #: backend.c:14501 msgid "It is not Black's turn" msgstr "没有轮到黑方走棋" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "" #: backend.c:14637 backend.c:15799 #, fuzzy msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "等待对手走棋" #: backend.c:14774 msgid "Training mode off" msgstr "训练模式已关闭" #: backend.c:14782 msgid "Training mode on" msgstr "训练模式已打开" #: backend.c:14785 msgid "Already at end of game" msgstr "棋局已经结束" #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "注意:你正在进行棋局" #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "注意:你正在旁观棋局" #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "注意:你正在研究棋局" #: backend.c:14938 msgid "Click clock to clear board" msgstr "" #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "" #: backend.c:15268 msgid "That square is occupied" msgstr "格子已放棋子" #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "该着法没有待定的提议" #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "对手没有超时" #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "必须走完棋才能提和" #: backend.c:15781 msgid "You are not examining a game" msgstr "没有分析棋局" #: backend.c:15785 msgid "You can't revert while pausing" msgstr "暂停时不能复原棋局" #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "轮到你走棋" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 #, fuzzy msgid "Wait until your turn." msgstr "等待对手走棋" #: backend.c:15909 msgid "No hint available" msgstr "没有可用的提示" #: backend.c:15924 backend.c:15955 ngamelist.c:364 #, fuzzy msgid "Game list not loaded or empty" msgstr "尚未有棋局载入" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "" #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "发送信息到%s国际象棋程序时出错" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "错误:%s国际象棋程序(%s)突然退出了" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "从%s国际象棋程序(%s)接收信息时出错" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "" #: backend.c:17074 msgid "Displayed move is not current" msgstr "显示的着法不是当前着法" #: backend.c:17083 msgid "Could not parse move" msgstr "无法解析着法" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "双方都超时了" #: backend.c:17210 msgid "White's flag fell" msgstr "白方超时" #: backend.c:17232 msgid "Black's flag fell" msgstr "黑方超时" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "剪贴板的FEN局面错误" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "" #: book.c:703 msgid "Book Fault" msgstr "" #: book.c:839 msgid "Hash keys are different" msgstr "" #: book.c:1015 #, fuzzy msgid "Could not create book" msgstr "无法解析着法" #: dialogs.c:283 #, fuzzy msgid "Tournament file: " msgstr "封盘(J) F7" #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "" #: dialogs.c:285 msgid "Sync after round" msgstr "" #: dialogs.c:286 msgid "Sync after cycle" msgstr "" #: dialogs.c:287 msgid "Tourney participants:" msgstr "" #: dialogs.c:288 msgid "Select Engine:" msgstr "" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "" #: dialogs.c:308 #, fuzzy msgid "Common Engine" msgstr "通用引擎设置(E)... Alt+Shift+U" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "常规选项" #: dialogs.c:310 msgid "Continue Later" msgstr "" #: dialogs.c:311 #, fuzzy msgid "Replace Engine" msgstr "引擎(N)" #: dialogs.c:312 #, fuzzy msgid "Upgrade Engine" msgstr "引擎(N)" #: dialogs.c:313 msgid "Clone Tourney" msgstr "" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "" #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "" #: dialogs.c:383 #, fuzzy msgid "Tournament Options" msgstr "声音" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "动画拖拽(D)" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "动画走棋(A)" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "自动超时判负(F) Ctrl+Shift+F" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "自动翻转棋盘(V)" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "盲棋(B)" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "与人对弈时隐藏思考细节" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "醒目提示上一着法(M)" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "用箭头突出移动" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "单击移动(M)" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "定期更新(分析模式)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "同步思考(N)" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "退出时提示(P)" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "提示错误着法(E)" #: dialogs.c:423 #, fuzzy msgid "Scores in Move List" msgstr "获取着法列表(G)" #: dialogs.c:424 msgid "Show Coordinates" msgstr "显示坐标(C)" #: dialogs.c:425 msgid "Show Target Squares" msgstr "" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "检查着法合理性(L) Cl+Sh+L" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "" #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "" #: dialogs.c:432 #, fuzzy msgid "Zoom factor in Evaluation Graph:" msgstr "评价图" #: dialogs.c:452 msgid "Normal" msgstr "" #: dialogs.c:453 msgid "Makruk" msgstr "" #: dialogs.c:454 msgid "FRC" msgstr "" #: dialogs.c:455 msgid "Shatranj" msgstr "" #: dialogs.c:456 msgid "Wild castle" msgstr "" #: dialogs.c:457 #, fuzzy msgid "Knightmate" msgstr "马" #: dialogs.c:458 msgid "No castle" msgstr "" #: dialogs.c:459 msgid "Cylinder *" msgstr "" #: dialogs.c:460 msgid "3-checks" msgstr "" #: dialogs.c:461 msgid "berolina *" msgstr "" #: dialogs.c:462 msgid "atomic" msgstr "" #: dialogs.c:463 msgid "two kings" msgstr "" #: dialogs.c:464 msgid " " msgstr "" #: dialogs.c:465 msgid "Spartan" msgstr "" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "" #: dialogs.c:469 msgid "Holdings Size:" msgstr "" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "" #: dialogs.c:475 msgid "Seirawan" msgstr "" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "" #: dialogs.c:477 msgid "Superchess" msgstr "" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "" #: dialogs.c:479 msgid "Crazyhouse" msgstr "" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "" #: dialogs.c:481 msgid "Bughouse" msgstr "" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "" #: dialogs.c:483 msgid "Suicide" msgstr "" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "" #: dialogs.c:485 msgid "give-away" msgstr "" #: dialogs.c:486 msgid "grand (10x10)" msgstr "" #: dialogs.c:487 msgid "losers" msgstr "" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "" #: dialogs.c:489 msgid "fairy" msgstr "" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "" #: dialogs.c:491 msgid "mighty lion" msgstr "" #: dialogs.c:492 msgid "courier (12x8)" msgstr "" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "警告: 第二个引擎(%s) 不支持此!" #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "" #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" #: dialogs.c:589 msgid "New Variant" msgstr "变种" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "最大CPU数" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Hash 大小(MB)" #: dialogs.c:624 #, fuzzy msgid "EGTB Path:" msgstr "EGTB 路径" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "EGTB 大小(MB)" #: dialogs.c:626 msgid "Use GUI Book" msgstr "" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "库着法深度" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "库变例" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "引擎1有自用库" #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "通用引擎设置" #: dialogs.c:648 msgid "Detect all Mates" msgstr "检测将杀(M)" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "验证引擎声明(V)" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "子力不足时判和(I)" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "一般和棋判决(T)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "几着后判决" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "输/赢判决阈值" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "引擎 #1 是绝对分数" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "引擎 #2 是绝对分数" #: dialogs.c:664 #, fuzzy msgid "Adjudicate non-ICS Games" msgstr "裁决白赢 (W)" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "自动\"kibitz\"(A)" #: dialogs.c:678 msgid "Auto-Comment" msgstr "自动注释(A)" #: dialogs.c:679 msgid "Auto-Observe" msgstr "自动旁观(O)" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "自动改变棋盘大小(R)" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "后台观察(v)" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "双棋盘(D)" #: dialogs.c:684 msgid "Get Move List" msgstr "获取着法列表(G)" #: dialogs.c:685 msgid "Quiet Play" msgstr "落子无声(Q)" #: dialogs.c:686 msgid "Seek Graph" msgstr "可选对手图表(k)" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "自动刷新图表(R)" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "" #: dialogs.c:690 msgid "Premove" msgstr "预先走棋(P)" #: dialogs.c:691 msgid "Premove for White" msgstr "" #: dialogs.c:692 msgid "First White Move:" msgstr "白方先行(W)" #: dialogs.c:693 msgid "Premove for Black" msgstr "" #: dialogs.c:694 msgid "First Black Move:" msgstr "黑方先行(B)" #: dialogs.c:696 msgid "Alarm" msgstr "提示" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "" #: dialogs.c:709 msgid "Other Text Colors:" msgstr "" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS设置" #: dialogs.c:721 msgid "Exact position match" msgstr "" #: dialogs.c:721 msgid "Shown position is subset" msgstr "" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "" #: dialogs.c:722 msgid "Same material" msgstr "" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "" #: dialogs.c:746 #, fuzzy msgid "No games before year:" msgstr "尚未有棋局载入" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "" #: dialogs.c:749 msgid "Search mode:" msgstr "" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "" #: dialogs.c:760 msgid "Load Game Options" msgstr "载入棋局选项" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "" #: dialogs.c:773 msgid "Own Games Only" msgstr "" #: dialogs.c:774 msgid "Save Games on File:" msgstr "" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "保存棋局选项" #: dialogs.c:796 msgid "No Sound" msgstr "无声" #: dialogs.c:797 msgid "Default Beep" msgstr "默认声音" #: dialogs.c:798 msgid "Above WAV File" msgstr "" #: dialogs.c:799 msgid "Car Horn" msgstr "" #: dialogs.c:800 msgid "Cymbal" msgstr "" #: dialogs.c:801 msgid "Ding" msgstr "" #: dialogs.c:802 msgid "Gong" msgstr "" #: dialogs.c:803 msgid "Laser" msgstr "" #: dialogs.c:804 msgid "Penalty" msgstr "" #: dialogs.c:805 msgid "Phone" msgstr "" #: dialogs.c:806 msgid "Pop" msgstr "" #: dialogs.c:807 msgid "Roar" msgstr "" #: dialogs.c:808 msgid "Slap" msgstr "" #: dialogs.c:809 msgid "Wood Thunk" msgstr "" #: dialogs.c:811 msgid "User File" msgstr "" #: dialogs.c:834 msgid "User WAV File:" msgstr "" #: dialogs.c:835 msgid "Sound Program:" msgstr "" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "" #: dialogs.c:837 msgid "Play" msgstr "播放" #: dialogs.c:838 msgid "Move:" msgstr "" #: dialogs.c:839 msgid "Win:" msgstr "" #: dialogs.c:840 msgid "Lose:" msgstr "" #: dialogs.c:841 msgid "Draw:" msgstr "" #: dialogs.c:842 msgid "Unfinished:" msgstr "" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "" #: dialogs.c:850 msgid "Channel 1:" msgstr "" #: dialogs.c:851 msgid "Tell:" msgstr "" #: dialogs.c:852 msgid "Kibitz:" msgstr "" #: dialogs.c:853 msgid "Request:" msgstr "" #: dialogs.c:854 msgid "Lion roar:" msgstr "" #: dialogs.c:855 msgid "Seek:" msgstr "" #: dialogs.c:871 msgid "Sound Options" msgstr "声音" #: dialogs.c:887 msgid "Selectable themes:" msgstr "" #: dialogs.c:889 msgid "New name for current theme:" msgstr "" #: dialogs.c:892 msgid "White Piece Color:" msgstr "" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "黑子" #: dialogs.c:908 msgid "Light Square Color:" msgstr "白格" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "黑格" #: dialogs.c:920 msgid "Highlight Color:" msgstr "格子标记" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "预先走棋标记" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "黑白" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "" #: dialogs.c:1024 msgid "Board Options" msgstr "棋盘选项" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "" #: dialogs.c:1124 msgid "clear" msgstr "" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "" #: dialogs.c:1223 #, fuzzy msgid "add next move" msgstr "同步思考(N)" #: dialogs.c:1247 #, fuzzy msgid "Edit book" msgstr "编辑(E)" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "编辑标签(T)" #: dialogs.c:1385 msgid "ICS input box" msgstr "" #: dialogs.c:1417 msgid "Type a move" msgstr "" #: dialogs.c:1443 msgid "Engine has no options" msgstr "" #: dialogs.c:1445 msgid "Engine Settings" msgstr "" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "" #: dialogs.c:1473 msgid "or specify one below:" msgstr "" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "" #: dialogs.c:1477 msgid "Engine Command:" msgstr "" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "" #: dialogs.c:1479 msgid "UCI" msgstr "" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "" #: dialogs.c:1533 msgid "Load first engine" msgstr "" #: dialogs.c:1539 msgid "Load second engine" msgstr "" #: dialogs.c:1562 msgid "shuffle" msgstr "" #: dialogs.c:1563 msgid "Fischer castling" msgstr "" #: dialogs.c:1564 msgid "Start-position number:" msgstr "启动位置号码(S)" #: dialogs.c:1565 #, fuzzy msgid "randomize" msgstr "随机" #: dialogs.c:1566 msgid "pick fixed" msgstr "" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "洗牌游戏(u)..." #: dialogs.c:1602 msgid "classical" msgstr "" #: dialogs.c:1603 msgid "incremental" msgstr "" #: dialogs.c:1604 msgid "fixed max" msgstr "" #: dialogs.c:1605 msgid "Moves per session:" msgstr "" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "" #: dialogs.c:1608 #, fuzzy msgid "Time-Odds factors:" msgstr "时间倍数" #: dialogs.c:1609 #, fuzzy msgid "Engine #1" msgstr "引擎(N)" #: dialogs.c:1610 #, fuzzy msgid "Engine #2 / Human" msgstr "引擎1有自用库" #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "发送信息给国际象棋程序时出错" #: dialogs.c:1768 xaw/xoptions.c:1318 #, fuzzy msgid "Cancel" msgstr "取消(C)" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "王" #: dialogs.c:1776 msgid "Captain" msgstr "" #: dialogs.c:1777 msgid "Lieutenant" msgstr "" #: dialogs.c:1778 msgid "General" msgstr "常规选项(G)..." #: dialogs.c:1779 msgid "Warlord" msgstr "" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "马" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "象" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "车" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "国师" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "宰相" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "后" #: dialogs.c:1792 msgid "Lion" msgstr "" #: dialogs.c:1796 msgid "Defer" msgstr "" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "升变" #: dialogs.c:1854 msgid "Chats:" msgstr "" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 #, fuzzy msgid "New Chat" msgstr "变种" #: dialogs.c:1862 msgid "Chat partner:" msgstr "" #: dialogs.c:1863 msgid "End Chat" msgstr "" #: dialogs.c:1864 msgid "Hide" msgstr "" #: dialogs.c:2074 #, fuzzy msgid "ICS Interaction" msgstr "ICS设置" #: dialogs.c:2141 msgid "factory" msgstr "" #: dialogs.c:2142 msgid "up" msgstr "向上" #: dialogs.c:2143 msgid "down" msgstr "向下" #: dialogs.c:2162 msgid "No tag selected" msgstr "" #: dialogs.c:2193 #, fuzzy msgid "Game-list options" msgstr "载入棋局选项" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "错误" #: dialogs.c:2306 msgid "Fatal Error" msgstr "严重错误" #: dialogs.c:2306 msgid "Exiting" msgstr "退出" #: dialogs.c:2317 msgid "Information" msgstr "" #: dialogs.c:2324 msgid "Note" msgstr "注释" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "白方" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "兵" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "象" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "炮" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "降级" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "清空格子" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "清空棋盘" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "黑方" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "文件(F)" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "编辑(E)" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "外观(V)" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "模式(M)" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "行为(A)" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "引擎(N)" #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "选项(O)" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "帮助(H)" #: dialogs.c:2491 msgid "<<" msgstr "" #: dialogs.c:2492 msgid "<" msgstr "" #: dialogs.c:2494 msgid ">" msgstr "" #: dialogs.c:2495 msgid ">>" msgstr "" #: dialogs.c:2774 msgid "Directories:" msgstr "" #: dialogs.c:2775 #, fuzzy msgid "Files:" msgstr "文件(F)" #: dialogs.c:2776 msgid "by name" msgstr "" #: dialogs.c:2777 msgid "by type" msgstr "" #: dialogs.c:2780 #, fuzzy msgid "Filename:" msgstr "过滤器" #: dialogs.c:2781 msgid "New directory" msgstr "" #: dialogs.c:2782 #, fuzzy msgid "File type:" msgstr "过滤器" #: dialogs.c:2857 #, fuzzy msgid "Contents of" msgstr "编辑注释(C) *.*" #: dialogs.c:2883 msgid " next page" msgstr "" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" #: engineoutput.c:111 menus.c:650 #, fuzzy, c-format msgid "Engine Output" msgstr "引擎输出" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "" msgstr[1] "" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, fuzzy, c-format msgid "Reading game file (%d)" msgstr "棋局文件错误" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "" #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "" #: gtk/xboard.c:2383 #, fuzzy msgid "Failed to open file" msgstr "Failed to invoke cmail" #: menus.c:134 msgid "Load game file name?" msgstr "" #: menus.c:179 msgid "Load position file name?" msgstr "" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "" #: menus.c:194 msgid "Save position file name?" msgstr "" #: menus.c:362 msgid " (with Zippy code)" msgstr "" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "关于XBoard(A)" #: menus.c:601 #, fuzzy msgid "New Game" msgstr "洗牌游戏(u)..." #: menus.c:602 #, fuzzy msgid "New Shuffle Game..." msgstr "洗牌游戏(u)..." #: menus.c:603 #, fuzzy msgid "New Variant..." msgstr "变种" #: menus.c:605 #, fuzzy msgid "Load Game" msgstr "载入棋局选项(L)... Alt+Shift+L" #: menus.c:606 #, fuzzy msgid "Load Position" msgstr "局面文件错误" #: menus.c:607 #, fuzzy msgid "Next Position" msgstr "局面文件错误" #: menus.c:608 #, fuzzy msgid "Prev Position" msgstr "升变" #: menus.c:610 #, fuzzy msgid "Save Game" msgstr "保存棋局选项(S)... Alt+Shift+S" #: menus.c:611 #, fuzzy msgid "Save Position" msgstr "保存局面(A)... Ctrl+Shift+S" #: menus.c:612 #, fuzzy msgid "Save Selected Games" msgstr "保存棋局选项(S)... Alt+Shift+S" #: menus.c:613 #, fuzzy msgid "Save Games as Book" msgstr "保存棋局选项(S)... Alt+Shift+S" #: menus.c:615 msgid "Mail Move" msgstr "" #: menus.c:616 msgid "Reload CMail Message" msgstr "" #: menus.c:618 msgid "Quit " msgstr "" #: menus.c:623 #, fuzzy msgid "Copy Game" msgstr "复制游戏列表到剪贴板" #: menus.c:624 #, fuzzy msgid "Copy Position" msgstr "复制局面到剪贴板(Y) Ctrl+Shift+C" #: menus.c:625 msgid "Copy Game List" msgstr "复制游戏列表到剪贴板" #: menus.c:627 #, fuzzy msgid "Paste Game" msgstr "粘贴棋局自剪贴板(P) Ctrl+V" #: menus.c:628 #, fuzzy msgid "Paste Position" msgstr "从剪贴板粘贴局面(T) Ctrl+Shift+V" #: menus.c:630 menus.c:672 #, fuzzy msgid "Edit Game" msgstr "编辑注释" #: menus.c:631 menus.c:673 #, fuzzy msgid "Edit Position" msgstr "局面文件错误" #: menus.c:632 msgid "Edit Tags" msgstr "编辑标签(T)" #: menus.c:633 msgid "Edit Comment" msgstr "编辑注释(C)..." #: menus.c:634 #, fuzzy msgid "Edit Book" msgstr "开局库(B)..." #: menus.c:636 msgid "Revert" msgstr "" #: menus.c:637 msgid "Annotate" msgstr "注释(A)" #: menus.c:638 #, fuzzy msgid "Truncate Game" msgstr "截断后面的着法(T)" #: menus.c:640 msgid "Backward" msgstr "" #: menus.c:641 msgid "Forward" msgstr "" #: menus.c:642 #, fuzzy msgid "Back to Start" msgstr "轮到黑方走棋" #: menus.c:643 #, fuzzy msgid "Forward to End" msgstr "最后局面(E) Alt+End" #: menus.c:648 #, fuzzy msgid "Flip View" msgstr "自动翻转棋盘(V)" #: menus.c:651 #, fuzzy msgid "Move History" msgstr "获取着法列表(G)" #: menus.c:652 #, fuzzy msgid "Evaluation Graph" msgstr "评价图" #: menus.c:653 #, fuzzy msgid "Game List" msgstr "游戏列表..." #: menus.c:657 msgid "Comments" msgstr "编辑注释(C) *.*" #: menus.c:658 msgid "ICS Input Box" msgstr "" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "棋盘选项(B)..." #: menus.c:662 msgid "Game List Tags..." msgstr "游戏列表..." #: menus.c:667 #, fuzzy msgid "Machine White" msgstr "电脑执白(W) Ctrl+W" #: menus.c:668 #, fuzzy msgid "Machine Black" msgstr "引擎比赛(M)" #: menus.c:669 #, fuzzy msgid "Two Machines" msgstr "电脑对弈(M) Ctrl+T" #: menus.c:670 #, fuzzy msgid "Analysis Mode" msgstr "分析模式(A) Ctrl+A" #: menus.c:671 #, fuzzy msgid "Analyze Game" msgstr "分析文件(F) Ctrl+F" #: menus.c:674 msgid "Training" msgstr "训练(N)" #: menus.c:675 msgid "ICS Client" msgstr "ICS客户端" #: menus.c:677 msgid "Machine Match" msgstr "引擎比赛(M)" #: menus.c:678 msgid "Pause" msgstr "" #: menus.c:683 msgid "Accept" msgstr "" #: menus.c:684 msgid "Decline" msgstr "" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 #, fuzzy msgid "Call Flag" msgstr "超时判负(F) F5" #: menus.c:688 msgid "Draw" msgstr "" #: menus.c:689 msgid "Adjourn" msgstr "" #: menus.c:690 msgid "Abort" msgstr "" #: menus.c:691 msgid "Resign" msgstr "" #: menus.c:693 #, fuzzy msgid "Stop Observing" msgstr "停止旁观(O) F10" #: menus.c:694 #, fuzzy msgid "Stop Examining" msgstr "停止研究(X) F11" #: menus.c:695 msgid "Upload to Examine" msgstr "上传检查(U)" #: menus.c:697 msgid "Adjudicate to White" msgstr "裁决白赢 (W)" #: menus.c:698 msgid "Adjudicate to Black" msgstr "裁决黑赢 (B)" #: menus.c:699 msgid "Adjudicate Draw" msgstr "提请仲裁(D)" #: menus.c:704 #, fuzzy msgid "Edit Engine List..." msgstr "引擎 #1 设置" #: menus.c:706 msgid "Load New 1st Engine..." msgstr "" #: menus.c:707 #, fuzzy msgid "Load New 2nd Engine..." msgstr "通用引擎设置(E)... Alt+Shift+U" #: menus.c:709 #, fuzzy msgid "Engine #1 Settings..." msgstr "引擎 #1 设置" #: menus.c:710 #, fuzzy msgid "Engine #2 Settings..." msgstr "引擎 #2 设置" #: menus.c:712 msgid "Hint" msgstr "提示(H)..." #: menus.c:713 msgid "Book" msgstr "开局库(B)..." #: menus.c:715 msgid "Move Now" msgstr "" #: menus.c:716 #, fuzzy msgid "Retract Move" msgstr "悔棋(R) Ctrl+X" #: menus.c:722 #, fuzzy msgid "General..." msgstr "常规选项(G)..." #: menus.c:724 #, fuzzy msgid "Time Control..." msgstr "时限设置(T)... Alt+Shift+T" #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "通用引擎设置(E)... Alt+Shift+U" #: menus.c:726 #, fuzzy msgid "Adjudications..." msgstr "判决(j)... Alt+Shift+J" #: menus.c:727 msgid "ICS..." msgstr "" #: menus.c:728 msgid "Tournament..." msgstr "" #: menus.c:729 #, fuzzy msgid "Load Game..." msgstr "载入棋局选项(L)... Alt+Shift+L" #: menus.c:730 #, fuzzy msgid "Save Game..." msgstr "保存棋局选项(S)... Alt+Shift+S" #: menus.c:731 #, fuzzy msgid "Game List..." msgstr "游戏列表..." #: menus.c:732 #, fuzzy msgid "Sounds..." msgstr "声音选项(D)..." #: menus.c:735 msgid "Always Queen" msgstr "" #: menus.c:741 msgid "Flash Moves" msgstr "" #: menus.c:743 msgid "Highlight Dragging" msgstr "拖拽醒目提示(H)" #: menus.c:746 msgid "Highlight With Arrow" msgstr "用箭头突出移动" #: menus.c:747 msgid "Move Sound" msgstr "" #: menus.c:749 msgid "Periodic Updates" msgstr "定期更新(U)" #: menus.c:751 msgid "Popup Exit Message" msgstr "退出时提示(P)" #: menus.c:753 msgid "Show Coords" msgstr "显示坐标(C)" #: menus.c:754 #, fuzzy msgid "Hide Thinking" msgstr "与人对弈时隐藏思考细节" #: menus.c:758 msgid "Save Settings Now" msgstr "立即保存设置(N)" #: menus.c:759 msgid "Save Settings on Exit" msgstr "退出时保存设置(X)" #: menus.c:764 msgid "Info XBoard" msgstr "" #: menus.c:765 #, fuzzy msgid "Man XBoard" msgstr "关于XBoard(A)" #: menus.c:767 msgid "XBoard Home Page" msgstr "" #: menus.c:768 msgid "On-line User Guide" msgstr "" #: menus.c:769 msgid "Development News" msgstr "" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "" #: nengineoutput.c:78 nengineoutput.c:86 #, fuzzy msgid "engine name" msgstr "引擎(N)" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 #, fuzzy msgid "move" msgstr "着法" #: nengineoutput.c:155 msgid "Engine output" msgstr "引擎输出" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "评价图" #: nevalgraph.c:68 #, fuzzy msgid "Blunder graph" msgstr "评价图" #: nevalgraph.c:106 msgid "Blunder" msgstr "" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 #, fuzzy msgid "find position" msgstr "局面文件错误" #: ngamelist.c:88 msgid "narrow" msgstr "" #: ngamelist.c:89 msgid "thresholds" msgstr "" #: ngamelist.c:90 #, fuzzy msgid "tags" msgstr "编辑标签(T)" #: ngamelist.c:91 msgid "next" msgstr "" #: ngamelist.c:92 msgid "close" msgstr "" #: ngamelist.c:116 msgid "No game selected" msgstr "没有选中棋局" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "无法再前进了" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "" #: ngamelist.c:211 msgid "previous page" msgstr "" #: ngamelist.c:214 msgid "next page" msgstr "" #: ngamelist.c:217 msgid "no games matched your request" msgstr "" #: ngamelist.c:219 #, fuzzy, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "比赛 %s vs. %s: 最终比分 %d-%d-%d" #: ngamelist.c:283 msgid "There is no game list" msgstr "没有棋局列表" #: nhistory.c:109 msgid "Move list" msgstr "" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "" #: usystem.c:560 msgid "Socket support is not configured in" msgstr "" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "" #: xaw/xoptions.c:1314 msgid "OK" msgstr "确定" #~ msgid "ICS ..." #~ msgstr "ICS选项..." #~ msgid "cancel" #~ msgstr "取消(C)" #~ msgid "New Game Ctrl+N" #~ msgstr "重置棋局(N) Ctrl+N" #~ msgid "New Variant ... Alt+Shift+V" #~ msgstr "新变种(V)... Alt+Shift+V" #~ msgid "Load Game Ctrl+O" #~ msgstr "载入棋局(L)... Ctrl+O" #~ msgid "Load Position Ctrl+Shift+O" #~ msgstr "载入局面(O)... Ctrl+Shift+O" #~ msgid "Save Game Ctrl+S" #~ msgstr "保存棋局(S)... Ctrl+S" #~ msgid "Quit Ctr+Q" #~ msgstr "退出(Q)" #~ msgid "Copy Game Ctrl+C" #~ msgstr "复制棋局到剪贴板(C) Ctrl+C" #~ msgid "Edit Game Ctrl+E" #~ msgstr "编辑棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "编辑局面(d) Ctrl+Shift+E" #~ msgid "Revert Home" #~ msgstr "恢复(V)" #~ msgid "Backward Alt+Left" #~ msgstr "下一着(B) Alt+Left" #~ msgid "Forward Alt+Right" #~ msgstr "上一着(F) Alt+Right" #~ msgid "Back to Start Alt+Home" #~ msgstr "起始局面(S) Alt+Home" #~ msgid "Flip View F2" #~ msgstr "翻转棋盘(V) F2" #~ msgid "Engine Output Alt+Shift+O" #~ msgstr "显示引擎输出 Alt+Shift+O" #~ msgid "Move History Alt+Shift+H" #~ msgstr "显示着法 Alt+Shift+H" #~ msgid "Evaluation Graph Alt+Shift+E" #~ msgstr "显示评价图 Alt+Shift+E" #~ msgid "Game List Alt+Shift+G" #~ msgstr "显示棋局列表(L) Alt+Shift+G" #~ msgid "Machine Black Ctrl+B" #~ msgstr "电脑执黑(B) Ctrl+B" #~ msgid "Edit Game Ctrl+E" #~ msgstr "编辑棋局(E) Ctrl+E" #~ msgid "Edit Position Ctrl+Shift+E" #~ msgstr "编辑局面(d) Ctrl+Shift+E" #~ msgid "Pause Pause" #~ msgstr "暂停(P) Pause" #~ msgid "Accept F3" #~ msgstr "接受(A) F3" #~ msgid "Decline F4" #~ msgstr "拒绝(C) F4" #~ msgid "Rematch F12" #~ msgstr "重赛(M) F12" #~ msgid "Draw F6" #~ msgstr "提和(D) F6" #~ msgid "Adjourn F7" #~ msgstr "封盘(J) F7" #~ msgid "Abort F8" #~ msgstr "中止(B) F8" #~ msgid "Resign F9" #~ msgstr "认输(R) F9" #~ msgid "Move Now Ctrl+M" #~ msgstr "立即走棋(M) Ctrl+M" #~ msgid "Always Queen Ctrl+Shift+Q" #~ msgstr "总是升变为后(Q) Ctrl+Shift+Q" #~ msgid "Animate Moving Ctrl+Shift+A" #~ msgstr "动画走棋(A) Ctrl+Shift+A" #~ msgid "Auto Flag Ctrl+Shift+F" #~ msgstr "自动超时判负(F) Ctrl+Shift+F" #~ msgid "Ponder Next Move Ctrl+Shift+P" #~ msgstr "同步思考(N) Ctrl+Shift+P" #~ msgid "Hide Thinking Ctrl+Shift+H" #~ msgstr "隐藏引擎思考 Ctrl+Shift+H" #~ msgid "Test Legality Ctrl+Shift+L" #~ msgstr "检查着法合理性(L) Cl+Sh+L" #~ msgid "Drop" #~ msgstr "取消" #, fuzzy #~ msgid "could not open: " #~ msgstr "无法解析着法" #~ msgid "ok" #~ msgstr "确定" #~ msgid "Highlight Dragging (Show Move Targets)" #~ msgstr "拖拽醒目提示(H)" #~ msgid "White " #~ msgstr "白方 " #~ msgid "Black " #~ msgstr "黑方 " #~ msgid "Close" #~ msgstr "关闭(C)" #~ msgid "sec/move" #~ msgstr "每走一步加" xboard-4.8.0/po/tr.gmo0000644000175000001440000000471512422467103011476 000000000000002C<H IV]d ly       )6 E Q]p  -39> "0AGP` g u       $ ( 6 : E N T Z w |         ' */)!-(0#.%,2 $&+"1About XBoardAcceptActionAdjournAlways QueenBackwardBishopBlackBlack's flag fellBlindfoldBookBoth flags fellClear boardDeclineEmpty squareEnd of gameErrorFailed to open fileFileForwardHelpHintICS ClientIllegal moveIncorrect moveInfo XBoardInformationIt is Black's turnIt is White's turnKingKnightMail MoveModeMove listNoteOptionsPausePawnQueenReload CMail MessageRookTrainingWhiteWhite's flag fellYou are playing BlackYou are playing WhiteclearclosenextProject-Id-Version: XBoard 4.2.7 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2003-12-26 16:38+0200 Last-Translator: A. Alper Atc Language-Team: Turkish Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-9 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; XBoard HakkndaKabul etEylemErteleHep Vezir OlsunGeriFilSiyahSiyah ah matTahtay GrmedenKitapBerabereTahtay TemizleRed etKareyi BoaltOyun sonuHataDosya alamadDosyaleriYardmpucuICS stemcisiGeersiz hamleYanl hamleXBoard Info SayfasBilgiSra Siyah'taSra Beyaz'daahAtHamleyi PostalaKipHamle listesiNotSeeneklerDuraklatPiyonVezirCMail letisini Tekrar YkleKaleEitimBeyazBeyaz ah matSiz Siyah'snzSiz Beyaz'snztemizlekapatsonrakixboard-4.8.0/po/remove-potcdate.sin0000644000175000001440000000066012421746651014160 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } xboard-4.8.0/po/en@boldquot.header0000644000175000001440000000247112421746651013777 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # xboard-4.8.0/po/da.gmo0000644000175000001440000010646612422467103011443 00000000000000t)0)$J)o)/)))) *& *G*d*4**5*# +-+7H+ ++++++'+,),=,Q,W,j,7q,*,,&,-"--P-)h-%-%----. &.0. ?.L.a. s. .8..... /!/?/X/u/ ~/////// // 0 000P0Y0^0 r0$}0000)01#181P1l1s111 11 11 1.1 2*2F2X2a2x22%2222!393@3B3U3 p3.}3333#33!4V744$44 4'45$5@5 E5 O5 \5 f5 p5}5!55 5 55 566 *6K6[6 m6{66 66&6!6&6(%7N7e7!777707!828G8O8S8j8~8"8"8.8 99999K9X]989 99:@4:&u::::(::;,;/E;u;;; ;;;;;< <%<6<I<]<r<<<< < < < < <,< =0=!P=r= ==!=#=>> :> F>R>#f>>>>>>>? ????0?L?^?s?? ??-?)?-@)F@ p@%z@-@(@"@!AnNnUntnnnnnnnoo0o4oˆІ%.3Pm*.ԇ9O=%QZV&CD)Њ #'+>'G o} *̋ Ӌ*ߋ ) 7(Dm1 ʌ،'Z=G(@P;&,s?fpTDm:X E9oAt*'.Vn 4fH6' cDtT[OLS +5^d,oLG>uh\Ev<2ZmwycSl1dsX~--b]2PJqxb_lk}j Aj%RrFQ`5!RgY?ka6M4z%U{HMI07uei] [eI.1 >wQ {3/}$&JU8z8|Fq3@~#`iWn<_CB=7C"WNyO ^hp(0)YB!KV| " #xavgK)$;+N/ \*9:r Thresholds for position filtering in game list: options to use in game-viewer mode: (with Zippy code)%s (%d reversible ply)%s (%d reversible plies)%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s in settings file %s program exits in draw position (%s)%s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty)About XBoardAbove WAV FileAbsolute Analysis ScoresActionAdd this engine to the listAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate non-ICS GamesAdjudicate to BlackAdjudicate to WhiteAlarmAlarm Time (msec):Alarm:All games in tourney '%s' are already played or playingAlmost Always Queen (Detour Under-Promote)Already at end of gameAlso match left-right flipped positionAlso match reversed colorsAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnimation Speed (high = slow):AnnotateAuto FlagAuto Flip ViewAuto-CommentAuto-Display CommentAuto-Display TagsAuto-KibitzAuto-ObserveAuto-Play speed of loaded games (0 = instant, -1 = off):Auto-Raise BoardAuto-Refresh Seek GraphAuto-Save GamesBBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook Depth (moves):Book FaultBook Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannot build game listCar HornChallenge Text Colors:Challenge:Channel #1 Text Colors:Channel 1:Channel:Clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCymbalDDark Square Color:Dark-Squares Texture File:Default BeepDefault Number of Games in Match (or Pairing):Detect all MatesDevelopment NewsDingDisable own engine books by defaultDisplayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.Draw after N Moves Total:Draw if Insufficient Mating MaterialDraw:Drop MenuDual Board for Background-Observed GameEGTB Cache Size (MB):ERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElo of strongest player at least:Elo of weakest player at least:Empty squareEnd of gameEngineEngine #1Engine #1 Has Own BookEngine #2 / HumanEngine #2 Has Own Book Engine Command:Engine Directory:Engine OutputEngine SettingsEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExact position matchExitingFRCFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Fatal ErrorFileFile with Start Positions:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFlash MovesFlash Moves (0 = no flashing):Flash Rate (high = fast):Flip Pieces Shogi Style (Colored buttons restore default)Force current variant with this engineGGame File with Opening Lines:Game List Tags...Game Number (-1 or -2 = Auto-Increment):Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneral OptionsGet Move ListGongGot end of file from keyboardHash keys are differentHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sHoldings Size:ICS ClientICS Input BoxICS OptionsICS input boxICS text menuIllegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sInclude Number Tag in tourney PGNIncomplete \ escape in value for %sIncorrect moveIncrement or max (sec/move):Info XBoardInformationInitial time (min):Invalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKibitz Text Colors:Kibitz:KingKnightLaserLight Square Color:Light-Squares Texture File:Load Game OptionsLoad game file name?Load position file name?Lose:Machine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMatch %s vs. %s: final score %d-%d-%dMaterial difference (optional stuff balanced)Material range (top board half optional)Maximum Number of CPUs per Engine:Minimum nr consecutive positions:ModeMono ModeMove SoundMove listMove:Moves per session:Must not use GUI bookN-Move Rule:N-fold Repeats:NPSNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNickname (optional):No SoundNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOld Save Style (as opposed to PGN)On-line User GuideOne-Click MovingOpening-Book Filename:OptionsOther Channel Text Colors:PGN Event Header:Pause between Match Games (msec):PawnPenaltyPeriodic UpdatesPeriodic Updates (in Analysis Mode)PhonePick new gamePlayPolyglot book not validPolygot Directory:Ponder Next MovePopPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition Number (-1 or -2 = Auto-Increment):Position not found in filePremovePremove Highlight Color:Premove for BlackPremove for WhitePromotePull pawn backwards to under-promoteQueenQuiet PlayRReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Recompile with larger BOARD_RANKS or BOARD_FILES to support this sizeReload CMail MessageReplace EngineRequest Text Colors:Request:Rewind Index after this many Games (0 = never):RookS-Shout Text Colors:S-Shout:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save Game OptionsSave Games on File:Save Out-of-Book Info in PGN Save Score/Depth Info in PGNSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:Select Engine:Select engine from list:Shout Text Colors:Shout:Show CoordinatesShow CoordsShow Target SquaresShown position is subsetSlapSocket support is not configured inSound OptionsSound Program:Sounds Directory:Start-position number:Starting %s chess programStarting chess programStartup failure on '%s'Sticky WindowsStill need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Swiss tourney finishedTagsTell Text Colors:Tell:Test LegalityThat square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTime-Odds factors:Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTry-Out Sound:TwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUCIUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse GUI BookUse nickname in PGN player tags of engine-engine gamesUser FileUser WAV File:Variant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsViewWB protocol v1 (do not wait for engine features)Waiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWin / Loss Threshold:Win:Wood ThunkXBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYour opponent is not out of timeZoom factor in Evaluation Graph:bad searchTime option %sbad timeControl option %sbrowseclassicalclearclosedowne-Mail Bug Reportfactoryfailed writing PVfind positionfirstfixed maxincrementalinternal rcmd not implemented for Unixnextnext pageno games matched your requestor specify one below:pick fixedprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshufflethresholdsupvs.white pixel = 0x%lx, black pixel = 0x%lx your opponent kibitzes: %sProject-Id-Version: GNU xboard 4.6.0.20120304 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2012-03-06 12:27+0100 Last-Translator: Byrial Ole Jensen Language-Team: Danish Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.2 Plural-Forms: nplurals=2; plural=(n != 1); Grænseværdier for stillingsfiltrering i partiliste: Indstillinger til brug ved gennemkigning af partier: (med Zippy-kode)%s (%d reversibelt træk)%s (%d reversible træk)%s - %d/%d partier (%d-%d-%d)%s understøtter ikke analyse%s skakprogram har for mange tilvalg %s i indstillingsfil %s program afslutter i remisstilling (%s)%s: forkert boardSize-syntaks %s %s: kan ikke cd til CHESSDIR: %s: kan ikke fortolke farvenavne; deaktiverer farvning %s: Ingen skrifttyper matcher mønstret %s %s: for få farver tilgængelige; prøver monokrom tilstand %s: ikke genkendt boardSize-navn %s %s: ikke genkendt farve %s (Katalog vil blive udledt fra programstien hvis ikke udfyldt)Om XboardWAV-filen ovenforAbsolutte analysescorerHandlingerTilføj dette skakprogram til listenDøm remisDøm trivielle remiser (3-træks forsinkelse)Døm ikke-ICS partierDøm sort gevinstDøm hvid gevinstAlarmAlarmtid (millisekunder):Alarm:Alle partier i turneringen "%s" er allerede færdige eller i gangNæsten altid dronning (Omvejs-underforvandling)Allerede ved slutningen af partietMatch også spejlvendt stillingMatch også omvendte farverFlertydigt træk i ICS-output: "%s"Flertydigt træk: %d.%s%sAnalysetilstand virker ikke sammen med ICS-tilstandAnalysetilstand kræver et skakprogramAnalyzeFile-tilstand kræver en partifilAnimeret trækudførelseAnimeret flytningAnimeringshastighed (høj = langsom):KommentérAutomatisk annoncering af tidsoverskridelseAutomatisk vending af brættetGem kommentarer til trækAutomatisk visning af kommentarerAutomatisk visning af partidataSend kommentarer fra skakprogramObservér automatiskHastighed af gennemspilning af indlæste partier (0 = øjeblikkeligt, -1 fra):Bræt øverst ved partistartAutomatisk opdatering af søgegrafGem partier automatiskBObsevér i baggrunden når der spillesFejl i FEN-stilling i udklipsholderFejl i FEN-stilling i filFejl i FEN modtaget fra skakprogramSøgning mislykkedesFejl i partifilForkert heltalsværdi %sFejl i stillingsfilFejl i turneringsfilLøberSortFarve for sorte brikker:Sort i trækketSorts flag er faldetBlindskakBrætindstillingerBrætstørrelse (-1 = standard for valgt variant):Bræt...ÅbningsbogÅbningsbogsdybde (træk):Fejl i åbningsbogÅbningsbogvariation (0) vs. styrke (100):Begge flag er faldetKan ikke gå længere tilbageKan ikke gå længere fremadKan ikke have en match uden skakprogrammerKan ikke åbne "%s"Kan ikke åbne midlertidig filKan ikke spole i partifilKan ikke spole i stillingsfilAnnullérKan ikke konstruere partilisteBilhornTekstfarver for udfordring:Udfodring:Tekstfarver for kanal nr. 1:Kanal 1:Kanal:Ryd brætDet er ikke tilladt er stille på uret i auto-flag-tilstandKopiér turneringLukker skakprogram til ICS-analyse ...Farv meddelelserKommentarerIndstillinger for skakprogrammerForbindelse lukket af ICSKopiér partilisteKunne ikke forbinde til vært %s, port %sKunne ikke åbne seriel port %sKunne ikke fortolke trækKunne ikke skrive turneringsfilKunne ikke fortolke "%s" fra ICSBækkenMFarve for mørke felter:Teksturfil for mørke felter:Standard bipStandard for antal partier i match (eller parring):Find alle matterNyheder i denne version (engelsk)DingDeaktivér skakprogrammets egen åbningsbog som standardDet viste træk er ikke det aktuelleDen viste stilling er ikke den aktuelleDen viste stilling er ikke den aktuelle. Gå fremad til den korrekte stilling og prøv igen.Remis efter i alt N træk:Remis ved utilstrækkeligt matsættende materialeRemis:Placér brik-menuAndet bræt til baggrundsobservede partierEGTB-cachestørrelse (MB):FEJL: Ukendt bruger %s (i stien %s) RedigérRedigér åbningsbogRedigér kommentarRedigér partidataRedigér åbningsbogRedigér kommentarRedigér kommentar til %d.%s%sStærkeste spillers rating er mindst:Svageste spillers rating er mindst:Tomt feltSlutningen af partietSkakprogramSkakprogram nr. 1Skakprogram nr. 1 har egen åbningsbogSkakprogram nr. 2 / menneskeSkakprogram nr. 2 har egen åbningsbogSkakprogramkommando:Skakprogramkatalog:Output fra skakprogramIndstillinger for skakprogramSkakprogrammet har ingen tilvalgOutput fra skakprogramFejlFejl ved tolkning af trækliste: ekstra brætFejl ved tolkning af trækliste: indlejretFejl ved tolkning af trækliste: to teksthovederFejl ved læsning fra %s skakprogram (%s)Fejl ved læsning fra ICSFejl ved læsning fra tastaturFejl ved skrivning til %s skakprogramFejl ved skrivning til ICSFejl ved skrivning til skakprogramFejl ved skrivning til skærmFejl: %s skakprogram (%s) afsluttede uventetEvalueringsgrafEksakt stillingAfslutterskak960Start af cmail mislykkedesÅbning af fil mislykkedesÅbning af filen "%s" mislykkedes Åbning af inkluderet fil "%s" mislykkedesFortolkning af brætstreng mislykkedes: "%s"Fejl ved start af %s skakprogram %s på %s: %s Fatal fejlFilFil med startstillinger:Sorts første træk:Hvids første træk:Ændr først skakprogram ved at redigere deltagerlisten i turneringsindstillingerneDu skal angive en eksisterende turneringsfil til at kopiereBlink ved trækBlink ved træk (0 = ingen blink):Blinkhastighed (høj = hurtig):Ombyt brikker som i shogi (Farvede knapper gendanner standard)Brug aktuel variant med dette skakprogramGPartifil med åbninger:Partidata-overskrifter ...Partinummer (-1 eller -2 = automatisk forøgelse):Partiliste ikke indlæst eller tomParti ikke fundet i filPartinummer findes ikkeParti for langt; forøg MAX_MOVES og genoversætIndstillinger for partilisteHul i træklisteGenerelle indstillingerHent træklisteGongonFik filafslutning fra tastaturHashnøgler er forskelligeHashtabel-størrelse (MB):HjælpSkjul tænkning fra menneskeFarve til fremhævelse:Fremhæv flytningFremhæv sidste trækFremhæv med pilFremhæv med pilTipTip: %sDepotstørrelse:ICS-klientICS-inputboksICS-indstillingerICS-inputboksICS-tekstmenuUlovligt tip om træk "%s" fra %s skakprogramUlovligt trækUlovligt træk "%s" (afvist af %s skakprogram)Ulovligt træk "%s" fra %s skakprogramUlovligt træk (afvist af ICS)Ulovligt træk i ICS-output: "%s"Ulovligt træk: %d.%s%sBrug partinumre i PGN-fil for turneringUkomplet \-undvigesekvens i værdi for %sUkorrekt trækTillægstid eller maks. pr. træk (sekunder):Info XBoardMeddelelseTid fra start (minutter):Ikke tilladt parring fra parringsprogramDet er sorts turDet er hvids turSort er ikke i trækketHvid er ikke i trækketDet er dig som er i trækketTekstfarver for kommentar:Kommentar:KongeSpringerLaserFarve for lyse felter:Teksturfil for lyse felter:Indstillinger for indlæsning af partiFilnavn for indlæsning af parti?Filnavn for indlæsning af stilling?Tab:SkakprogrammatchSkakprogrammet accepterer dit remistilbudMachineBlack-tilstand virker ikke sammen med ICS-tilstandMachineBlack-tilstand kræver et skakprogramMachineWhite-tilstand virker ikke sammen med ICS-tilstandMachineWhite-tilstand kræver et skakprogramSend træk med e-postMatch %s - %s: slutscore %d-%d-%dMateriale-forskel (balanceret valgfrit materiale)Materiale-interval (øverste halvdel af brættet valgfrit)Maksimalt antal CPU'er pr. skakprogram:Mindste antal stillinger i følge ad gangen:TilstandMonokrom-tilstandLyd ved trækTræklisteTræk:Træk pr. tidsperiode:Må ikke bruge GUI's åbningsbogN-træksregel:N-gange gentagelser:SPSNegér skakprogram nr. 1's scoreNegér skakprogram nr. 2's scoreNyt blandet partiNy variantKaldenavn (ikke nødvendigt):Ingen lydDer er ikke installeret et skakprogram med det angivne navnDer er endnu ingen indlæste partierDer er ikke valgt et partiIngen partier før år:Tip er ikke tilgængeligtDer er ikke flere partier i denne beskedIngen træk i partietDer er ikke noget parringsprogram specificeretIngen stilling er endnu indlæstIngen overskrift valgtDer er ingen uafsluttede partierDer er ingen uafsluttede partier Ingen værdi givet for argumentet %sDer er ikke nok deltagereNotitsAntal brætlinjer:Antal brætrækker:Antal cyklusser i turneringen (eller svejtserrunder):o.k.Gammel gemmestil (i modsætning til PGN)Online brugervejledning (engelsk)Ét-klikstrækÅbningsbogsfilnavn:IndstillingerTekstfarver for andre kanaler:Event-tekst i PGN-fil:Pause imellem matchpartier (millisekunder):BondeStraffePeriodisk opdateringPeriodisk opdatering (i analysetilstand)TelefonVælg nyt spilAfspilFejl i polyglyt-åbningsbogPolyglot-katalog:Spekulér på næste trækPlopPop op med afslutningsbeskederPop op med afslutningsbeskederPop op ved trækfejlStillingsnummer (-1 eller -2 = automatisk forøgelse):Stilling er ikke fundet i filForhåndstrækFarve til forhåndstræk:Forhåndstræk for sortForhåndstræk for hvidBondeforvandlingTræk bonde baglæns for at underforvandleDronningStille spilRLæser partifil (%d)Klar til at sende e-mail Genoversæt for at understøtte denne BOARD_RANKS eller BOARD_FILES!Genoversæt med større BOARD_RANKS eller BOARD_FILES for at understøtte denne størrelseGenindlæs CMail-beskedUdskift skakprogramTekstfarver for forespørgsel:Forespøgsel:Genstart nummering efter dette antal partier (0 = aldrig):TårnTekstfarver for s-råb:S-råb:Samme materialeSamme materiale med samme bondestrukturGem slutstillinger i filen:Indstillinger for gemning af partiGem partier i filen:Gem ud af åbningsbog-info i PGN Gem score/dybde-information i PGNGem indstillinger nuGem indstillinger ved afslutningGem turneringspartier i:Filnavn for gemning af parti?Filnavn for gemning af stilling?Gemmer partiGemmer stillingSkanner gennem partier (%d)Scorer i træklisteSøgemetode:Sekunder pr. træk:SøgegrafTekstfarver for søgning:Søgning:Vælg skakprogram:Vælg skakprogram fra liste:Tekstfarver for råb:Råb:Vis koordinaterVis koordinaterVis målfelterViste stilling er en delmængdeSlagEr ikke konfigureret med sokkelunderstøttelseLydindstillingerLydprogram:Lydkatalog:Startstillingsnummer:Starter %s skakprogramStarter skakprogramOpstartsfejl på "%s"Klæbrige vinduerDer er stadig nødvendigt at trække i partiet %s Der er stadig nødvendigt at trække i partiet Der er stadig nødvendigt at trække i alle %d partier Der er stadig nødvendigt at trække i begge partier Der er stadig nødvendigt at trække i partierne %s Svejtserturnering afsluttetPartidataTekstfarver for tale:Tale:Test lovlighedDet felt er besatCmail-beskeden er ikke indlæst. Brug Genindlæs CMail-besked og lav dit træk igen.Der er ingen partilisteDer er ingen aktuelle tilbud ved dette trækBetænkningstidTidsforkortelses-faktorer:Turneringsdeltagere:Turneringstype (0 = alle mod alle, 1 = en imod resten):TræningTræningstilstand fraTræningstilstand tilTræningstilstand kræver en partifilAfprøv lyd:TwoMachines-tilstand virker ikke sammen med ICS-tilstandTwoMachines-tilstand kræver et skakprogramTast et trækUCIKan ikke lave skrifttypegruppe for %s. Uafsluttet:Ukendt initialMode %sUkendt variantnavn %sUkendt vild type %dIkke genkendt argument %sIkke genkendt boolesk argumentværdi %sUbrugtOpgradér skakprogramOverfør til undersøgelseBrug brætteksturerBrug GUI's åbningsbogBrug kaldenavnet som spillerbetegnelse i PGN-filerBrugerfilBruger WAV-fil:Variant %s understøttes ikke af %sVarianten %s er kun understøttet i ICS-tilstandEfterprøv resultatangivelser fra skakprogrammerVisWB-protokol v1 (brug ikke særlige skakprogramfunktioner)Venter på adgang til gemmefilVenter på første skakprogramVenter på andet parti/andre partierVenter på svar fra modstander Venter på andet skakprogramAdvarsel: Du undersøger stadig et partiAdvarsel: Du observerer stadig et partiAdvarsel: Du spiller stadig et partiAdvarsel: det andet skakprogram (%s) understøtter ikke dette!HvidFarve for hvide brikker:Hvid i trækketHvids flag er faldetGevinst/tabs-tærskel:Gevinst:DunkXBoards hjemmeside (engelsk)Du undersøger ikke et partiDu observerer ikke et partiDu spiller sortDu spiller hvidDu kan kun ændre et skakprogram ad gangenDu kan ikke annullere variantlinje under pauseDu kan ikke gøre dette, mens du spiller eller observererDu kan ikke udskifte et skakprogram, mens det bruges! Afslut dets parti først.Du angav ikke et kørbart skakprogramDu har allerede sendt et træk. Vent indtil der kommer et træk fra din modstander. For at gensende det samme træk, tast "cmail -remail -game %s" på kommandolinjen.Du har redigeret i parti-historikken. Genindlæs partiet og udfør trækket igen.Du har indtastet for mange træk. Gå tilbage til den aktuelle stilling og prøv igen.Du har ikke trukket endnuDu skal trække før du tilbyder remisDu skal angive en turneringsfil til at gemme turneringens afviklingDin modstander har ikke overskredet tidenZoomfaktor i evalueringsgraf:forkert searchTime-tilvalg %sforkert timeControl-tilvalg %sgennemseKlassiskrydluknedE-mail fejlrapportstandardskrivning af analysevariant mislykkedesfind stillingførsteMaks. pr. trækTillægstidintern rcmd er ikke implementeret til Unixnæstenæste sideingen partier svarer til din forespørgseleller specificér en herunder:vælg bestemtforrige sideprotokolversion %d er ikke understøttetvælg tilfældigtgem ændringersay Intern fejl; forkert moveType%d (%d,%d-%d,%d)det andetbland brikkergrænseværdierop–hvid pixel = 0x%lx, sort pixel = 0x%lx din modstander kommenterer: %sxboard-4.8.0/po/es.gmo0000644000175000001440000014262112422467103011457 00000000000000*H90I9$z99 9999/9#:?:\:|:&::<<4<)=D=5c=#==7= >>%>'>*>,>/>5> ;>H>W>p>w>~>>>'>>>??,?2?E?7L?K?*??&@9@T@ X@"e@@ @)@%@ @% A1ABAQApA yA AA AAAAA A B8BPBaByBB B BBBBBC C.CCCUCiCpCvC CC CC C C0CDDD *D$5D*ZDDD D DDD)DE$E9EQEmEtE{EEEEE E EE EF FF #F/F.JF yFFFF FFFF GG (G2G AG%OGuGGGG!G G H HH H"H5HPH XH.eHHHHHH HH#HI!5IVWIII$II I'J*J @J$KJpJ uJ JJ J J J J JJJ!JK q q q qqrr 6rArHrPrXr jrtrzrrrrrr rrrr ss s s *s 8s&Dsks rs~sss ssss s s!t &t 0t1=tot vttt t ttt)ttttu8v5vww,w GwhwBwww&x#'x2Kx~x(z*zKz:.{/i{?{){|=| ]| j|v|x|{|}|||||$||||}}6!}X}r}}}}}}M}Y"~)|~&~-~~ %(Nf0x1<)9'Ks z,À(''A i u]+!-OQ#b (#'<Qq ƃ݃L' t -ʄPI ` kv6Ņ%)9*c)Ɇۆ  (GPWox'V ,E Ye%| ֈ-.\/{1ɉ)%4 9 GQS*qD'D K U5v#%Ћnel%%Č%.$S Zgy ōҍ# ".Qc Ύ;Wj{Fۏ3 -A5o-Ӑ+-(E n> Αڑ# .#7"[~)̒)8 Y ht|! Ó͓ޓcZT”+ڔ'@. oB}( ,=$Ot94Ö!98 r ˗֗',"A+d+˜ʘ+ߘ &8Pdx~ ™ ԙ C' k<y-֚$)0@2q כ &%5[o ŜҜ )=Hgǝ֝ !BS-j/Ȟ5  7O&gH:ן;;N<Ǡ٠-807i+=( -7 LXj{#Ԣ & 3A[u !ƣڣ U !_5"ڤ#$8]$z$#ĥ#!E Lm r85(D5[!ܧ #1A(Gp v( ǨѨ 6"1Tl$$˩;', T#_Ū8ͪ $A CdC~H« )2 CdktBϬ֬3ܬ 8-&f˭+/<A~%ٮ.0(Yk#ϯ&!8Z p}- Ӱ')21dw #˱ #663m54ײ5 BTf n{" ֳ &#7fP(д "<Tg 0 ׵8 Yi z453 >M!i,÷   >EVU$)Danй?)/Y0j' ú!(/888q54:Iaq %% '2#Z=~_)Fhef-̿,Q'}y$.Kc l!  KJg!m   /&; bn} '(&(7 `l7|  *:)d&j- ?'hM.%dAt0bh_zo?F(%vtaRM2Q <m6oW)|C7T ,("/Bi7c1-3@^$~O>s I]},p3|w'@e! 'X fYU6z$~ e!k"D4lG ?HQ:`_ x{1[Gg#kA]n=O$52ITeyVUzQ )6}p#\=+FNJRxF+ZyOaE>1a,KSUj:4< YX&HBq[CyKV)Dg0*YLPmu/9Psp``oA(dw lbj** ^{@f|r 9rR0v5;LGBc L58iI%;\PEM]WD._~nCbwrt.fu4n7J3mq}+8;u8kq:&-{cH[S"gV=9j^ #\ZTJ W<SvKi> l!sZh&NNExX2d/ Thresholds for position filtering in game list: options to use in game-viewer mode: next page (with Zippy code)# no engines are installed# no themes are defined%s (%d reversible ply)%s (%d reversible plies)%s - %d/%d games (%d-%d-%d)%s does not support analysis%s engine has too many options %s in settings file %s program exits in draw position (%s)%s%s Copyright 1991 Digital Equipment Corporation Enhancements Copyright 1992-2014 Free Software Foundation Enhancements Copyright 2005 Alessandro Scotti %s is free software and carries NO WARRANTY;see the file COPYING for more information. The GTK build of this version is experimental and unstable Visit XBoard on the web at: http://www.gnu.org/software/xboard/ Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html Report bugs via email at: %s: bad boardSize syntax %s %s: can't cd to CHESSDIR: %s: can't parse color names; disabling colorization %s: can't parse foreground color in '%s' %s: no fonts match pattern %s %s: too few colors available; trying monochrome mode %s: unrecognized boardSize name %s %s: unrecognized color %s (Directory will be derived from engine path when empty), but %s is3-checks<<<>>>ASEANAbortAbout XBoardAbove WAV FileAbsolute Analysis ScoresAcceptActionAdd this engine to the listAdjournAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate non-ICS GamesAdjudicate to BlackAdjudicate to WhiteAdjudications...AlarmAlarm Time (msec):Alarm:All games in tourney '%s' are already played or playingAll variants not supported by the first engine (currently %s) are disabled.Almost Always Queen (Detour Under-Promote)Already at end of gameAlso match left-right flipped positionAlso match reversed colorsAltAlways QueenAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis ModeAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyze GameAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnimation Speed (high = slow):AnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-Create Logon ScriptAuto-Display CommentAuto-Display TagsAuto-InputBox PopUpAuto-KibitzAuto-ObserveAuto-Play speed of loaded games (0 = instant, -1 = off):Auto-Raise BoardAuto-Refresh Seek GraphAuto-Save GamesBBack to StartBackground Observe while PlayingBackwardBad FEN position in clipboardBad FEN position in fileBad FEN received from engineBad SeekBad game fileBad integer value %sBad position fileBad tournament fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBlunderBlunder graphBoard OptionsBoard size ( -1 = default for selected variant):Board...BookBook Depth (moves):Book FaultBook Variety (0) vs. Strength (100):Book file exists! Try again for overwrite.Both flags fellBughouseCRC (10x8)Call FlagCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't open temp fileCan't seek on game fileCan't seek on position fileCancelCannonCannot build game listCapablanca (10x8)CaptainCar HornChallenge Text Colors:Challenge:ChancellorChannel #1 Text Colors:Channel 1:Channel:Chat partner:Chats:Clear boardClick clock to clear boardClock adjustment not allowed in auto-flag modeClone TourneyClose ICS engine analyze...Colorize MessagesCommentsCommon EngineCommon Engine SettingsCommon Engine...Connection closed by ICSContents ofContinue LaterCopy GameCopy Game ListCopy PositionCould not connect to host %s, port %sCould not create bookCould not open comm port %sCould not parse moveCould not write on tourney fileCouldn't parse move "%s" from ICSCrazyhouseCtrlCylinder *CymbalDDark Square Color:Dark-Squares Texture File:DeclineDefault BeepDefault Number of Games in Match (or Pairing):DeferDemoteDetect all MatesDevelopment NewsDingDirectories:Directory with Pieces Images:Disable own engine books by defaultDisplayed move is not currentDisplayed position is not currentDisplayed position is not current. Step forward to the correct position and try again.DrawDraw after N Moves Total:Draw if Insufficient Mating MaterialDraw:Drop MenuDual Board for Background-Observed GameEGTB Cache Size (MB):EGTB Path:ERROR: Unknown user %s (in path %s) EditEdit BookEdit CommentEdit Engine List...Edit GameEdit PositionEdit TagsEdit bookEdit commentEdit comment on %d.%s%sElephantElo of strongest player at least:Elo of weakest player at least:Empty squareEnable Variation TreesEnd ChatEnd of gameEngineEngine #1Engine #1 Has Own BookEngine #1 Settings...Engine #2 / HumanEngine #2 Has Own Book Engine #2 Settings...Engine Command:Engine Directory:Engine OutputEngine SettingsEngine did not send setup for non-standard variantEngine has no optionsEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvalEvaluation GraphEvaluation graphExact position matchExitingFIRST TYPE DIRECTORY NAME HEREFRCFailed to invoke cmailFailed to open fileFailed to open file '%s' Failed to open indirection file %sFailed to parse board string: "%s"Failed to start %s chess program %s on %s: %s Falcon (10x8)Fatal ErrorFileFile type:File with Start Positions:Filename:Files:First Black Move:First White Move:First change an engine by editing the participants list of the Tournament Options dialogFirst you must specify an existing tourney file to cloneFischer castlingFlash MovesFlash Moves (0 = no flashing):Flash Rate (high = fast):Flip Pieces Shogi Style (Colored buttons restore default)Flip ViewFor concurrent playing of tourney with multiple XBoards:Force current variant with this engineForwardForward to EndGGame File with Opening Lines:Game ListGame List Tags...Game List...Game Number (-1 or -2 = Auto-Increment):Game list not loaded or emptyGame not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGame-list optionsGap in move listGeneralGeneral OptionsGeneral...Get Move ListGongGot end of file from keyboardGothic (10x8)Great Shatranj (10x8)Hash keys are differentHash-Table Size (MB):Headers in Engine Output WindowHelpHideHide ThinkingHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sHoldings Size:ICS ClientICS Input BoxICS InteractionICS OptionsICS input boxICS text menuICS...ICS/Chat ConsoleIllegal hint move "%s" from %s chess programIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move (rejected by ICS)Illegal move in ICS output: "%s"Illegal move: %d.%s%sInclude Number Tag in tourney PGNIncomplete \ escape in value for %sIncorrect moveIncrement or max (sec/move):Info XBoardInformationInitial time (min):Internal error: PARTICIPANTS set wrongInvalid pairing from pairing engineIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnJanus (10x8)Kibitz Text Colors:Kibitz:KingKnightKnightmateLaserLieutenantLight Square Color:Light-Squares Texture File:Line Gap (-1 = default for board size):LionLion roar:Load GameLoad Game OptionsLoad Game...Load New 1st Engine...Load New 2nd Engine...Load PositionLoad first engineLoad game file name?Load position file name?Load second engineLogo Size (0=off, requires restart):Lose:Machine BlackMachine MatchMachine WhiteMachine accepts your draw offerMachine offers a draw. Select Action / Draw to accept.MachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMail MoveMakrukMan XBoardMatch %s vs. %s: final score %d-%d-%dMaterial difference (optional stuff balanced)Material range (top board half optional)Maximum Number of CPUs per Engine:Minimum nr consecutive positions:Mismatch of STRIDE in nengineoutput.c Change and recompile!ModeMono ModeMove HistoryMove NowMove SoundMove listMove:Moves per session:Must not use GUI bookN-Move Rule:N-fold Repeats:NPSNegate Score of Engine #1Negate Score of Engine #2New ChatNew GameNew Shuffle GameNew Shuffle Game...New VariantNew Variant...New directoryNew name for current theme:Next PositionNickname (optional):No SoundNo castleNo default pieces installed! Select your own using '-pieceImageDirectory'.No engine %s is installedNo engine with the name you gave is installedNo game has been loaded yetNo game selectedNo games before year:No hint availableNo more games in this messageNo moves in gameNo pairing engine specifiedNo position has been loaded yetNo tag selectedNo unfinished gamesNo unfinished games No value provided for argument %sNormalNot enough participantsNoteNumber of Board Files:Number of Board Ranks:Number of tourney cycles (or Swiss rounds):OKOld Save Style (as opposed to PGN)On-line User GuideOne-Click MovingOnly bughouse is not available in viewer mode.Opening-Book Filename:OptionsOther Channel Text Colors:Other Text Colors:Own Games OnlyPGN Event Header:Paste GamePaste PositionPausePause between Match Games (msec):PawnPenaltyPeriodic UpdatesPeriodic Updates (in Analysis Mode)PhonePick new gamePlayPlay Move(s) of Clicked PV (Analysis)Polyglot book not validPolygot Directory:Ponder Next MovePopPopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition Number (-1 or -2 = Auto-Increment):Position not found in filePremovePremove Highlight Color:Premove for BlackPremove for WhitePrev PositionPromotePull pawn backwards to under-promoteQueenQuiet PlayQuit Quit after gameRReading game file (%d)Ready to send mail Recompile to support this BOARD_RANKS or BOARD_FILES!Recompile with larger BOARD_RANKS or BOARD_FILES to support this sizeReload CMail MessageRematchReplace EngineRequest Text Colors:Request:ResignRetract MoveRevertRewind Index after this many Games (0 = never):RoarRookS-Shout Text Colors:S-Shout:Same materialSame material with exactly same Pawn chainSave Final Positions on File:Save GameSave Game OptionsSave Game...Save Games as BookSave Games on File:Save Out-of-Book Info in PGN Save PositionSave Score/Depth Info in PGNSave Selected GamesSave Settings NowSave Settings on ExitSave Tourney Games on:Save game file name?Save position file name?Saving gameSaving positionScanning through games (%d)Scores in Move ListSearch mode:Seconds per Move:Seek GraphSeek Text Colors:Seek:SeirawanSelect Engine:Select engine from list:Selectable themes:ShatranjShiftShout Text Colors:Shout:Show CoordinatesShow CoordsShow Target SquaresShown position is subsetSlapSocket support is not configured inSound OptionsSound Program:Sounds Directory:Sounds...SpartanStart-position number:Starting %s chess programStarting chess programStartup failure on '%s'Sticky WindowsStill need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s Stop ExaminingStop ObservingSuicideSuperchessSwiss tourney finishedSync after cycleSync after roundTRY ANOTHER NAMETagsTell Text Colors:Tell:Test LegalityThat square is occupiedThe cmail message is not loaded. Use Reload CMail Message and make your move again.There is no game listThere is no pending offer on this moveTime ControlTime Control...Time-Odds factors:Top-Level DialogsTournament OptionsTournament file: Tournament...Tourney participants:Tourney type (0 = round-robin, 1 = gauntlet):TrainingTraining mode offTraining mode onTraining mode requires a game fileTruncate GameTry-Out Sound:Two MachinesTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineType a moveUCIUnable to create font set for %s. Unfinished:Unknown initialMode %sUnknown variant name %sUnknown wild type %dUnrecognized argument %sUnrecognized boolean argument value %sUnusedUpgrade EngineUpload to ExamineUse Board TexturesUse GUI BookUse external piece bitmaps with their own colorsUse nickname in PGN player tags of engine-engine gamesUser FileUser WAV File:Variant %s not supported by %sVariant %s supported only in ICS modeVariants marked with * can only be played with legality testing off.Verify Engine Result ClaimsViewWB protocol v1 (do not wait for engine features)Wait until your turn, or select 'Move Now'.Wait until your turn.Waiting for access to save fileWaiting for first chess programWaiting for other game(s)Waiting for reply from opponent Waiting for second chess programWarlordWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite Piece Color:White to playWhite's flag fellWild castleWin / Loss Threshold:Win:Wood ThunkXBoard Home PageYou are not examining a gameYou are not observing a gameYou are playing BlackYou are playing WhiteYou can only change one engine at the timeYou can't revert while pausingYou cannot do this while you are playing or observingYou cannot replace an engine while it is engaged! Terminate its game first.You did not specify the engine executableYou have already mailed a move. Wait until a move arrives from your opponent. To resend the same move, type "cmail -remail -game %s" on the command line.You have edited the game history. Use Reload Same Game and make your move again.You have entered too many moves. Back up to the correct position and try again.You have not made a move yetYou must make your move before offering a drawYou must supply a tournament file, for storing the tourney progressYou restarted an already completed tourney. One more cycle will now be added to it. Games commence in 10 sec.Your opponent is not out of timeZoom factor in Evaluation Graph:add next moveatomicbad searchTime option %sbad timeControl option %sberolina *browseby nameby typechu shogi (12x12)classicalclearclosecould not load EGBB librarycourier (12x8)downe-Mail Bug Reportelven chess (10x10)engine namefactoryfailed writing PVfairyfind positionfirstfixed maxgive-awaygrand (10x10)incrementalinternal rcmd not implemented for Unixlosersmighty lionmovenarrownextnext pageno games matched your requestonly marked squares are legalor specify one below:pick fixedprevious pageprotocol version %d not supportedrandomizesave changessay Internal error; bad moveType %d (%d,%d-%d,%d)secondshogi (9x9)shuffletagsthresholdstwo kingsupvs.white pixel = 0x%lx, black pixel = 0x%lx wrong EGBB versionxiangqi (9x10)your opponent kibitzes: %sProject-Id-Version: GNU xboard 4.8.0-pre1 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: 2014-10-01 23:14+0200 Last-Translator: Antonio Ceballos Language-Team: Spanish Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Umbral para filtrar posiciones en la lista de partidas: opciones para el modo de visualización de partidas: siguiente página (con el código de Zippy)# no hay ningún motor instalado# no hay ningún tema definido%s (%d media-jugada reversible)%s (%d medias-jugadas reversibles)%s - %d/%d partidas (%d-%d-%d)%s no admite análisisEl motor %s tiene demasiadas opciones %s en el fichero de configuración El programa %s termina en posición de tablas (%s)%s%s Copyright 1991 Digital Equipment Corporation Copyright de las mejoras 1992-2014 Free Software Foundation Copyright de las mejoras 2005 Alessandro Scotti %s es software libre SIN NINGUNA GARANTÍA; ver el fichero COPYING para más información. La versión de GTK utilizada es experimental e inestable Visite XBoard en la web en: http://www.gnu.org/software/xboard/ Obtenga las características más recientes en: http://www.gnu.org/software/xboard/whats_new.html Informe de errores por correo a: %s: sintaxis de boardSize incorrecta %s %s: no se puede ir a la carpeta CHESSDIR: %s: no se puede analizar los nombres de los colores; desactivando colorido %s: no se puede analizar el color de primer plano en '%s' %s: ninguna fuente concuerda con el patrón %s %s: insuficientes colores disponibles: probando modo monocromo %s: nombre de boardSize no reconocido %s %s: color no reconocido %s (La carpeta se derivará de la del motor cuando esté vacía), pero %s estres jaques<<<>>>ASEANAbortarAcerca de XBoardFichero WAV de arribaPuntuaciones absolutas del análisisAceptarAcciónAñadir este motor a la listaAplazarAdjudicar tablasAdjudicar tablas triviales (regla de las tres jugadas)Adjudicar partidas no ICSAdjudicar a negrasAdjudicar a blancasAdjudicaciones...AlarmaTiempo de la alarma (ms):Alarma:Ya se han disputado o se están disputando todas las partidas del torneo '%s'Todas las variantes no disponibles en el primer motor (actualmente %s) están desactivas.Casi siempre dama (rodeo para subcoronar)Ya se encuentra al final de la partidaTambién posición volteada izquierda-derechaTambién colores invertidosAltSiempre damaJugada ambigua en la salida ICS: "%s"Jugada ambigua: %d.%s%sModo de análisisEl modo de análisis no funciona con el modo ICSEl modo de análisis requiere un motor de ajedrezAnalizar partidaEl modo análisis de archivo requiere un archivo de partidasAnimar arrastreAnimar movimientoVelocidad de animación (high = lenta):AnotarArzobispoBandera automáticaCambio de lado automáticoAuto-comentarioCreación de fichero de registro automáticaComentario de visualización automáticaEtiquetas de visualización automáticaVentana emergente de buzón automáticaAuto KibitzAuto-ObservarVelocidad de juego automático de las partidas cargadas (0 = instantánea, -1 = desactivada):Tablero al frente (automático)Grafo de búsqueda con refresco automáticoGuardar partidas automáticamenteAVolver a empezarSeguir observando mientras se juegaHacia atrásPosición FEN incorrecta en portapapelesPosición FEN incorrecta en archivoEl FEN recibido del motor es incorrectoBúsqueda incorrectaarchivo de partidas incorrectoValor entero malo %sarchivo de posición incorrectoArchivo de torneos incorrectoAlfilNegrasColor de las piezas negras:Negras jueganLa bandera negra cayóA ciegasFallo garrafalGráfica de fallos garrafalesOpciones de tableroTamaño del tablero ( -1 = el predeterminado para la variante seleccionada):Tablero...Repertorio de aperturasProfundidad del libro (jugadas):Error en el libroVariedad del libro (0) frente a fuerza (100):¡Ya existe el fichero del libro! Inténtelo de nuevo si quiere sobreescribirlo.Ambas banderas cayeronPasapiezasCRC (10x8)Pedir la banderaYa no se puede ir más atrásYa no se puede ir más adelanteNo se puede tener una partida sin programas de ajedrezNo se puede abrir "%s"No se puede abrir el fichero temporalNo se puede buscar en archivo de partidasNo se puede buscar en archivo de aperturasCancelarCañónNo se pudo construir la lista de partidasCapablanca (10x8)CapitánBocina de cocheColores del texto de desafíos:Desafío:CancillerColores del texto del canal 1:Canal 1:Canal:Charlar con compañero:Charlas:Limpiar el tableroPinche el reloj para limpiar el tableroEl ajuste del reloj no está permitido en el modo de advertencia de tiempo automáticoClonar torneoCerrar el modo de análisis del motor ICS...Mensajes coloreadosComentariosGeneral de los motoresConfiguración general de los motoresGeneral de los motores...Conexión cerrada por ICSContenido deSeguir más tardeCopiar partidaCopiar lista de partidasCopiar posiciónNo se pudo conectar al servidor %s, puerta %sNo se ha podido crear el libroNo se pudo abrir la puerta de comunicaciones %sNo se pudo analizar la jugadaNo se ha podido escribir en el fichero de torneosNo se pudo analizar la jugada "%s" de ICS«Crazyhouse»CtrlCilíndrico *PlatillosOColor de los escaques oscurosFichero de texturas para escaques oscuros:DeclinarBip predeterminadoNúmero predeterminado de partidas del encuentro (o emparejamiento):DiferirDegradarDetectar todos los matesNoticias sobre el desarrolloTimbreCarpetas:Carpeta con imágenes de piezas:Inicialmente, desactivar los libros propios del motorLa jugada ilustrada no es la actualLa posición mostrada no es la actualLa posición que se está mostrando no es la actual. Avance hasta la posición correcta e inténtelo de nuevo.TablasAdjudicar mate después de:Tablas si el material es insuficienteTablasMenú «drop»Tablero dual para partidas observadasTamaño de la caché de la EGTB (MB):Carpeta de la EGTB:ERROR: usuario desconocido %s (en carpeta %s) EditarEditar libroEditar comentarioEditar lista de motores...Editar partidaEditar posiciónEditar etiquetasEditar libroEditar comentarioEditar comentario en %d.%s%sElefanteElo del mejor jugador como mínimo:Elo del peor jugador como mínimo:Vaciar el escaqueActivar árboles de variacionesFin de la charlaFin del juegoMotorMotor 1El motor 1 tiene libro propioConfiguración del motor #1...Motor 2 / HumanoEl motor 2 tiene libro propioConfiguración del motor #2...Instrucción para el motor:Carpeta del motor:Salida del motorConfiguración del motorEl motor no ha enviado la configuración para la variante no estándarEl motor no tiene opcionesSalida del motorErrorError al recolectar lista de jugadas: tablero extraError al recolectar lista de jugadas: anidadoError al recolectar lista de jugadas: dos encabezadosError al leer del %s programa de ajedrez (%s)Error al leer de ICSError al leer el tecladoError al escribir al %s programa de ajedrezError al escribir a ICSError al escribir al programa de ajedrezError al escribir en la pantallaError: el %s programa de ajedrez (%s) terminó inesperadamenteEvaluaciónGráfica de evaluaciónGráfica de evaluaciónCoincidencia exacta de la posiciónSaliendoNOMBRE DEL DIRECTORIO PRIMERO AQUÍFRC (ajedrez aleatorio de Fischer)Fallo al invocar cmailFallo al abrir ficheroFallo al abrir el fichero '%s' Fallo al abrir fichero de indirección %sFallo al analizar texto del tablero: "%s"Fallo al iniciar el programa de ajedrez %s %s en %s: %s Halcón (10x8)Error fatalArchivoTipo de fichero:Fichero con posiciones iniciales:Nombre del fichero:Archivos:1er. mov. negras1er. mov. blancasCambie primero un motor editando la lista de participantes en el diálogo de las Opciones de TorneoEn primer lugar, debe usted especificar un fichero de torneos que exista, para ser clonadoEnroque de FischerDestello en las jugadasDestello en las jugadas (0 = sin destello):Velocidad de destello (high = rápido):Voltear piezas estilo Shogi (Botones de colores predefinidos)Voltear vistaPara jugar en torneos de forma concurrente con múltiples XBoards:Forzar la variante actual con este motorHacia delanteAvanzar hasta el finalVFichero de partidas con líneas de apertura:Lista de partidasEtiquetas de la lista de partidas...Lista de partidas...Número de la partida (-1 o -2 = incremento automático):La lista de partidas no se ha cargado o está vacíaPartida no hallada en archivoNúmero de partida fuera de rangoPartida demasiado larga; incremente MAX_MOVES y recompileOpciones de la lista de partidasHueco en la lista de jugadasGeneralOpciones generalesGeneral...Leer lista de jugadas«Gong»Se obtuvo del teclado un fin de archivoGótico (10x8)Gran shatranj (10x8)Las claves «hash» son diferentesTamaño de la tabla de transposición (MB):Cabeceras en la ventana de salida del motorAyudaOcultarOcultar cogitacionesOcultar cogitaciones al jugar contra humanoColor de escaque iluminadoIluminar arrastreIluminar última jugadaIluminar con flechaIluminar con flechaPistaSugerencia: %sTamaño tenencias:Cliente ICSCuatro de entrada ICSInteracciones ICSOpciones ICSCuadro de entrada ICSMenú de texto ICSICS...Consola de ICS/CharlaLa jugada sugerida "%s" por el programa de ajedrez %s no es válidaJugada ilegalJugada ilegal "%s" (rechazada por el programa de ajedrez %s)Jugada ilegal "%s" del %s motorLa jugada no es válida (la ha rechazado ICS)Jugada ilegal en la salida ICS: "%s"Jugada ilegal: %d.%s%sIncluir etiqueta de número en el PGN del torneoCarácter de escape \ incompleto en el valor de %sJugada incorrectaIncremento o máximo (s(jugada):Información XBoardInformaciónTiempo inicial (min):Error interno: PARTICIPANTS incorrectoEl bando del otro motor no es válidoTurno de las negrasTurno de las blancasNo es turno de las negrasNo es turno de las blancasEs su turnoJanus (10x8)Colores del texto kibitz:Kibitz:ReyCaballoMate al caballoLáserTenienteColor de los escaques clarosFichero de texturas para escaques claros:Hueco de la línea (-1 = el predeterminado para el tamaño del tablero):LeónRugido de león:Cargar partidaOpciones al leer partidaCargar partida...Cargar un nuevo primer motor...Cargar un nuevo segundo motor...Cargar posiciónCargar el primer motor¿Nombre del fichero de partidas para cargar?¿Nombre del fichero de posiciones para cargar?Cargar el segundo motorTamaño del logo (0=desactivado, requiere reiniciar):Derrotas:El programa con negrasTorneo de dos programasEl programa con blancasLa máquina acepta su oferta de tablasLa máquina ofrece tablas. Seleccione Action / Draw si está de acuerdo.El modo de máquina con negras no funciona con el modo ICSEl modo de máquina con negras requiere un motor de ajedrezEl modo de máquina con blancas no funciona con el modo ICSEl modo de máquina con blancas requiere un motor de ajedrezJugada por correo«Makruk» (tailandés)Manual de XBoardEncuentro %s - %s: puntuación final %d-%d-%dDiferencia de material (situación equilibrada opcional)Rango de material (mitad superior del tablero opcional)Número max. CPUs por motor:Número mínimo de posiciones consecutivas:STRIDE desajustado en nengineoutput.c ¡Cambiar y recompilar!ModoModo monoHistorial de jugadasMover ahoraSonido en jugadasLista de jugadasJugada:Jugadas por sesión:No debe utilizar el libro de la GUIRegla de las N jugadas:N repeticiones:NPSNegar puntuación del motor #1Negar puntuación del motor #2Nueva CharlaNueva partidaNueva partida revuelta...Nueva partida revuelta...Nueva varianteNueva variante...Nueva carpetaNuevo nombre para el tema actual:Siguiente posiciónSobrenombre (opcional):Sin sonidoSin enroqueNo hay piezas predeterminadas instaladas Seleccione su propio '-pieceImageDirectory'.No hay ningún motor %s instaladoNo hay ningún motor instalado con el nombre indicadoNinguna partida se ha cargado aúnNinguna partida seleccionadaNúmero de partidas antes del año:No hay sugerencia disponibleNo hay más partidas en este mensajeNinguna jugada en la partidaiNo se ha especificado el otro motorNinguna posición se ha cargado aúnNúmero de la etiqueta seleccionadaNo hay partidas sin terminarNo hay juegos sin terminar No se ha dado valor al argumento %sNormalNo hay suficientes participantesNotaNúmero de columnas del tablero:Número de filas del tablero:Número de vueltas del torneo (o rondas de torneo suizo)AceptarEstilo de guardado antiguo (en contraposición a PGN)Guía del usuario en líneaMoviemento de un clickSolo pasapiezas no está disponible en el modo visor.Fichero del libro de aperturas:OpcionesColores del texto del otro canal:Colores del otro texto:Solo partidas propiasCabecera PGN del evento:Pegar partidaPegar posiciónPausaPausa entre partidas del encuentro (ms):PeónPenalizaciónActualización periódicaActualización periódica (en análisis)TeléfonoSeleccionar una nueva partidaReproducirRealizar la(s) jugada(s) de la PV escogida (análisis)El libro de Polyglot no es válidoDirectorio de Ployglot:Prever siguente jugada«Pop»Mensaje de salida en venta emergenteVentana emergente al salirVentana emergente si error en jugadaNúmero de la posición (-1 o -2 = incremento automático):No se halló la posición en el archivoPre-jugadaColor de iluminación de prejugada:Prejugada de las negrasPrejugada de las blancasPosición previaCoronarRetrasar el peón a la posición previa a la coronaciónDamaJugar en silencioSalir Después de la partida salirRLeyendo fichero de partidas (%d)Listo para enviar correo ¡Hace falta recompilar para disponer de BOARD_RANKS o BOARD_FILES!Recompilar con BOARD_RANKS o BOARD_FILES mayor para admitir este tamañoVolver a cargar mensaje CMailRevanchaReemplazar motorColores del texto de peticiones:Pedir:RendirseRevocar jugadaRevertirRebobinar Índice después de este número de Partidas (0 = nunca)RugidoTorreColores «S» del texto que se expresa en voz alta:En voz alta SMismo materialMismo material con exactamente la misma cadena de peonesGuardar en fichero posiciones finales:Guardar partidaOpciones al salvar partidaGuardar partida...Guardar partidas como libroGuardar partidas en ficheroGuardar información fuera-de-libro en PGN Guardar posiciónGuardar la información de puntuación/profundidad en el PGNGuardar partidas seleccionadasGuardar config. ahoraGuardar config. al salir del programaGuardar partidas del torneo en:¿Nombre del fichero de partidas para guardar?¿Nombre del fichero de posiciones para guardar?Guardando partidaGuardando posiciónExplorando partidas (%d)Puntuaciones de la lista de jugadasModo de búsqueda:Segundos por jugadas:Buscar gráficaColores del texto de búsqueda:Buscar:SeirawanSeleccione Motor:Seleccionar un motor de la lista:Temas seleccionables:«Shatranj»MayúsColores del texto que se expresa en voz alta:En voz alta:Mostrar coordenadasMostrar coordenadasMostrar casillas objetivoLa posición mostrada es un subconjuntoPalmadaLa capacidad de «socket» no está configurada enOpciones de sonidoPrograma de sonido:Carpeta de sonidos:Sonidos...espartanoNúm. de pos. inicial:Iniciando el programa de ajedrez %sIniciando programa de ajedrezFallo al iniciar '%s'Ventanas adhesivasTodavía necesita hacer una jugada para la partida %s Todavía necesita hacer una jugada para la partida Todavía necesita hacer jugadas para las %d partidas Todavía necesita hacer jugadas para ambas partidas Todavía necesita hacer jugadas para las partidas %s Dejar de examinarDejar de observarSuicidaSuperajedrezTorneo suizo terminadoSincronizar después de una vueltaSincronizar después de la rondaINTENTAR OTRO NOMBREEtiquetasColores del texto de hablar con otros:Decir:Verificar legalidadEse cuadro está ocupadoEl mensaje «cmail» no está cargado. Use «Reload CMail Message» y vuelva a realizar un movimiento.No hay lista de partidasNo hay oferta pendiente para esta jugadaControl de tiempoControles de tiempo...Factores de tiempo extra:Diálogos de alto nivelOpciones de TorneoFichero de torneos: Torneo...Participantes del torneo:Tipo de torneo (0 = liga, 1 = uno contra todos):EntrenamientoModo de entrenamiento apagadoModo de entrenamiento activoEl modo de entrenamiento requiere un archivo de partidasTruncar partidaSonido de pruebaDos programasEl modo de dos máquinas no funciona con el modo ICSEl modo de dos máquinas requiere un motor de ajedrezTeclear una jugadaUCINo se ha podido crear conjunto de fuentes para %s. No terminadas:Modo inicial desconocido %sNombre de variante desconocido %sTipo «wild» %d desconocidoArgumento no reconocido %sValor del argumento lógico %s no reconocidoNo se usaActualizar motorEnviar para examinarUtilizar tablero con texturasUsar el libro de la GUIUtilizar «bitmaps» externos para las piezas con sus propios coloresUsar el sobrenombre de las etiquetas de jugadores del PGN en las partidas motor-motorFichero del usuarioFichero WAV del usuario:La variante %s no es admitida por %sLa variante %s solo se admite en modo ICSLas variantes señaladas con * solo pueden jugarse con la comprobación de legalidad desactivada.Verificar avisos del motorVerProtocolo WB v1 (no esperar por las características del motor)Espere su turno. o seleccione 'Move Now'.Espero su turno.Esperando a tener acceso para guardar el ficheroEsperando al primer programa de ajedrezEsperando por otra(s) partida(s)Esperando respuesta del oponente Esperando al segundo programa de ajedrezCaudilloAdvertencia: Usted todavía está examinando una partidaAdvertencia: Usted todavía está observando una partidaAdvertencia: Usted todavía está jugando una partidaAdvertencia: ¡el segundo motor (%s) no admite esto!BlancasColor de las piezas blancas:Blancas jueganLa bandera blanca cayóEnroque salvajeLímite para adjudicar juego:Victorias:«Wood thunk»Página web de XBoardUsted no está examinando una partidaUsted no está observando una partidaUsted juega negrasUsted juega blancasSolo se puede cambiar un motor a la vezNo puede revertir si está en pausaNo se puede hacer esto mientras se está jugando u observando¡No se puede reemplazar un motor mientras está ocupado! Termine primero la partida del motor.No se especificó el ejecutable del motorYa ha enviado una jugada por correo. Espere hasta recibir una jugada de su adversario. Para volver a enviar la misma jugada, teclee "cmail -remail -game %s" en la línea de órdenes.Usted ha editado el historial de la partida. Use «Reload Same Game» y vuelva a realizar un movimiento.Usted ha introducido demasiadas jugadas. Retroceda hasta la posición correcta e inténtelo de nuevo.Usted no ha realizado todavía ninguna jugadaDebe hacer su jugada antes de ofrecer tablasHay que proporcionar un fichero de torneos, para almacenar el progreso del torneoSe ha reiniciado un torneo que ya había concluido. Se le va a añadir un nuevo ciclo. Las partidas comienzan dentro de 10 s.Su oponente no está fuera de tiempoFactor de «zoom» en el grafo de evaluación:añadir siguente jugadaatómicoopción searchTime incorrecta %sopción timeControl incorrecta %sbelorina *navegarpor nombrepor tipojaponés (12x12)clásicaborrarcerrarno se ha podido cargar la biblioteca de base de datos de finales de partidaajedrez del mensajero (12x8)abajocorreo-e para informar de erroresajedrez élfico (10x10)nombre del motorDe fábricafallo al escribir la PVmágicoencontrar posiciónprimermáximo fijadopierde ganagran ajedrez (10x10)incrementalrcmd interno no implementado para Unixpierde ganaleón poderosojugadaestrechosiguientepágina siguienteninguna partida responde a su búsquedasolo son legales los escaques señaladoso especificar uno debajo:selección fijadapágina anteriorversión %d del protocolo no es admitidaaleatorizarguardar cambiossay Error interno; moveType incorrecto %d (%d,%d-%d,%d)segundojaponés (9x9)barajaretiquetasumbralesdos reyesarribacontrapixel blanco = 0x%lx, pixel negro = 0x%lx versión incorrecta de base de datos de finales de partidachinoinformación kibitz de su oponente: %sxboard-4.8.0/po/zh_TW.gmo0000644000175000001440000003710512422467103012103 00000000000000= "'2Zn")%%*Pap y      + DRdkq   $-)Jt   &%5[w! !&$@'e      +&1!X&z(!4S0l.  1CZ/s ,=Pdy   0! 4J Yex  -))W-)%"" ' 1 5 O i z        !1!F!K!N!_!g!l!#}!!!!!!! "","4" :"E"Y"^"p"" "" " """"&#!;#*]#(#&## ##$&$@$I$[$"l$,$($$$%&%%E%k%% % %'%'&%9&2_&& &&&&&''6'.S' ''''!'1'/(b2()) )))))****J*3e*6*?*+ + 0+:+"A+d+z+++++++ ,&,9,L,P,W,^, q, ~, ,,,, ,,,,' -3-D-]-v-z-- -----".#.B.%U.{. ...!.!... / / 0/:/M/ ]/j// / // //$/$/*00:0k00,00*0!1-01 ^1h1o1;1 1 11112 2592 o2|2 2222 2!2 3343J3`3 v3 3 3 3 3?3$3464 N4[4b4u4444444444=5@M5=5@5' 6 56 B6L6S6W6q6666666$67&7<7U7o7v7}7 777777778858E8X8_8c8s888888889 9 999J9b9 y9999 99:#: B:L:b:6x:<:9:-&;T;j;z;";;!;;!<)<H<g<)<<< <<< < ==4=D=`=,s=-=="=E=>>bk2X#/Yd[LU0QC{*fo>DG3~]6'}Ov4_ux.FZa`(T|5Jcn%&1y=IeNi,lgw9 z"+ \s M;8?h-:P EtVjWp$A!K @mr)<^BR7qHS%s does not support analysisAbout XBoardActionAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate to BlackAdjudicate to WhiteAlarmAlready at end of gameAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-KibitzAuto-ObserveAuto-Raise BoardAuto-Refresh Seek GraphBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad game fileBad position fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard...BookBook Depth (moves):Book Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't seek on game fileCan't seek on position fileCannonCannot build game listChancellorClear boardCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCouldn't parse move "%s" from ICSDark Square Color:Default BeepDemoteDetect all MatesDisplayed move is not currentDisplayed position is not currentDraw after N Moves Total:Draw if Insufficient Mating MaterialDual Board for Background-Observed GameEGTB Cache Size (MB):EditEdit CommentEdit TagsEdit commentEdit comment on %d.%s%sElephantEmpty squareEnd of gameEngine #1 Has Own BookEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExitingFailed to invoke cmailFailed to start %s chess program %s on %s: %s Fatal ErrorFileFirst Black Move:First White Move:Game List Tags...Game not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS OptionsIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move in ICS output: "%s"Illegal move: %d.%s%sIncorrect moveInformationIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKingKnightLight Square Color:Load Game OptionsMachine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMono ModeNPSNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNo SoundNo game has been loaded yetNo game selectedNo hint availableNo more games in this messageNo moves in gameNo position has been loaded yetNo unfinished gamesNo unfinished games NoteOKOne-Click MovingOptionsPawnPeriodic UpdatesPeriodic Updates (in Analysis Mode)PlayPonder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePremovePremove Highlight Color:PromoteQueenQuiet PlayReady to send mail RookSave Game OptionsSave Settings NowSave Settings on ExitSeek GraphShow CoordinatesShow CoordsSound OptionsStart-position number:Starting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s TagsTest LegalityThat square is occupiedThere is no game listThere is no pending offer on this moveTrainingTraining mode offTraining mode onTraining mode requires a game fileTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineUnknown initialMode %sUnknown variant name %sUpload to ExamineVariant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsWaiting for first chess programWaiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite to playWhite's flag fellWin / Loss Threshold:You are not examining a gameYou are playing BlackYou are playing WhiteYou can't revert while pausingYou have not made a move yetYou must make your move before offering a drawYour opponent is not out of timebad searchTime option %sbad timeControl option %sdownprotocol version %d not supportedsay Internal error; bad moveType %d (%d,%d-%d,%d)upProject-Id-Version: GNU xboard master-20110507 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s 不支持分析功能關於XBoard(A)行為(A)提請仲裁(D)簡易和棋判決(T)裁決黑贏 (B)裁決紅贏 (W)提示棋局已經結束ICS輸出不明確的著法"%s"不明確的著法 %d.%s%s"Analysis"(分析)模式無法在ICS模式下工作"Analysis"(分析)模式必須啟動國際象棋引擎"AnalyzeFile"(分析檔案)模式必須指定一個棋局檔案動畫拖曳(D)動畫走棋(A)註解(A)國師自動超時判負(F) Ctrl+Shift+F自動翻轉棋盤(V)自動註解(A)自動"kibitz"(A)自動觀棋(O)自動改變棋盤大小(R)自動刷新圖表(R)背景觀察(v)剪貼簿的FEN盤面錯誤檔案中的FEN盤面錯誤棋局檔案錯誤盤面檔案錯誤象黑方黑子輪到黑方走棋黑方超時盲棋(B)棋盤選項棋盤選項(B)...開局庫(B)...庫著法深度庫變例雙方都超時了無法再後退了無法再前進了沒有象棋程式時無法進行比賽無法打開"%s"無法搜尋棋局檔案無法搜尋盤面檔案炮無法建立棋局列表宰相清空棋盤編輯註解(C) *.*通用引擎設定連接被ICS關閉複製遊戲列表到剪貼簿無法連接主機 %s 連接埠 %s無法打開通訊連接埠 %s無法解析著法無法解析從ICS讀到的著法"%s"黑格預設聲音降級檢測將殺(M)顯示的著法不是當前著法顯示的盤面不是當前盤面幾著後判和子力不足時判和(I)雙棋盤(D)EGTB 大小(MB)編輯(E)編輯註解(C)...編輯標籤(T)編輯註解編輯註解 %d.%s%s象清空格子棋局結束引擎1有自用庫引擎輸出錯誤讀取著法時出錯,超出棋盤讀取著法時出錯,巢狀錯誤讀取著法時出錯,出現兩個開頭從%s國際象棋程式(%s)接收訊息時出錯讀取ICS訊息時出錯讀取鍵盤時出錯發送訊息到%s國際象棋程式時出錯發送訊息給ICS時出錯發送訊息給國際象棋程式時出錯發送訊息給顯示器時出錯錯誤:%s國際象棋程式(%s)異常終止審局圖離開呼叫cmail失敗無法啟動%s國際象棋程式 %s(在主機 %s 上),%s 嚴重錯誤檔案(F)黑方先走(B)紅方先走(W)遊戲列表...檔案中沒有找到棋局棋局數量超出範圍棋局太長,需要增加"MAX_MOVES"並重新編譯著法斷開一般選項(G)...一般選項取得著法列表(G)讀取鍵盤時遇到檔案尾雜湊表大小(MB)說明(H)與人對弈時隱藏思考細節格子標記拖曳醒目提示(H)標記上一著法(M)用箭頭突出移動用箭頭突出移動提示(H)...提示 %sICS客戶端ICS設定著法錯誤不合法著法"%s" (%s國際象棋程式拒絕接受該著法)從%s機器讀到不合法著法"%s"ICS輸出不明確的著法"%s"不合法著法 %d.%s%s著法錯誤資訊輪到黑方走棋輪到紅方走棋沒有輪到黑方走棋沒有輪到紅方走棋輪到你走棋王馬白格載入棋局選項電腦比賽(M)電腦同意和棋"MachineBlack"(電腦執黑)模式無法在ICS模式下運行"MachineBlack"(電腦執黑)模式必須啟動國際象棋引擎"MachineWhite"(電腦執紅)模式無法在ICS模式下運行"MachineWhite"(電腦執紅)模式必須啟動國際象棋引擎比賽 %s vs. %s: 最終比分 %d-%d-%d最大CPU數模式(M)黑白NPS引擎 #1 是絕對分數引擎 #2 是絕對分數洗牌遊戲(u)...變種無聲尚未有棋局載入沒有選中棋局沒有可用的提示這條訊息不包含更多的棋局棋局中沒有著法尚未有盤面載入不存在未完成棋局不存在未完成棋局 註解確定單擊移動(M)選項(O)兵定期更新(U)定期更新(分析模式)播放同步思考(N)離開時提示(P)離開時提示(P)提示錯誤著法(E)檔案中沒有找到盤面預先走棋(P)預先走棋標記升變后落子無聲(Q)準備送信就緒 車儲存棋局選項立即儲存設定(N)離開時儲存設定(X)可選對手圖表(k)顯示坐標(C)顯示坐標(C)聲音啟動位置號碼(S)啟動國際象棋程式無法啟動'%s'棋局 %s 仍需走棋 本棋局仍需走棋 所有 %d 棋局皆仍需走棋 兩棋局皆仍需走棋 棋局 %s 仍需走棋 編輯標籤(T)檢查著法合理性(L) Cl+Sh+L格子已有棋子沒有棋局列表該著法沒有待定的提議訓練(N)訓練模式已關閉訓練模式已打開"Training"(訓練)模式必須指定一個棋局檔案"TwoMachines"(電腦對弈)模式無法在ICS模式下運行"TwoMachines"(分析)模式必須啟動國際象棋引擎未知的"initialMode"(初始模式)選項 %s未知的變體名 %s上傳檢查(U)變體 %s 不被 %s 所支持變體 %s 只在ICS模式下支持驗證引擎聲明(V)等待第一個國際象棋程式等待對手回應 等待第二個國際象棋程式注意:你正在研究棋局注意:你正在觀棋棋局注意:你正在進行棋局警告: 第二個引擎(%s) 不支持此!紅方輪到紅方走棋紅方超時輸/贏判決門檻沒有分析棋局你在執黑你在執紅暫停時不能復原棋局你尚未走棋必須走完棋才能提和對手沒有超時非法的"searchTime"(搜尋時間)選項 %s非法的"timeControl"(時間控制)選項 %s向下通訊協定版本 %d 不被支持say 內部錯誤,非法的"moveType"(著法類型) %d (%d,%d-%d,%d)向上xboard-4.8.0/po/nl.po0000644000175000001440000017333512422467103011323 00000000000000# Dutch translations for GNU XBoard. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xboard package. # # "She makes her living brewing coffee for strangers..." # # Benno Schulenberg , 2013, 2014. msgid "" msgstr "" "Project-Id-Version: GNU xboard 4.8.0-pre1\n" "Report-Msgid-Bugs-To: bug-xboard@gnu.org\n" "POT-Creation-Date: 2014-10-24 08:20-0700\n" "PO-Revision-Date: 2014-10-02 10:54+0200\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.0\n" #: args.h:840 #, c-format msgid "%s in settings file\n" msgstr "%s in instellingenbestand\n" #: args.h:874 #, c-format msgid "Bad integer value %s" msgstr "Ongeldig geheel getal: %s" #: args.h:980 args.h:1241 #, c-format msgid "Unrecognized argument %s" msgstr "Niet-herkend argument: %s" #: args.h:1011 #, c-format msgid "No value provided for argument %s" msgstr "Geen waarde gegeven voor argument %s" #: args.h:1071 #, c-format msgid "Incomplete \\ escape in value for %s" msgstr "Onvolledige \\-stuurcode in waarde voor %s" #: args.h:1182 #, c-format msgid "Failed to open indirection file %s" msgstr "Kan indirectiebestand %s niet openen" #: args.h:1199 #, c-format msgid "Unrecognized boolean argument value %s" msgstr "Niet-herkende booleaanse waarde: %s" #. TRANSLATORS: "first" is the first of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:808 msgid "first" msgstr "eerste" #. TRANSLATORS: "second" is the second of possible two chess engines. It is inserted into strings #. such as "%s engine" / "%s chess program" / "%s machine" - all meaning the same thing #: backend.c:811 msgid "second" msgstr "tweede" #: backend.c:894 #, c-format msgid "protocol version %d not supported" msgstr "protocolversie %d wordt niet ondersteund" #: backend.c:1000 msgid "You did not specify the engine executable" msgstr "U hebt geen automaatbestand opgegeven." #: backend.c:1058 #, c-format msgid "bad timeControl option %s" msgstr "ongeldige timeControl-optie: %s" #: backend.c:1073 #, c-format msgid "bad searchTime option %s" msgstr "ongeldige searchTime-optie: %s" #: backend.c:1179 #, c-format msgid "Variant %s supported only in ICS mode" msgstr "Variant %s wordt alleen ondersteund in ICS-modus" #: backend.c:1197 #, c-format msgid "Unknown variant name %s" msgstr "Onbekende variantnaam: %s" #: backend.c:1452 msgid "Starting chess program" msgstr "Starten van schaakprogramma" #: backend.c:1475 msgid "Bad game file" msgstr "Incorrect partijbestand" #: backend.c:1482 msgid "Bad position file" msgstr "Incorrect positiebestand" #: backend.c:1496 msgid "Pick new game" msgstr "Kies een nieuwe partij" #: backend.c:1565 msgid "" "You restarted an already completed tourney.\n" "One more cycle will now be added to it.\n" "Games commence in 10 sec." msgstr "" "U hebt een reeds voltooid toernooi herstart.\n" "Er wordt een extra cyclus aan toegevoegd.\n" "De partijen beginnen in tien seconden." #: backend.c:1572 #, c-format msgid "All games in tourney '%s' are already played or playing" msgstr "Alle partijen in toernooi '%s' zijn al gespeeld of spelen nog" #: backend.c:1579 msgid "Can't have a match with no chess programs" msgstr "Er is geen toernooi mogelijk zonder automaten." #: backend.c:1633 #, c-format msgid "Could not open comm port %s" msgstr "Kan communicatiepoort %s niet openen" #: backend.c:1636 #, c-format msgid "Could not connect to host %s, port %s" msgstr "Kan geen verbinding maken met host %s, poort %s" #: backend.c:1692 #, c-format msgid "Unknown initialMode %s" msgstr "Onbekende initialMode %s" #: backend.c:1718 msgid "AnalyzeFile mode requires a game file" msgstr "AnalyzeFile-modus vereist een partijbestand" #: backend.c:1745 msgid "Analysis mode requires a chess engine" msgstr "Analysemodus vereist een schaakprogramma" #: backend.c:1749 msgid "Analysis mode does not work with ICS mode" msgstr "Analysemodus werkt niet met ICS-modus" #: backend.c:1760 msgid "MachineWhite mode requires a chess engine" msgstr "MachineWhite-modus vereist een schaakprogramma" #: backend.c:1765 msgid "MachineWhite mode does not work with ICS mode" msgstr "MachineWhite-modus werkt niet met ICS-modus" #: backend.c:1772 msgid "MachineBlack mode requires a chess engine" msgstr "MachineBlack-modus vereist een schaakprogramma" #: backend.c:1777 msgid "MachineBlack mode does not work with ICS mode" msgstr "MachineBlack-modus werkt niet met ICS-modus" #: backend.c:1784 msgid "TwoMachines mode requires a chess engine" msgstr "TwoMachines-modus vereist een schaakprogramma" #: backend.c:1789 msgid "TwoMachines mode does not work with ICS mode" msgstr "TwoMachines-modus werkt niet met ICS-modus" #: backend.c:1800 msgid "Training mode requires a game file" msgstr "Trainingsmodus vereist een partijbestand" #: backend.c:1963 backend.c:2018 backend.c:2041 backend.c:2443 msgid "Error writing to ICS" msgstr "Fout bij schrijven naar ICS" #: backend.c:1978 msgid "Error reading from keyboard" msgstr "Fout bij lezen van toetsenbord" #: backend.c:1981 msgid "Got end of file from keyboard" msgstr "Einde-van-bestand ontvangen van toetsenbord" #: backend.c:2289 #, c-format msgid "Unknown wild type %d" msgstr "Onbekend wild type %d" #: backend.c:2360 usystem.c:332 msgid "Error writing to display" msgstr "Fout bij schrijven naar beeldscherm" #. TRANSLATORS: to 'kibitz' is to send a message to all players and the game observers #: backend.c:3128 #, c-format msgid "your opponent kibitzes: %s" msgstr "Uw tegenstander kibitzt: %s" #: backend.c:3667 msgid "Error gathering move list: two headers" msgstr "Fout bij lezen van zettenlijst: twee koppen" #: backend.c:3714 msgid "Error gathering move list: nested" msgstr "Fout bij lezen van zettenlijst: genest" #: backend.c:3818 backend.c:4236 backend.c:4440 backend.c:4999 backend.c:5003 #: backend.c:7127 backend.c:12702 backend.c:14440 backend.c:14517 #: backend.c:14563 backend.c:14569 backend.c:14574 backend.c:14579 msgid "vs." msgstr "tegen" #: backend.c:3946 msgid "Illegal move (rejected by ICS)" msgstr "Ongeldige zet (geweigerd door ICS)" #: backend.c:4284 msgid "Connection closed by ICS" msgstr "Verbinding is gesloten door ICS" #: backend.c:4286 msgid "Error reading from ICS" msgstr "Fout bij lezen van ICS" #: backend.c:4363 #, c-format msgid "" "Failed to parse board string:\n" "\"%s\"" msgstr "" "Ontleden van bordtekenreeks is mislukt:\n" "'%s'" #: backend.c:4372 backend.c:10300 msgid "Game too long; increase MAX_MOVES and recompile" msgstr "*** Partij is te lang; verhoog MAX_MOVES en hercompileer." #: backend.c:4491 msgid "Error gathering move list: extra board" msgstr "Fout bij lezen van zettenlijst: extra bord" #: backend.c:4923 backend.c:4945 #, c-format msgid "Couldn't parse move \"%s\" from ICS" msgstr "Kan zet '%s' van ICS niet ontleden" #: backend.c:5193 #, c-format msgid "say Internal error; bad moveType %d (%d,%d-%d,%d)" msgstr "**interne programmafout**; ongeldig moveType %d (%d,%d-%d,%d)" #: backend.c:5264 msgid "You cannot do this while you are playing or observing" msgstr "U kunt dit niet doen tijdens het spelen of observeren." #: backend.c:6210 msgid "Recompile to support this BOARD_RANKS or BOARD_FILES!" msgstr "*** Hercompileer om BOARD_RANKS of BOARD_FILES te ondersteunen." #: backend.c:6700 msgid "You are playing Black" msgstr "U speelt met zwart" #: backend.c:6709 backend.c:6736 msgid "You are playing White" msgstr "U speelt met wit" #: backend.c:6718 backend.c:6744 backend.c:6865 backend.c:6890 backend.c:6906 #: backend.c:15251 msgid "It is White's turn" msgstr "Wit is aan zet" #: backend.c:6722 backend.c:6748 backend.c:6873 backend.c:6896 backend.c:6927 #: backend.c:15243 msgid "It is Black's turn" msgstr "Zwart is aan zet" #: backend.c:6761 msgid "Displayed position is not current" msgstr "Getoonde positie is niet de huidige" #: backend.c:7007 msgid "Illegal move" msgstr "Ongeldige zet" #: backend.c:7084 msgid "End of game" msgstr "Einde van partij" #: backend.c:7087 msgid "Incorrect move" msgstr "Onjuiste zet" #: backend.c:7478 backend.c:7625 msgid "Pull pawn backwards to under-promote" msgstr "Beweeg pion terug voor onderpromotie." #: backend.c:7588 msgid "only marked squares are legal" msgstr "alleen gemarkeerde velden zijn geldig" #: backend.c:7876 msgid "Swiss tourney finished" msgstr "Zwitsers toernooi is beëindigd." #: backend.c:8392 msgid "could not load EGBB library" msgstr "kan EGBB-bibliotheek niet laden" #: backend.c:8395 msgid "wrong EGBB version" msgstr "onjuiste EGBB-versie" #: backend.c:8508 msgid "Invalid pairing from pairing engine" msgstr "Ongeldig koppel van koppelautomaat." #: backend.c:8659 #, c-format msgid "Illegal move \"%s\" from %s machine" msgstr "Ongeldige zet '%s' van %s automaat." #: backend.c:8929 msgid "Bad FEN received from engine" msgstr "Ongeldige FEN ontvangen van automaat" #: backend.c:9030 msgid "Engine did not send setup for non-standard variant" msgstr "Automaat heeft geen opstelling gestuurd voor variant" #: backend.c:9103 backend.c:14302 backend.c:14370 #, c-format msgid "%s does not support analysis" msgstr "%s ondersteunt analyse niet." #: backend.c:9169 #, c-format msgid "Illegal move \"%s\" (rejected by %s chess program)" msgstr "Ongeldige zet '%s' (geweigerd door %s schaakprogramma)" #: backend.c:9200 #, c-format msgid "Failed to start %s chess program %s on %s: %s\n" msgstr "Starten van %s schaakprogramma (%s) op %s is mislukt: %s\n" #: backend.c:9221 #, c-format msgid "Hint: %s" msgstr "Hint: %s" #: backend.c:9226 #, c-format msgid "" "Illegal hint move \"%s\"\n" "from %s chess program" msgstr "" "Ongeldige hintzet '%s'\n" "van %s schaakprogramma." #: backend.c:9401 msgid "Machine accepts your draw offer" msgstr "Automaat accepteert uw remise-aanbod" #: backend.c:9404 msgid "" "Machine offers a draw.\n" "Select Action / Draw to accept." msgstr "" "Automaat biedt remise aan.\n" "Kies Acties > Remise om te accepteren." #. TRANSLATORS: PV = principal variation, the variation the chess engine thinks is the best for everyone #: backend.c:9489 msgid "failed writing PV" msgstr "schrijven van hoofdvariant is mislukt" #: backend.c:9788 #, c-format msgid "Ambiguous move in ICS output: \"%s\"" msgstr "Niet-eenduidige zet in ICS-uitvoer: '%s'" #: backend.c:9798 #, c-format msgid "Illegal move in ICS output: \"%s\"" msgstr "Ongeldige zet in ICS-uitvoer: '%s'" #: backend.c:9809 msgid "Gap in move list" msgstr "Gat in zettenlijst" #: backend.c:10454 #, c-format msgid "Variant %s not supported by %s" msgstr "Variant %s wordt niet ondersteund door %s" #: backend.c:10461 #, c-format msgid ", but %s is" msgstr ", maar %s is" #: backend.c:10616 #, c-format msgid "Startup failure on '%s'" msgstr "Opstartfout bij '%s'" #: backend.c:10647 msgid "Waiting for first chess program" msgstr "Wachten op eerste schaakprogramma" #: backend.c:10652 backend.c:14588 msgid "Waiting for second chess program" msgstr "Wachten op tweede schaakprogramma" #: backend.c:10701 msgid "Could not write on tourney file" msgstr "Kan niet naar toernooibestand schrijven." #: backend.c:10775 msgid "" "You cannot replace an engine while it is engaged!\n" "Terminate its game first." msgstr "" "U kunt een automaat niet vervangen terwijl deze\n" "gebruikt wordt. Beëindig eerst diens partij." #: backend.c:10789 msgid "No engine with the name you gave is installed" msgstr "Er is geen automaat met de gegeven naam geïnstalleerd" # XXX where is Tournament Options dialog? #: backend.c:10791 msgid "" "First change an engine by editing the participants list\n" "of the Tournament Options dialog" msgstr "" "Wijzig eerst een automaat door de deelnemerslijst\n" "in de dialoog «Toernooi-instellingen» te bewerken." #: backend.c:10792 msgid "You can only change one engine at the time" msgstr "U kunt slechts één automaat tegelijk wijzigen." #: backend.c:10807 backend.c:10956 #, c-format msgid "No engine %s is installed" msgstr "Automaat '%s' is niet geïnstalleerd" #: backend.c:10827 msgid "" "You must supply a tournament file,\n" "for storing the tourney progress" msgstr "" "U dient een toernooibestand op te geven,\n" "om de toernooivoortgang in op te slaan." #: backend.c:10837 msgid "Not enough participants" msgstr "Te weinig deelnemers" #: backend.c:11040 msgid "Bad tournament file" msgstr "Incorrect toernooibestand" #: backend.c:11052 msgid "Waiting for other game(s)" msgstr "Wachten op andere partij(en)" #: backend.c:11065 msgid "No pairing engine specified" msgstr "Geen koppelautomaat gegeven" #: backend.c:11541 #, c-format msgid "Match %s vs. %s: final score %d-%d-%d" msgstr "Toernooi van %s tegen %s: eindscore %d-%d-%d" #: backend.c:12019 backend.c:12050 #, c-format msgid "Illegal move: %d.%s%s" msgstr "Ongeldige zet: %d.%s%s" #: backend.c:12039 #, c-format msgid "Ambiguous move: %d.%s%s" msgstr "Niet-eenduidige zet: %d.%s%s" #: backend.c:12093 backend.c:13137 backend.c:13330 backend.c:13700 #, c-format msgid "Can't open \"%s\"" msgstr "Kan '%s' niet openen" #: backend.c:12105 menus.c:116 msgid "Cannot build game list" msgstr "Kan partijenlijst niet samenstellen" #: backend.c:12190 msgid "No more games in this message" msgstr "Geen verdere partijen in dit bericht" #: backend.c:12230 msgid "No game has been loaded yet" msgstr "Er is nog geen partij geladen" #: backend.c:12234 backend.c:13118 ngamelist.c:129 msgid "Can't back up any further" msgstr "Kan niet nog verder teruggaan" #: backend.c:12678 msgid "Game number out of range" msgstr "Partijnummer valt buiten bereik" #: backend.c:12689 msgid "Can't seek on game file" msgstr "Kan niet springen in partijbestand" #: backend.c:12747 msgid "Game not found in file" msgstr "Partij niet gevonden in bestand" #: backend.c:12876 backend.c:13214 msgid "Bad FEN position in file" msgstr "Ongeldige FEN-positie in bestand" #: backend.c:13030 msgid "No moves in game" msgstr "Partij bevat geen zetten" #: backend.c:13114 msgid "No position has been loaded yet" msgstr "Er is nog geen positie geladen" #: backend.c:13175 backend.c:13186 msgid "Can't seek on position file" msgstr "Kan niet springen in positiebestand" #: backend.c:13193 backend.c:13205 msgid "Position not found in file" msgstr "Positie niet gevonden in bestand" #: backend.c:13245 msgid "Black to play" msgstr "Zwart is aan zet" #: backend.c:13248 msgid "White to play" msgstr "Wit is aan zet" #: backend.c:13335 backend.c:13705 msgid "Waiting for access to save file" msgstr "Wachten op toegang om bestand op te slaan" #: backend.c:13337 msgid "Saving game" msgstr "Opslaan van partij" #: backend.c:13338 msgid "Bad Seek" msgstr "Ongeldige bestandssprong" #: backend.c:13707 msgid "Saving position" msgstr "Opslaan van positie" # FIXME Reload Same Game is not in POT #: backend.c:13833 msgid "" "You have edited the game history.\n" "Use Reload Same Game and make your move again." msgstr "" "U hebt de partijgeschiedenis bewerkt.\n" "Gebruik «Zelfde partij herladen» en doe uw zet opnieuw." #: backend.c:13838 msgid "" "You have entered too many moves.\n" "Back up to the correct position and try again." msgstr "" "U hebt te veel zetten ingevoerd.\n" "Ga terug naar de correcte positie en probeer het opnieuw." #: backend.c:13843 msgid "" "Displayed position is not current.\n" "Step forward to the correct position and try again." msgstr "" "Getoonde positie is niet de huidige.\n" "Ga vooruit naar de correcte positie en probeer het opnieuw." #: backend.c:13890 msgid "You have not made a move yet" msgstr "U hebt nog geen zet gedaan" #: backend.c:13911 msgid "" "The cmail message is not loaded.\n" "Use Reload CMail Message and make your move again." msgstr "" "Het CMail-bericht is niet geladen.\n" "Gebruik «CMail-bericht herladen» en doe uw zet opnieuw." #: backend.c:13916 msgid "No unfinished games" msgstr "Geen onafgemaakte partijen" #: backend.c:13922 #, c-format msgid "" "You have already mailed a move.\n" "Wait until a move arrives from your opponent.\n" "To resend the same move, type\n" "\"cmail -remail -game %s\"\n" "on the command line." msgstr "" "U hebt al een zet gemaild.\n" "Wacht tot er een zet arriveert van uw tegenstander.\n" "Om dezelfde zet opnieuw te verzenden, typt u:\n" "\"cmail -remail -game %s\"\n" "op de opdrachtregel." #: backend.c:13937 msgid "Failed to invoke cmail" msgstr "Aanroepen van 'cmail' is mislukt" #: backend.c:13999 #, c-format msgid "Waiting for reply from opponent\n" msgstr "Wachten op antwoord van tegenstander\n" #: backend.c:14021 #, c-format msgid "Still need to make move for game\n" msgstr "U dient nog een zet te doen voor deze partij.\n" #: backend.c:14025 #, c-format msgid "Still need to make moves for both games\n" msgstr "U dient nog zetten te doen voor beide partijen.\n" #: backend.c:14029 #, c-format msgid "Still need to make moves for all %d games\n" msgstr "U dient nog zetten te doen voor alle %d partijen.\n" #: backend.c:14036 #, c-format msgid "Still need to make a move for game %s\n" msgstr "U dient nog een zet te doen voor partij %s.\n" #: backend.c:14042 #, c-format msgid "No unfinished games\n" msgstr "Geen onafgemaakte partijen.\n" #: backend.c:14044 #, c-format msgid "Ready to send mail\n" msgstr "Klaar om mail te verzenden.\n" #: backend.c:14049 #, c-format msgid "Still need to make moves for games %s\n" msgstr "U dient nog zetten te doen voor partijen %s.\n" #: backend.c:14252 msgid "Edit comment" msgstr "Opmerking bewerken" #: backend.c:14254 #, c-format msgid "Edit comment on %d.%s%s" msgstr "Opmerking op %d.%s%s bewerken" #: backend.c:14309 #, c-format msgid "You are not observing a game" msgstr "U bent geen partij aan het observeren." #: backend.c:14420 msgid "It is not White's turn" msgstr "Wit is niet aan zet" #: backend.c:14501 msgid "It is not Black's turn" msgstr "Zwart is niet aan zet" #: backend.c:14609 #, c-format msgid "Starting %s chess program" msgstr "Starten van %s schaakprogramma" #: backend.c:14637 backend.c:15799 msgid "" "Wait until your turn,\n" "or select 'Move Now'." msgstr "" "Wacht op uw beurt,\n" "of kies «Nu zetten»." #: backend.c:14774 msgid "Training mode off" msgstr "Trainingsmodus is uitgeschakeld" #: backend.c:14782 msgid "Training mode on" msgstr "Trainingsmodus is ingeschakeld" #: backend.c:14785 msgid "Already at end of game" msgstr "Reeds aan einde van partij." #: backend.c:14865 msgid "Warning: You are still playing a game" msgstr "Waarschuwing: u bent nog een partij aan het spelen." #: backend.c:14868 msgid "Warning: You are still observing a game" msgstr "Waarschuwing: u bent nog een partij aan het observeren." #: backend.c:14871 msgid "Warning: You are still examining a game" msgstr "Waarschuwing: u bent nog een partij aan het bestuderen." #: backend.c:14938 msgid "Click clock to clear board" msgstr "Klik op klok om bord leeg te maken." # FIXME: analysis? #: backend.c:14948 msgid "Close ICS engine analyze..." msgstr "Analyse van ICS-automaat sluiten..." #: backend.c:15268 msgid "That square is occupied" msgstr "Dat veld is bezet." #: backend.c:15292 backend.c:15318 msgid "There is no pending offer on this move" msgstr "Er is geen aanbod op deze zet." #: backend.c:15354 backend.c:15365 msgid "Your opponent is not out of time" msgstr "Uw tegenstander heeft nog tijd." #: backend.c:15433 msgid "You must make your move before offering a draw" msgstr "U dient uw zet te doen alvorens remise aan te bieden." #: backend.c:15781 msgid "You are not examining a game" msgstr "U bent geen partij aan het bestuderen." #: backend.c:15785 msgid "You can't revert while pausing" msgstr "U kunt niet terugdraaien tijdens pauze." #: backend.c:15839 backend.c:15846 msgid "It is your turn" msgstr "U bent aan zet" #: backend.c:15897 backend.c:15904 backend.c:15990 backend.c:15997 msgid "Wait until your turn." msgstr "Wacht op uw beurt." #: backend.c:15909 msgid "No hint available" msgstr "Geen hint beschikbaar" #: backend.c:15924 backend.c:15955 ngamelist.c:364 msgid "Game list not loaded or empty" msgstr "Partijenlijst is leeg of niet geladen" #: backend.c:15962 msgid "Book file exists! Try again for overwrite." msgstr "Bestand bestaat al. Probeer het opnieuw om deze te overschrijven." #: backend.c:16443 #, c-format msgid "Error writing to %s chess program" msgstr "Fout bij schrijven naar %s schaakprogramma" #: backend.c:16446 backend.c:16477 #, c-format msgid "%s program exits in draw position (%s)" msgstr "%s programma is geëindigd in remisepositie (%s)" #: backend.c:16472 #, c-format msgid "Error: %s chess program (%s) exited unexpectedly" msgstr "Fout: %s schaakprogramma (%s) is onverwacht beëindigd" #: backend.c:16490 #, c-format msgid "Error reading from %s chess program (%s)" msgstr "Fout bij lezen van %s schaakprogramma (%s)" #: backend.c:16918 #, c-format msgid "%s engine has too many options\n" msgstr "%s automaat heeft te veel instellingen\n" #: backend.c:17074 msgid "Displayed move is not current" msgstr "Getoonde zet is niet de huidige" #: backend.c:17083 msgid "Could not parse move" msgstr "Kan zet niet ontleden" #: backend.c:17208 backend.c:17230 msgid "Both flags fell" msgstr "Beide vlaggen zijn gevallen" #: backend.c:17210 msgid "White's flag fell" msgstr "Wits vlag is gevallen" #: backend.c:17232 msgid "Black's flag fell" msgstr "Zwarts vlag is gevallen" #: backend.c:17363 msgid "Clock adjustment not allowed in auto-flag mode" msgstr "Klokbijstelling is niet toegestaan in auto-vlagmodus" #: backend.c:18275 msgid "Bad FEN position in clipboard" msgstr "Ongeldige FEN-positie op het klembord" #: book.c:579 book.c:836 msgid "Polyglot book not valid" msgstr "Polyglot-boek is ongeldig" #: book.c:703 msgid "Book Fault" msgstr "Fout in boek" #: book.c:839 msgid "Hash keys are different" msgstr "Hash-sleutels zijn verschillend" #: book.c:1015 msgid "Could not create book" msgstr "Kan geen boek aanmaken" #: dialogs.c:283 msgid "Tournament file: " msgstr "Toernooibestand: " #: dialogs.c:284 msgid "For concurrent playing of tourney with multiple XBoards:" msgstr "Voor het gelijktijdig spelen van een toernooi met meerdere XBoards:" #: dialogs.c:285 msgid "Sync after round" msgstr "Synchroniseren na een ronde" #: dialogs.c:286 msgid "Sync after cycle" msgstr "Synchroniseren na een cyclus" #: dialogs.c:287 msgid "Tourney participants:" msgstr "Toernooi-deelnemers:" #: dialogs.c:288 msgid "Select Engine:" msgstr "Kies automaat:" #: dialogs.c:296 msgid "Tourney type (0 = round-robin, 1 = gauntlet):" msgstr "Toernooitype (0 = op-de-rij-af, 1 = handschoen):" #: dialogs.c:297 msgid "Number of tourney cycles (or Swiss rounds):" msgstr "Aantal toernooirondes (of Zwitserse rondes):" #: dialogs.c:298 msgid "Default Number of Games in Match (or Pairing):" msgstr "Standaard aantal partijen in een toernooi (of koppel):" #: dialogs.c:299 msgid "Pause between Match Games (msec):" msgstr "Pauze tussen toernooipartijen (msec):" #: dialogs.c:300 msgid "Save Tourney Games on:" msgstr "Toernooipartijen bewaren op:" #: dialogs.c:301 msgid "Game File with Opening Lines:" msgstr "Partijbestand met openingsregels:" #: dialogs.c:302 msgid "Game Number (-1 or -2 = Auto-Increment):" msgstr "Partijnummer (-1 of -2 = automatische ophoging):" #: dialogs.c:303 msgid "File with Start Positions:" msgstr "Bestand met startposities:" #: dialogs.c:304 msgid "Position Number (-1 or -2 = Auto-Increment):" msgstr "Positienummer (-1 of -2 = automatische ophoging):" #: dialogs.c:305 msgid "Rewind Index after this many Games (0 = never):" msgstr "Index terugspoelen na dit aantal partijen (0 = nooit):" #: dialogs.c:306 msgid "Disable own engine books by default" msgstr "Eigen automaatboeken standaard uitschakelen" #: dialogs.c:307 dialogs.c:1671 msgid "Time Control" msgstr "Tijdsbeperking" #: dialogs.c:308 msgid "Common Engine" msgstr "Gemeenschappelijke automaat" #: dialogs.c:309 dialogs.c:441 msgid "General Options" msgstr "Algemene instellingen" #: dialogs.c:310 msgid "Continue Later" msgstr "Later verdergaan" #: dialogs.c:311 msgid "Replace Engine" msgstr "Automaat vervangen" #: dialogs.c:312 msgid "Upgrade Engine" msgstr "Automaat upgraden" #: dialogs.c:313 msgid "Clone Tourney" msgstr "Toernooi klonen" #: dialogs.c:351 msgid "First you must specify an existing tourney file to clone" msgstr "U dient eerst een bestaand toernooibestand op te geven." #: dialogs.c:367 dialogs.c:1512 msgid "# no engines are installed" msgstr "# er zijn geen automaten geïnstalleerd" #: dialogs.c:375 msgid "Internal error: PARTICIPANTS set wrong" msgstr "**Interne programmafout**: PARTICIPANTS is verkeerd ingesteld" #: dialogs.c:383 msgid "Tournament Options" msgstr "Toornooi-opties" #: dialogs.c:402 msgid "Absolute Analysis Scores" msgstr "Absolute analysescores" #: dialogs.c:403 msgid "Almost Always Queen (Detour Under-Promote)" msgstr "Bijna altijd koningin (onderpromotie-omweg)" #: dialogs.c:404 menus.c:736 msgid "Animate Dragging" msgstr "Slepen animeren" #: dialogs.c:405 menus.c:737 msgid "Animate Moving" msgstr "Zetten animeren" #: dialogs.c:406 menus.c:738 msgid "Auto Flag" msgstr "Vanzelf vlaggen" #: dialogs.c:407 menus.c:739 msgid "Auto Flip View" msgstr "Bord vanzelf draaien" #: dialogs.c:408 menus.c:740 msgid "Blindfold" msgstr "Geblinddoekt" #. TRANSLATORS: the drop menu is used to drop a piece, e.g. during bughouse or editing a position #: dialogs.c:410 msgid "Drop Menu" msgstr "Plaatsingsmenu" #: dialogs.c:411 msgid "Enable Variation Trees" msgstr "Variatiebomen inschakelen" #: dialogs.c:412 msgid "Headers in Engine Output Window" msgstr "" #: dialogs.c:413 msgid "Hide Thinking from Human" msgstr "Denken verbergen voor mens" #: dialogs.c:414 menus.c:745 msgid "Highlight Last Move" msgstr "Laatste zet markeren" #: dialogs.c:415 msgid "Highlight with Arrow" msgstr "Markeren met pijl" #: dialogs.c:416 menus.c:748 msgid "One-Click Moving" msgstr "Eenkliks zetten" #: dialogs.c:417 msgid "Periodic Updates (in Analysis Mode)" msgstr "Periodieke updates (in analysemodus)" #: dialogs.c:419 msgid "Play Move(s) of Clicked PV (Analysis)" msgstr "" #: dialogs.c:420 dialogs.c:620 menus.c:750 msgid "Ponder Next Move" msgstr "Volgende zet overdenken" #: dialogs.c:421 msgid "Popup Exit Messages" msgstr "Popup-afsluitberichten" #: dialogs.c:422 menus.c:752 msgid "Popup Move Errors" msgstr "Popup-zetfouten" #: dialogs.c:423 msgid "Scores in Move List" msgstr "Scores in zettenlijst" #: dialogs.c:424 msgid "Show Coordinates" msgstr "Coördinaten tonen" #: dialogs.c:425 msgid "Show Target Squares" msgstr "Doelvelden tonen" #: dialogs.c:426 msgid "Sticky Windows" msgstr "" #: dialogs.c:427 menus.c:755 msgid "Test Legality" msgstr "Geldigheid testen" #: dialogs.c:428 msgid "Top-Level Dialogs" msgstr "Topniveau-dialogen" #: dialogs.c:429 msgid "Flash Moves (0 = no flashing):" msgstr "Zetten knipperen (0 = niet knipperen):" #: dialogs.c:430 msgid "Flash Rate (high = fast):" msgstr "Knippersnelheid (hoog = snel):" # FIXME: reword #: dialogs.c:431 msgid "Animation Speed (high = slow):" msgstr "Animatiesnelheid (hoog = langzaam):" #: dialogs.c:432 msgid "Zoom factor in Evaluation Graph:" msgstr "Zoomfactor in evaluatiegrafiek:" #: dialogs.c:452 msgid "Normal" msgstr "normaal" #: dialogs.c:453 msgid "Makruk" msgstr "Makruk" #: dialogs.c:454 msgid "FRC" msgstr "FRC" #: dialogs.c:455 msgid "Shatranj" msgstr "Shatranj" #: dialogs.c:456 msgid "Wild castle" msgstr "wilde rokade" #: dialogs.c:457 msgid "Knightmate" msgstr "paardmat" #: dialogs.c:458 msgid "No castle" msgstr "geen rokade" #: dialogs.c:459 msgid "Cylinder *" msgstr "cilinder *" #: dialogs.c:460 msgid "3-checks" msgstr "drie keer schaak" #: dialogs.c:461 msgid "berolina *" msgstr "berolina *" #: dialogs.c:462 msgid "atomic" msgstr "atomisch" #: dialogs.c:463 msgid "two kings" msgstr "twee koningen" #: dialogs.c:464 msgid " " msgstr " " #: dialogs.c:465 msgid "Spartan" msgstr "Spartaans" #: dialogs.c:466 msgid "Board size ( -1 = default for selected variant):" msgstr "Bordafmetingen (-1 = standaard voor de variant):" #: dialogs.c:467 msgid "Number of Board Ranks:" msgstr "Aantal bordrijen:" #: dialogs.c:468 msgid "Number of Board Files:" msgstr "Aantal bordlijnen:" #: dialogs.c:469 msgid "Holdings Size:" msgstr "Stalgrootte:" #: dialogs.c:471 msgid "" "Variants marked with * can only be played\n" "with legality testing off." msgstr "" "Varianten gemarkeerd met * kunnen alleen\n" "gespeeld met geldigheidstest uitgeschakeld." #: dialogs.c:473 msgid "ASEAN" msgstr "" #: dialogs.c:474 msgid "Great Shatranj (10x8)" msgstr "Grote Shatranj (10x8)" #: dialogs.c:475 msgid "Seirawan" msgstr "Seirawan" #: dialogs.c:476 msgid "Falcon (10x8)" msgstr "Falcon (10x8)" #: dialogs.c:477 msgid "Superchess" msgstr "Superschaak" #: dialogs.c:478 msgid "Capablanca (10x8)" msgstr "Capablanca (10x8)" #: dialogs.c:479 msgid "Crazyhouse" msgstr "Crazyhouse" #: dialogs.c:480 msgid "Gothic (10x8)" msgstr "Gothic (10x8)" #: dialogs.c:481 msgid "Bughouse" msgstr "Bughouse" #: dialogs.c:482 msgid "Janus (10x8)" msgstr "Janus (10x8)" #: dialogs.c:483 msgid "Suicide" msgstr "suïcide" #: dialogs.c:484 msgid "CRC (10x8)" msgstr "CRC (10x8)" #: dialogs.c:485 msgid "give-away" msgstr "weggever" #: dialogs.c:486 msgid "grand (10x10)" msgstr "Grand (10x10)" #: dialogs.c:487 msgid "losers" msgstr "verliezers" #: dialogs.c:488 msgid "shogi (9x9)" msgstr "Shogi (9x9)" #: dialogs.c:489 msgid "fairy" msgstr "Fairy" #: dialogs.c:490 msgid "xiangqi (9x10)" msgstr "Xiangqi (9x10)" #: dialogs.c:491 msgid "mighty lion" msgstr "Mighty Lion" #: dialogs.c:492 msgid "courier (12x8)" msgstr "Courier (12x8)" #: dialogs.c:493 msgid "elven chess (10x10)" msgstr "Elvenschaak (10x10)" #: dialogs.c:494 msgid "chu shogi (12x12)" msgstr "Chu shogi (12x12)" #: dialogs.c:538 #, c-format msgid "Warning: second engine (%s) does not support this!" msgstr "Waarschuwing: tweede automaat (%s) ondersteunt dit niet." # FIXME: Bughouse with capital # FIXME: what *is* viewer mode? #: dialogs.c:566 #, c-format msgid "Only bughouse is not available in viewer mode." msgstr "Alleen Bughouse is niet beschikbaar in viewer-modus." #: dialogs.c:567 #, c-format msgid "" "All variants not supported by the first engine\n" "(currently %s) are disabled." msgstr "" "Varianten die de eerste automaat (momenteel\n" "%s) niet kent zijn onkiesbaar." # XXX "NEW" is confusing, plural is better #: dialogs.c:589 msgid "New Variant" msgstr "Varianten" #: dialogs.c:621 msgid "Maximum Number of CPUs per Engine:" msgstr "Maximum aantal processoren per automaat:" #: dialogs.c:622 msgid "Polygot Directory:" msgstr "Polygot-map:" #: dialogs.c:623 msgid "Hash-Table Size (MB):" msgstr "Grootte van hash-tabel (MB):" #: dialogs.c:624 msgid "EGTB Path:" msgstr "EGTB-pad:" #: dialogs.c:625 msgid "EGTB Cache Size (MB):" msgstr "Grootte van EGTB-cache (MB):" #: dialogs.c:626 msgid "Use GUI Book" msgstr "GUI-boek gebruiken" #: dialogs.c:627 msgid "Opening-Book Filename:" msgstr "Bestandsnaam van openingenboek:" #: dialogs.c:628 msgid "Book Depth (moves):" msgstr "Boekdiepte (zetten):" #: dialogs.c:629 msgid "Book Variety (0) vs. Strength (100):" msgstr "Gevarieerdheid (0) tot Sterkte (100):" #: dialogs.c:630 msgid "Engine #1 Has Own Book" msgstr "Automaat #1 heeft eigen boek" # XXX why the spaces? #: dialogs.c:631 msgid "Engine #2 Has Own Book " msgstr "Automaat #2 heeft eigen boek" #: dialogs.c:642 msgid "Common Engine Settings" msgstr "Algemene automaatinstellingen" #: dialogs.c:648 msgid "Detect all Mates" msgstr "Alle matten detecteren" #: dialogs.c:649 msgid "Verify Engine Result Claims" msgstr "Resultaatclaims van automaat controleren" #: dialogs.c:650 msgid "Draw if Insufficient Mating Material" msgstr "Remise bij onvoldoende matmateriaal" #: dialogs.c:651 msgid "Adjudicate Trivial Draws (3-Move Delay)" msgstr "Eenvoudige remises beslissen (3 zetten uitstel)" #: dialogs.c:652 msgid "N-Move Rule:" msgstr "N-zettenregel:" #: dialogs.c:653 msgid "N-fold Repeats:" msgstr "N-voudige herhalingen:" #: dialogs.c:654 msgid "Draw after N Moves Total:" msgstr "Remise na in totaal N zetten:" #: dialogs.c:655 msgid "Win / Loss Threshold:" msgstr "Winst/verlies-grenswaarde:" #: dialogs.c:656 msgid "Negate Score of Engine #1" msgstr "Score van automaat 1 negatief maken" #: dialogs.c:657 msgid "Negate Score of Engine #2" msgstr "Score van automaat 2 negatief maken" #: dialogs.c:664 msgid "Adjudicate non-ICS Games" msgstr "Non-ICS-partijen beslissen" #: dialogs.c:677 msgid "Auto-Kibitz" msgstr "Vanzelf kibitzen" #: dialogs.c:678 msgid "Auto-Comment" msgstr "Vanzelf becommentariëren" #: dialogs.c:679 msgid "Auto-Observe" msgstr "Vanzelf observeren" #: dialogs.c:680 msgid "Auto-Raise Board" msgstr "Bord automatisch focussen" #: dialogs.c:681 msgid "Auto-Create Logon Script" msgstr "Automatisch een logon-script maken" #: dialogs.c:682 msgid "Background Observe while Playing" msgstr "Op achtergrond observeren tijdens spelen" #: dialogs.c:683 msgid "Dual Board for Background-Observed Game" msgstr "Dubbel bord voor op achtergrond geobserveerde partij" #: dialogs.c:684 msgid "Get Move List" msgstr "Zettenlijst ophalen" #: dialogs.c:685 msgid "Quiet Play" msgstr "Stil spelen" #: dialogs.c:686 msgid "Seek Graph" msgstr "Zoekgrafiek" #: dialogs.c:687 msgid "Auto-Refresh Seek Graph" msgstr "Zoekgrafiek vanzelf verversen" #: dialogs.c:688 msgid "Auto-InputBox PopUp" msgstr "" #: dialogs.c:689 msgid "Quit after game" msgstr "Afsluiten na partij" #: dialogs.c:690 msgid "Premove" msgstr "Voorzet" #: dialogs.c:691 msgid "Premove for White" msgstr "Voorzet voor wit" #: dialogs.c:692 msgid "First White Move:" msgstr "Eerste zet van wit:" #: dialogs.c:693 msgid "Premove for Black" msgstr "Voorzet voor zwart" #: dialogs.c:694 msgid "First Black Move:" msgstr "Eerste zet van zwart:" #: dialogs.c:696 msgid "Alarm" msgstr "" #: dialogs.c:697 msgid "Alarm Time (msec):" msgstr "" #: dialogs.c:699 msgid "Colorize Messages" msgstr "Berichten kleuren" #: dialogs.c:700 msgid "Shout Text Colors:" msgstr "Shout-tekstkleuren:" #: dialogs.c:701 msgid "S-Shout Text Colors:" msgstr "S-Shout-tekstkleuren:" #: dialogs.c:702 msgid "Channel #1 Text Colors:" msgstr "Kanaal-1-tekstkleuren:" #: dialogs.c:703 msgid "Other Channel Text Colors:" msgstr "Anderekanaal-tekstkleuren:" #: dialogs.c:704 msgid "Kibitz Text Colors:" msgstr "Kibitz-tekstkleuren:" #: dialogs.c:705 msgid "Tell Text Colors:" msgstr "" #: dialogs.c:706 msgid "Challenge Text Colors:" msgstr "" #: dialogs.c:707 msgid "Request Text Colors:" msgstr "Verzoek-tekstkleuren:" #: dialogs.c:708 msgid "Seek Text Colors:" msgstr "Tekstkleuren voor zoeken:" #: dialogs.c:709 #, fuzzy msgid "Other Text Colors:" msgstr "Anderekanaal-tekstkleuren:" #: dialogs.c:716 msgid "ICS Options" msgstr "ICS-instellingen" #: dialogs.c:721 msgid "Exact position match" msgstr "Exacte positie-overeenkomst" #: dialogs.c:721 msgid "Shown position is subset" msgstr "Getoonde positie is een subset" #: dialogs.c:721 msgid "Same material with exactly same Pawn chain" msgstr "Zelfde materiaal met exact dezelfde pionketen" #: dialogs.c:722 msgid "Same material" msgstr "Zelfde materiaal" #: dialogs.c:722 msgid "Material range (top board half optional)" msgstr "Materiaalbereik (bovenste bordhelft is optioneel)" #: dialogs.c:722 msgid "Material difference (optional stuff balanced)" msgstr "Materiaalverschil (optioneel spul is in evenwicht)" #: dialogs.c:737 msgid "Auto-Display Tags" msgstr "Labels vanzelf tonen" #: dialogs.c:738 msgid "Auto-Display Comment" msgstr "Opmerkingen vanzelf tonen" #: dialogs.c:739 msgid "" "Auto-Play speed of loaded games\n" "(0 = instant, -1 = off):" msgstr "" "Speelsnelheid van geladen partijen\n" "(0 = instantaan, -1 = uit):" #: dialogs.c:740 msgid "Seconds per Move:" msgstr "Seconden per zet:" #: dialogs.c:741 msgid "" "\n" "options to use in game-viewer mode:" msgstr "" #: dialogs.c:743 msgid "" "\n" "Thresholds for position filtering in game list:" msgstr "" #: dialogs.c:744 msgid "Elo of strongest player at least:" msgstr "Elo van sterkste speler minstens:" #: dialogs.c:745 msgid "Elo of weakest player at least:" msgstr "Elo van zwakste speler minstens:" #: dialogs.c:746 msgid "No games before year:" msgstr "Geen partijen vóór het jaar:" #: dialogs.c:747 msgid "Minimum nr consecutive positions:" msgstr "Minimum aantal opeenvolgende posities:" #: dialogs.c:749 msgid "Search mode:" msgstr "Zoekmodus:" #: dialogs.c:750 msgid "Also match reversed colors" msgstr "Ook matchen met verwisselde kleuren" #: dialogs.c:751 msgid "Also match left-right flipped position" msgstr "Ook matchen met links-rechts gespiegelde positie" #: dialogs.c:760 msgid "Load Game Options" msgstr "Partij-instellingen laden" #: dialogs.c:772 msgid "Auto-Save Games" msgstr "Partijen vanzelf opslaan" #: dialogs.c:773 msgid "Own Games Only" msgstr "Alleen eigen partijen" #: dialogs.c:774 msgid "Save Games on File:" msgstr "Partijen opslaan in:" #: dialogs.c:775 msgid "Save Final Positions on File:" msgstr "Eindposities opslaan in:" #: dialogs.c:776 msgid "PGN Event Header:" msgstr "" #: dialogs.c:777 msgid "Old Save Style (as opposed to PGN)" msgstr "" #: dialogs.c:778 msgid "Include Number Tag in tourney PGN" msgstr "Nummerlabel in toernooi-PGN opnemen" #: dialogs.c:779 msgid "Save Score/Depth Info in PGN" msgstr "" #: dialogs.c:780 msgid "Save Out-of-Book Info in PGN " msgstr "" #: dialogs.c:787 msgid "Save Game Options" msgstr "Partij-instellingen opslaan" #: dialogs.c:796 msgid "No Sound" msgstr "(geen geluid)" #: dialogs.c:797 msgid "Default Beep" msgstr "Standaardpiep" #: dialogs.c:798 msgid "Above WAV File" msgstr "Bovenstaande WAV" #: dialogs.c:799 msgid "Car Horn" msgstr "Claxon" #: dialogs.c:800 msgid "Cymbal" msgstr "Cymbaal" #: dialogs.c:801 msgid "Ding" msgstr "Tink" #: dialogs.c:802 msgid "Gong" msgstr "Gong" #: dialogs.c:803 msgid "Laser" msgstr "Laser" #: dialogs.c:804 msgid "Penalty" msgstr "Zoemer" #: dialogs.c:805 msgid "Phone" msgstr "Telefoon" #: dialogs.c:806 msgid "Pop" msgstr "Plop" #: dialogs.c:807 msgid "Roar" msgstr "Brul" #: dialogs.c:808 msgid "Slap" msgstr "Klap" #: dialogs.c:809 msgid "Wood Thunk" msgstr "Houtplok" #: dialogs.c:811 msgid "User File" msgstr "Gebruikersbestand" #: dialogs.c:834 msgid "User WAV File:" msgstr "Eigen WAV-bestand:" #: dialogs.c:835 msgid "Sound Program:" msgstr "Geluidsprogramma:" #: dialogs.c:836 msgid "Try-Out Sound:" msgstr "Dit geluid proberen:" #: dialogs.c:837 msgid "Play" msgstr "Afspelen" #: dialogs.c:838 msgid "Move:" msgstr "Zet:" #: dialogs.c:839 msgid "Win:" msgstr "Gewonnen:" #: dialogs.c:840 msgid "Lose:" msgstr "Verloren:" #: dialogs.c:841 msgid "Draw:" msgstr "Remise:" #: dialogs.c:842 msgid "Unfinished:" msgstr "Onafgemaakt:" #: dialogs.c:843 msgid "Alarm:" msgstr "" #: dialogs.c:844 msgid "Challenge:" msgstr "" #: dialogs.c:846 msgid "Sounds Directory:" msgstr "Geluidenmap:" #: dialogs.c:847 msgid "Shout:" msgstr "" #: dialogs.c:848 msgid "S-Shout:" msgstr "" #: dialogs.c:849 msgid "Channel:" msgstr "Kanaal:" #: dialogs.c:850 msgid "Channel 1:" msgstr "Kanaal 1:" #: dialogs.c:851 msgid "Tell:" msgstr "Mededeling" #: dialogs.c:852 msgid "Kibitz:" msgstr "Kibitz:" #: dialogs.c:853 msgid "Request:" msgstr "Verzoek:" #: dialogs.c:854 msgid "Lion roar:" msgstr "Leeuwenbrul:" #: dialogs.c:855 msgid "Seek:" msgstr "Zoeken:" #: dialogs.c:871 msgid "Sound Options" msgstr "Geluidsinstellingen" #: dialogs.c:887 msgid "Selectable themes:" msgstr "Selecteerbare thema's:" #: dialogs.c:889 msgid "New name for current theme:" msgstr "Nieuwe naam voor huidige thema:" #: dialogs.c:892 msgid "White Piece Color:" msgstr "Kleur van wit stuk:" #. TRANSLATORS: R = single letter for the color red #: dialogs.c:895 dialogs.c:904 dialogs.c:910 dialogs.c:916 dialogs.c:922 #: dialogs.c:928 msgid "R" msgstr "R" #. TRANSLATORS: G = single letter for the color green #: dialogs.c:897 dialogs.c:905 dialogs.c:911 dialogs.c:917 dialogs.c:923 #: dialogs.c:929 msgid "G" msgstr "G" #. TRANSLATORS: B = single letter for the color blue #: dialogs.c:899 dialogs.c:906 dialogs.c:912 dialogs.c:918 dialogs.c:924 #: dialogs.c:930 msgid "B" msgstr "B" #. TRANSLATORS: D = single letter to make a color darker #: dialogs.c:901 dialogs.c:907 dialogs.c:913 dialogs.c:919 dialogs.c:925 #: dialogs.c:931 msgid "D" msgstr "D" #: dialogs.c:902 msgid "Black Piece Color:" msgstr "Kleur van zwart stuk:" #: dialogs.c:908 msgid "Light Square Color:" msgstr "Kleur van licht veld:" #: dialogs.c:914 msgid "Dark Square Color:" msgstr "Kleur van donker veld:" #: dialogs.c:920 msgid "Highlight Color:" msgstr "Markeringskleur:" #: dialogs.c:926 msgid "Premove Highlight Color:" msgstr "" #: dialogs.c:932 msgid "Flip Pieces Shogi Style (Colored buttons restore default)" msgstr "" #: dialogs.c:934 msgid "Mono Mode" msgstr "" #: dialogs.c:935 msgid "Logo Size (0=off, requires restart):" msgstr "" #: dialogs.c:936 msgid "Line Gap (-1 = default for board size):" msgstr "" #: dialogs.c:937 msgid "Use Board Textures" msgstr "Bordtexturen gebruiken" #: dialogs.c:938 msgid "Light-Squares Texture File:" msgstr "Textuurbestand voor lichte velden:" #: dialogs.c:939 msgid "Dark-Squares Texture File:" msgstr "Textuurbestand voor donkere velden:" #: dialogs.c:940 msgid "Use external piece bitmaps with their own colors" msgstr "" #: dialogs.c:941 msgid "Directory with Pieces Images:" msgstr "Map met afbeeldingen van stukken:" #: dialogs.c:1012 msgid "# no themes are defined" msgstr "# er zijn geen thema's gedefinieerd" #: dialogs.c:1024 msgid "Board Options" msgstr "Bordinstellingen" #: dialogs.c:1095 menus.c:654 msgid "ICS text menu" msgstr "ICS-tekstmenu" #: dialogs.c:1124 msgid "clear" msgstr "wissen" #: dialogs.c:1125 dialogs.c:1224 msgid "save changes" msgstr "wijzigingen opslaan" #: dialogs.c:1223 msgid "add next move" msgstr "Volgende zet toevoegen" #: dialogs.c:1247 msgid "Edit book" msgstr "Boek bewerken" #: dialogs.c:1247 menus.c:656 msgid "Tags" msgstr "Labels" #: dialogs.c:1385 msgid "ICS input box" msgstr "ICS-invoervak" #: dialogs.c:1417 msgid "Type a move" msgstr "Typ een zet" #: dialogs.c:1443 msgid "Engine has no options" msgstr "Automaat kent geen instellingen." #: dialogs.c:1445 msgid "Engine Settings" msgstr "Automaatinstellingen" #: dialogs.c:1470 msgid "Select engine from list:" msgstr "Selecteer een automaat uit de lijst:" #: dialogs.c:1473 msgid "or specify one below:" msgstr "of geef er hieronder een op:" #: dialogs.c:1474 msgid "Nickname (optional):" msgstr "Bijnaam (optioneel):" #: dialogs.c:1475 msgid "Use nickname in PGN player tags of engine-engine games" msgstr "" #: dialogs.c:1476 msgid "Engine Directory:" msgstr "Automatenmap:" #: dialogs.c:1477 msgid "Engine Command:" msgstr "Automaatopdracht:" #: dialogs.c:1478 msgid "(Directory will be derived from engine path when empty)" msgstr "(map wordt afgeleid uit automaatpad indien leeg)" #: dialogs.c:1479 msgid "UCI" msgstr "UCI" #: dialogs.c:1480 msgid "WB protocol v1 (do not wait for engine features)" msgstr "" #: dialogs.c:1481 msgid "Must not use GUI book" msgstr "" #: dialogs.c:1482 msgid "Add this engine to the list" msgstr "Deze automaat aan de lijst toevoegen" #: dialogs.c:1483 msgid "Force current variant with this engine" msgstr "Huidige variant opdringen aan deze automaat" #: dialogs.c:1533 msgid "Load first engine" msgstr "Eerste automaat laden" #: dialogs.c:1539 msgid "Load second engine" msgstr "Tweede automaat laden" # XXX gets truncated to 7 chars #: dialogs.c:1562 msgid "shuffle" msgstr "Husselen" #: dialogs.c:1563 msgid "Fischer castling" msgstr "Fischer-rokade" #: dialogs.c:1564 msgid "Start-position number:" msgstr "Startpositienummer:" #: dialogs.c:1565 msgid "randomize" msgstr "Willekeurig" #: dialogs.c:1566 msgid "pick fixed" msgstr "Vaste kiezen" #: dialogs.c:1583 msgid "New Shuffle Game" msgstr "Husselpartij" #: dialogs.c:1602 msgid "classical" msgstr "Klassiek" #: dialogs.c:1603 msgid "incremental" msgstr "Ophogend" #: dialogs.c:1604 msgid "fixed max" msgstr "Vast maximum" #: dialogs.c:1605 msgid "Moves per session:" msgstr "Zetten per sessie:" #: dialogs.c:1606 msgid "Initial time (min):" msgstr "Begintijd (minuten)" #: dialogs.c:1607 msgid "Increment or max (sec/move):" msgstr "Ophoging of maximaal (sec/zet):" #: dialogs.c:1608 msgid "Time-Odds factors:" msgstr "Tijdsfactoren:" #: dialogs.c:1609 msgid "Engine #1" msgstr "Automaat 1" #: dialogs.c:1610 msgid "Engine #2 / Human" msgstr "Automaat 2 / Mens" # XXX gets truncated at start to 8 chars #: dialogs.c:1650 dialogs.c:1653 dialogs.c:1658 dialogs.c:1659 #: gtk/xoptions.c:184 msgid "Unused" msgstr "(loos)" #: dialogs.c:1700 msgid "Error writing to chess program" msgstr "Fout bij schrijven naar schaakprogramma" #: dialogs.c:1768 xaw/xoptions.c:1318 msgid "Cancel" msgstr "Annuleren" #: dialogs.c:1773 dialogs.c:2371 dialogs.c:2375 msgid "King" msgstr "Koning" #: dialogs.c:1776 msgid "Captain" msgstr "Kapitein" #: dialogs.c:1777 msgid "Lieutenant" msgstr "Luitenant" #: dialogs.c:1778 msgid "General" msgstr "Generaal" #: dialogs.c:1779 msgid "Warlord" msgstr "Krijgsheer" #: dialogs.c:1781 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Knight" msgstr "Paard" #: dialogs.c:1782 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Bishop" msgstr "Loper" #: dialogs.c:1783 dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Rook" msgstr "Toren" #: dialogs.c:1787 dialogs.c:2372 dialogs.c:2376 msgid "Archbishop" msgstr "Aartsbisschop" #: dialogs.c:1788 dialogs.c:2372 dialogs.c:2376 msgid "Chancellor" msgstr "Kanselier" #: dialogs.c:1790 dialogs.c:2371 dialogs.c:2375 dialogs.c:2393 msgid "Queen" msgstr "Koningin" #: dialogs.c:1792 msgid "Lion" msgstr "Leeuw" #: dialogs.c:1796 msgid "Defer" msgstr "Uitstellen" #: dialogs.c:1797 dialogs.c:2372 dialogs.c:2376 msgid "Promote" msgstr "Promoveren" #: dialogs.c:1854 msgid "Chats:" msgstr "Chats:" #: dialogs.c:1855 dialogs.c:1856 dialogs.c:1857 dialogs.c:1858 dialogs.c:1859 #: dialogs.c:1957 dialogs.c:2017 dialogs.c:2049 msgid "New Chat" msgstr "Nieuwe chat" #: dialogs.c:1862 msgid "Chat partner:" msgstr "Chatpartner:" #: dialogs.c:1863 msgid "End Chat" msgstr "Chat beëindigen" #: dialogs.c:1864 msgid "Hide" msgstr "Verbergen" #: dialogs.c:2074 msgid "ICS Interaction" msgstr "ICS-interactie" #: dialogs.c:2141 msgid "factory" msgstr "origineel" #: dialogs.c:2142 msgid "up" msgstr "omhoog" #: dialogs.c:2143 msgid "down" msgstr "omlaag" #: dialogs.c:2162 msgid "No tag selected" msgstr "Geen label geselecteerd" #: dialogs.c:2193 msgid "Game-list options" msgstr "Partijenlijst-instellingen" #: dialogs.c:2269 dialogs.c:2283 msgid "Error" msgstr "Fout" #: dialogs.c:2306 msgid "Fatal Error" msgstr "Fatale fout" #: dialogs.c:2306 msgid "Exiting" msgstr "Afsluiten" #: dialogs.c:2317 msgid "Information" msgstr "Informatie" #: dialogs.c:2324 msgid "Note" msgstr "Notitie" #: dialogs.c:2370 dialogs.c:2656 dialogs.c:2659 msgid "White" msgstr "Wit" #: dialogs.c:2370 dialogs.c:2374 dialogs.c:2393 msgid "Pawn" msgstr "Pion" #: dialogs.c:2371 dialogs.c:2375 msgid "Elephant" msgstr "Olifant" #: dialogs.c:2371 dialogs.c:2375 msgid "Cannon" msgstr "Kanon" #: dialogs.c:2372 dialogs.c:2376 msgid "Demote" msgstr "Degraderen" #: dialogs.c:2373 dialogs.c:2377 msgid "Empty square" msgstr "Leeg veld" #: dialogs.c:2373 dialogs.c:2377 msgid "Clear board" msgstr "Bord leegmaken" #: dialogs.c:2374 dialogs.c:2668 dialogs.c:2671 msgid "Black" msgstr "Zwart" #: dialogs.c:2474 menus.c:809 msgid "File" msgstr "Bestand" #: dialogs.c:2475 menus.c:810 msgid "Edit" msgstr "Bewerken" #: dialogs.c:2476 menus.c:811 msgid "View" msgstr "Weergave" #: dialogs.c:2477 menus.c:812 msgid "Mode" msgstr "Modus" #: dialogs.c:2478 menus.c:813 msgid "Action" msgstr "Acties" #: dialogs.c:2479 menus.c:814 msgid "Engine" msgstr "Automaat" # XXX "Instellingen" is te lang, wordt afgeknabbeld. #: dialogs.c:2480 menus.c:815 msgid "Options" msgstr "Opties" #: dialogs.c:2481 menus.c:816 msgid "Help" msgstr "Hulp" #: dialogs.c:2491 msgid "<<" msgstr "<<" #: dialogs.c:2492 msgid "<" msgstr "<" #: dialogs.c:2494 msgid ">" msgstr ">" #: dialogs.c:2495 msgid ">>" msgstr ">>" #: dialogs.c:2774 msgid "Directories:" msgstr "Mappen:" #: dialogs.c:2775 msgid "Files:" msgstr "Bestanden:" #: dialogs.c:2776 msgid "by name" msgstr "op naam" #: dialogs.c:2777 msgid "by type" msgstr "op type" #: dialogs.c:2780 msgid "Filename:" msgstr "Bestandsnaam:" #: dialogs.c:2781 msgid "New directory" msgstr "Nieuwe map" #: dialogs.c:2782 msgid "File type:" msgstr "Bestandstype:" #: dialogs.c:2857 msgid "Contents of" msgstr "Inhoud van" #: dialogs.c:2883 msgid " next page" msgstr " volgende pagina" #: dialogs.c:2900 msgid "FIRST TYPE DIRECTORY NAME HERE" msgstr "Typ hier eerst een mapnaam" #: dialogs.c:2901 msgid "TRY ANOTHER NAME" msgstr "Kies een andere naam" #: draw.c:354 msgid "" "No default pieces installed!\n" "Select your own using '-pieceImageDirectory'." msgstr "" "Er zijn geen standaardstukken geïnstalleerd!\n" "Kies uw eigen met '-pieceImageDirectory'." #: engineoutput.c:111 menus.c:650 #, c-format msgid "Engine Output" msgstr "Automaatuitvoer" #: engineoutput.c:121 #, c-format msgid "%s (%d reversible ply)" msgid_plural "%s (%d reversible plies)" msgstr[0] "%s (%d omkeerbare ply)" msgstr[1] "%s (%d omkeerbare plies)" #: engineoutput.c:552 engineoutput.c:555 nengineoutput.c:82 nengineoutput.c:90 msgid "NPS" msgstr "NPS" #: gamelist.c:376 #, c-format msgid "Reading game file (%d)" msgstr "Lezen van partijbestand (%d)" #: gtk/xboard.c:975 xaw/xboard.c:1072 #, c-format msgid "%s: can't cd to CHESSDIR: " msgstr "%s: Kan huidige map niet wijzigen naar CHESSDIR: " #: gtk/xboard.c:984 xaw/xboard.c:1081 #, c-format msgid "Failed to open file '%s'\n" msgstr "Kan bestand '%s' niet openen\n" #: gtk/xboard.c:999 xaw/xboard.c:1090 msgid "Recompile with larger BOARD_RANKS or BOARD_FILES to support this size" msgstr "" #: gtk/xboard.c:1018 xaw/xboard.c:1122 #, c-format msgid "%s: bad boardSize syntax %s\n" msgstr "%s: onjuiste syntax %s voor 'boardSize'\n" #: gtk/xboard.c:1061 xaw/xboard.c:1161 #, c-format msgid "%s: unrecognized boardSize name %s\n" msgstr "%s: onbekende naam %s voor 'boardSize'\n" #: gtk/xboard.c:1100 xaw/xboard.c:1198 #, c-format msgid "%s: too few colors available; trying monochrome mode\n" msgstr "%s: te weinig kleuren beschikbaar; monochroommodus wordt geprobeerd\n" #: gtk/xboard.c:1414 xaw/xboard.c:1490 #, c-format msgid "Unable to create font set for %s.\n" msgstr "Kan geen lettertypenset aanmaken voor %s.\n" #: gtk/xboard.c:1439 xaw/xboard.c:1513 #, c-format msgid "%s: no fonts match pattern %s\n" msgstr "%s: er zijn geen lettertypen die overeenkomen met patroon %s\n" #: gtk/xboard.c:1900 xaw/xboard.c:2003 msgid "Can't open temp file" msgstr "Kan tijdelijk bestand niet openen" #: gtk/xboard.c:2383 msgid "Failed to open file" msgstr "Kan bestand niet openen" #: menus.c:134 msgid "Load game file name?" msgstr "Partij laden uit bestand:" #: menus.c:179 msgid "Load position file name?" msgstr "Positie laden uit bestand:" #: menus.c:185 menus.c:590 msgid "Save game file name?" msgstr "Partij opslaan in bestand:" #: menus.c:194 msgid "Save position file name?" msgstr "Positie opslaan in bestand:" #: menus.c:362 msgid " (with Zippy code)" msgstr " (met Zippy-code)" #: menus.c:367 #, c-format msgid "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Enhancements Copyright 1992-2014 Free Software Foundation\n" "Enhancements Copyright 2005 Alessandro Scotti\n" "\n" "%s is free software and carries NO WARRANTY;see the file COPYING for more " "information.\n" "The GTK build of this version is experimental and unstable\n" "\n" "Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n" "Check out the newest features at: http://www.gnu.org/software/xboard/" "whats_new.html\n" "\n" "Report bugs via email at: \n" "\n" msgstr "" "%s%s\n" "\n" "Copyright 1991 Digital Equipment Corporation\n" "Uitbreidingen Copyright 1992-2014 Free Software Foundation\n" "Uitbreidingen Copyright 2005 Alessandro Scotti\n" "\n" "%s is vrije software en kent GEEN GARANTIE;\n" "zie het bestand COPYING voor meer informatie.\n" "De GTK-versie is experimenteel en nog niet stabiel.\n" "\n" "Bezoek XBoard op het web: http://www.gnu.org/software/xboard/\n" "Voor nieuwe functies zie: http://www.gnu.org/software/xboard/whats_new.html\n" "\n" "Rapporteer gebreken in het programma aan ;\n" "meld vertaalfouten aan .\n" "\n" #: menus.c:379 menus.c:772 msgid "About XBoard" msgstr "Over XBoard" #: menus.c:601 msgid "New Game" msgstr "Nieuwe partij" #: menus.c:602 msgid "New Shuffle Game..." msgstr "Nieuwe husselpartij..." # XXX "NEW" is wrong #: menus.c:603 msgid "New Variant..." msgstr "Nieuwe variantpartij..." #: menus.c:605 msgid "Load Game" msgstr "Partij laden" #: menus.c:606 msgid "Load Position" msgstr "Positie laden" #: menus.c:607 msgid "Next Position" msgstr "Volgende positie" #: menus.c:608 msgid "Prev Position" msgstr "Vorige positie" #: menus.c:610 msgid "Save Game" msgstr "Partij opslaan" #: menus.c:611 msgid "Save Position" msgstr "Positie opslaan" #: menus.c:612 msgid "Save Selected Games" msgstr "Geselecteerde partijen opslaan" #: menus.c:613 msgid "Save Games as Book" msgstr "Partijen opslaan als boek" #: menus.c:615 msgid "Mail Move" msgstr "Zet mailen" #: menus.c:616 msgid "Reload CMail Message" msgstr "CMail-bericht herladen" #: menus.c:618 msgid "Quit " msgstr "Afsluiten " #: menus.c:623 msgid "Copy Game" msgstr "Partij kopiëren" #: menus.c:624 msgid "Copy Position" msgstr "Positie kopiëren" #: menus.c:625 msgid "Copy Game List" msgstr "Partijenlijst kopiëren" #: menus.c:627 msgid "Paste Game" msgstr "Partij plakken" #: menus.c:628 msgid "Paste Position" msgstr "Positie plakken" #: menus.c:630 menus.c:672 msgid "Edit Game" msgstr "Partij bewerken" #: menus.c:631 menus.c:673 msgid "Edit Position" msgstr "Positie bewerken" #: menus.c:632 msgid "Edit Tags" msgstr "Labels bewerken" #: menus.c:633 msgid "Edit Comment" msgstr "Opmerking bewerken" #: menus.c:634 msgid "Edit Book" msgstr "Boek bewerken" #: menus.c:636 msgid "Revert" msgstr "Terugdraaien" #: menus.c:637 msgid "Annotate" msgstr "Annoteren" #: menus.c:638 msgid "Truncate Game" msgstr "Partij afkappen" #: menus.c:640 msgid "Backward" msgstr "Achterwaarts" #: menus.c:641 msgid "Forward" msgstr "Voorwaarts" #: menus.c:642 msgid "Back to Start" msgstr "Terug naar begin" #: menus.c:643 msgid "Forward to End" msgstr "Vooruit naar einde" #: menus.c:648 msgid "Flip View" msgstr "Bord draaien" #: menus.c:651 msgid "Move History" msgstr "Zettengeschiedenis" #: menus.c:652 msgid "Evaluation Graph" msgstr "Evaluatiegrafiek" #: menus.c:653 msgid "Game List" msgstr "Partijenlijst" #: menus.c:657 msgid "Comments" msgstr "Opmerkingen" #: menus.c:658 msgid "ICS Input Box" msgstr "ICS-invoervak" #: menus.c:659 msgid "ICS/Chat Console" msgstr "" #: menus.c:661 msgid "Board..." msgstr "Bord..." #: menus.c:662 msgid "Game List Tags..." msgstr "Partijenlijst-labels..." #: menus.c:667 msgid "Machine White" msgstr "Automaat heeft wit" #: menus.c:668 msgid "Machine Black" msgstr "Automaat heeft zwart" #: menus.c:669 msgid "Two Machines" msgstr "Twee automaten" #: menus.c:670 msgid "Analysis Mode" msgstr "Analysemodus" #: menus.c:671 msgid "Analyze Game" msgstr "Partij analyseren" #: menus.c:674 msgid "Training" msgstr "Training" #: menus.c:675 msgid "ICS Client" msgstr "ICS-cliënt" #: menus.c:677 msgid "Machine Match" msgstr "Automatentoernooi" #: menus.c:678 msgid "Pause" msgstr "Pauzeren" #: menus.c:683 msgid "Accept" msgstr "Accepteren" #: menus.c:684 msgid "Decline" msgstr "Weigeren" #: menus.c:685 msgid "Rematch" msgstr "" #: menus.c:687 msgid "Call Flag" msgstr "'Vlag' roepen" #: menus.c:688 msgid "Draw" msgstr "Remise" #: menus.c:689 msgid "Adjourn" msgstr "Opschorten" #: menus.c:690 msgid "Abort" msgstr "Afbreken" #: menus.c:691 msgid "Resign" msgstr "Opgeven" #: menus.c:693 msgid "Stop Observing" msgstr "Stoppen met observeren" #: menus.c:694 msgid "Stop Examining" msgstr "Stoppen met bestuderen" #: menus.c:695 msgid "Upload to Examine" msgstr "Uploaden om te bestuderen" #: menus.c:697 msgid "Adjudicate to White" msgstr "Winst aan wit toekennen" #: menus.c:698 msgid "Adjudicate to Black" msgstr "Winst aan zwart toekennen" #: menus.c:699 msgid "Adjudicate Draw" msgstr "Tot remise besluiten" #: menus.c:704 msgid "Edit Engine List..." msgstr "Automatenlijst bewerken..." #: menus.c:706 msgid "Load New 1st Engine..." msgstr "Nieuwe 1ste automaat laden..." #: menus.c:707 msgid "Load New 2nd Engine..." msgstr "Nieuwe 2de automaat laden..." #: menus.c:709 msgid "Engine #1 Settings..." msgstr "Instellingen van automaat 1..." #: menus.c:710 msgid "Engine #2 Settings..." msgstr "Instellingen van automaat 2..." #: menus.c:712 msgid "Hint" msgstr "Hint" #: menus.c:713 msgid "Book" msgstr "Boek" #: menus.c:715 msgid "Move Now" msgstr "Nu zetten" #: menus.c:716 msgid "Retract Move" msgstr "Zet terugnemen" #: menus.c:722 msgid "General..." msgstr "Algemeen..." #: menus.c:724 msgid "Time Control..." msgstr "Tijdsbeperking..." #: menus.c:725 #, fuzzy msgid "Common Engine..." msgstr "Automaten..." #: menus.c:726 msgid "Adjudications..." msgstr "Beslissingen..." #: menus.c:727 msgid "ICS..." msgstr "ICS..." #: menus.c:728 msgid "Tournament..." msgstr "Toernooi..." #: menus.c:729 msgid "Load Game..." msgstr "Partij laden..." #: menus.c:730 msgid "Save Game..." msgstr "Partij opslaan..." #: menus.c:731 msgid "Game List..." msgstr "Partijenlijst..." #: menus.c:732 msgid "Sounds..." msgstr "Geluiden..." #: menus.c:735 msgid "Always Queen" msgstr "Altijd koningin" #: menus.c:741 msgid "Flash Moves" msgstr "Zetten laten knipperen" #: menus.c:743 msgid "Highlight Dragging" msgstr "Slepen markeren" #: menus.c:746 msgid "Highlight With Arrow" msgstr "Markeren met pijl" #: menus.c:747 msgid "Move Sound" msgstr "Zetgeluid" #: menus.c:749 msgid "Periodic Updates" msgstr "Periodieke updates" #: menus.c:751 msgid "Popup Exit Message" msgstr "Popup-afsluitbericht" #: menus.c:753 msgid "Show Coords" msgstr "Coördinaten tonen" #: menus.c:754 msgid "Hide Thinking" msgstr "Denken verbergen" #: menus.c:758 msgid "Save Settings Now" msgstr "Instellingen nu opslaan" #: menus.c:759 msgid "Save Settings on Exit" msgstr "Instellingen opslaan bij afsluiten" #: menus.c:764 msgid "Info XBoard" msgstr "'info xboard'" #: menus.c:765 msgid "Man XBoard" msgstr "'man xboard'" #: menus.c:767 msgid "XBoard Home Page" msgstr "Webpagina van XBoard" #: menus.c:768 msgid "On-line User Guide" msgstr "Online gebruikersgids" #: menus.c:769 msgid "Development News" msgstr "Ontwikkelingsnieuws" #: menus.c:770 msgid "e-Mail Bug Report" msgstr "Foutrapportage mailen" #: nengineoutput.c:78 nengineoutput.c:86 msgid "engine name" msgstr "automaatnaam" #. TRANSLATORS: noun, as in "the move Nf3" #: nengineoutput.c:81 nengineoutput.c:89 msgid "move" msgstr "zetten" #: nengineoutput.c:155 msgid "Engine output" msgstr "Automaatuitvoer" #: nengineoutput.c:159 msgid "" "Mismatch of STRIDE in nengineoutput.c\n" "Change and recompile!" msgstr "" "*** Niet-passende 'STRIDE' in 'nengineoutput.c'.\n" "Pas deze aan en hercompileer." #: nevalgraph.c:68 msgid "Evaluation graph" msgstr "Evaluatiegrafiek" #: nevalgraph.c:68 msgid "Blunder graph" msgstr "Blundergrafiek" #: nevalgraph.c:106 msgid "Blunder" msgstr "Blunder" #: nevalgraph.c:106 msgid "Eval" msgstr "" #: ngamelist.c:87 msgid "find position" msgstr "positie vinden" #: ngamelist.c:88 msgid "narrow" msgstr "nauw" #: ngamelist.c:89 msgid "thresholds" msgstr "grenswaarden" #: ngamelist.c:90 msgid "tags" msgstr "labels" #: ngamelist.c:91 msgid "next" msgstr "volgende" #: ngamelist.c:92 msgid "close" msgstr "sluiten" #: ngamelist.c:116 msgid "No game selected" msgstr "Geen partij geselecteerd" #: ngamelist.c:122 msgid "Can't go forward any further" msgstr "Kan niet nog verder vooruitgaan" #: ngamelist.c:192 #, c-format msgid "Scanning through games (%d)" msgstr "Zoeken door partijen (%d)" #: ngamelist.c:211 msgid "previous page" msgstr "voorgaande pagina" #: ngamelist.c:214 msgid "next page" msgstr "volgende pagina" #: ngamelist.c:217 msgid "no games matched your request" msgstr "er zijn geen partijen die overeenkomen met uw verzoek" #: ngamelist.c:219 #, c-format msgid "%s - %d/%d games (%d-%d-%d)" msgstr "%s - %d/%d partijen (%d-%d-%d)" #: ngamelist.c:283 msgid "There is no game list" msgstr "Er is geen partijenlijst" #: nhistory.c:109 msgid "Move list" msgstr "Zettenlijst" #: usystem.c:222 #, c-format msgid "%s: unrecognized color %s\n" msgstr "%s: niet-herkende kleur %s\n" #: usystem.c:230 #, c-format msgid "%s: can't parse foreground color in '%s'\n" msgstr "%s: onbegrepen voorgrondkleur in '%s'\n" #: usystem.c:259 #, c-format msgid "%s: can't parse color names; disabling colorization\n" msgstr "%s: onbegrepen kleurnamen; kleuring wordt uitgeschakeld\n" #: usystem.c:377 #, c-format msgid "ERROR: Unknown user %s (in path %s)\n" msgstr "Fout: onbekende gebruiker %s (in pad %s)\n" # FIXME: has not been configured #: usystem.c:560 msgid "Socket support is not configured in" msgstr "Ondersteuning voor sockets is niet geconfigureerd" #: usystem.c:649 msgid "internal rcmd not implemented for Unix" msgstr "interne 'rcmd' is niet geïmplementeerd voor Unix" #: xaw/xboard.c:1204 #, c-format msgid "white pixel = 0x%lx, black pixel = 0x%lx\n" msgstr "witte pixel = 0x%lx, zwarte pixel = 0x%lx\n" #: xaw/xoptions.c:362 xaw/xoptions.c:1066 msgid "browse" msgstr "Bladeren" #: xaw/xoptions.c:428 xaw/xoptions.c:429 msgid "Ctrl" msgstr "Ctrl" #: xaw/xoptions.c:434 xaw/xoptions.c:435 msgid "Alt" msgstr "Alt" #: xaw/xoptions.c:440 xaw/xoptions.c:441 msgid "Shift" msgstr "Shift" #: xaw/xoptions.c:1314 msgid "OK" msgstr "OK" #~ msgid "Match Options" #~ msgstr "Toernooi-instellingen" #~ msgid "Chat box" #~ msgstr "Chatbox" #~ msgid "Open Chat Window" #~ msgstr "Chatvenster openen" #~ msgid "Match ..." #~ msgstr "Toernooi..." #~ msgid "%s: Can't access XPM directory %s\n" #~ msgstr "%s: Kan geen toegang krijgen tot XPM-map %s\n" #~ msgid "Available `%s' sizes:\n" #~ msgstr "Beschikbare '%s'-groottes:\n" #~ msgid "Error: No `%s' files!\n" #~ msgstr "Fout: geen '%s'-bestanden!\n" #~ msgid "Error %d loading icon image\n" #~ msgstr "Fout %d tijdens laden van pictogram\n" #~ msgid "cancel" #~ msgstr "Annuleren" xboard-4.8.0/po/Makefile.in.in0000644000175000001440000003552412421746651013030 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.17 GETTEXT_MACRO_VERSION = 0.17 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: check-macro-version all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. check-macro-version: @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && $(SHELL) ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xboard-4.8.0/po/zh_CN.gmo0000644000175000001440000003732512422467103012055 00000000000000K 89 Vcj'z" )"%L%r       4Us     $&K[u)  )5>Un%}! .!Ln$'   , 5 BNU lz&!&(0!Ln0. KW\n/  )G]b{   0!@ b , >L-l)-)% "B e j t x       !/!@!`!t!!!!!!!#!!!! "!"3"N"V"o"w" }"""""" "" " ##(#?#&W#!~#*#(#&#$ $.$F$&\$$$$"$,$($(%?%W%i%%%%%% % &'1&'Y&%&2&& &&''3'I'_'~'.' ''((!#(1E(w(bz()) ** *6*G*X*_*r**3*6*?+X+h+ x++"++++++,&,6,R,n,,,,,, , , ,,,- ----@-'S-{------ --..).H.h..%.. ...!.! /,/-6>d>k>E>>QhE -%UReG4Pc3+`L>AJSO\&! gX:Cj(vw_1*0rs|,';Y=xZd^Mf6}8/"F5 l)D.Htzb@#7N[~mWi ?yuq $<Iapk{T2o VK9]nB%s does not support analysisAbout XBoardActionAdjudicate DrawAdjudicate Trivial Draws (3-Move Delay)Adjudicate to BlackAdjudicate to WhiteAlarmAlready at end of gameAmbiguous move in ICS output: "%s"Ambiguous move: %d.%s%sAnalysis mode does not work with ICS modeAnalysis mode requires a chess engineAnalyzeFile mode requires a game fileAnimate DraggingAnimate MovingAnnotateArchbishopAuto FlagAuto Flip ViewAuto-CommentAuto-KibitzAuto-ObserveAuto-Raise BoardAuto-Refresh Seek GraphBackground Observe while PlayingBad FEN position in clipboardBad FEN position in fileBad game fileBad position fileBishopBlackBlack Piece Color:Black to playBlack's flag fellBlindfoldBoard OptionsBoard...BookBook Depth (moves):Book Variety (0) vs. Strength (100):Both flags fellCan't back up any furtherCan't go forward any furtherCan't have a match with no chess programsCan't open "%s"Can't seek on game fileCan't seek on position fileCannonCannot build game listChancellorClear boardCommentsCommon Engine SettingsConnection closed by ICSCopy Game ListCould not connect to host %s, port %sCould not open comm port %sCould not parse moveCouldn't parse move "%s" from ICSDark Square Color:Default BeepDemoteDetect all MatesDisplayed move is not currentDisplayed position is not currentDraw after N Moves Total:Draw if Insufficient Mating MaterialDual Board for Background-Observed GameEGTB Cache Size (MB):EditEdit CommentEdit TagsEdit commentEdit comment on %d.%s%sElephantEmpty squareEnd of gameEngineEngine #1 Has Own BookEngine outputErrorError gathering move list: extra boardError gathering move list: nestedError gathering move list: two headersError reading from %s chess program (%s)Error reading from ICSError reading from keyboardError writing to %s chess programError writing to ICSError writing to chess programError writing to displayError: %s chess program (%s) exited unexpectedlyEvaluation graphExitingFailed to invoke cmailFailed to start %s chess program %s on %s: %s Fatal ErrorFileFirst Black Move:First White Move:Game List Tags...Game not found in fileGame number out of rangeGame too long; increase MAX_MOVES and recompileGap in move listGeneralGeneral OptionsGet Move ListGot end of file from keyboardHash-Table Size (MB):HelpHide Thinking from HumanHighlight Color:Highlight DraggingHighlight Last MoveHighlight With ArrowHighlight with ArrowHintHint: %sICS ClientICS OptionsIllegal moveIllegal move "%s" (rejected by %s chess program)Illegal move "%s" from %s machineIllegal move in ICS output: "%s"Illegal move: %d.%s%sIncorrect moveIt is Black's turnIt is White's turnIt is not Black's turnIt is not White's turnIt is your turnKingKnightLight Square Color:Load Game OptionsMachine MatchMachine accepts your draw offerMachineBlack mode does not work with ICS modeMachineBlack mode requires a chess engineMachineWhite mode does not work with ICS modeMachineWhite mode requires a chess engineMatch %s vs. %s: final score %d-%d-%dMaximum Number of CPUs per Engine:ModeMono ModeNPSNegate Score of Engine #1Negate Score of Engine #2New Shuffle GameNew VariantNo SoundNo game has been loaded yetNo game selectedNo hint availableNo more games in this messageNo moves in gameNo position has been loaded yetNo unfinished gamesNo unfinished games NoteOKOne-Click MovingOptionsPawnPeriodic UpdatesPeriodic Updates (in Analysis Mode)PlayPonder Next MovePopup Exit MessagePopup Exit MessagesPopup Move ErrorsPosition not found in filePremovePremove Highlight Color:PromoteQueenQuiet PlayReady to send mail RookSave Game OptionsSave Settings NowSave Settings on ExitSeek GraphShow CoordinatesShow CoordsSound OptionsStart-position number:Starting chess programStartup failure on '%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s TagsTest LegalityThat square is occupiedThere is no game listThere is no pending offer on this moveTrainingTraining mode offTraining mode onTraining mode requires a game fileTwoMachines mode does not work with ICS modeTwoMachines mode requires a chess engineUnknown initialMode %sUnknown variant name %sUpload to ExamineVariant %s not supported by %sVariant %s supported only in ICS modeVerify Engine Result ClaimsViewWaiting for first chess programWaiting for reply from opponent Waiting for second chess programWarning: You are still examining a gameWarning: You are still observing a gameWarning: You are still playing a gameWarning: second engine (%s) does not support this!WhiteWhite to playWhite's flag fellWin / Loss Threshold:You are not examining a gameYou are playing BlackYou are playing WhiteYou can't revert while pausingYou have not made a move yetYou must make your move before offering a drawYour opponent is not out of timebad searchTime option %sbad timeControl option %sdownprotocol version %d not supportedsay Internal error; bad moveType %d (%d,%d-%d,%d)upProject-Id-Version: GNU xboard master-20110507 Report-Msgid-Bugs-To: bug-xboard@gnu.org POT-Creation-Date: 2014-10-24 08:20-0700 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE Last-Translator: FULL NAME Language-Team: LANGUAGE Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit %s 不支持分析功能关于XBoard(A)行为(A)提请仲裁(D)一般和棋判决(T)裁决黑赢 (B)裁决白赢 (W)提示棋局已经结束ICS输出不明确的着法"%s"不明确的着法 %d.%s%s"Analysis"(分析)模式无法在ICS模式下工作"Analysis"(分析)模式必须启动国际象棋引擎"AnalyzeFile"(分析文件)模式必须指定一个棋局文件动画拖拽(D)动画走棋(A)注释(A)国师自动超时判负(F) Ctrl+Shift+F自动翻转棋盘(V)自动注释(A)自动"kibitz"(A)自动旁观(O)自动改变棋盘大小(R)自动刷新图表(R)后台观察(v)剪贴板的FEN局面错误文件中的FEN局面错误棋局文件错误局面文件错误象黑方黑子轮到黑方走棋黑方超时盲棋(B)棋盘选项棋盘选项(B)...开局库(B)...库着法深度库变例双方都超时了无法再后退了无法再前进了没有象棋程序时无法进行比赛无法打开"%s"无法搜索棋局文件无法搜索局面文件炮无法建立棋局列表宰相清空棋盘编辑注释(C) *.*通用引擎设置连接被ICS关闭复制游戏列表到剪贴板无法连接主机 %s 端口 %s无法打开通讯端口 %s无法解析着法无法解析从ICS读到的着法"%s"黑格默认声音降级检测将杀(M)显示的着法不是当前着法显示的局面不是当前局面几着后判决子力不足时判和(I)双棋盘(D)EGTB 大小(MB)编辑(E)编辑注释(C)...编辑标签(T)编辑注释编辑注释 %d.%s%s象清空格子棋局结束引擎(N)引擎1有自用库引擎输出错误读取着法时出错,超出棋盘读取着法时出错,嵌套错误读取着法时出错,出现两个开头从%s国际象棋程序(%s)接收信息时出错读取ICS信息时出错读取键盘时出错发送信息到%s国际象棋程序时出错发送信息给ICS时出错发送信息给国际象棋程序时出错发送信息给显示器时出错错误:%s国际象棋程序(%s)突然退出了评价图退出Failed to invoke cmail无法启动%s国际象棋程序 %s(在主机 %s 上),%s 严重错误文件(F)黑方先行(B)白方先行(W)游戏列表...文件中没有找到棋局棋局数量超出范围棋局太长,需要增加"MAX_MOVES"并重新编译着法断开常规选项(G)...常规选项获取着法列表(G)读取键盘时遇到文件尾Hash 大小(MB)帮助(H)与人对弈时隐藏思考细节格子标记拖拽醒目提示(H)醒目提示上一着法(M)用箭头突出移动用箭头突出移动提示(H)...提示 %sICS客户端ICS设置着法错误不合理着法"%s" (%s国际象棋程序拒绝接受该着法)从%s机器读到不合理着法"%s"ICS输出不明确的着法"%s"不合理着法 %d.%s%s着法错误轮到黑方走棋轮到白方走棋没有轮到黑方走棋没有轮到白方走棋轮到你走棋王马白格载入棋局选项引擎比赛(M) *.*"MachineBlack"(电脑执黑)模式无法在ICS模式下运行"MachineBlack"(电脑执黑)模式必须启动国际象棋引擎"MachineWhite"(电脑执白)模式无法在ICS模式下运行"MachineWhite"(电脑执白)模式必须启动国际象棋引擎比赛 %s vs. %s: 最终比分 %d-%d-%d最大CPU数模式(M)黑白NPS引擎 #1 是绝对分数引擎 #2 是绝对分数洗牌游戏(u)...变种无声尚未有棋局载入没有选中棋局没有可用的提示这条信息不包含更多的棋局棋局中没有着法尚未有局面载入No unfinished gamesNo unfinished games 注释确定单击移动(M)选项(O)兵定期更新(U)定期更新(分析模式)播放同步思考(N)退出时提示(P)退出时提示(P)提示错误着法(E)文件中没有着到局面预先走棋(P)预先走棋标记升变后落子无声(Q)Ready to send mail 车保存棋局选项立即保存设置(N)退出时保存设置(X)可选对手图表(k)显示坐标(C)显示坐标(C)声音启动位置号码(S)启动国际象棋程序无法启动'%s'Still need to make a move for game %s Still need to make move for game Still need to make moves for all %d games Still need to make moves for both games Still need to make moves for games %s 编辑标签(T)检查着法合理性(L) Cl+Sh+L格子已放棋子没有棋局列表该着法没有待定的提议训练(N)训练模式已关闭训练模式已打开"Training"(训练)模式必须指定一个棋局文件"TwoMachines"(电脑对弈)模式无法在ICS模式下运行"TwoMachines"(分析)模式必须启动国际象棋引擎未知的"initialMode"(初始模式)选项 %s未知的变体名 %s上传检查(U)变体 %s 不被 %s 所支持变体 %s 只在ICS模式下支持验证引擎声明(V)外观(V)等待第一个国际象棋程序Waiting for reply from opponent 等待第二个国际象棋程序注意:你正在研究棋局注意:你正在旁观棋局注意:你正在进行棋局警告: 第二个引擎(%s) 不支持此!白方轮到白方走棋白方超时输/赢判决阈值没有分析棋局你在执黑你在执白暂停时不能复原棋局一步棋也没走过必须走完棋才能提和对手没有超时非法的"searchTime"(搜索时间)选项 %s非法的"timeControl"(时间控制)选项 %s向下协议版本 %d 不被支持say 内部错误,非法的"moveType"(着法类型) %d (%d,%d-%d,%d)向上xboard-4.8.0/COPYRIGHT0000644000175000001440000000501012420374633011212 00000000000000XBoard -- a graphical chessboard for X Original authors: Dan Sears and Chris Sears Enhancements (Version 2.0 and later): Tim Mann Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. Enhancements Copyright 2005 Alessandro Scotti XBoard's alternative piece bitmaps (bitmaps.xchess) are derived from the bitmaps in the XChess program, which was written and is copyrighted by Wayne Christopher. The following terms apply to Digital Equipment Corporation's copyright interest in XBoard: ------------------------------------------------------------------------ All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ------------------------------------------------------------------------ The following terms apply to the enhanced version of XBoard distributed by the Free Software Foundation: ------------------------------------------------------------------------ GNU XBoard 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 3 of the License, or (at your option) any later version. GNU XBoard 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, see http://www.gnu.org/licenses/. * ------------------------------------------------------------------------ xboard-4.8.0/history.c0000644000175000001440000001626412420374633011601 00000000000000/* * Move history for WinBoard * * Author: Alessandro Scotti (Dec 2005) * back-end part split off by HGM * * Copyright 2005 Alessandro Scotti * * Enhancements Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * ------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" /* templates for low-level front-end tasks (requiring platform-dependent implementation) */ void ClearHistoryMemo P((void)); // essential int AppendToHistoryMemo P(( char * text, int bold, int colorNr )); // essential (coloring / styling optional) void HighlightMove P(( int from, int to, Boolean highlight )); // optional (can be dummy) void ScrollToCurrent P((int caretPos)); // optional (can be dummy) /* templates for front-end entry point to allow inquiring about front-end state */ Boolean MoveHistoryDialogExists P((void)); Boolean MoveHistoryIsUp P((void)); /* Module globals */ typedef char MoveHistoryString[ MOVE_LEN*2 ]; static int lastFirst = 0; static int lastLast = 0; static int lastCurrent = -1; static int lastGames; static char lastLastMove[ MOVE_LEN ]; static MoveHistoryString * currMovelist; static ChessProgramStats_Move * currPvInfo; static int currFirst = 0; static int currLast = 0; static int currCurrent = -1; typedef struct { int memoOffset; int memoLength; } HistoryMove; static HistoryMove histMoves[ MAX_MOVES ]; /* Note: in the following code a "Memo" is a Rich Edit control (it's Delphi lingo) */ // back-end after replacing Windows data-types by equivalents static Boolean OnlyCurrentPositionChanged () { Boolean result = FALSE; if( lastFirst >= 0 && lastLast >= lastFirst && lastCurrent >= lastFirst && currFirst == lastFirst && currLast == lastLast && currCurrent >= 0 && lastGames == storedGames ) { result = TRUE; /* Special case: last move changed */ if( currCurrent == currLast-1 ) { if( strcmp( currMovelist[currCurrent], lastLastMove ) != 0 ) { result = FALSE; } } } return result; } // back-end, after replacing Windows data types static Boolean OneMoveAppended () { Boolean result = FALSE; if( lastCurrent >= 0 && lastCurrent >= lastFirst && lastLast >= lastFirst && currCurrent >= 0 && currCurrent >= currFirst && currLast >= currFirst && lastFirst == currFirst && lastLast == (currLast-1) && lastCurrent == (currCurrent-1) && currCurrent == (currLast-1) && lastGames == storedGames ) { result = TRUE; } return result; } // back-end, now that color and font-style are passed as numbers static void AppendMoveToMemo (int index) { char buf[64]; if( index < 0 || index >= MAX_MOVES ) { return; } buf[0] = '\0'; /* Move number */ if( (index % 2) == 0 ) { sprintf( buf, "%d.%s ", (index / 2)+1, index & 1 ? ".." : "" ); AppendToHistoryMemo( buf, 1, 0 ); // [HGM] 1 means bold, 0 default color } /* Move text */ safeStrCpy( buf, SavePart( currMovelist[index]) , sizeof( buf)/sizeof( buf[0]) ); strcat( buf, " " ); histMoves[index].memoOffset = AppendToHistoryMemo( buf, 0, 0 ); histMoves[index].memoLength = strlen(buf)-1; /* PV info (if any) */ if( appData.showEvalInMoveHistory && currPvInfo[index].depth > 0 ) { sprintf( buf, "{%s%.2f/%d} ", currPvInfo[index].score >= 0 ? "+" : "", currPvInfo[index].score / 100.0, currPvInfo[index].depth ); AppendToHistoryMemo( buf, 0, 1); // [HGM] 1 means gray } } // back-end void RefreshMemoContent () { int i; ClearHistoryMemo(); for( i=currFirst; i= 0 && index < MAX_MOVES ) { HighlightMove( histMoves[index].memoOffset, histMoves[index].memoOffset + histMoves[index].memoLength, onoff ); } } // back-end, now that a wrapper is provided for the front-end code to do the actual scrolling void MemoContentUpdated () { int caretPos; if(lastCurrent <= currLast) DoHighlight( lastCurrent, FALSE ); lastFirst = currFirst; lastLast = currLast; lastCurrent = currCurrent; lastGames = storedGames; lastLastMove[0] = '\0'; if( lastLast > 0 ) { safeStrCpy( lastLastMove, SavePart( currMovelist[lastLast-1] ) , sizeof( lastLastMove)/sizeof( lastLastMove[0]) ); } /* Deselect any text, move caret to end of memo */ if( currCurrent >= 0 ) { caretPos = histMoves[currCurrent].memoOffset + histMoves[currCurrent].memoLength; } else { caretPos = -1; } ScrollToCurrent(caretPos); DoHighlight( currCurrent, TRUE ); // [HGM] moved last, because in X some scrolling methods spoil highlighting } // back-end. Must be called as double-click call-back on move-history text edit void FindMoveByCharIndex (int char_index) { int index; for( index=currFirst; index= histMoves[index].memoOffset && char_index < (histMoves[index].memoOffset + histMoves[index].memoLength) ) { ToNrEvent( index + 1 ); // moved here from call-back } } } // back-end. In WinBoard called by call-back, but could be called directly by SetIfExists? void UpdateMoveHistory () { /* Update the GUI */ if( OnlyCurrentPositionChanged() ) { /* Only "cursor" changed, no need to update memo content */ } else if( OneMoveAppended() ) { AppendMoveToMemo( currCurrent ); } else { RefreshMemoContent(); } MemoContentUpdated(); } // back-end void MoveHistorySet (char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo) { /* [AS] Danger! For now we rely on the movelist parameter being a static variable! */ currMovelist = movelist; currFirst = first; currLast = last; currCurrent = current; currPvInfo = pvInfo; if(MoveHistoryDialogExists()) UpdateMoveHistory(); // [HGM] call this directly, in stead of through call-back } xboard-4.8.0/pgntags.c0000644000175000001440000002207412421747466011550 00000000000000/* * pgntags.c -- Functions to manage PGN tags * * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * * ------------------------------------------------------------------------ * * This file could well be a part of backend.c, but I prefer it this * way. */ #include "config.h" #include #include #include #if STDC_HEADERS # include # include #else /* not STDC_HEADERS */ # if HAVE_STRING_H # include # else /* not HAVE_STRING_H */ # include # endif /* not HAVE_STRING_H */ #endif /* not STDC_HEADERS */ #include "common.h" #include "frontend.h" #include "backend.h" #include "parser.h" /* Parse PGN tags; returns 0 for success or error number */ int ParsePGNTag (char *tag, GameInfo *gameInfo) { char *name, *value, *p, *oldTags; int len; int success; name = tag; while (!isalpha(*name) && !isdigit(*name)) { name++; } p = name; while (*p != ' ' && *p != '\t' && *p != '\n') { p++; } *p = NULLCHAR; value = strchr(p + 1, '"') + 1; p = strrchr(value, '"'); *p = NULLCHAR; if (StrCaseCmp(name, "Event") == 0) { success = StrSavePtr(value, &gameInfo->event) != NULL; } else if (StrCaseCmp(name, "Site") == 0) { success = StrSavePtr(value, &gameInfo->site) != NULL; } else if (StrCaseCmp(name, "Date") == 0) { success = StrSavePtr(value, &gameInfo->date) != NULL; } else if (StrCaseCmp(name, "Round") == 0) { success = StrSavePtr(value, &gameInfo->round) != NULL; } else if (StrCaseCmp(name, "White") == 0) { success = StrSavePtr(value, &gameInfo->white) != NULL; } else if (StrCaseCmp(name, "Black") == 0) { success = StrSavePtr(value, &gameInfo->black) != NULL; } /* Fold together the various ways of denoting White/Black rating */ else if ((StrCaseCmp(name, "WhiteElo")==0) || (StrCaseCmp(name, "WhiteUSCF")==0) ) { success = TRUE; gameInfo->whiteRating = atoi( value ); } else if ((StrCaseCmp(name, "BlackElo")==0) || (StrCaseCmp(name, "BlackUSCF")==0)) { success = TRUE; gameInfo->blackRating = atoi( value ); } else if (StrCaseCmp(name, "Result") == 0) { if (strcmp(value, "1-0") == 0) gameInfo->result = WhiteWins; else if (strcmp(value, "0-1") == 0) gameInfo->result = BlackWins; else if (strcmp(value, "1/2-1/2") == 0) gameInfo->result = GameIsDrawn; else gameInfo->result = GameUnfinished; success = TRUE; } else if (StrCaseCmp(name, "TimeControl") == 0) { // int tc, mps, inc = -1; // if(sscanf(value, "%d/%d", &mps, &tc) == 2 || ) success = StrSavePtr(value, &gameInfo->timeControl) != NULL; } else if (StrCaseCmp(name, "FEN") == 0) { success = StrSavePtr(value, &gameInfo->fen) != NULL; } else if (StrCaseCmp(name, "SetUp") == 0) { /* ignore on input; presence of FEN governs */ success = TRUE; } else if (StrCaseCmp(name, "Variant") == 0) { /* xboard-defined extension */ success = StrSavePtr(value, &gameInfo->variantName) != NULL; if(*value && strcmp(value, engineVariant)) // keep current engine-defined variant if it matches gameInfo->variant = StringToVariant(value); } else if (StrCaseCmp(name, "VariantMen") == 0) { /* for now ignore this tag, as we have no method yet */ /* for assigning the pieces to XBoard pictograms */ success = TRUE; } else if (StrCaseCmp(name, PGN_OUT_OF_BOOK) == 0) { /* [AS] Out of book annotation */ success = StrSavePtr(value, &gameInfo->outOfBook) != NULL; } else { if (gameInfo->extraTags == NULL) { oldTags = ""; } else { oldTags = gameInfo->extraTags; } /* Buffer size includes 7 bytes of space for [ ""]\n\0 */ len = strlen(oldTags) + strlen(value) + strlen(name) + 7; if ((p = (char *) malloc(len)) != NULL) { sprintf(p, "%s[%s \"%s\"]\n", oldTags, name, value); if (gameInfo->extraTags != NULL) free(gameInfo->extraTags); gameInfo->extraTags = p; success = TRUE; } else { success = FALSE; } } return(success ? 0 : ENOMEM); } /* Print game info */ void PrintPGNTags (FILE *fp, GameInfo *gameInfo) { char *p; fprintf(fp, "[Event \"%s\"]\n", gameInfo->event ? gameInfo->event : "?"); fprintf(fp, "[Site \"%s\"]\n", gameInfo->site ? gameInfo->site : "?"); fprintf(fp, "[Date \"%s\"]\n", gameInfo->date ? gameInfo->date : "?"); fprintf(fp, "[Round \"%s\"]\n", gameInfo->round ? gameInfo->round : "-"); fprintf(fp, "[White \"%s\"]\n", gameInfo->white ? gameInfo->white : "?"); fprintf(fp, "[Black \"%s\"]\n", gameInfo->black ? gameInfo->black : "?"); fprintf(fp, "[Result \"%s\"]\n", PGNResult(gameInfo->result)); if (gameInfo->whiteRating >= 0) fprintf(fp, "[WhiteElo \"%d\"]\n", gameInfo->whiteRating); if (gameInfo->blackRating >= 0) fprintf(fp, "[BlackElo \"%d\"]\n", gameInfo->blackRating); if (gameInfo->timeControl) fprintf(fp, "[TimeControl \"%s\"]\n", gameInfo->timeControl); if (gameInfo->variant != VariantNormal) fprintf(fp, "[Variant \"%s\"]\n", VariantName(gameInfo->variant)); if (*(p = CollectPieceDescriptors())) fprintf(fp, "[VariantMen \"%s\"]\n", p); if (gameInfo->extraTags) fputs(gameInfo->extraTags, fp); } /* Return a non-static buffer with a games info. */ char * PGNTags (GameInfo *gameInfo) { size_t len; char *buf; char *p; // First calculate the needed buffer size. // Then we don't have to check the buffer size later. len = 12 + 11 + 11 + 12 + 12 + 12 + 25 + 1; // The first 7 tags if (gameInfo->event) len += strlen(gameInfo->event); if (gameInfo->site) len += strlen(gameInfo->site); if (gameInfo->date) len += strlen(gameInfo->date); if (gameInfo->round) len += strlen(gameInfo->round); if (gameInfo->white) len += strlen(gameInfo->white); if (gameInfo->black) len += strlen(gameInfo->black); if (gameInfo->whiteRating >= 0) len += 40; if (gameInfo->blackRating >= 0) len += 40; if (gameInfo->timeControl) len += strlen(gameInfo->timeControl) + 20; if (gameInfo->variant != VariantNormal) len += 50; if (gameInfo->extraTags) len += strlen(gameInfo->extraTags); buf = malloc(len); if (!buf) return 0; p = buf; p += sprintf(p, "[Event \"%s\"]\n", gameInfo->event ? gameInfo->event : "?"); p += sprintf(p, "[Site \"%s\"]\n", gameInfo->site ? gameInfo->site : "?"); p += sprintf(p, "[Date \"%s\"]\n", gameInfo->date ? gameInfo->date : "?"); p += sprintf(p, "[Round \"%s\"]\n", gameInfo->round ? gameInfo->round : "-"); p += sprintf(p, "[White \"%s\"]\n", gameInfo->white ? gameInfo->white : "?"); p += sprintf(p, "[Black \"%s\"]\n", gameInfo->black ? gameInfo->black : "?"); p += sprintf(p, "[Result \"%s\"]\n", PGNResult(gameInfo->result)); if (gameInfo->whiteRating >= 0) p += sprintf(p, "[WhiteElo \"%d\"]\n", gameInfo->whiteRating); if (gameInfo->blackRating >= 0) p += sprintf(p, "[BlackElo \"%d\"]\n", gameInfo->blackRating); if (gameInfo->timeControl) p += sprintf(p, "[TimeControl \"%s\"]\n", gameInfo->timeControl); if (gameInfo->variant != VariantNormal) p += sprintf(p, "[Variant \"%s\"]\n", VariantName(gameInfo->variant)); if (gameInfo->extraTags) strcpy(p, gameInfo->extraTags); return buf; } /* Returns pointer to a static string with a result. */ char * PGNResult (ChessMove result) { switch (result) { case GameUnfinished: default: return "*"; case WhiteWins: return "1-0"; case BlackWins: return "0-1"; case GameIsDrawn: return "1/2-1/2"; } } /* Returns 0 for success, nonzero for error */ int ReplaceTags (char *tags, GameInfo *gameInfo) { ChessMove moveType; int err; ClearGameInfo(gameInfo); yynewstr(tags); for (;;) { yyboardindex = 0; moveType = (ChessMove) Myylex(); if (moveType == (ChessMove) 0) { break; } else if (moveType == PGNTag) { err = ParsePGNTag(yy_text, gameInfo); if (err != 0) return err; } } /* just one problem...if there is a result in the new tags, * DisplayMove() won't ever show it because ClearGameInfo() set * gameInfo->resultDetails to NULL. So we must plug something in if there * is a result. */ if (gameInfo->result != GameUnfinished) { if (gameInfo->resultDetails) free(gameInfo->resultDetails); gameInfo->resultDetails = strdup(""); } return 0; } xboard-4.8.0/moves.h0000644000175000001440000002011712421747466011237 00000000000000/* * moves.h - Move generation and checking * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ extern ChessSquare PromoPiece P((ChessMove moveType)); extern ChessMove PromoCharToMoveType P((int whiteOnMove, int promoChar)); extern char PieceToChar P((ChessSquare p)); extern ChessSquare CharToPiece P((int c)); extern int PieceToNumber P((ChessSquare p)); extern void CopyBoard P((Board to, Board from)); extern int CompareBoards P((Board board1, Board board2)); extern char pieceToChar[(int)EmptySquare+1]; extern char pieceNickName[(int)EmptySquare]; extern char *pieceDesc[(int)EmptySquare]; extern Board initialPosition; extern Boolean pieceDefs; typedef void (*MoveCallback) P((Board board, int flags, ChessMove kind, int rf, int ff, int rt, int ft, VOIDSTAR closure)); /* Values for flags arguments */ #define F_WHITE_ON_MOVE 1 #define F_WHITE_KCASTLE_OK 2 #define F_WHITE_QCASTLE_OK 4 #define F_BLACK_KCASTLE_OK 8 #define F_BLACK_QCASTLE_OK 16 #define F_ALL_CASTLE_OK (F_WHITE_KCASTLE_OK | F_WHITE_QCASTLE_OK | \ F_BLACK_KCASTLE_OK | F_BLACK_QCASTLE_OK) #define F_IGNORE_CHECK 32 #define F_KRIEGSPIEL_CAPTURE 64 /* pawns can try to capture invisible pieces */ #define F_ATOMIC_CAPTURE 128 /* capturing piece explodes, destroying itself and all non-pawns on adjacent squares; destroying your own king is illegal */ #define F_FRC_TYPE_CASTLING 256 /* generate castlings as captures of own Rook */ #define F_MANDATORY_CAPTURE 0x200 #define F_NULL_MOVE 0x400 /* Special epfile values. [HGM] positive values are non-reversible moves! */ #define EP_NONE (-6) /* [HGM] Tricky! order matters: */ #define EP_UNKNOWN (-1) /* >= EP_UNKNOWN spoils rep-draw */ #define EP_CAPTURE (-2) /* <= EP_NONE is reversible move */ #define EP_PAWN_MOVE (-3) #define EP_IRON_LION (-4) #define EP_ROYAL_LION (-5) #define EP_REP_DRAW (-15) #define EP_RULE_DRAW (-14) #define EP_INSUF_DRAW (-13) #define EP_DRAWS (-10) #define EP_WINS (-9) #define EP_BEROLIN_A 16 /* [HGM] berolina: add to file if pawn to be taken of a-side of e.p.file */ #define EP_CHECKMATE 100 /* [HGM] verify: record mates in epStatus for easy claim verification */ #define EP_STALEMATE -16 /* Call callback once for each pseudo-legal move in the given position, except castling moves. A move is pseudo-legal if it is legal, or if it would be legal except that it leaves the king in check. In the arguments, epfile is EP_NONE if the previous move was not a double pawn push, or the file 0..7 if it was, or EP_UNKNOWN if we don't know and want to allow all e.p. captures. Promotion moves generated are to Queen only. */ extern void GenPseudoLegal P((Board board, int flags, MoveCallback callback, VOIDSTAR closure, ChessSquare filter)); /* Like GenPseudoLegal, but include castling moves and (unless F_IGNORE_CHECK is set in the flags) omit moves that would leave the king in check. The CASTLE_OK flags are true if castling is not yet ruled out by a move of the king or rook. Return TRUE if the player on move is currently in check and F_IGNORE_CHECK is not set. */ extern int GenLegal P((Board board, int flags, MoveCallback callback, VOIDSTAR closure, ChessSquare filter)); /* If the player on move were to move from (rf, ff) to (rt, ft), would he leave himself in check? Or if rf == -1, is the player on move in check now? enPassant must be TRUE if the indicated move is an e.p. capture. The possibility of castling out of a check along the back rank is not accounted for (i.e., we still return nonzero), as this is illegal anyway. Return value is the number of times the king is in check. */ extern int CheckTest P((Board board, int flags, int rf, int ff, int rt, int ft, int enPassant)); /* Is a move from (rf, ff) to (rt, ft) legal for the player whom the flags say is on move? Other arguments as in GenPseudoLegal. Returns the type of move made, taking promoChar into account. */ extern ChessMove LegalityTest P((Board board, int flags, int rf, int ff, int rt, int ft, int promoChar)); #define MT_NONE 0 #define MT_CHECK 1 #define MT_CHECKMATE 2 #define MT_STALEMATE 3 #define MT_STAINMATE 4 /* [HGM] xq: for games where being stalemated counts as a loss */ #define MT_STEALMATE 5 /* [HGM] losers: for games where being stalemated counts as a win */ #define MT_TRICKMATE 6 /* [HGM] losers: for games where being checkmated counts as a win */ #define MT_BARE 7 /* [HGM] shatranj: for games where having bare king loses */ #define MT_DRAW 8 /* [HGM] shatranj: other draws */ #define MT_NOKING 9 /* [HGM] atomic: for games lost through king capture */ /* Return MT_NONE, MT_CHECK, MT_CHECKMATE, or MT_STALEMATE */ extern int MateTest P((Board board, int flags)); typedef struct { /* Input data */ ChessSquare pieceIn; /* EmptySquare if unknown */ int rfIn, ffIn, rtIn, ftIn; /* -1 if unknown */ int promoCharIn; /* NULLCHAR if unknown */ /* Output data for matched move */ ChessMove kind; ChessSquare piece; int rf, ff, rt, ft; int promoChar; /* 'q' if a promotion and promoCharIn was NULLCHAR */ int count; /* Number of possibilities found */ int captures; /* [HGM] oneclick: number of matching captures */ } DisambiguateClosure; /* Disambiguate a partially-known move */ void Disambiguate P((Board board, int flags, DisambiguateClosure *closure)); /* Convert coordinates to normal algebraic notation. promoChar must be NULLCHAR or '.' if not a promotion. */ ChessMove CoordsToAlgebraic P((Board board, int flags, int rf, int ff, int rt, int ft, int promoChar, char out[MOVE_LEN])); extern int quickFlag, killX, killY, legNr; xboard-4.8.0/INSTALL0000644000175000001440000001701312420374633010756 00000000000000Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). The file `configure.ac' is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. Please use the autogen.sh shell script, which will run all the autotools to generate the `configure' script if it is missing. The simplest way to compile this package is: 0. If the configure script is missing, run ./autogen.sh in the source directory 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xboard-4.8.0/config.guess0000755000175000001440000013111012407335704012241 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file 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 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac case "${UNAME_MACHINE}" in i?86) test -z "$VENDOR" && VENDOR=pc ;; *) test -z "$VENDOR" && VENDOR=unknown ;; esac test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-${VENDOR}-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-${VENDOR}-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-${VENDOR}-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-${VENDOR}-osf1mk else echo ${UNAME_MACHINE}-${VENDOR}-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-${VENDOR}-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-${VENDOR}-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-${VENDOR}-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-${VENDOR}-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-${VENDOR}-linux-${LIBC} ;; PA8*) echo hppa2.0-${VENDOR}-linux-${LIBC} ;; *) echo hppa-${VENDOR}-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-${VENDOR}-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-${VENDOR}-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-${VENDOR}-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-${VENDOR}-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-${VENDOR}-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-${VENODR}-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-${VENODR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-${VENDOR}-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-${VENDOR}-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-${VENDOR}-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-${VENDOR}-tops10 exit ;; *:TENEX:*:*) echo pdp10-${VENDOR}-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-${VENDOR}-tops20 exit ;; *:ITS:*:*) echo pdp10-${VENDOR}-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-${VENDOR}-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xboard-4.8.0/gamelist.c0000644000175000001440000004443112421747466011713 00000000000000/* * gamelist.c -- Functions to manage a gamelist * * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #if STDC_HEADERS # include # include #else /* not STDC_HEADERS */ # if HAVE_STRING_H # include # else /* not HAVE_STRING_H */ # include # endif /* not HAVE_STRING_H */ #endif /* not STDC_HEADERS */ #include "common.h" #include "frontend.h" #include "backend.h" #include "parser.h" #include "moves.h" #include "gettext.h" #ifdef ENABLE_NLS # define _(s) gettext (s) # define N_(s) gettext_noop (s) #else # define _(s) (s) # define N_(s) s #endif /* Variables */ List gameList; extern Board initialPosition; extern int quickFlag; extern int movePtr; /* Local function prototypes */ static void GameListDeleteGame P((ListGame *)); static ListGame *GameListCreate P((void)); static void GameListFree P((List *)); static int GameListNewGame P((ListGame **)); /* [AS] Wildcard pattern matching */ Boolean HasPattern (const char * text, const char * pattern) { while( *pattern != '\0' ) { if( *pattern == '*' ) { while( *pattern == '*' ) { pattern++; } if( *pattern == '\0' ) { return TRUE; } while( *text != '\0' ) { if( HasPattern( text, pattern ) ) { return TRUE; } text++; } } else if( (*pattern == *text) || ((*pattern == '?') && (*text != '\0')) ) { pattern++; text++; continue; } return FALSE; } return TRUE; } Boolean SearchPattern (const char * text, const char * pattern) { Boolean result = TRUE; if( pattern != NULL && *pattern != '\0' ) { if( *pattern == '*' ) { result = HasPattern( text, pattern ); } else { result = FALSE; while( *text != '\0' ) { if( HasPattern( text, pattern ) ) { result = TRUE; break; } text++; } } } return result; } /* Delete a ListGame; implies removint it from a list. */ static void GameListDeleteGame (ListGame *listGame) { if (listGame) { if (listGame->gameInfo.event) free(listGame->gameInfo.event); if (listGame->gameInfo.site) free(listGame->gameInfo.site); if (listGame->gameInfo.date) free(listGame->gameInfo.date); if (listGame->gameInfo.round) free(listGame->gameInfo.round); if (listGame->gameInfo.white) free(listGame->gameInfo.white); if (listGame->gameInfo.black) free(listGame->gameInfo.black); if (listGame->gameInfo.fen) free(listGame->gameInfo.fen); if (listGame->gameInfo.resultDetails) free(listGame->gameInfo.resultDetails); if (listGame->gameInfo.timeControl) free(listGame->gameInfo.timeControl); if (listGame->gameInfo.extraTags) free(listGame->gameInfo.extraTags); if (listGame->gameInfo.outOfBook) free(listGame->gameInfo.outOfBook); ListNodeFree((ListNode *) listGame); } } /* Free the previous list of games. */ static void GameListFree (List *gameList) { while (!ListEmpty(gameList)) { GameListDeleteGame((ListGame *) gameList->head); } } /* Initialize a new GameInfo structure. */ void GameListInitGameInfo (GameInfo *gameInfo) { gameInfo->event = NULL; gameInfo->site = NULL; gameInfo->date = NULL; gameInfo->round = NULL; gameInfo->white = NULL; gameInfo->black = NULL; gameInfo->result = GameUnfinished; gameInfo->fen = NULL; gameInfo->resultDetails = NULL; gameInfo->timeControl = NULL; gameInfo->extraTags = NULL; gameInfo->whiteRating = -1; /* unknown */ gameInfo->blackRating = -1; /* unknown */ gameInfo->variant = VariantNormal; gameInfo->variantName = NULL; gameInfo->outOfBook = NULL; gameInfo->resultDetails = NULL; } /* Create empty ListGame; returns ListGame or NULL, if out of memory. * * Note, that the ListGame is *not* added to any list */ static ListGame * GameListCreate () { ListGame *listGame; if ((listGame = (ListGame *) ListNodeCreate(sizeof(*listGame)))) { GameListInitGameInfo(&listGame->gameInfo); } return(listGame); } /* Creates a new game for the gamelist. */ static int GameListNewGame (ListGame **listGamePtr) { if (!(*listGamePtr = (ListGame *) GameListCreate())) { GameListFree(&gameList); return(ENOMEM); } ListAddTail(&gameList, (ListNode *) *listGamePtr); return(0); } /* Build the list of games in the open file f. * Returns 0 for success or error number. */ int GameListBuild (FILE *f) { ChessMove cm, lastStart; int gameNumber; ListGame *currentListGame = NULL; int error, scratch=100, plyNr=0, fromX, fromY, toX, toY; int offset; char lastComment[MSG_SIZ], buf[MSG_SIZ]; TimeMark t, t2; GetTimeMark(&t); GameListFree(&gameList); yynewfile(f); gameNumber = 0; movePtr = 0; lastStart = (ChessMove) 0; yyskipmoves = FALSE; do { yyboardindex = scratch; offset = yyoffset(); quickFlag = plyNr + 1; cm = (ChessMove) Myylex(); switch (cm) { case GNUChessGame: if ((error = GameListNewGame(¤tListGame))) { rewind(f); yyskipmoves = FALSE; return(error); } currentListGame->number = ++gameNumber; currentListGame->offset = offset; if(1) { CopyBoard(boards[scratch], initialPosition); plyNr = 0; currentListGame->moves = PackGame(boards[scratch]); } if (currentListGame->gameInfo.event != NULL) { free(currentListGame->gameInfo.event); } currentListGame->gameInfo.event = StrSave(yy_text); lastStart = cm; break; case XBoardGame: lastStart = cm; break; case MoveNumberOne: switch (lastStart) { case GNUChessGame: break; /* ignore */ case PGNTag: lastStart = cm; break; /* Already started */ case (ChessMove) 0: case MoveNumberOne: case XBoardGame: if ((error = GameListNewGame(¤tListGame))) { rewind(f); yyskipmoves = FALSE; return(error); } currentListGame->number = ++gameNumber; currentListGame->offset = offset; if(1) { CopyBoard(boards[scratch], initialPosition); plyNr = 0; currentListGame->moves = PackGame(boards[scratch]); } lastStart = cm; break; default: break; /* impossible */ } break; case PGNTag: lastStart = cm; if ((error = GameListNewGame(¤tListGame))) { rewind(f); yyskipmoves = FALSE; return(error); } currentListGame->number = ++gameNumber; currentListGame->offset = offset; ParsePGNTag(yy_text, ¤tListGame->gameInfo); do { yyboardindex = 1; offset = yyoffset(); cm = (ChessMove) Myylex(); if (cm == PGNTag) { ParsePGNTag(yy_text, ¤tListGame->gameInfo); } } while (cm == PGNTag || cm == Comment); if(1) { int btm=0; if(currentListGame->gameInfo.fen) ParseFEN(boards[scratch], &btm, currentListGame->gameInfo.fen, FALSE); else CopyBoard(boards[scratch], initialPosition); plyNr = (btm != 0); currentListGame->moves = PackGame(boards[scratch]); } if(cm != NormalMove) break; case IllegalMove: if(appData.testLegality) break; case NormalMove: /* Allow the first game to start with an unnumbered move */ yyskipmoves = FALSE; if (lastStart == (ChessMove) 0) { if ((error = GameListNewGame(¤tListGame))) { rewind(f); yyskipmoves = FALSE; return(error); } currentListGame->number = ++gameNumber; currentListGame->offset = offset; if(1) { CopyBoard(boards[scratch], initialPosition); plyNr = 0; currentListGame->moves = PackGame(boards[scratch]); } lastStart = MoveNumberOne; } case WhiteCapturesEnPassant: case BlackCapturesEnPassant: case WhitePromotion: case BlackPromotion: case WhiteNonPromotion: case BlackNonPromotion: case WhiteKingSideCastle: case WhiteQueenSideCastle: case BlackKingSideCastle: case BlackQueenSideCastle: case WhiteKingSideCastleWild: case WhiteQueenSideCastleWild: case BlackKingSideCastleWild: case BlackQueenSideCastleWild: case WhiteHSideCastleFR: case WhiteASideCastleFR: case BlackHSideCastleFR: case BlackASideCastleFR: fromX = currentMoveString[0] - AAA; fromY = currentMoveString[1] - ONE; toX = currentMoveString[2] - AAA; toY = currentMoveString[3] - ONE; plyNr++; ApplyMove(fromX, fromY, toX, toY, currentMoveString[4], boards[scratch]); if(currentListGame && currentListGame->moves) PackMove(fromX, fromY, toX, toY, boards[scratch][toY][toX]); break; case WhiteWins: // [HGM] rescom: save last comment as result details case BlackWins: case GameIsDrawn: case GameUnfinished: if(!currentListGame) break; if (currentListGame->gameInfo.resultDetails != NULL) { free(currentListGame->gameInfo.resultDetails); } if(yy_text[0] == '{') { char *p; safeStrCpy(lastComment, yy_text+1, sizeof(lastComment)/sizeof(lastComment[0])); if((p = strchr(lastComment, '}'))) *p = 0; currentListGame->gameInfo.resultDetails = StrSave(lastComment); } break; default: break; } if(gameNumber % 1000 == 0) { snprintf(buf, MSG_SIZ, _("Reading game file (%d)"), gameNumber); DisplayTitle(buf); DoEvents(); } } while (cm != (ChessMove) 0); if(currentListGame) { if(!currentListGame->moves) DisplayError("Game cache overflowed\nPosition-searching might not work properly", 0); if (appData.debugMode) { for (currentListGame = (ListGame *) gameList.head; currentListGame->node.succ; currentListGame = (ListGame *) currentListGame->node.succ) { fprintf(debugFP, "Parsed game number %d, offset %ld:\n", currentListGame->number, currentListGame->offset); PrintPGNTags(debugFP, ¤tListGame->gameInfo); } } } if(appData.debugMode) { GetTimeMark(&t2);printf("GameListBuild %ld msec\n", SubtractTimeMarks(&t2,&t)); } quickFlag = 0; PackGame(boards[scratch]); // for appending end-of-game marker. DisplayTitle("WinBoard"); rewind(f); yyskipmoves = FALSE; return 0; } /* Clear an existing GameInfo structure. */ void ClearGameInfo (GameInfo *gameInfo) { if (gameInfo->event != NULL) { free(gameInfo->event); } if (gameInfo->site != NULL) { free(gameInfo->site); } if (gameInfo->date != NULL) { free(gameInfo->date); } if (gameInfo->round != NULL) { free(gameInfo->round); } if (gameInfo->white != NULL) { free(gameInfo->white); } if (gameInfo->black != NULL) { free(gameInfo->black); } if (gameInfo->resultDetails != NULL) { free(gameInfo->resultDetails); } if (gameInfo->fen != NULL) { free(gameInfo->fen); } if (gameInfo->timeControl != NULL) { free(gameInfo->timeControl); } if (gameInfo->extraTags != NULL) { free(gameInfo->extraTags); } if (gameInfo->variantName != NULL) { free(gameInfo->variantName); } if (gameInfo->outOfBook != NULL) { free(gameInfo->outOfBook); } GameListInitGameInfo(gameInfo); } /* [AS] Replaced by "dynamic" tag selection below */ char * GameListLineOld (int number, GameInfo *gameInfo) { char *event = (gameInfo->event && strcmp(gameInfo->event, "?") != 0) ? gameInfo->event : gameInfo->site ? gameInfo->site : "?"; char *white = gameInfo->white ? gameInfo->white : "?"; char *black = gameInfo->black ? gameInfo->black : "?"; char *date = gameInfo->date ? gameInfo->date : "?"; int len = 10 + strlen(event) + 2 + strlen(white) + 1 + strlen(black) + 11 + strlen(date) + 1; char *ret = (char *) malloc(len); sprintf(ret, "%d. %s, %s-%s, %s, %s", number, event, white, black, PGNResult(gameInfo->result), date); return ret; } #define MAX_FIELD_LEN 80 /* To avoid overflowing the buffer */ char * GameListLine (int number, GameInfo * gameInfo) { char buffer[2*MSG_SIZ]; char * buf = buffer; char * glt = appData.gameListTags; buf += sprintf( buffer, "%d.", number ); while( *glt != '\0' ) { *buf++ = ' '; switch( *glt ) { case GLT_EVENT: strncpy( buf, gameInfo->event ? gameInfo->event : "?", MAX_FIELD_LEN ); break; case GLT_SITE: strncpy( buf, gameInfo->site ? gameInfo->site : "?", MAX_FIELD_LEN ); break; case GLT_DATE: strncpy( buf, gameInfo->date ? gameInfo->date : "?", MAX_FIELD_LEN ); break; case GLT_ROUND: strncpy( buf, gameInfo->round ? gameInfo->round : "?", MAX_FIELD_LEN ); break; case GLT_PLAYERS: strncpy( buf, gameInfo->white ? gameInfo->white : "?", MAX_FIELD_LEN ); buf[ MAX_FIELD_LEN-1 ] = '\0'; buf += strlen( buf ); *buf++ = '-'; strncpy( buf, gameInfo->black ? gameInfo->black : "?", MAX_FIELD_LEN ); break; case GLT_RESULT: safeStrCpy( buf, PGNResult(gameInfo->result), 2*MSG_SIZ ); break; case GLT_WHITE_ELO: if( gameInfo->whiteRating > 0 ) sprintf( buf, "%d", gameInfo->whiteRating ); else safeStrCpy( buf, "?" , 2*MSG_SIZ); break; case GLT_BLACK_ELO: if( gameInfo->blackRating > 0 ) sprintf( buf, "%d", gameInfo->blackRating ); else safeStrCpy( buf, "?" , 2*MSG_SIZ); break; case GLT_TIME_CONTROL: strncpy( buf, gameInfo->timeControl ? gameInfo->timeControl : "?", MAX_FIELD_LEN ); break; case GLT_VARIANT: strncpy( buf, gameInfo->variantName ? gameInfo->variantName : VariantName(gameInfo->variant), MAX_FIELD_LEN ); // strncpy( buf, VariantName(gameInfo->variant), MAX_FIELD_LEN ); break; case GLT_OUT_OF_BOOK: strncpy( buf, gameInfo->outOfBook ? gameInfo->outOfBook : "?", MAX_FIELD_LEN ); break; case GLT_RESULT_COMMENT: strncpy( buf, gameInfo->resultDetails ? gameInfo->resultDetails : "res?", MAX_FIELD_LEN ); break; default: break; } buf[MAX_FIELD_LEN-1] = '\0'; buf += strlen( buf ); glt++; if( *glt != '\0' ) { *buf++ = ','; } } *buf = '\0'; return strdup( buffer ); } char * GameListLineFull (int number, GameInfo * gameInfo) { char * event = gameInfo->event ? gameInfo->event : "?"; char * site = gameInfo->site ? gameInfo->site : "?"; char * white = gameInfo->white ? gameInfo->white : "?"; char * black = gameInfo->black ? gameInfo->black : "?"; char * round = gameInfo->round ? gameInfo->round : "?"; char * date = gameInfo->date ? gameInfo->date : "?"; char * oob = gameInfo->outOfBook ? gameInfo->outOfBook : ""; char * reason = gameInfo->resultDetails ? gameInfo->resultDetails : ""; int len = 64 + strlen(event) + strlen(site) + strlen(white) + strlen(black) + strlen(date) + strlen(oob) + strlen(reason); char *ret = (char *) malloc(len); sprintf(ret, "%d, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"", number, event, site, round, white, black, PGNResult(gameInfo->result), reason, date, oob ); return ret; } // --------------------------------------- Game-List options dialog -------------------------------------- // back-end typedef struct { char id; char * name; } GLT_Item; // back-end: translation table tag id-char <-> full tag name static GLT_Item GLT_ItemInfo[] = { { GLT_EVENT, "Event" }, { GLT_SITE, "Site" }, { GLT_DATE, "Date" }, { GLT_ROUND, "Round" }, { GLT_PLAYERS, "Players" }, { GLT_RESULT, "Result" }, { GLT_WHITE_ELO, "White Rating" }, { GLT_BLACK_ELO, "Black Rating" }, { GLT_TIME_CONTROL,"Time Control" }, { GLT_VARIANT, "Variant" }, { GLT_OUT_OF_BOOK,PGN_OUT_OF_BOOK }, { GLT_RESULT_COMMENT, "Result Comment" }, // [HGM] rescom { 0, 0 } }; char lpUserGLT[LPUSERGLT_SIZE]; // back-end: convert the tag id-char to a full tag name char * GLT_FindItem (char id) { char * result = 0; GLT_Item * list = GLT_ItemInfo; while( list->id != 0 ) { if( list->id == id ) { result = list->name; break; } list++; } return result; } // back-end: build the list of tag names void GLT_TagsToList (char *tags) { char * pc = tags; GLT_ClearList(); while( *pc ) { GLT_AddToList( GLT_FindItem(*pc) ); pc++; } GLT_AddToList( " --- Hidden tags --- " ); pc = GLT_ALL_TAGS; while( *pc ) { if( strchr( tags, *pc ) == 0 ) { GLT_AddToList( GLT_FindItem(*pc) ); } pc++; } GLT_DeSelectList(); } // back-end: retrieve item from dialog and translate to id-char char GLT_ListItemToTag (int index) { char result = '\0'; char name[MSG_SIZ]; GLT_Item * list = GLT_ItemInfo; if( GLT_GetFromList(index, name) ) { while( list->id != 0 ) { if( strcmp( list->name, name ) == 0 ) { result = list->id; break; } list++; } } return result; } // back-end: add items id-chars one-by-one to temp tags string void GLT_ParseList () { char * pc = lpUserGLT; int idx = 0; char id; do { id = GLT_ListItemToTag( idx ); *pc++ = id; idx++; } while( id != '\0' ); } xboard-4.8.0/FAQ.html0000644000175000001440000025307012420374633011227 00000000000000 XBoard and WinBoard: Frequently Asked Questions

XBoard and WinBoard: Frequently Asked Questions

This document answers some frequently asked questions about the graphical chess interfaces XBoard and WinBoard. A hyperlinked version of this FAQ is available on the Web through the page http://www.gnu.org/software/xboard/FAQ.html.

This FAQ is in need of revision. Please contact us if you'd like to help update it.


Outline


Detailed contents


[A] Introduction and hot topics


[A.1] What are XBoard and WinBoard?

XBoard and WinBoard are graphical user interfaces for chess. XBoard runs with the X Window System on Unix systems (including GNU/Linux); see topic [B.1]. WinBoard runs on true 32-bit Microsoft Windows operating systems, such as Windows 95, 98, NT, 2000, ME, XP, Vista, and should continue to work on future 32-bit Windows systems. It does not work on Windows CE (also known as Pocket PC), nor does it work on 16-bit Windows systems such as Windows 3.1. See topic [B.2].


[A.2] Where can I get chess information and chess software?

As a shortcut to most things mentioned in this FAQ, try Tim Mann's Chess Web page, http://www.tim-mann.org/chess.html. This page page is currently a very bad place to get the latest released versions of XBoard and WinBoard and the most up-to-date version of this FAQ, though. A better place is the WinBoard forum. Also see our Savannah project pages at https://savannah.gnu.org/projects/xboard/.

If you have other questions about XBoard/WinBoard that aren't answered in this FAQ, you can try Aaron Tay's WinBoard and Chess Engines FAQ, atdefunct URL.

For general news and information about chess, try the CCC forum or the WinBoard forum. Anothe possibility is the newsgroup hierarchy rec.games.chess.*, especially the groups rec.games.chess.misc and rec.games.chess.computer. Both of the latter groups have very informative FAQs maintained by Steve Pribut; look for them on the newsgroups or at defunct URL.

Like other GNU software, you can get XBoard, and WinBoard by anonymous FTP from ftp://ftp.gnu.org/pub/gnu/ and its many mirror sites. Look in the subdirectories xboard, and winboard. The .tar.gz suffix on the files there indicates they were packed with tar and compressed with gzip. The .exe or .zip suffixes indicate files that were packed and compressed with zip.

For other chess software, try the Internet Chess Library. Use anonymous FTP to connect to ftp.freechess.org, or go to the Web page http://www.freechess.org/. You can get chess software, game collections, the FAQ file for rec.games.chess, and other chess-related material there, in the directory pub/chess. The FTP server can automatically decompress files for you as you download them, useful if you don't have gzip.

Here is a sample anonymous ftp session. Some of the ftp server's responses are abbreviated, but all the commands you must type are included.

    % ftp ftp.gnu.org
    Connected to ftp.gnu.org
    Name: anonymous
    Password: your-email-address@your-site
    ftp> binary
    200 Type set to I.
    ftp> cd /pub/gnu/xboard
    ftp> dir
    -rw-r--r-- 1 14910 wheel  1057625 May 20 00:25 xboard-4.2.7.tar.gz
    ftp> get xboard-4.2.7.tar.gz
    150 BINARY connection for xboard-4.2.7.tar.gz (1057625 bytes).
    226 Transfer complete.
    ftp> quit

[A.3] What are the current version numbers for XBoard and WinBoard?

At this writing, the current version numbers are:

  • XBoard 4.4.0
  • WinBoard 4.4.0

[A.4] Who is working on this project?

Please see our Savannah project pages at https://savannah.gnu.org/projects/xboard/ for a list of active developers. Many others occasionally contribute suggestions and snippets of code, for which we are grateful.

[A.5] How do I report bugs, offer help, etc.?

Bug reports, suggestions, and offers to help on XBoard or WinBoard should be sent to bug-xboard@gnu.org.

Beginner questions and discussion about the program may get faster answers on the WinBoard Forum at http://www.open-aurec.com/wbforum/. This forum also constains a section dedicated to propose and discuss new features for WinBoard / XBoard or WinBoard protocol, and reposrt bugs, and offers downloads of pre-installed packages of WinBoard bundled with other software, useful for conducting computer-computer tournaments.

If you are developing a chess engine that works with XBoard or WinBoard (or an alternative GUI that works with such engines), see the Chess Engines mailing list, hosted at http://groups.yahoo.com/group/chess-engines. For better response, join the above-mentioned WinBoard forum, or the CCC forum.

Any time you want to report a possible bug in XBoard or WinBoard, we need to know exactly what you did, and exactly what error (or other) messages you got.

If you are using Unix, run the "script" program, run XBoard with the -debug flag (if you get as far as running it), do whatever is necessary to reproduce the problem, type "exit" to the shell, and mail us the resulting typescript file. We also need to know what hardware/operating system combination you are using. The command "uname -a" will usually tell you this; include its output in your typescript.

If you are using MS Windows, run WinBoard with the -debug flag, and send us a copy of the WinBoard.debug file. If you aren't sure how to add command-line flags to WinBoard, you can hit Ctrl+Alt+F12 to create a WinBoard.debug file after WinBoard starts, but that is not as good, because a few messages that would have been printed at the start are lost.

Either way, please send us the exact text of the commands you typed and the output you got, not just your recollection of approximately what they were. The messages may seem meaningless to you, but they are very meaningful to us and essential for diagnosing problems.


[A.6] What are the future plans for XBoard and WinBoard?

Our plans are always in flux. As with most free software projects, the next release will happen when it happens -- or it may never happen. This has always been the policy for XBoard/WinBoard. Releases have never been promised in specific time frames.

Starting in November 2003, several new developers have joined the project, and work is now hosted at https://savannah.gnu.org/projects/xboard/. Lots of work is just getting underway, but nothing is far along yet.

Here is a partial list of items that have a nonzero probability of happening in finite time.

  • Small bug fixes. Occasionally someone sends us a fix, or reports a small bug very clearly so that we're able to fix it in a few minutes work.
  • Protocol version 3. The members of the chess engine authors' mailing list discussed a set of proposed features for the next version of the XBoard/WinBoard chess engine communication protocol. The WinBoard 4.3 fork has taken the protocol in a different direction, though, extending version 2 with new features as they were needed, rather than upgrading to a new protocol in a single sweep. It does not seem likely that there will be a v3 protocol in the foreseeable future.
  • Contributed features. Several people have mailed me code to add various features. Most of this code is available on the XBoard/WinBoard extensions page at http://www.tim-mann.org/extensions.html, but it is not in any official releases yet. We are in the process of getting folks to formally assign the copyrights on their contributions to the Free Software Foundation so that we can include it in official releases in the future.
  • Internationalization. Several people have expressed interest in internationalizing XBoard/WinBoard. Version 4.4 implements internationalization in its XBoard branch, and includes (partial) Turkish and German translations. For WinBoard a suitable way for internationalization still has to be found, as all menu strings there are not in the C code, but in a Windows resource file. In any case, we will need more translators, to update the existing translations (for version 4.2.7) to the current version, and to provide translaions for oter languages. Watch for news on the xboard-devel mailing list on our Savannah pages.

[B] XBoard and WinBoard


[B.1] What is XBoard?

XBoard is a graphical user interface for chess. It displays a chessboard on the screen, accepts moves made with the mouse, and loads and saves games in Portable Game Notation (PGN). XBoard is free software. It serves as a front-end for many different chess services, including:

Chess engines that will run on your machine and play a game against you or help you analyze, such as GNU Chess and Crafty (topic [D.3] below).

Chess servers on the Internet, where you can connect to play chess with people from all over the world, watch other users play, or just hang out and chat.

Correspondence chess played by electronic mail. The cmail program (topic [B.6] below) automates the tasks of parsing email from your opponent, playing his moves out on your board, and mailing your reply move after you've chosen it.

The Web and your own saved games. You can use XBoard as a helper application to view PGN games in your Web browser, or to load and save your own PGN files.

XBoard runs under Unix or Unix-compatible systems. It requires the X Window System, version X11R4 or later. There are also ports of XBoard to 32-bit Microsoft Windows and to the Amiga. See topics [B.2] and [B.3] respectively.


[B.2] Is there an XBoard for Microsoft Windows? What is WinBoard? How do I install WinBoard?

WinBoard is a port of XBoard to 32-bit Microsoft Windows systems, such as Windows 95, 98, NT, 2000, ME, and XP. It uses the same back end chess code as XBoard, but the front end graphics code is a complete rewrite. WinBoard is free software.

The WinBoard distribution includes a sample Chess engine.

The WinBoard distribution also includes the ICC timestamp and FICS timeseal programs (topic [B.12]).

cmail (topic [B.6]) has not been ported to Windows. All the other XBoard functions are included in WinBoard. The International Email Chess Group web site at http://www.iecg.org/ recommends ECTool (http://www.ectool.nu/) for playing correspondence chess under Windows.

You install WinBoard as follows. Download the WinBoard package to your PC (see topic [A.2]). It will be a file with a name like winboard-4_0_0.exe. Double-click on this file in the Explorer or File Manager to run it. Follow the on-screen prompts.


[B.3] Is there an XBoard for the Amiga? What is AmyBoard?

AmyBoard is a port of XBoard to the Amiga, by Jochen Wiedmann. The distribution includes a port of GNU Chess. AmyBoard is free software.

The current version of AmyBoard is 330.5 (based on XBoard 3.3.0). No one is currently maintaining it.

System requirements:

  • An Amiga (obviously :-), running OS 2.04 or later, 2Mb RAM or more.
  • MUI 2.0 or later.
  • Workbench or another screen with no less than 640x400 pixels (adjustable with the MUI-Prefs); this restriction is just because we don't have bitmaps with less than 40x40 pixels per square. If someone contributes bitmaps with 20x20 or 20x25, they will work with any Hires mode.

If you would like to use an ICS, you need an Internet connection via either

  • a telnet-like program, or
  • a terminal program reading from stdin and writing to stdout.

AmyBoard is available in the Internet Chess Library (topic [A.2]).


[B.4] Is there an XBoard for the Macintosh?

Note: I am not a Mac user and have not tried this myself, so I cannot answer questions about it.

Because MacOS X has a Unix base, XBoard will compile and run on it. You do need an X11 (X Window System) server and client libraries. I'm told that these come standard with MacOS X 10.3 and later. Once you install the X11 package, XBoard is reported to compile and run without changes.

You can avoid having to compile XBoard (and GNU Chess) yourself by using the Fink sofware packaging system. See http://fink.sourceforge.net/ and http://finkcommander.sourceforge.net/ for more info on Fink.

There is no version of XBoard or WinBoard that runs with the native (non-X11) Mac graphical interface, and none that runs on MacOS 9 or earlier.


[B.5] Does XBoard run on VMS?

No. This port would probably be a lot easier than the Win32 and Amiga ports were, because VMS has the X Window system (under the name DECwindows) and is now POSIX compliant. If you are working on this, send mail to bug-xboard@gnu.org to let us know.


[B.6] What is cmail?

cmail is a program that helps you play and keep track of electronic mail correspondence chess games using XBoard. It is distributed with XBoard and has its own manual page. cmail is free software. It was written by Even Welsh. cmail has not been ported to Windows; sorry.


[B.7] How do I build XBoard? Do I need gcc?

The first step to building XBoard is to get the distribution file. See topic [A.2] for places you can ftp the software from.

Next, decide what directory tree you are going to install XBoard in. The default is /usr/local, but you probably don't have write access to that directory unless you are a system administrator. If you do, type the following to install it there:

    gzip -cd xboard-*.tar.gz | tar -xvf -
    cd xboard-*/
    ./configure
    make
    su
    make install

If you want to install xboard in your personal home directory ($HOME/bin), type this:

    gzip -cd xboard-*.tar.gz | tar -xvf -
    cd xboard-*/
    ./configure --prefix=$HOME
    make
    make install

If the first step above fails because you don't have gzip, see topic [A.2], and ask a local Unix expert if you need more help. If you have any problems with the last two steps, read the READ_ME and INSTALL files in the xboard-*/ directory. You will also find this FAQ there.

You don't need to have gcc to build XBoard. Almost any Unix C compiler should do.


[B.8] Can I use XBoard or WinBoard to play a game of chess with another human?

The only way for two humans on different machines to play chess in real time using XBoard/WinBoard is to use an Internet Chess Server as an intermediary. That is, each player runs his own copy of XBoard or WinBoard, both of them log into an ICS, and they play a game there. Two copies of XBoard/WinBoard cannot communicate with each other directly.

Instructions on how to get started with Internet chess are included with the XBoard and WinBoard distributions. The network addresses included in the distribution may not always be current. The oldest and largest ICS is the Internet Chess Club at chessclub.com, which now has a fee for registered use, but still allows free unregistered use. There are also many newer sites with no fees, using the Free Internet Chess Server implementation (FICS). The most active FICS site is freechess.org. On these and most other chess servers, the port number to use is 5000.

If you don't have network connectivity to any ICS site, you can run your own server using a version of the FICS code, but this is not easy. See http://www.tim-mann.org/ics.html#ownics for advice and pointers.

The cmail program included with XBoard lets you play email postal games with another human; see topic [B.6].

Two humans can play chess on the same machine using one copy of XBoard/WinBoard in Edit Game mode, but the clocks don't run in this mode, so it's of limited usefulness.

See also topic [D.2], Winsock Chess.


[B.9] Will WinBoard run on Windows 3.1? How about Windows CE (also known as Pocket PC)?

WinBoard does not run on Windows 3.1, Windows for Workgroups 3.11, etc., not even with the Win32s compatibility package. The main problem is that Win32s does not have threads or real concurrent processes. A port of WinBoard to Windows 3.1 is possible in theory, but it would be difficult and messy, and no one is going to do it.

WinBoard does not run on Windows CE (also known as Pocket PC). I don't know what would be required to port it.

WinBoard does run well on full 32-bit versions of Windows, such as Windows 95, 98, NT, 2000, ME, XP, and Vista, and should continue to work on future 32-bit Windows systems. To use the help files in Vista, you will need to install the WinHlp32.exe from MicroSoft on your Vista system.


[B.10] How do I use XBoard or WinBoard as an external viewer for PGN files with my Web browser?

  1. On Unix systems:
    • Add the following line to the file .mime.types in your home directory. (Create the file if it doesn't exist already.)
          application/x-chess-pgn    pgn
      
    • Add the following line to the file .mailcap in your home directory. (Create the file if it doesn't exist already.)
          application/x-chess-pgn; xboard -ncp -lgf %s
      
    • Exit from your Web browser and restart it.
  2. On MS Windows systems:

    The exact procedure depends on which Web browser you are using. The current version of WinBoard automatically configures itself as your PGN viewer for local files, Netscape 4.x and later, and Internet Explorer. This automatic setup probably works for all other current Web browsers, too.


[B.11] How do I use WinBoard as an external viewer for PGN files with the MS Windows File Manager or Explorer?

WinBoard sets this up automatically when you install it, except on old versions of Windows NT (prior to 4.0). On Windows NT 3.51 or earlier, go to the File Manager, click on the File menu, select Associate, enter "pgn" as the extension, and use the Browse button to find your copy of WinBoard and set up the association.


[B.12] How do I use ICC timestamp or FICS timeseal with XBoard?

First, get the appropriate version of timestamp or timeseal for your machine from ftp.chessclub.com or ftp.freechess.org. Second, be sure that you can connect using XBoard without timestamp/timeseal. Third, be sure that you can connect using timestamp/timeseal without XBoard. See the help files on ICC and FICS or ask people online if you have problems.

If you are in a completely ordinary situation, where your machine is directly on the Internet and you can connect to ICC or FICS without timestamp/timeseal using just the command "xboard -ics" or "xboard -ics -icshost freechess.org", change that command to one of the following:

    xboard -ics -icshost chessclub.com -icshelper timestamp

    xboard -ics -icshost freechess.org -icshelper timeseal

If you have a firewall between your machine and the ICS, see topic [B.19].

If you normally have to use the "/icscomm" command line option on xboard to log into a second machine, and then telnet to ICC or FICS from there, you are going to have to run the Unix version of timestamp or timeseal on the second machine. (If the second machine is not running Unix, you are out of luck.) Get the appropriate version of timestamp or timeseal onto the shell machine via FTP; see the help files on ICC and FICS for instructions. Then simply run it when you would normally run telnet. In this configuration you are not protected against lag between your PC and the shell machine, or for lag caused by heavy load on the shell machine itself from other users.

For further information on timestamp and timeseal, see the help files on ICC and FICS.


[B.13] How do I use ICC timestamp or FICS timeseal with WinBoard?

If you select an ICS from either the WinBoard Startup dialog or the Windows Start submenu that WinBoard installs, WinBoard automatically runs timestamp or timeseal if the ICS you chose is known to support it.

If you are constructing a WinBoard command line by hand, add the option "/icshelper timestamp" or "/icshelper timeseal" to the WinBoard command line to use timestamp or timeseal. Both timestamp.exe and timeseal.exe are included in the WinBoard distribution. They both function identically to the Unix versions, as documented in "help timestamp" on ICC and "help timeseal" on FICS.

If you have a firewall between your machine and the ICS, see topic [B.19].

If you normally have to use the "/icscomm" command line option on WinBoard to log into a shell account, and then telnet to ICC or FICS from there, you are going to have to run the Unix version of timestamp or timeseal on the shell machine. (If the shell account is not on a Unix machine, you are out of luck.) Get the appropriate version of timestamp or timeseal onto the shell machine via FTP; see the help files on ICC and FICS for instructions. Then simply run it when you would normally run telnet. In this configuration you are not protected against lag between your PC and the shell machine, or for lag caused by heavy load on the shell machine itself from other users.

For further information on timestamp and timeseal, see the help files on ICC and FICS.


[B.14] How do I play bughouse with XBoard or WinBoard?

XBoard and WinBoard have full bughouse support. Offboard piece holdings are shown next to the board, and you drop offboard pieces by dragging them with the mouse (holding the left button down) to their drop square, or left-click the piece and the drop square, just like when you enter any ordinary move.

XBoard and WinBoard can display only one board at a time, but you can observe your partner's game by running a second copy of the program and logging in as a guest. (Unfortunately, this is not possible if you are using the /icscomm option.) To observe your partner's games automatically, use the "follow" or "pfollow" ICS command; see the ICS online help for details.


[B.16] What is Zippy? How can I interface a chess program to the Internet Chess Servers?

Zippy is an interface that lets a compatible chess engine (such as GNU Chess or Crafty) act as a computer player on an Internet Chess Server. Zippy is included in both the XBoard and WinBoard distributions. It is implemented as a small amount of additional code within XBoard or WinBoard. For documentation, see the file zippy.README, included in both distributions or available from my chess Web page, http://www.tim-mann/chess.html. The version of zippy.README on my Web page is often more up-to-date than those in the XBoard/WinBoard distributions. You'll also find a "biography" of Zippy and pointers to the original Zippy the Pinhead comic strips on my Web page. Please read zippy.README carefully before you ask me any questions about Zippy.

Using a computer to choose your moves on a chess server is considered cheating unless your account is on the computer (C) list. Read "help computer" on your favorite server for details on their policy. Most of the servers have plenty of computers running now, so they will not be excited about having you run a new one unless you have written your own chess engine. They don't really need yet another Crafty or GNU Chess clone.


[B.17] How can I interface my own chess program to XBoard or WinBoard?

This is a non-trivial task. XBoard and WinBoard were not designed with a clean interface for talking to chess programs; they were written to work with an existing version of GNU Chess that expects to be talking to a person. Your program has to emulate GNU Chess's rather idiosyncratic command structure to work with XBoard and WinBoard. We are gradually cleaning up, improving, and documenting the interface as newer versions of XBoard and WinBoard come out, however.

For documentation, see the file engine-intf.html, included in both distributions or available from Tim Mann's chess Web page, http://www.tim-mann.org/chess.html. The version of engine-intf.html on Tim's Web page might totally obsolete, though. To know how the current WinBoard or XBoard version communicate with their engines, use the documentation in the XBoard/WinBoard distributions, or on the WinBoard forum.


[B.18] How can I recompile WinBoard from source?

The source code for WinBoard is available from the author's Web page, http://www.tim-mann.org/chess.html.

WinBoard is currently developed using gcc under Cygwin. To build WinBoard with the free Cygwin tools, available from http://www.cygwin.com/), use the command "make -f makefile.gcc" from the winboard directory of the source distribution.

You can build the program from the MSVC++ GUI by opening the project file (winboard.dsp) and telling MSVC++ to build the project. You can also build it from the the command line by using the nmake program supplied with MSVC++. The makefile for MSVC is makefile.ms in the winboard directory.

WinBoard 4.2.5 was successfully compiled with the net release of Cygwin as downloaded on 20-March-2001 (cygwin1.dll 1.1.8, gcc 2.95.2-6, binutils 20001221-1, flex 2.5.4-1), but exhibits a command-line parsing bug; see item 511 in the ToDo file that comes with WinBoard. WinBoard 4.1.0 does not compile with Cygwin. WinBoard 4.0.7 is known to compile with Cygwin BL20.1.

To build WinBoard with Borland C++ 4.5, use "borland.mak", supplied with the WinBoard sources, as the Makefile. Support for Borland C++ was contributed by Don Fong and has not been tested by the author of WinBoard.

WinBoard is a Win32 application, so you definitely need a compiler and tool set that supports Win32. In particular, older versions of DJGPP can build only 32-bit MSDOS programs; that is, programs that use a DOS extender to get a 32-bit address space and do not make any Windows calls. The latest versions of DJGPP are said to be able to build Win32 programs when used with the proper extension package(s), but this is not known to work with WinBoard. Use Cygwin instead.

See also topic [C.16].


[B.19] How can I use XBoard or WinBoard to talk to an Internet Chess Server through a firewall or proxy?

There is no single answer to this question, because there are many different kinds of firewalls in use. They work in various different ways and have various different security policies. This answer can only provide hints.

Note that you can't access Internet Chess Servers through a Web proxy, because they are not a Web service. You talk to them through a raw TCP connection, not an HTTP connection. If you can only access the Web through a proxy, there may be a firewall that stops you from making direct TCP connections, but there may also be a way through it. Read on for hints, and contact your local system administrator if you need more information about your local configuration.

A helpful user mailed me the following explanation of how to use WinBoard with WinGate:

"I have managed to setup WinBoard though my WinGate proxy. I have the Office version. What I needed to do was to setup the TCP/IP connection to add the User/Host name and my provider service name for the DNS, but I had to leave the HOST IP address blank. I have not played with all the variations, so it may be just that I have the DNS lookup enabled."

I hope this helps, though I don't find it very clear. I don't have a copy of WinGate myself and can't help if you have questions about it.

If you are using some other non-SOCKS firewall, read the FIREWALLS section in your XBoard or WinBoard documentation (man page, info document, or Help file). If you can telnet to a chess server in some way, then you can almost certainly connect to it with xboard/WinBoard, though in some cases you may not be able to run timestamp or timeseal. The timestamp and timeseal protocols require a clean, 8-bit wide TCP connection from your machine to the ICS, which some firewalls do not provide.

If you have a SOCKS firewall and are using XBoard, you should be able to SOCKSify xboard and use it. See http://www.socks.nec.com/ for information about SOCKS and socksification. However, if you do this, you can't use timestamp or timeseal; what you really need is a socksified version of timestamp or timeseal. This is hard because the source code for timestamp and timeseal is proprietary; the folks running the chess servers don't give it out because that would make it too easy to cheat. On some versions of Unix, you may be able to socksify a program that you don't have the source code to by running it with an appropriate dynamic library; see http://www.socks.nec.com/. For others, you might be able to get a pre-built socksified version from the chess server administrators. For timeseal versions, see ftp://ftp.freechess.org/pub/chess/timeseal/. For timestamp versions, the directory would be ftp://ftp.chessclub.com/pub/icc/timestamp/, but at this writing there don't seem to be any socksified timestamps there. Once you have a socksified timestamp or timeseal, simply run it with a normal, non-socksified xboard in place of the standard timestamp or timeseal.

If you have a SOCKS firewall and you are using WinBoard, we now know how to make this configuration work, complete with timestamp or timeseal!

Start by getting SocksCap32. This software is freely available from http://www.socks.nec.com/. Install it on your machine, read the documentation, and learn to use it. You may find it useful with many other programs besides WinBoard.

Next, don't socksify WinBoard. Socksifying WinBoard itself doesn't let you use it with timestamp or timeseal. For some reason I don't understand -- something strange that SocksCap32 does -- the socksified WinBoard runs but does nothing, and timestamp/timeseal runs all by itself in its own window.

Instead, use the following workaround. Follow the instructions exactly; don't try to skip steps or simplify things.

First, make SocksCap32 application profiles for timestamp and timeseal. Use the following command lines in the SocksCap32 profiles. Name the first profile "timestamp" and the second "timeseal".

    "c:\program files\winboard\timestamp.exe" chessclub.com 5000 -p 5000
    "c:\program files\winboard\timeseal.exe" freechess.org 5000 -p 5000

Second, run timestamp or timeseal by itself, socksified, using its profile. This will open an unneeded, black window that will not respond to typing. Minimize it to the task bar and ignore it. It will go away when you exit from WinBoard.

Next, run WinBoard using the following command line. Make a shortcut or type this command into an MS-DOS Prompt box. Don't run WinBoard itself socksified, just run it directly.

    "c:\program files\winboard.exe" /ics /icshost=localhost /icsport=5000

After you get this working, you can try getting the timestamp window to auto-minimize by starting it from a shortcut instead of from the SocksCap32 control window. As it says in the SocksCap32 help file, put the following in the Target field of a shortcut's Properties page:

    "c:\program files\sockscap32\sc32.exe" timestamp

Then select "Run: Minimized" on the same page. Do the same for timeseal.

Another method that can work is to use a .bat file to start both timestamp and WinBoard. It would look something like this:

    REM --
    REM -- icc.bat
    REM -- Start timestamp under SocksCap32 and use WinBoard to connect to it.
    REM -- The string "timestamp" refers to a SocksCap32 profile for timestamp.
    REM --  Do not change it to the filename of the timestamp program!
    REM --
    start /minimized "c:\program files\sockscap32\sc32.exe" timestamp
    cd "c:\program files\winboard"
    winboard /ics /icshost=localhost /icsport=5000

This workaround has a problem if you want to run two copies of WinBoard at once, talking to the same chess server twice (for bughouse) or to two different chess servers. If you need to do that, you will need to run a separate copy of timestamp with a different port number for each connection. You'll need to make a second set of profile entries with a different value after the -p flag (say, 5001) and you'll need to change the WinBoard command line /icsport=5000 for the second WinBoard to match.


[B.20] How can I use XBoard or WinBoard on chess.net with accuclock?

I believe chess.net provides a Win32 command-line version of accuclock that will work with WinBoard. Please see the documentation on the chess.net server itself; don't ask the author of WinBoard.

I don't know whether chess.net provides versions of accuclock for Unix at this time. Ask them.


[B.21] Can I get Zippy to do one or more ICS commands automatically at the start or end of each game?

By default, Zippy automatically sends the command "gameend" to ICS at the end of each game. You can alias this command (using the ICS "alias" feature) to anything you want. On ICC, you can use the "multi" feature to alias gameend to several commands, but other servers don't have that feature. Zippy doesn't send anything at the start of the game by default.

You can get Zippy to send one or more commands of your choosing, at the start and/or end of each game, by using the -zippyGameStart and -zippyGameEnd command line options, newly added in version 4.0.3. Both xboard and WinBoard have (somewhat obscure) ways of getting newlines into this option to send several commands. Here is an example of one way to do it for each.

    xboard -ics -zp -xrm '*zippyGameStart: say hi\nsay prepare to die\n'

    WinBoard /ics /zp /zippyGameEnd='say thanks\nseek 5 0\nseek 2 12\n'

[B.22] How do I print from WinBoard?

WinBoard does not have built-in printing functionality. If you want to print a picture of the board, press Alt+PrintScrn, run the standard Windows application Paintbrush, select Paste, and print from there. If you want to print a list of moves, save your game as a PGN file, then open the PGN file with Notepad or any other plain text editor and print it from there.

WinBoard 4.4 has a menu item "Save Diagram..." in the file menu, which saves the board part of the display as a Windows .bmp file, but only if the board size is not too big.


[B.23] Can I get Zippy to automatically reconnect to ICS when its connection breaks?

There isn't a perfect solution to this problem yet, but a pretty good one is to write a shell script (for xboard) or .bat script (for WinBoard) that automatically restarts the program whenever it exits. Use the -xexit flag so that you don't get a popup dialog that must be dismissed with the OK button before the program will exit. The gap in this solution is that your connection to ICS can sometimes get into a state where the program does not notice that the connection is broken until the next time it tries to send a command. Perhaps some future version of xboard/WinBoard will have an option to send a harmless command every five minutes or so.

Anyway, here is a sample Windows .bat file that restarts WinBoard each time it exits. Thanks to Jason Williamson. It assumes that you have put your computer account's name and password in a file named logon.ini.

REM --
REM -- wbrecon.bat
REM -- Start WinBoard in Zippy mode, and restart it each time it exits.
REM -- Add or change parameters as needed for your application.
REM --
:loop
start /w winboard /zp /ics /icslogon logon.ini /xexit /xautoraise
REM -- The next line is to have a short delay setup for 139 seconds.
REM -- Leave it out if it doesn't work on the version of Windows you use.
TYPE NUL | CHOICE.COM /N /CY /TY,99 >NUL
goto loop

Here is a Unix shell script to do the same thing for xboard. It's a bit more elaborate. It is based on the script I use for the original Zippy. It logs all ICS output to a file named zippy.out, and it lets you type commands to Zippy by running "cat > zippy.fifo".

#! /bin/sh
host="204.178.125.65 -icsport 5000 -telnet -telnetProgram timestamp"
#host="164.58.253.13 -icsport 5000 -telnet -telnetProgram timeseal"
out=zippy.out
fifo=zippy.fifo
ZIPPYPASSWORD='something'
export ZIPPYPASSWORD
ZIPPYPASSWORD2='orother'
export ZIPPYPASSWORD2
ZIPPYLINES=`pwd`/all.lines
export ZIPPYLINES
ZIPPYGAMEEND='say Yow, that was FUN!
gameend'
export ZIPPYGAMEEND
zippylogon=`pwd`/logon.ini
DISPLAY=`hostname`:0.0
export DISPLAY
mv -f $out ${out}.old
rm -f $fifo
mkfifo $fifo
pid=$$
( while [ true ] ; do cat -u $fifo ; done ) | \
      ( while [ true ] ; do
          xboard -iconic -ics -icshost $host \
                 -zt -zp -xbell -xanimate \
                 -xautosave -xquiet -fcp "gnuchessx -h" \
                 -icslogon $zippylogon -xexit -autoflag -xautoraise $*
          sleep 600
        done ) > $out 2>&1 &

[B.24] The chess engines are too strong and always beat me. How can I adjust the difficulty level to make them weaker?

The best way is to get a weaker chess engine. On the ChessWar website you will find a rating list of virtually all engines that are able to play under XBoard/WinBoard, from super-humanly strong to ridculously weak. Most of them can be downloaded for free from the internet.

A way to get that effect is to limit the time the engine can use for deciding on its move. The time-odds options or menu items in the time-control dialog) can be used to this end. This is only of limited help, as engines do not weeken that much at faster time-control, and there is a practical limit to how fast you can order the engine to go. Also feel free to use Retract Move if you make a blunder.

Many chess coaches will let you switch sides after they get a stronger position so that you can get experience playing positions where you are winning. You can try this with XBoard/WinBoard by using the Machine White or Machine Black menu command to make the machine take over your position.

The -depth command-line option to XBoard/WinBoard can also be used to weaken the engine (see the man page or Help file). It's a bit of a nuisance to set command line options in Windows, but see topic [C.7] for instructions.

Other ways of weakening engines are engine-specific. Many of them let you adjust various parameters, and if you choose bad settings, the engine will play more poorly. Consult whatever documentation came with the engine you are using.


[B.25] May I use the piece bitmaps from XBoard/WinBoard in my own program?

The piece bitmaps used in XBoard and WinBoard were designed by Elmar Bartel. He released them under the GNU General Public License. This means that if your program is also free software distributed under the GPL, you can use them freely. If your program is distributed under some other license, including commercial, shareware, or non-GPL freeware, then you cannot use the bitmaps unless you obtain special permission from Elmar. See the file README.bitmaps that comes with the XBoard and WinBoard source code for more information and an email address you can write to.


[B.26] How can I get rid of these silly logos that this new WinBoard displays above the board?

WinBoard 4.4.0 has an option /autoLogo, which makes is search for bitmap files to display as logo, in the engine directory or in the folder "logos". If you see logos without having asked for them, the settings in your winboard.ini file probably contains the line

/autoLogo=true

Just change that to /autoLogo=false. You can also achieve that by starting WinBoard through the startup dialog (from the start menu), and then tick "additional options" at the bottom, and type /autoLogo=false in the edit field, before pressing OK. If you then later select "Save Settings Now" from the Option menu, or when "Save Settings on Exit" is on, and you close WinBoard, this will automatically end up in your settings field.

When /autoLogo=false, logos will only be displayed if you explicitly ask for them, by running WinBoard with the option /firstLogo=FILENAME.bmp or /secondLogo=FILENAME.bmp. (Which will not be stored in the winboard.ini, but might of course be hidden somewhere in a settings file mentioned on the command line as @SETTINGSFILE.ini.)


[B.27] How can I install logos for other engines, Internet Chess Servers or Human users?

With the option /autoLogo=true, (which is remembered in your settings file), WinBoard automatically looks into the engine folder (specified by the /fd="..." or /sd="..." option), for a file called "logo.bmp". If it is found, it is used as a logo for the engine when it plays. So all you have to do is put a logo.bmp file there. Popular logo formats are 100x50 and 130x65; many engine logos are available from David Dahlem or Graham Banks

It is possible to overrule the /autoLogo by explicitly using a /firstLogo="FILENAME.bmp" or /secondLogo="FILENAME.bmp" with the engine on the engine line in the startup dialog. This is useful for engines that run with an adapter like Polyglot, when you have only one polyglot on your system, used by many engines. E.g. for Fruit the engine line to be typed in or selected from the combo box is

"polyglot fruit.ini" /firstLogo="D:\Engines\Fruit\logo.bmp" /fd="D:\Engines\Polyglot"
This prevents WinBoard looking for the logo in the Polyglot folder.

For Internet Chess Servers and Human users the logos should be in the "logos" sub-folder of the folder where WinBoard is installed. With /autoLogo=true, WinBoard would look for a logo file in that folder with the same name as the ICS, suffixed with .bmp (e.g. freechess.org.bmp) or the Human username (specified by the /userName="..." option or taken from the system), suffixed by .bmp, e.g. administrator.bmp)


[B.28] Is there readline/history support for the input in XBoard/Winboard?

There is a special ICS input box that has history support which is the standard in Winboard and can be used in XBoard too.

Another good tip from Michel van der Bergh is to use the rlwarp program together with XBoard which gives you full readline support. Just run "rlwrap xboard" instead of just "xboard". The rlwarp program should be available for most linux distributions or can be downloaded at: http://utopia.knoware.nl/~hlub/uck/rlwrap/.


[C] XBoard and WinBoard, bugs and problems


[C.1] I can't build XBoard because the X11/Xaw/... include files are not found.

These are the header files for the Athena Widgets library, which XBoard uses heavily. Some versions of Unix don't supply these files, but they are part of the standard X distribution, freely available from MIT.

For general information on getting missing X sources, see the FAQ on comp.windows.x. Note that you may be missing only the header files, or you may be missing the libraries themselves too.

HP-UX users are missing only the header files. You can get them by anonymous FTP as follows. (But first check with your system administrator to see if someone else at your site has already done this.) Get the archive file /hpux9/X11R5/Core/Xaw-5.00.tar.gz (Xaw header files) via anonymous FTP from the site hpux.csc.liv.ac.uk (138.253.42.172), or one of the other official sites---Germany: hpux.ask.uni-karlsruhe.de (129.13.200.57), US: hpux.cae.wisc.edu (144.92.4.15), France: hpux.cict.fr (192.70.79.53) or Netherlands: hpux.ced.tudelft.nl (130.161.140.100). Unpack the archive using gzip and follow the instructions in its README and/or HPUX.Install files. Thanks to Richard Lloyd for this information.

If you have the Xaw header files installed in a different place than the other X11 headers, you may need to configure XBoard with an extra flag to help it find them. For example, if yours are in /foo/bar/X11/Xaw, try this:

    rm config.cache
    (setenv CFLAGS -I/foo/bar ; configure)

Also see topic [C.2].


[C.2] Configuring or building XBoard fails due to missing header files, missing libraries, or undefined symbols.

Perhaps you have the X server and client programs installed on your machine, but not the X header files and link-time libraries. If so, you can run existing X programs, but you cannot compile a new X program from source code. In this case the XBoard configure script will fail and will tell you to look at this question in the FAQ. Many GNU/Linux distributions put the headers and libraries in a separate package, which you might not have installed. If you are using RedHat, install the XFree86-devel package. If you are using some other kind of Unix, ask your system administrator where to find the X header files and link-time libraries. If this is not your problem, read on.

The configure script for XBoard looks for X libraries and header files in some common places. Sometimes it fails: If yours are installed in an odd place, it may not find them at all. If you have more than one version of X installed on your system, it may find the "wrong" one, or occasionally it may find libraries from one version and incompatible header files from another. You can work around these problems by telling the configure script where the files are. For example:

    configure --x-includes=/odd/place/include \
              --x-libraries=/odd/place/lib

The directory named in the argument to --x-includes must have a subdirectory "X11" that contains the actual .h files. That is, if your X.h file has full pathname /odd/place/X11R6/include/X11/X.h, then you must give the argument --x-includes=/odd/place/X11R6/include.

Some linkers have bugs that cause bogus error messages when you try to link X programs. The configure script includes a workaround for a bug of this kind that exists in some SunOS 4.x.x installations. See the FAQ on comp.windows.x for more information about problems of this kind.

If all else fails, check whether anyone else at your site has been able to compile any X programs on your system. Your X installation might be buggy. If so, the system administrator at your site might know how to fix or work around the problem.

Also see topic [C.1].


[C.3] I have problems using WinBoard on ICS with a modem. I'm not running SLIP or PPP, but just dialing in to an ordinary login account ("shell account").

Here are solutions to some common problems in this area.

Some people want to connect to ICS through HyperTerminal or some other terminal program first, then run WinBoard. This is not how it works. WinBoard wants to talk directly with your modem, acting as a terminal program itself. Start out with the modem "on hook" (not making a call).

Run WinBoard with a command line like this (adding more options if desired):

    WinBoard /ics /icscom com1

Use com2, com3, or com4 in place of com1 if your modem is connected to one of those ports.

After you start WinBoard, you may need to change some of the options in the Communications dialog (on the Options menu). The dialog has the usual options for talking to modems: bits per second, bits per byte, parity, number of stop bits. You will probably want to use Save Settings Now when you're done.

Next, type dialing commands to your modem in the text window that WinBoard creates. You may need to turn off Local Line Editing on the Options menu while you are typing commands to your modem. Turn it back on when you're done. See the WinBoard Help file for instructions if you see your typing echoed an extra time after you hit Enter.


[C.4] I have problems using WinBoard on ICS with Windows 95 and SLIP or PPP. When trying to start up, it gets the error "Address family not supported by protocol family" (or some equally strange message).

WinBoard is a 32-bit application, but some Winsock (TCP/IP) implementations support only 16-bit applications. You get a strange looking error message if you try to use a 32-bit application because there is no standard Winsock error code number for "32-bit application not supported."

Microsoft TCP/IP works with both 16-bit and 32-bit applications, supports SLIP, PPP, Ethernet, etc., and is included with Windows 95 and later Windows systems. If possible, I recommend that you uninstall whatever Winsock you are using and install Microsoft TCP/IP instead. For more information, see http://walden.mo.net/~rymabry/95winfaq.html (the Win95-L FAQ).

Trumpet Winsock 2.1 (and earlier) supports only 16-bit applications, and hence does not work with WinBoard. But there is a beta-test release available that does support 32-bit applications. I have not tried it with WinBoard, but it should work. See Trumpet's Web page http://www.trumpet.com.au/wsk/winsock.htm for more information.

The 16-bit versions of America On-Line's software do not support 32-bit Winsock applications. Get the 32-bit version. At one time the 32-bit version was called "AOL for Windows 95," but I imagine that has changed. Hopefully the current versions are all 32-bit.

A few versions of Winsock may have bugs that prevent Windows timestamp/timeseal from working with them. I'm not sure if such bugs exist in any versions that actually have 32-bit support, so this point might be moot. Again, Microsoft TCP/IP is known to work.


[C.5] When I try to run WinBoard, I get the message "Failed to start chess program gnuchess on localhost: NO LANGFILE (file gnuchess.lan not found)".

This message means that WinBoard is trying to run GNU Chess, but GNU Chess cannot find a file that it needs, named gnuchess.lan. If you see it, you've probably customized WinBoard's /fcp, /fd, /scp, and/or /sd options and made a mistake in the process. Review what you did, and see the WinBoard help file.


[C.6] I want to use XBoard or WinBoard as an Internet Chess Server interface, but the ICS Client option is grayed out on the menu.

XBoard and WinBoard have three major modes that can't be changed from the menus: local chess engine mode, ICS mode, and standalone mode.

With XBoard, you have to set the mode using command-line options. Local chess engine mode is the default, -ics selects ICS mode, and -ncp ("no chess program") selects standalone mode.

With WinBoard, if you don't set the mode using command-line options, you get a dialog box asking which mode you want. To bypass the dialog box, use -cp ("chess program") for local chess engine mode, or -ics or -ncp as with XBoard. Also see topic [C.7].


[C.7] How do I give command-line options to a Windows program like WinBoard?

There are many ways; pick your favorite:

  • Type the command line into an MS-DOS Prompt box. Example: "WinBoard -ics".
  • Make a Windows shortcut for WinBoard. You can do this by right-dragging WinBoard.exe to the desktop and selecting "Create Shortcut(s) Here" from the menu that appears. Right-click on the shortcut, select Properties, and click the Shortcut tab. The command-line text box is labelled "Target" instead of "Command line" just to confuse you. Edit the text in this box, adding the command line options to the end.
  • Choose Run from the Start menu, or File / Run from the Program Manager or File Manager, and type the command line into the dialog you get. You may have to give WinBoard's full drivespec and filename if it is not in a directory on your search path.
  • Make a Program Manager icon for WinBoard. You can do this by dragging WinBoard.exe from the File Manager into the Program Manager, or by using File / New in the Program Manager. Select the icon and choose File / Properties. Edit the Command Line text box to add the command-line options to the end.

[C.9] When I exit from WinBoard after using it to play against a chess program on my machine, the chess program keeps running in the background.

Be sure you have the current versions of WinBoard and the chess engine you are using. WinBoard 3.4.1 and earlier had a bug that caused this problem to occur with all chess engines. A buggy chess engine that does not respond to the "quit" command will also cause this.

If you still see this problem, you can stop the rogue chess engine by pressing Ctrl+Alt+Del, selecting the chess engine process from the menu, and pressing the End Task button.


[C.12] Why do my ICS opponents often get extra time after they make their moves? Why do I sometimes lose time off my clock after I make my move?

If you are playing with the ICS incremental clock, both you and your opponent get a set amount of extra time after each move.

If your or your opponent has netlag, your opponent might appear to get extra time, especially if your opponent is using timestamp or timeseal. The ICS charges each player who is using timestamp or timeseal only for the time between when the player received his opponent's move and the time he sent his own move. Thus delays in network transmission do not count against either player. But WinBoard counts down the display of your opponent's clock on your screen under the assumption that there is no netlag. When his move comes in, if there was netlag, the ICS may not have really charged him for that much time, and WinBoard corrects the clock to what the ICS says it should read.

If you are not using timestamp or timeseal, you may appear to lose time off your clock at some point after you make your move. In this case, the ICS charges you for the time between when it sent you your opponent's move and the time it received your move. Thus delays in network transmission count against you. WinBoard stops counting down the display of your clock on your screen (and starts your opponent's) when you make your move. When the ICS echoes your move back to you, it may have charged you for more time than that, and WinBoard corrects the clocks to what the ICS says they should read.

See "help lag" and "help timestamp" or "help timeseal" on your ICS for more detailed information.


[C.13] I can't run WinBoard unless I delete the WinBoard.ini file each time!

Most people don't have this problem, but two or three people using Windows NT 4.0 with Service Pack 3 or 4 have reported it. I have no idea what causes this problem. Contrary to what was reported in a previous version of this FAQ, reinstalling the service pack after installing WinBoard does not seem to solve the problem.


[C.15] I get errors compiling XBoard's parser.c.

The file parser.c is automatically generated from parser.l. The copy included with XBoard 4.0.2 was generated by lex on Tru64 Unix and has problems compiling and linking on current GNU/Linux versions. The copy included with XBoard 4.0.3 was generated by flex on a GNU/Linux machine, but it too won't necessarily work on other versions of Unix. If you have this problem, you can fix it by deleting parser.c and letting the Makefile re-create it from parser.l. This will work if you have either lex or flex on your system. Flex is available in all GNU/Linux distributions and can be obtained at no charge from the Free Software Foundation, www.fsf.org.


[C.16] I get an error building WinBoard from source because "flex" is not found.

The file parser.c is automatically generated from parser.l. The Makefile included with the WinBoard source kit has a rule for generating parser.c using the program "flex", which will fail if you don't have flex. However, the source kit also includes a ready-made copy of parser.c, so you don't really need flex unless you have made changes to parser.l. Check that you still have a copy of parser.c; if you don't, unpack the WinBoard source zip file again to get one. Either set the last-modified time of parser.c to be later than that of parser.l, delete parser.l, or comment out the Makefile rule for building parser.c from parser.l, and then try building WinBoard again.

If you do want to change parser.l and rebuild parser.c, you can get flex as part of the free Cygwin kit from http://sourceware.cygnus.com/cygwin/. You can probably also get flex for Windows by itself from various other places around the Internet. It is free software distributed by the Free Software Foundation, www.fsf.org.


[C.17] XBoard hangs shortly after connecting to an ICS when used with dxterm, cmdtool, dtterm, kterm, konsole, or other substitutes for xterm.

After connecting to a chess server, XBoard 4.0.2 and later sends an escape sequence to its terminal that is meant to display your handle and the ICS host name (for example, "user@chessclub.com") in the terminal's banner and icon. It seems that several of the alternative X terminal programs have a bug that makes them hang when sent this escape sequence.

You can work around the problem by using xterm, nxterm, rxvt, aterm, xiterm, or gnome-terminal, all of which seem to work fine. In fact, current versions of kterm and konsole seem to work fine too, so if you are having problems with one of them, be sure you are not running an outdated version.

Alternatively, you can disable this feature by commenting out the body of DisplayIcsInteractionTitle in xboard.c and recompling xboard.


[C.18] The WinBoard pieces show up in the wrong colors, appear distorted, or are not visible at all.

This can happen if you have a bug in your Windows display driver. Check with the manufacturer of your display card, the manufacturer of your computer, or Microsoft to see if there is an updated driver available. You can usually download updated drivers from the Web.

If you can't find an updated driver, you can try running Windows using a different number of colors and/or disabling some of the hardware acceleration features on your display card. To change the number of colors, go to Windows Start / Settings / Control Panel / Display / Settings / Color Palette. To disable hardware acceleration features, go to Windows Start / Settings / Control Panel / Display / Settings / Advanced Properties / Performance / Hardware Acceleration.

It's also possible that Windows has the right driver for your hardware already but you are not using it. It may help to reinstall your driver. Go to Windows Start / Settings / Control Panel / System and delete your display card (maybe even your monitor too), then reboot. Windows should automatically re-detect your card and monitor and re-install the drivers; if it doesn't, run Start / Settings / Control Panel / Add New Hardware to force it to.

If all else fails, try Monochrome mode. On WinBoard's menus, go to Options / Color and check Monochrome. WinBoard will display in black and white.


[C.19] XBoard or WinBoard tells me "Error: first chess program (...) exited unexpectedly".

This message means that your chess engine crashed, probably due to a bug in the engine, or because you have it configured incorrectly. You can try running XBoard or WinBoard again with the "-debug" flag on the command line. This will print out all the messages received from the chess engine. (With WinBoard, the messages go into a file called WinBoard.debug; with XBoard, they go to the xterm that you started XBoard from.)

If you are using GNU Chess and you see this problem as soon as it starts up, most likely GNU Chess is exiting with an error message. If you see the message "NO LANGFILE", it means that you did not install GNU Chess correctly, and it is unable to find the file gnuchess.lang. Make sure that you defined LIBDIR in the gnuchess Makefile, and that gnuchess.lang is in that directory. If gnuchess.lang is not there, you probably didn't type "make install" in the gnuchess src directory; you must do this to install gnuchess.lang (and the gnuchess book). If you defined LIBDIR to something that is not an absolute pathname (that is, to something that does not start with a "/"), GNU Chess will work only if you run it from the GNU Chess "src" directory where you built it.


[C.20] XBoard tells me "Warning: Cannot allocate colormap entry", or "too few colors available; trying monochrome mode", or "XPM pieces cannot be used in monochrome mode".

You are running your X server with 8-bit color depth, and you are running some program that has used up all 256 of your colors. Netscape tends to do this, or maybe you have a background image that uses up all of your colors.

If you have a modern machine, you probably have enough display memory to run your X server with 16-, 24-, or 32-bit color depth. If you're using "startx" to start the X server, try giving the command as "startx -- -bpp 24" (or 16, or 32). On newer X servers you may have to use -depth instead of -bpp. Further details on configuring your X server are beyond the scope of this FAQ.

If you must run in 8-bit mode, try the following: Avoid background images that use up all your colors. If you run Netscape, try starting it up with the -install command-line option; this gives Netscape its own private colormap that X will switch to when Netscape has the keyboard focus.

If all else fails, another possibility is to run xboard in monochrome (black and white) mode by giving it the -mono command-line option. XBoard will try this by itself in some cases. Monochrome mode works only with bitmap pieces, not pixmap pieces, so trying to use it may give you the error "XPM pieces cannot be used in monochrome mode". To get around this, either use the -bitmapDirectory command line option to point XBoard to the directory containing the bitmap pieces included with the XBoard source code, or rebuild XBoard with pixmap support disabled, using "./configure --disable-xpm ; make clean ; make".


[C.21] When I log in to freechess.org, the Enter key doesn't work, and I have to use Ctrl+J instead. But when I use WinBoard, Ctrl+J doesn't work either, so I'm stuck.

This is a pretty rare problem. It should only arise if you have to reach freechess.org by telnetting (or connecting with WinBoard /icsport=23) from a Windows PC to a Unix box, and then telnetting from there to freechess.org. The Enter key should always work when connecting directly from your PC to freechess.org.

The best way to get around the problem is to run timeseal on the intermediate Unix box instead of telnet. Get the appropriate version of timeseal for your box from ftp.freechess.org and follow the directions in the help files on FICS.

If you can't run timeseal for some reason, there are some things you can do to make telnet stay in line mode instead of going to character mode. Then the Enter key will work. First, try "telnet freechess.org 5000" instead of "telnet freechess.org." If that still doesn't work, then when the Enter key stops working, type the following. Here < and > surround the names of keys.

    <Ctrl+S><Ctrl+]>mode line<Enter>

[C.22] XBoard says, "Failed to start first chess program fairymax on localhost: fairymax: No such file or directory."

XBoard is looking for the Fairy-Max chess engine. If you didn't want to use XBoard with Fairy-Max, please see topic [C.6]. If you did want to use Fairy-Max, be sure you have it installed and that it is on your $PATH. If you wanted to use GNU Chess instead, see topic [D.6].


[D] Crafty and other topics


[D.1] What is XChess?

XChess is an older chessboard program that is no longer supported. XChess was written for X version 10, and you may or may not be able to build and run it on an X11 system.

XChess has only one significant feature that is not present in XBoard: Two humans can play chess using XChess on different machines, without using the Internet Chess Server as an intermediary. This feature is of interest only if you don't have network connectivity to the Internet Chess Server.

Note: There actually have been several different programs called "XChess" in circulation at various times. The above describes one that was associated with GNU Chess.


[D.2] What is Winsock Chess?

Winsock Chess is a program that lets two people play chess across a network. It runs only under Microsoft Windows. Some of the code in Winsock Chess is derived from GNU Chess, but it is not maintained by the GNU Chess team. You can get a copy from the Internet Chess Library; see topic [A.2]. For more information, contact its author, Donald Munro, ccahdm@beluga.upe.ac.za.


[D.3] What is Crafty?

Crafty is a freely-available chess program written by Bob Hyatt. Bob is the main author of the well-known chess program Cray Blitz. Crafty is a very strong program, its code is available, commented and fairly readable, and its author is actively working on improvements.

You can download Crafty from ftp://ftp.cis.uab.edu/pub/hyatt/. Start by getting the read.me file and reading it. Among other things, this file contains instructions on how to install Crafty as a command-line application on your machine.

There is a Crafty mailing list. To subscribe, send email to majordomo@cis.uab.edu, with "subscribe crafty-list" in the body.


[D.4] How do I use Crafty with XBoard?

First, you need to get Crafty and install it as a command-line application on your machine. See topic [D.3].

To use Crafty with XBoard, give the -fcp parameter like this:

    xboard -fcp "./crafty" -fd crafty_directory

Here crafty_directory is the directory where you installed Crafty. You can add more xboard options at the end of the command line.

Crafty 15.14 or later is required to work properly with XBoard 4.0.0 or later. We generally recommend using the latest versions of both XBoard and Crafty.


[D.5] How do I use Crafty with WinBoard?

First, you need to get Crafty and install it as a command-line application on your machine. See topic [D.3]. It is best to use the latest version of Crafty with the latest version of WinBoard to make sure all features are compatible and function correctly. You can install Crafty in any directory you like.

You also need to get WinBoard and install it in the normal way using its built-in installer. You can do that either before or after you install Crafty.

After both Crafty and WinBoard are installed separately, follow the directions in the WinBoard Help file (included with WinBoard) for connecting new chess engines to WinBoard.

If you want to have Crafty act as an automated computer player on a chess server, see topic [B.16]. Before you try to get that working, be sure you can play against Crafty locally, first without WinBoard, then with it. Also be sure you can use WinBoard to play on the chess server yourself, without having Crafty connected to it. You have to crawl before you can walk!


[D.6] How do I use GNU Chess with XBoard?

By default, XBoard tries to use Fairy-Max by running the command "fairymax". That's why if you don't have Fairy-Max, you get the error message "Failed to start first chess program fairymax on localhost: fairymax: No such file or directory."

If you have GNU Chess 5, the command should be "gnuchess xboard" instead. To make XBoard use this command, give the -fcp parameter like this:

    xboard -fcp "gnuchess xboard" 
If you instaled GNU Chess as a package, the operating system usually knows where to find it, and GNU Chess knwos where to find its data files, such as the opening book. If GNU Chess is installed in a non-compliant way, e.g. together with its book file in a user directory, you must use:
    xboard -fd gnuchess_directory -fcp "./gnuchess xboard" 

Here gnuchess_directory is the directory where you installed GNU Chess 5 and its book. In all cases you can add more xboard options at the end of the command line.

If you want to use GNU Chess 4, the command should be "gnuchessx" instead. To make XBoard use this command, give the -fcp parameter like this:

    xboard -fcp "gnuchessx" 

The same applies for non-compliant installs as for GNU Chess 5: the install directory has to be given with the -fd argument.


[D.7] How do I use GNU Chess with WinBoard?

Well, why would you want to? If you want a strong free engine, use Crafty, Glaurung, Fruit or Toga. If you wnt an engine that plays many variants, use Fairy-Max, Pulsar or Sjeng. But the procedure to install and run those is not any different than for GNU Chess.

If you want to use a WinBoard-compatible chess engine that is not automatically installed with the download, you will have to download it yourself. Most chess engines are downloaded as a compressed archive (e.g. a .zip file), and on downloadig it, the decompression software on your Windows system is automatically invoked when you seected "Open" in the download dialog. You can then click "extract all files", and you are prompted for a place to put the unpacked stuff. The place it proposes is usually no good, so browse to the folder in which you installed the winBoard download (where you see the Fairy-Max and WinBoard folders).

When the archiv contained a single folder, (with files in it), unpack it there. If the archive contained a lot of small files, first create a folder, and browse there, before you unpack. (To get all the files in a single place, not mixed with others, so you can easily delete it again.) Say you unpacked in a folder named "NewEngine", which now sits next to your "WinBoard" folder amongst the chess files on your system. Say there is a file "Engine.exe" in this "NewEngine" folder.

Then to run the engine with WinBoard, you have to enter the command:

        winboard /fcp="Engine.exe" /fd="..\NewEngine"

Sometimes engines need parameters on their command line, e.g. to set the hash-table size, or tell them they have to deal with WinBoard. These should then go within the quotes around the Engine.exe file name, directly behind it, and separated from it (and each other) by spaces. See any README files that come with the engine to learn how exactly the engine has to be invoked.


[D.8] What is Fairy-Max?

Fairy-Max is a chess engine that plays chess at a level where you don't need to be a super GM to still have a chance to beat it. Apart from normal chess it plays many variants as well, such as Capablanca or Gothic Chess, Knightmate, etc. Dedicated versions of it are available to play Shatranj and Xiangqi (Chinese Chess).


[D.9] What is UCI? What is Polyglot?

UCI, or Universal Chess Interface, is a standard for communication between chess engines and its Graphical User Interface, that was created as an alternative to the way XBoard / WinBoard does it. (The latter way having become known as "WinBoard protocol"). XBoard / WinBoard do not understand a word of UCI, so UCI engines cannnot be run directly as engine under them.

Polyglot is an adapter that translates WB protocol to UCI. It bhaves like it is a WB engine, but, without XBoard / WinBoard knowing about this, it consults an UCI engine for getting the moves. With the aid of Polyglot, any UCI engine can be run under WinBoard. Polyglot is available as a Debian package for Linux, and is included in the WinBoard installation. Polyglot is open source software released under the GPL.


[D.10] How can I run a UCI engine under XBoard / WinBoard?

First you have to download and install the UCI engine. This is similar to installing WinBoard engines, see D.7. Furthermore, you have to make sure that Polyglot is nstalled on your system, in a place where XBoard / WinBoard can find it. There are then two ways to run the UCI engine:

In the first method, the only thing you have to do is add an extra option to the command that invokes XBoard / WinBoard, to tell it that the engine is UCI:

        xboard -fcp "fruit" -fUCI

        winboard /fcp="Fruit_21.exe" /fd="..\Fruit" /fUCI

The second method is more complicated, but also more versatile. UCI engines accept many settings from their GUI than XBoard / WinBoard usually send to a WB engine. Polyglot can provide such settings from a file dedicated to that engine, usully referred to as a "polyglot.ini" file (although the actual name can be different.) If the engine you downloaded comes with a polyglot.ini file for it, you can force Polyglot to use this file with engine settings by invoking it explicitly from XBoard / WinBoard:

        xboard -fcp "polyglot INIFILE"

        winboard /fcp="polyglot INIFILE" /fd="POLYGLOTDIR"

INIFILE is the name of the polyglot.ini file (possibly a path name, such as "PG\fruit.ini", while POLYGLOTDIR should be the directory (path) name were the Polyglot executable is located. The directory and name of the actual engine are described in the polygot.ini file, and XBoard / WinBoard need not be aware of them.

If you don't have a polyglot.ini file for the engine, you would have to make one. How to do that is beyond the scope of this FAQ. Refer to the Polyglot documentation for this, or use method 1.


** End of XBoard/WinBoard FAQ ** xboard-4.8.0/install-sh0000755000175000001440000001271112420374633011731 00000000000000#! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xboard-4.8.0/depcomp0000755000175000001440000005601612407335704011311 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xboard-4.8.0/cmail.in0000644000175000001440000020165112420374633011345 00000000000000#! @PERLPATH@ ## (configure will change the top line to the location of perl on your system) #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## cmail: a tool to aid playing chess by email ## Copyright (C) 1993,2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. ## ## cmail 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 3 of the License, or (at ## your option) any later version. ## ## cmail 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, see http://www.gnu.org/licenses/. * ## ## Email: evan@quadstone.co.uk ## Snailmail: Evan Welsh ## Quadstone Ltd ## 16 Chester Street ## Edinburgh EH3 7RA ## Scotland #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Print verbose diagnostics for debugging sub debug { if ($DEBUG) { local ($old) = select ; ## Remember selected output select (logfile) ; $| = 1 ; ## Keep it flushed print @_ ; ## Print arguments select ($old) ; } } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Create a directory for storing games in if it doesn't already exist sub need_chess_dir { local ($old) ; ## ################################################################# ## ## Check for existence of the named chess directory ## ################################################################# ## if (! (-d "$CMAILDIR")) { ## ############################################################# ## ## Ask user for confirmation if attached to tty ## ############################################################# ## if (-t) { $old = select ; ## Remember selected output select (stdout) ; ## Write to standard output $| = 1 ; ## Keep it flushed print ( "CMail directory \"$CMAILDIR\" does not exist." . " Create it? [y/q]: ") ; $_ = ; ## Read response from tty die "Bye!\n" if (/^[qQ].*/) ; ## Quit if q selected select ($old) ; ## Re-select the old output } ## ############################################################# ## ## Create a cmail directory or die ## ############################################################# ## die "cmail: Can't create CMail directory: \"$CMAILDIR\"\n" unless mkdir ("$CMAILDIR", 511) ; print ( "Created cmail directory \"$CMAILDIR\".\n" . "You can move it but remember to set the CMAIL_DIR" . " environment variable.\n") ; } ## ################################################################# ## ## Change to the $CMAILDIR directory whether newly created or not ## ################################################################# ## die "Couldn't changed directory to \"$CMAILDIR\"\n" unless (chdir "$CMAILDIR") ; ## ################################################################# ## ## Check for existence of the named chess directory ## ################################################################# ## if (! (-d "$ARCDIR")) { ## ############################################################# ## ## Ask user for confirmation if attached to tty ## ############################################################# ## if (-t) { $old = select ; ## Remember selected output select (stdout) ; ## Write to standard output $| = 1 ; ## Keep it flushed print ( "Archive directory \"$ARCDIR\" does not exist." . " Create it? [y/q]: ") ; $_ = ; ## Read response from tty die "Bye!\n" if (/^[qQ].*/) ; ## Quit if q selected select ($old) ; ## Re-select the old output } ## ############################################################# ## ## Create a chess directory or die ## ############################################################# ## die "cmail: Can't create archive directory: \"$ARCDIR\"\n" unless mkdir ("$ARCDIR", 511) ; print ( "Created archive directory \"$ARCDIR\".\n" . "You can move it but remember to set the CMAIL_ARCDIR" . " environment variable.\n") ; } } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Parse command-line arguments sub parse_flags { ## ################################################################# ## ## Set up defaults from the environment or from hard-wired constants ## ################################################################# ## $SHOWC = 0 ; $SHOWW = 0 ; $OUTPUT_POS = $ENV{'CMAIL_OUTPUT_POS'} ; $LOGFILE = $ENV{'CMAIL_LOGFILE'} ; $MAILPROG = $ENV{'CMAIL_MAILPROG'} ; $MAILPROG = "/usr/sbin/sendmail" if ( (-x "/usr/sbin/sendmail") && (! $MAILPROG)) ; $MAILPROG = "/usr/lib/sendmail" if ( (-x "/usr/lib/sendmail") && (! $MAILPROG)) ; $MAILPROG = "/etc/sendmail" if ( (-x "/usr/lib/sendmail") && (! $MAILPROG)) ; $MAILPROG = "/usr/ucb/Mail" if ( (-x "/usr/ucb/Mail") && (! $MAILPROG)) ; $MAILPROG = "/usr/ucb/mail" if ( (-x "/usr/ucb/mail") && (! $MAILPROG)) ; $MAILPROG = "Mail" unless ($MAILPROG) ; $HOMEDIR = $ENV{'HOME'} ; $CMAILDIR = $ENV{'CMAIL_DIR'} ; $CMAILDIR = $ENV{'CHESSDIR'} unless ($CMAILDIR) ; $CMAILDIR = "$HOMEDIR/Chess" unless ($CMAILDIR) ; $CMAILDIR = "~/Chess" unless ($HOMEDIR) ; $NUM_GAMES = "?" ; $NUM_WGAMES = "?" ; $NUM_BGAMES = "?" ; $TIME_DELAY = $ENV{'CMAIL_TIME_DELAY'} ; $TIME_DELAY = 0 unless ($TIME_DELAY) ; $PW_NAME = &get_pw_name () ; $MY_NNAME = $PW_NAME ; $MY_NNAME = $ENV{'LOGNAME'} unless ($MY_NNAME) ; $MY_NNAME = $ENV{'USER'} unless ($MY_NNAME) ; $MY_NNAME = "?" unless ($MY_NNAME) ; $PGN_EVENT = "Email correspondence game" ; $PGN_SITE = "NET"; $PGN_ROUND = "-"; $PGN_MODE = "EM"; $SEND_MAIL = 1 ; $REMAIL = 0 ; $LOAD_XBOARD = 1 unless $ENV{'CMAIL_NO_XBOARD'} ; $REUSE = 1 ; @TD_FLAGS = ("-td", $TIME_DELAY) ; @NCP_FLAGS = ("-ncp") ; ## ################################################################# ## ## Define the usage string ## ################################################################# ## $USAGE = ("cmail [-h] [-c] [-w] [-[x]v] [-[x]mail] [-[x]xboard] [-[x]reuse] [-remail] [-game ] [-(w|b|)games ] [-(me|opp) ] [-(w|b|my|opp)name ] [-(w|b|my|opp)na ] [-dir ] [-arcdir ] [-mailprog ] [-logFile ] [-event ] [-site ] [-round ] [-mode ]") ; ## ################################################################# ## ## Overwrite defaults if specified on the command-line ## ################################################################# ## @UNREC_ARGS = () ; while ($ARGV = shift) { $UNREC = 0 if ($ARGV =~ /^-/) ; if ("$ARGV" eq "-h") {die ("Usage: $USAGE\n") ;} elsif ("$ARGV" eq "-c") {$SHOWC = 1 ;} elsif ("$ARGV" eq "-w") {$SHOWW = 1 ;} elsif ("$ARGV" eq "-v") {$DEBUG = 1 ; @DEBUG_FLAGS = ("-debug") ;} elsif ("$ARGV" eq "-xv") {$DEBUG = 0 ; $QUIET = 1 ;} elsif ("$ARGV" eq "-mail") {$SEND_MAIL = 1 ;} elsif ("$ARGV" eq "-xmail") {$SEND_MAIL = 0 ;} elsif ("$ARGV" eq "-xboard") {$LOAD_XBOARD = 1 ;} elsif ("$ARGV" eq "-xxboard") {$LOAD_XBOARD = 0 ;} elsif ("$ARGV" eq "-reuse") {$REUSE = 1 ;} elsif ("$ARGV" eq "-xreuse") {$REUSE = 0 ;} elsif ("$ARGV" eq "-remail") {$LOAD_XBOARD = 0 ; $SEND_MAIL = 1 ; $REMAIL = 1 ;} elsif ("$ARGV" eq "-game") {$PGN_GAME = shift ;} elsif ("$ARGV" eq "-games") {$NUM_GAMES = shift ;} elsif ("$ARGV" eq "-wgames") {$NUM_WGAMES = shift ;} elsif ("$ARGV" eq "-bgames") {$NUM_BGAMES = shift ;} elsif ("$ARGV" eq "-me") {$MY_NNAME = shift ;} elsif ("$ARGV" eq "-opp") {$OPP_NNAME = shift ;} elsif ("$ARGV" eq "-myname") {$MY_FNAME = shift ;} elsif ("$ARGV" eq "-oppname") {$OPP_FNAME = shift ;} elsif ("$ARGV" eq "-wname") {$WHITE_FNAME = shift ;} elsif ("$ARGV" eq "-bname") {$BLACK_FNAME = shift ;} elsif ("$ARGV" eq "-myna") {$MY_ADDRESS = shift ;} elsif ("$ARGV" eq "-oppna") {$OPP_ADDRESS = shift ;} elsif ("$ARGV" eq "-wna") {$WHITENA = shift ;} elsif ("$ARGV" eq "-bna") {$BLACKNA = shift ;} elsif ("$ARGV" eq "-dir") {$CMAILDIR = shift ;} elsif ("$ARGV" eq "-arcdir") {$ARCDIR = shift ;} elsif ("$ARGV" eq "-mailprog") {$MAILPROG = shift ;} elsif ("$ARGV" eq "-logFile") {$LOGFILE = shift ;} elsif ("$ARGV" =~ /^-(td|timeDelay)$/) {@TD_FLAGS = ($ARGV, shift) ;} elsif ("$ARGV" =~ /^-noChessComputer$/) {@NCP_FLAGS = ($ARGV, shift) ;} elsif ("$ARGV" =~ /^-[x]?ncp$/) {@NCP_FLAGS = ($ARGV) ;} elsif ("$ARGV" eq "-event") {$PGN_EVENT = shift ;} elsif ("$ARGV" eq "-site") {$PGN_SITE = shift ;} elsif ("$ARGV" eq "-round") {$PGN_ROUND = shift ;} elsif ("$ARGV" eq "-mode") {$PGN_MODE = shift ;} elsif ("$ARGV" =~ /^-/ || $UNREC) { push(@UNREC_ARGS, $ARGV) ; $UNREC = 1 ; } else { die("cmail: Unrecognised flag \"$ARGV\"\nUsage: $USAGE\n") ; } } ## ################################################################# ## ## Assign a value to $ARCDIR if not specified on the command line ## ################################################################# ## $ARCDIR = $ENV{'CMAIL_ARCDIR'} unless ($ARCDIR) ; $ARCDIR = $CMAILDIR unless ($ARCDIR) ; $ENV{'CMAIL_ARCDIR'} = $ARCDIR ; ## Make sure this is set for xboard ## ################################################################# ## ## Propagate some CMAIL variables through xboard to the cmail ## grandchild so that it uses the same important variables as this one ## ################################################################# ## $ENV{'CMAIL_MAILPROG'} = $MAILPROG ; $ENV{'CMAIL_DIR'} = $CMAILDIR ; $ENV{'CHESSDIR'} = $CMAILDIR ; ## Make xboard use $CMAILDIR $ENV{'CMAIL_ARCDIR'} = $ARCDIR ; if ($LOGFILE) { $ENV{'CMAIL_LOGFILE'} = $LOGFILE ; } else { $LOGFILE = "&STDERR" ; } ## ################################################################# ## ## Work out how many games of each colour will be played ## ################################################################# ## die "cmail: Illegal number of games: $NUM_GAMES\n" if ($NUM_GAMES < 0) ; die "cmail: Illegal number of white games: $NUM_WGAMES\n" if ($NUM_WGAMES < 0) ; die "cmail: Illegal number of black games: $NUM_BGAMES\n" if ($NUM_BGAMES < 0) ; if ("$NUM_GAMES" ne "?") { if ("$NUM_WGAMES" eq "?") { if ("$NUM_BGAMES" eq "?") { $NUM_BGAMES = int($NUM_GAMES / 2) ; } $NUM_WGAMES = $NUM_GAMES - $NUM_BGAMES ; } elsif ("$NUM_BGAMES" eq "?") { $NUM_BGAMES = $NUM_GAMES - $NUM_WGAMES ; } } elsif ("$NUM_WGAMES" eq "?") { if ("$NUM_BGAMES" eq "?") { $NUM_GAMES = 1 ; $NUM_WGAMES = 1 ; $NUM_BGAMES = 0 ; } else { $NUM_GAMES = $NUM_BGAMES ; $NUM_WGAMES = 0 ; } } else { if ("$NUM_BGAMES" eq "?") { $NUM_GAMES = $NUM_WGAMES ; $NUM_BGAMES = 0 ; } else { $NUM_GAMES = $NUM_WGAMES + $NUM_BGAMES ; } } die "cmail: Illegal number of games: $NUM_GAMES\n" if ("$NUM_GAMES" eq "0") ; die ( "cmail: Inconsistent numbers of games specified:" . " $NUM_WGAMES + $NUM_BGAMES != $NUM_GAMES\n") unless ($NUM_GAMES == $NUM_WGAMES + $NUM_BGAMES) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Initialisation of variables and environment sub showGPL { ## ################################################################# ## ## Show copyright notice ## ################################################################# ## while () { last if (/^{END OF GPL COPYRIGHT}$/) ; s/\$Revision[:] (.*) \$/$1/ ; print ; } ## ################################################################# ## ## Show conditions if requested ## ################################################################# ## while () { last if (/^{END OF GPL CONDITIONS}$/) ; print if ($SHOWW) ; } ## ################################################################# ## ## Show warranty if requested ## ################################################################# ## if ($SHOWC) { print "\n" if ($SHOWW) ; print while () ; } exit 0 if ($SHOWC || $SHOWW) ; ## Abort if showed conditions or warranty } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Initialisation of variables and environment sub initialise { local ($p) = "[.PRNBQKprnbqk]" ; local ($l) = "$p $p $p $p $p $p $p $p\n" ; local ($board) = "$l$l$l$l$l$l$l$l" ; local ($tp) = ".* to play\n" ; $posdiag = "\{--------------\n$board$tp--------------\}\n+" ; &parse_flags (@ARGV) ; ## Parse command-line arguments &showGPL unless $QUIET ; open (tty, "< /dev/tty") ; ## Open tty for reading &need_chess_dir () ; ## Check for the existence of CMAILDIR open (logfile, ">$LOGFILE") if ($DEBUG) ; ## Default is STDERR &debug ("Called \n") ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Prompt for a game name, if use a default sub prompt_for_game_name { &debug ("Called \n") ; local ($old) = select ; ## Remember the selected output select (stdout); ## Prompt goes to stdout $| = 1 ; ## Keep it flushed print "Game name [ to use default]: " ; die "cmail: tty not open\n" unless (-t) ; =~ /(.*)/ ; ## Read line from tty $PGN_GAME = "$1" ; ## Assign to game name select ($old) ; ## Re-select the old output } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Prompt for opponent's address sub prompt_for_opp_address { &debug ("Called \n") ; local ($old) = select ; ## Remember the selected output select (stdout); ## Prompt goes to stdout $| = 1 ; ## Keep it flushed ## ################################################################# ## ## Prompt for opponent's email address ## ################################################################# ## print "Opponent's email address: " ; die "cmail: tty not open\n" unless (-t) ; =~ /(.*)/ ; $OPP_ADDRESS = $1 ; ## ################################################################# ## ## Use name as default if still blank ## ################################################################# ## $OPP_ADDRESS = $OPP_NNAME if ("" eq $OPP_ADDRESS) ; select ($old) ; ## Re-select the old output } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Prompt for opponent's name sub prompt_for_opp_name { &debug ("Called \n") ; local ($old) = select ; ## Remember the selected output select (stdout) ; ## Prompt goes to stdout $| = 1 ; ## Keep it flushed print "Opponent's name: " ; die "cmail: tty not open\n" unless (-t) ; ## Check tty is open =~ /(.*)/ ; ## Read line from tty $OPP_NNAME = $1 ; ## Match! die "cmail: Can't proceed without the opponent's name.\n" unless ($OPP_NNAME) ; select ($old) ; ## Re-select the old output } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Prompt for move sub prompt_for_move { local ($prompt) = shift ; local ($pattern) = shift ; &debug ("Called \n") ; local ($move) = "" ; local ($old) = select ; ## Remember the selected output select (stdout) ; ## Write to stdout $| = 1 ; ## Keep it flushed die "cmail: tty not open\n" unless (-t) ; ## Check tty is open do { print $prompt ; =~ /(.*)/ ; ## Read line from tty $move = $1 ; ## Match! } until ($move =~ /^$pattern$/) ; select ($old) ; ## Re-select the old output return ($move) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Load the game sub play_game { &debug ("Called \n") ; $| = 1 ; ## Start flushing output buffer ## ################################################################# ## ## Load xboard unless inhibited by command-line arguments ## ################################################################# ## if (($STARTING_NEW_GAME) && ($NUM_WGAMES == 0)) { print ( "Bypassing xboard and mailing $NUM_BGAMES empty" . " black games.\n") ; } elsif ($LOAD_XBOARD) { ## ############################################################# ## ## Remove output file from previous run, but preserve ## $PGN_GAME.game.out.* because they will be empty black games ## ############################################################# ## unlink "$PGN_GAME.out" ; ## ############################################################# ## ## Invoke xboard with loads of flags ## ############################################################# ## if ($PGN_GAME) { if (@ARCHIVE) { local ($date) = &get_date_from_games (@ARCHIVE) ; $XBOARD_ARGS = join (' ', (("-lgf", "'$ARCDIR/$PGN_GAME.$date.archive'"), @NCP_FLAGS, "-xics", @TD_FLAGS, @DEBUG_FLAGS, @UNREC_ARGS)) ; } else { $XBOARD_ARGS = join (' ', (("-cmail", "'$PGN_GAME'"), @TD_FLAGS, @NCP_FLAGS, "-xics", @DEBUG_FLAGS, @UNREC_ARGS)) ; } } else { $PGN_GAME = "unknown.cmail" ; $XBOARD_ARGS = join (' ', (("-lgf", "'$PGN_GAME'"), @NCP_FLAGS, "-xics", @TD_FLAGS, @DEBUG_FLAGS, @UNREC_ARGS)) ; $REUSE = 0 ; } $LOG_FILE = "$PGN_GAME.log" ; &debug ("Invoking xboard with args: $XBOARD_ARGS\n") ; $PID_FILE = "$PGN_GAME.pid" ; if ( (! $REUSE) || (! ( (-f $PID_FILE) && ($XBOARD_PID = `cat '$PID_FILE'`) && ("$XBOARD_PID" =~ /^\d+$/) && (kill "SIGUSR1", $XBOARD_PID)))) { print "Loading xboard for game \"$PGN_GAME\"..." ; # system ("gdb xboard") ; system ( "{ ({ xboard $XBOARD_ARGS & } ;" . " echo \$! > '$PID_FILE' ;" . " wait ;" . " rm '$PID_FILE') & } >'$LOG_FILE' 2>&1") ; print ( "done.\n" . "If nothing happens look for an error message in\n" . "$CMAILDIR/$LOG_FILE\n") ; } else { print ("Revived existing xboard for game \"$PGN_GAME\".\n" . "If nothing happens" . " remove $CMAILDIR/$PID_FILE and try again.\n") ; } return 1 ; } return 0 ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Enter moves on tty instead of xboard sub play_on_tty { &debug ("Called \n") ; local (@results) = @_ ; local (@games, $game, $to_play) ; ## ################################################################# ## ## Check we have access to tty ## ################################################################# ## if (open(STDIN, '/dev/tty')) { ## ############################################################# ## ## Read in games ## ############################################################# ## local ($infile) = "$PGN_GAME.game.in" ; if (-f $infile) { @games = &get_games_from_file($infile) ; &debug ("Read in games from \"$infile\"\n") ; if (@results) { foreach $game (@games) { $result = shift (@results) ; if ($result && ($game =~ /\[Result\s+"[^*]+"\]/)) { $game = "" ; } } } ## ################################################################# ## ## Accept move on tty for each game in turn ## ################################################################# ## local ($comment_orig, $comment, $comment_line, $pos, $move, $normal_move, $action, $result) ; foreach $game (@games) { next unless $game ; $game =~ s/[\s\n]*[*]?[\s\n]*$// ; $pos = "" ; $pos = $1 if ($game =~ s/($posdiag)//) ; print $game, "\n\n", $pos ; ($number, $to_play) = &get_to_play ($game) ; $comment_orig = "" ; $game_nocomment = $game ; if ($game_nocomment =~ s/\n?{\n?([^{]*)}$//) { $comment_orig = $1 ; $comment_orig =~ s/([^\n])$/$1\n/ ; # &debug ("Comment is:\n{\n$comment_orig}\n") ; } if ($game =~ /\[Result\s+"[^*]+"\]/) { &prompt_for_move ("Game finished, press \"Return\" to continue: ", "") ; next ; } $tmpgame = $game_nocomment ; $comment = $comment_orig ; outer: while (1) { if ($game =~ /{\n?.* offers a draw\n?}$/) { $move = &prompt_for_move ("Enter move [MOVE/(r)esign/(a)ccept/(c)omment/re(t)ry]: ", "([-a-h0-9PRNBQK][-a-h0-9PRNBQK]+|[ract])") ; } else { $move = &prompt_for_move ("Enter move [MOVE/(r)esign/(c)omment/re(t)ry]: ", "([-a-h0-9PRNBQK][-a-h0-9PRNBQK]+|[rct])") ; } $normal_move = 0 ; $result = "" ; if ($move =~ /^\s*r\s*$/i) { if ($to_play eq "White") { $result = "0-1" ; } else { $result = "1-0" ; } $move = "\n{$to_play resigns} $result" ; } elsif ($move =~ /^\s*a\s*$/i) { $move = "\n{Draw agreed} $result" ; } elsif ($move =~ /^\s*c\s*$/i) { while ($comment_line = &prompt_for_move ("Enter comment: ", ".*")) { $comment .= $comment_line . "\n" ; } next ; } elsif ($move =~ /^\s*t\s*$/i) { print $game, "\n\n", $pos ; $tmpgame = $game_nocomment ; $comment = $comment_orig ; print "Try again.\n" ; next ; } else { $normal_move = 1 ; } $tmpgame .= "\n{\n" . $comment . "}" if ($comment) ; if (! $normal_move) { $tmpgame .= "$move" ; } elsif ($to_play eq "White") { $tmpgame .= "\n$number. $move" ; } elsif ($tmpgame =~ /}$/) { $tmpgame .= "\n$number. ... $move" ; } else { $tmpgame .= " $move" ; } $tmpgame =~ s/\[Result\s+"(.*)"\]/[Result "$result"]/ if ($result) ; $comment = "" ; middle: while (1) { if ($normal_move) { $action = &prompt_for_move ("Enter action [(d)raw/(c)omment/(s)end/re(t)ry]: ", "[dcst]") ; } elsif ($result) { $action = &prompt_for_move ("Enter action [(s)end/re(t)ry]: ", "[st]") ; } else { $action = &prompt_for_move ("Enter action [(c)omment/(s)end/re(t)ry]: ", "[cst]") ; } if ($action =~ /^\s*d\s*$/i) { if ($normal_move) { $comment .= "$to_play offers a draw\n" ; while (1) { $action = &prompt_for_move ("Enter action [(c)omment/(s)end/re(t)ry]: ", "[cst]") ; if ($action =~ /^\s*c\s*$/i) { while ($comment_line = &prompt_for_move ("Enter comment: ", ".*")) { $comment .= $comment_line . "\n" ; } next ; } elsif ($action =~ /^\s*t\s*$/i) { print $game, "\n\n", $pos ; $tmpgame = $game_nocomment ; $comment = $comment_orig ; print "Try again.\n" ; next outer; } elsif ($action =~ /^\s*s\s*$/i) { $tmpgame .= "\n{\n" . $comment . "}" ; last middle ; } } } else { print "You can't offer a draw at this point.\n" ; next ; } } elsif ($action =~ /^\s*c\s*$/i) { if ($result) { print "You can't enter a comment after the game is finished.\n" ; } else { while ($comment_line = &prompt_for_move ("Enter comment: ", ".*")) { $comment .= $comment_line . "\n" ; } } next ; } elsif ($action =~ /^\s*t\s*$/i) { print $game, $pos ; $tmpgame = $game_nocomment ; $comment = $comment_orig ; print "Try again.\n" ; next outer; } elsif ($action =~ /^\s*s\s*$/i) { $tmpgame .= "\n{\n" . $comment . "}\n" if ($comment) ; last ; } } last ; } $tmpgame .= "\n*" if ($normal_move) ; $tmpgame .= "\n\n" ; $game = $tmpgame ; } } else { die "cmail: No games to be read\n" ; } } else { die "cmail: Can't open tty" ; } return (@games) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Find the game the user wants by any means possible sub find_game { &debug ("Called \n") ; ## ################################################################# ## ## Ask user for a game name if not already known ## ################################################################# ## &prompt_for_game_name () if ("" eq "$PGN_GAME") ; ## ################################################################# ## ## Find out opponent's details ## ################################################################# ## if ("" eq "$PGN_GAME") { ## ############################################################# ## ## Failed to find the game name so construct a default from players ## ############################################################# ## &prompt_for_opp_name () if ("" eq "$OPP_NNAME") ; ## Ask user die "cmail: Can't proceed without your opponent's short name (-opp)\n" if ("" eq "$OPP_NNAME") ; die "cmail: Can't proceed without your own short name (-me)\n" if ("" eq "$MY_NNAME") ; if ($NUM_WGAMES > 0) { $PGN_GAME = "$MY_NNAME-vs-$OPP_NNAME" ; ## Construct default } else { $PGN_GAME = "$OPP_NNAME-vs-$MY_NNAME" ; ## Construct default } } elsif (("" eq "$OPP_ADDRESS") && ("" ne "$RETURN_ADDRESS")) { $OPP_ADDRESS = $RETURN_ADDRESS ; ## Use return address instead &debug ( "Using return address \"$OPP_ADDRESS\"" . " for opponent address\n") ; } ## ################################################################# ## ## If no $PGN_GAME.game.in file, assume we're starting a new game ## ################################################################# ## &start_new_game () unless (-f "$PGN_GAME.game.in") ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get the date sub get_date { local ($the_time) = time ; local ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime ($the_time) ; $mon ++ ; $year += 1900 ; if ($mon < 10) { $mon = "0$mon" ; } if ($mday < 10) { $mday = "0$mday" ; } "$year.$mon.$mday" ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Start a new game sub start_new_game { print ( "Starting new game" . " -- $NUM_WGAMES as white, $NUM_BGAMES as black.\n") ; local ($to_play) = "white" ; $move_num = 0 ; $STARTING_NEW_GAME = 1 ; local (@game) ; ## ################################################################# ## ## Ask user for opponent's email address if unknown ## ################################################################# ## &prompt_for_opp_address () if ("" eq "$OPP_ADDRESS") ; ## ################################################################# ## ## Give up if we haven't got anywhere to send a move to ## ################################################################# ## die "cmail: Can't proceed without your opponent's email address.\n" if ("" eq "$OPP_ADDRESS") ; ## ################################################################# ## ## Create an empty game file ## ################################################################# ## open (GAMEFILE, "> $PGN_GAME.game.in") ; for ($j = 1; $j <= $NUM_GAMES; $j ++) { $PW_GCOS = &get_pw_gcos () ; $PGN_MYCOL = $MY_FNAME ; $PGN_MYCOL = $PW_GCOS unless $PGN_MYCOL ; $PGN_MYCOL = $MY_NNAME unless $PGN_MYCOL ; $PGN_MYCOLNA = $MY_ADDRESS ; $PGN_MYCOLNA = "?" unless ($PGN_MYCOLNA) ; $PGN_OPPCOL = $OPP_FNAME ; $PGN_OPPCOL = "?" unless ($PGN_OPPCOL) ; $PGN_OPPCOLNA = $OPP_ADDRESS ; $PGN_OPPCOLNA = "?" unless ($PGN_OPPCOLNA) ; if ($j > $NUM_WGAMES) { $PGN_WHITE = $PGN_OPPCOL ; $PGN_BLACK = $PGN_MYCOL ; $PGN_WHITENA = $PGN_OPPCOLNA ; $PGN_BLACKNA = $PGN_MYCOLNA ; } else { $PGN_WHITE = $PGN_MYCOL ; $PGN_BLACK = $PGN_OPPCOL ; $PGN_WHITENA = $PGN_MYCOLNA ; $PGN_BLACKNA = $PGN_OPPCOLNA ; } ## ######################################################### ## ## If we only have one colour of game then allow command-line ## colour specs to override ## ######################################################### ## if (! ($NUM_WGAMES && $NUM_BGAMES)) { $PGN_WHITE = $WHITE_FNAME if ($WHITE_FNAME) ; $PGN_BLACK = $BLACK_FNAME if ($BLACK_FNAME) ; $PGN_WHITENA = $WHITENA if ($WHITENA) ; $PGN_BLACKNA = $BLACKNA if ($BLACKNA) ; } $PGN_DATE = &get_date () ; $PGN_DATE = "?" unless ($PGN_DATE) ; if ($NUM_GAMES > 1) { $SUFFIX = ".$j" ; } else { $SUFFIX = "" ; } @game = ("[Event \"$PGN_EVENT\"]\n", "[Site \"$PGN_SITE\"]\n", "[Date \"$PGN_DATE\"]\n", "[Round \"$PGN_ROUND\"]\n", "[White \"$PGN_WHITE\"]\n", "[Black \"$PGN_BLACK\"]\n", "[Result \"*\"]\n", "[WhiteNA \"$PGN_WHITENA\"]\n", "[BlackNA \"$PGN_BLACKNA\"]\n", "[Mode \"$PGN_MODE\"]\n", "[CmailGameName \"$PGN_GAME$SUFFIX\"]\n\n*\n") ; if ($j > $NUM_WGAMES) { open (GAMEOUTFILE, "> $PGN_GAME.game.out.$j") ; print GAMEOUTFILE @game ; close (GAMEOUTFILE) ; } else { print GAMEFILE @game ; } } close (GAMEFILE) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get the password file gcos (full name) entry sub get_pw_entry { local ($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwuid ($<); ($name, $gcos) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get password file gcos (full name) entry sub get_pw_gcos { local ($PW_GCOS) ; if (! $PW_GCOS) { ($dummy, $PW_GCOS) = &get_pw_entry () ; $PW_GCOS =~ s/^\s*([^,()]+[^ ,()])[ ]*[,()].*$/$1/; if ($PW_GCOS =~ /^([^,()]+)\s+([^\s,()]+)$/) { ## Multi-word name $PW_GCOS = $2 . ", " . $1 ; } elsif ($PW_GCOS !~ /^([^\s,()]+)/) { ## No sensible gcos entry $PW_GCOS = "" ; } ## Else leave it as one word &debug ("PW full name is \"$PW_GCOS\"\n"); } return $PW_GCOS ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get password file user name entry sub get_pw_name { local ($PW_NAME) ; ($PW_NAME, $dummy) = &get_pw_entry () ; &debug ("PW name is $PW_NAME\n"); return $PW_NAME ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Analyse the email message sub analyse_email_message { local ($new_result, $delete_result, $unfinished, $finished) = (0, 0, 0, 0) ; local ($gamefile, @games) ; ## ################################################################# ## ## Slurp the mail message ## ################################################################# ## die "cmail: No games on standard input" unless (@games = &get_games_from_file ("STDIN")) ; ## ################################################################# ## ## Is the message a real cmail message or just a chess game? $PGN_GAME ## will have been set by calling get_games_from_file if it's real ## ################################################################# ## print "Processing game message..." ; if ($PGN_GAME) { ## ############################################################# ## ## Restore the results file from the archive if ## necessary. This is helpful if the user pipes in an old ## message for take-back purposes or whatever. ## ############################################################# ## if (! -f "$PGN_GAME.res") { ## Find what date would have been used to create the archive foreach (@games) { if (/\[Date\s"(.*)"\]/) { $date = $1 ; last ; ## Assume all dates are the same } } ## Restore results file from archive directory if it exists if ($date && (-f "$ARCDIR/$PGN_GAME.$date.archive")) { if (system ("cp", "$ARCDIR/$PGN_GAME.$date.archive", "$PGN_GAME.res")) { print stderr ( "\nWarning: couldn't restore results file" . " from archive\n") ; } else { print "restored results file from archive..." ; } } } ## ############################################################# ## ## Find existing results, if any. ## ############################################################# ## local (@results) = &get_games_from_file ("$PGN_GAME.res") ; ## ############################################################# ## ## Parse each game ## ############################################################# ## foreach $game (@games) { next unless ($game) ; ($game_name, $game_num) = &get_game_name_and_number ($game) ; $result = 0 ; @game = split("\n", $game) ; foreach (@game) { if (/^\[(Black|White)\s*"[?]"\]$/) { $colour = $1; $PW_GCOS = &get_pw_gcos () unless ($PW_GCOS) ; $PW_GCOS = "$MY_NNAME" unless ($PW_GCOS) ; s/".*"/"$PW_GCOS"/ ; &debug ("Changed $colour tag to be $_") ; } elsif (/^\[((Black|White)NA)\s*"(.*)"\]$/) { $NA = $3 ; if ($NA eq "?") { if ($RETURN_ADDRESS) { $NA = $RETURN_ADDRESS ; } else { $NA = "??" ; } $_ = "[$1 \"$NA\"]" ; &debug ("Changed $1 tag.\n") ; } if ($2 eq "White") { $PGN_WHITENA = $NA ; &debug ("WhiteNA tag is \"$PGN_WHITENA\"\n") ; } else { $PGN_BLACKNA = $NA ; &debug ("BlackNA tag is \"$PGN_BLACKNA\"\n") ; } } elsif (/\[Result\s*"(.*)"\]$/) { if ($1 ne "*") { $result = 1 ; $finished ++ ; } else { $unfinished ++ ; } } elsif (/^(.*[^\d]+)?\d+[.]\s*([^\s*]*\s+)?[^\s.*]+(\s*\d+[.]\s*)?[\s*]*$/) { if ($2) { $to_play = "white" ; } else { $to_play = "black" ; } &debug ("$to_play to play\n") ; } } ## ######################################################### ## ## Reconstruct possibly edited game ## ######################################################### ## $game = join ("\n", @game) . "\n\n" ; ## ######################################################### ## ## Build up results array ## ######################################################### ## if ($result) { $results[$game_num] = $games[$game_num] ; $new_result = 1 ; } elsif ($results[$game_num]) { ## Deleting a result does actually make sense if the user ## pipes in an old message for take-back purposes or whatever $results[$game_num] = "" ; $delete_result = 1 ; } ## ######################################################### ## ## Remove old .out files ## ######################################################### ## unlink <$PGN_GAME.game.out.*> ; ## ######################################################### ## ## Write ongoing games to game file and append new results ## ######################################################### ## die "cmail: Can't open file for writing:" . " \"$CMAILDIR/$PGN_GAME.game.in\"\n" unless open (gamefile, ">$PGN_GAME.game.in") ; &debug (@games) ; print gamefile @games ; close (gamefile) ; } ## ############################################################# ## ## Print how many finished/unfinished games were found ## ############################################################# ## printf ("%d unfinished %s and %d finished %s...", $unfinished, ($unfinished == 1) ? "game" : "games", $finished, ($finished == 1) ? "game" : "games") ; ## ############################################################# ## ## Write results back to results file if there were any results ## in the input ## ############################################################# ## if ($new_result || $delete_result) { die ( "cmail: Can't open results file for writing:" . "\"$CMAILDIR/$PGN_GAME.res\"\n") unless open (resfile, ">$PGN_GAME.res") ; print resfile @results ; close (resfile) ; } ## ############################################################# ## ## Archive results if there are no unfinished games ## ############################################################# ## @ARCHIVE = @results unless ($unfinished) ; ## ############################################################# ## ## Figure out return address if not known ## ############################################################# ## if (! $RETURN_ADDRESS) { if ($to_play eq "black") { $RETURN_ADDRESS = $PGN_WHITENA unless ("$PGN_WHITENA" eq "?") ; } else { $RETURN_ADDRESS = $PGN_BLACKNA unless ("$PGN_BLACKNA" eq "?") ; } } ## ############################################################# ## ## Decide to include position diagrams in output if not already ## decided and a position diagram was found in the input ## ############################################################# ## if ("$OUTPUT_POS" eq "") { if (grep (/$posdiag/, @games)) { $OUTPUT_POS = "y" ; # Output position only if it was input } else { $OUTPUT_POS = "n" ; } } $ENV{'CMAIL_OUTPUT_POS'} = $OUTPUT_POS ; ## ############################################################# ## ## Check that we have enough info about the players to continue ## ############################################################# ## &find_game () ; } else { ## ############################################################# ## ## Set up xboard for viewing non-cmail PGN file ## ############################################################# ## local ($file) = "unknown.cmail" ; print "done.\nDumping non-cmail file into $CMAILDIR/$file..." ; die "cmail: Can't open file for writing: \"$CMAILDIR/$file\"\n" unless open (gamefile, ">$file") ; print gamefile @games ; close (gamefile) ; } print "done.\n" ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Sort two filenames by the numeric suffix sub sort_by_numeric_suffix { $a =~ /[.](\d+)$/ ; local ($na) = $1 ; $b =~ /[.](\d+)$/ ; local ($nb) = $1 ; return ($na <=> $nb) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# sub get_game_name_and_number { local ($game) = join ("\n", @_) ; local ($game_name, $game_num) ; die "CMailGameName tag missing\n" unless ($game =~ /\[C[Mm]ailGameName\s+"(.*)"\]/) ; ## ################################################################# ## ## Set game name and number ## ################################################################# ## $game_name = $1 ; if ($game_name =~ s/^(.*)[.](\d+)$/$1/) { $game_num = $2 ; } else { $game_num = 1 ; } ## ################################################################# ## ## Set $PGN_GAME as a side-effect or check validity ## ################################################################# ## if ($PGN_GAME) { die ( "cmail: Mismatched game names in input message:\n" . "\"$PGN_GAME\", \"$game_name\"\n") if ("$PGN_GAME" ne "$game_name") ; } else { $PGN_GAME = $game_name ; &debug ("PGN_GAME set to \"$PGN_GAME\"\n") ; } return ($game_name, $game_num) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Read in a file of games and split into separate games sub get_games_from_file { local ($file) = shift ; local (@file, $first_line) ; ## Slurp stdin if ($file eq "STDIN") { if ($first_line = ) { ## Necessary to handle no input case @file = ; ## Slurp stdin @file = ($first_line, @file) ; foreach (@file) { ## Strip off leading quotation characters s/^[^\s]*>// ; s/^[ \t]+// ; ## Find return address and set it as a side-effect if ( /^From:?.*<([^>]+)>.*\n$/ || /^From:? *([^ ]*).*\n$/) { $RETURN_ADDRESS = $1 ; ## Default for opp's email &debug ("Found opponent's email address", " \"$RETURN_ADDRESS\"\n") ; } elsif (/\[C[Mm]ailGameName\s+"(.*)"\]/) { $PGN_GAME = $1 ; $PGN_GAME =~ s/[.]\d+$// ; } } return (@file) unless ($PGN_GAME) ; if (grep (/\{--------------|\[Event/, @file)) { shift (@file) while ($file[0] !~ /\{--------------|\[Event/) ; } } else { return () ; } } else { return () unless (open (file, "<$file")) ; @file = ; ## Slurp file close (file) ; } local (@games, $game_name, $game_num, $game, $tag) ; ## ################################################################# ## ## Remove headers and leading blanks ## ################################################################# ## local (@tgames) = split (/($posdiag\[Event|\[Event)/, join ('', @file)) ; shift (@tgames) while (!$tgames[0]) ; ## ################################################################# ## ## Set up @games array with proper game numbers ## ################################################################# ## while (@tgames) { $game = shift (@tgames) . shift (@tgames) ; ($game_name, $game_num) = &get_game_name_and_number ($game) ; $games[$game_num] = $game ; } return (@games) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Analyse output files and send the move sub send_move { &debug ("Called \n") ; ## ################################################################# ## ## Cat the pos (if it exists), game and result (if it exists) files ## into the .out file. ## ################################################################# ## local ($unfinished, $finished) = (0, 0) ; local (@results, $move, $move_msg, $to_play, $number) ; ## ################################################################# ## ## Find any .game.out.* files ## ################################################################# ## local (@outfiles) = (<$PGN_GAME.game.out.*>) ; @outfiles = grep (/[.]\d+$/, @outfiles) ; ## Ignore autosave files @outfiles = sort sort_by_numeric_suffix @outfiles ; ## Sort ## ################################################################# ## ## Find .res file if it exists ## ################################################################# ## local ($resfile) = "$PGN_GAME.res" ; if (-f $resfile) { @results = &get_games_from_file($resfile) ; &debug ("Read in results\n") ; } else { @results = () ; &debug ("No results to read\n") ; } ## ################################################################# ## ## Find .out file if it exists ## ################################################################# ## local ($outfile) = "$PGN_GAME.out" ; if (! ($REMAIL || $LOAD_XBOARD)) { @games = &play_on_tty (@results) ; } elsif (@outfiles) { foreach (@outfiles) { die "Can't open game file \"$_\" for reading" unless (open (game, "<$_")) ; die "Empty game file \"$_\"" unless ($game = join ('', )) ; close (game) ; &debug ("Read in game file \"$_\"\n") ; ## Remove position diagram if it wasn't in the input msg $game =~ s/($posdiag)// if ("$OUTPUT_POS" ne "y") ; ($game_name, $game_num) = &get_game_name_and_number ($game) ; $games[$game_num] = $game ; } &debug ("Read in games from output files\n") ; $games[0] = "" ; } else { &debug ("No games to read from STDIN\n") ; if (-f $outfile) { @games = &get_games_from_file($outfile) ; } else { die "Can't find any game files\n" unless (@results) ; } } ## ################################################################# ## ## Process games ## ################################################################# ## if (@games) { ## ############################################################# ## ## Find opponent's email address in games ## ############################################################# ## $OPP_ADDRESS = &get_opp_address_from_games (@games) unless ($OPP_ADDRESS) ; ## ############################################################# ## ## Collect the .game.out.* files into the .out file, remembering ## the move number of the last line and whether result or not ## ############################################################# ## $unfinished = 0 ; $move_num = 0 ; $move = blank ; ## Write games to output file die "Can't open output file \"$PGN_GAME.out\" for writing\n" unless open (outfile, ">$PGN_GAME.out") ; print outfile @games ; close (outfile) ; $game_num = -1 ; $num_games = 0 ; foreach $game (@games) { $game_num ++ ; next unless ($game) ; $num_games ++ ; ## Determine last move and whether result or not $result = 0 ; foreach (split(/\n/, $game)) { if (/^(.*[^\d]+|)(\d+)[.]+\s*[^\s.]*\s+(\S+)\s*$/) { $move_num = $2 ; $move = $3 ; } elsif (/^\[Result\s*"(.*)"\]$/) { if ($1 ne "*") { $result = 1 ; $finished ++ ; } else { $unfinished ++ ; } } } $results[$game_num] = $game if ($result) ; } ## Write result files back to $PGN_GAME.res if (@results) { die "Can't open results file $PGN_GAME.res for writing\n" unless open (resfile, ">$PGN_GAME.res") ; print resfile @results ; close (results) ; } unlink <$PGN_GAME.game.out.*> ; ## ############################################################# ## ## Just say how many games are in the message ## ############################################################# ## if ($num_games > 1) { $move_msg = "$num_games games" ; } else { $move_msg = "1 game" ; } ## ############################################################# ## ## Print how many finished/unfinished games were found ## ############################################################# ## printf ("Sending %d unfinished %s and %d finished %s.\n", $unfinished, ($unfinished == 1) ? "game" : "games", $finished, ($finished == 1) ? "game" : "games") ; ## ############################################################# ## ## Send the mail message to opponent's address unless bypassed ## ############################################################# ## if ($SEND_MAIL) { local ($subject) = "cmail $move_msg <$PGN_GAME>" ; if ($MAILPROG =~ /sendmail/) { $opened = open (mail, "|$MAILPROG $OPP_ADDRESS") ; print mail "To: $OPP_ADDRESS\n"; print mail "Subject: $subject\n"; print mail "Mime-Version: 1.0\n"; print mail "Content-Type: application/x-chess;name=$PGN_GAME.pgn\n\n"; } else { $opened = open (mail, "|$MAILPROG -s \"$subject\" $OPP_ADDRESS") ; } if ($opened) { print mail @games ; close (mail) ; print ( "Mailed cmail message to \"$OPP_ADDRESS\":\n" . "$move_msg <$PGN_GAME>\n") ; @ARCHIVE = @results unless ($unfinished) ; } else { die "Failed to mail cmail message.\n" ; } } else { print ( "Email not sent (as requested).\n" . "Would have mailed cmail message to \"$OPP_ADDRESS\":\n" . "$NUM_GAMES games <$PGN_GAME>\n") ; } } else { if (@results) { print "Email not sent (the game is over).\n" ; } else { die "No games found\n" ; } } } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get date from array of games sub get_date_from_games { local (@games) = @_ ; local ($date) = "nodate" ; foreach (@games) { if (/\[Date\s"(.*)"\]/) { $date = $1 ; last ; ## Assume all dates are the same } } return ($date) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Determine which colour is to play and the move number sub get_to_play { &debug ("Called \n") ; local ($game) = shift ; local ($number, $to_play) = (1, "White") ; $game =~ s/{[^}]*}//g ; $game =~ s/[\s\n]*[*][\s\n]*$// ; if ($game =~ /(\d+)[.][\n ]*([.]*)[\n ]*([^\n.]*)[\n\s]*[10-]*[\n\s]*$/) { $number = $1 ; if ($game =~ /\[Result "0-1"\]/) { $to_play = "Black" ; } elsif ($game =~ /\[Result "1-0"\]/) { $to_play = "White" ; } elsif (($2 ne "") || (($3 =~ / /) || ($3 eq ""))) { $to_play = "White" ; $number ++ ; } else { $to_play = "Black" ; } } &debug ("$to_play to play on move $number\n") ; return ($number, $to_play) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Get opp address from array of games sub get_opp_address_from_games { &debug ("Called \n") ; local (@games) = @_ ; local ($opp_address) = "" ; local ($number, $to_play, $tag) ; foreach (@games) { next unless $_ ; ($number, $to_play) = &get_to_play ($_) ; $tag = ( ($to_play eq "White") ? "WhiteNA" : "BlackNA") ; if (/\[$tag\s"(.*)"\]/) { $opp_address = $1 ; die "cmail: Empty \"$tag\" tag\n" unless ($opp_address) ; &debug ("Found opponent's address \"$opp_address\" from games.\n") ; last ; ## Assume all opp addresses are the same } else { die "cmail: Can't find \"$tag\" tag\n" ; } } die "cmail: Can't find opponent's email address\n" unless ($opp_address) ; return ($opp_address) ; } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Archive @ARCHIVE in the $ARCDIR directory sub archive { return () unless (@ARCHIVE) ; local ($date) = &get_date_from_games (@ARCHIVE) ; local ($file) = "$ARCDIR/$PGN_GAME.$date.archive" ; if (open (archive, ">$file")) { print archive @ARCHIVE ; close (archive) ; print "Archived game in $file\n" ; local (@remove) = <$PGN_GAME*> ; @remove = grep ($_ ne "$PGN_GAME.$date.archive", @remove) ; ## Don't delete archive unlink (@remove) ; } else { print "Couldn't open \"$file\" to archive game\n" ; } } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# ## Main body sub main { local (@games) = () ; &initialise () ; ## Initialise variables etc. if (-t || $REMAIL) { ## No input directed (invoked from a shell rather than a mailer) &debug ("Interactive!\n") ; &find_game () ; ## Get the necessary info about the game } else { &debug ("Piping!\n") ; &analyse_email_message () ; ## Analyse the mail message } if (! &play_game ()) { ## Load the game &send_move () ; ## Analyse output and send moves } &archive () ; ## Archive games if all finished close (tty) ; ## Tidy up close (logfile) if ($DEBUG) ; ## Tidy up } #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# &main () ; #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# __END__ cmail (From XBoard version @PACKAGE_VERSION@), Copyright (C) 1993 Free Software Foundation, Inc. cmail comes with ABSOLUTELY NO WARRANTY; for details type `cmail -w'. cmail is free software, and you are welcome to redistribute it under certain conditions; type `cmail -c' for details. {END OF GPL COPYRIGHT} 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. {END OF GPL CONDITIONS} GNU GENERAL PUBLIC LICENSE 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. xboard-4.8.0/ics-parsing.txt0000644000175000001440000001325612420374633012712 00000000000000Parsing of ICS Output Updated to match xboard/WinBoard 4.0.2 ============================================================================== This document describes how xboard and WinBoard parse ICS output. The general parsing method is to compare a list of patterns against the current line (whether partial or complete) each time new input is received from ICS. The patterns are considered in a fixed order. The pattern matching is not "anchored", so unmatched text at the beginning of a line (including the prompt, usually) is skipped. Whenever a pattern is matched, the characters are "consumed" and matching begins again with the next unmatched character, starting at the top of the list. The last pattern is "\n", causing characters up to a newline to be discarded if they have not matched any patterns. The pattern language is very simple. Every character but "*" must match literally. "*" matches zero or more characters that don't include a newline and don't match the character immediately following the *, if any. A "*" at the end of a pattern will not match until a complete line is received This method of pattern matching is rather fragile. The patterns have to be chosen quite carefully to avoid unexpected results. For example, at one time "* shouts: *" was used to match shouts, while "<12>" was used to match the start of a board. If someone shouted "<12>", xboard would succeed in ignoring the <12> only if all the characters from the ">" to the next newline were received at one time, so that the shout pattern could match before the start-of-board pattern was considered. (This usually happens on TCP connections, but is not guaranteed.) The patterns intentionally allow text in finger notes to be parsed and colorized as tells, shouts, etc. I did this because Zek once said that ZIICS users like this feature, even though he originally considered it a bug in ZIICS, and so he doesn't dare change it. I may eventually change it anyway so that people stop reporting it as a bug. Here is the complete list of patterns that xboard looks for, in order. The list was obtained by grepping the source code for "looking_at", my procedure for pattern-matching. Some of these are specific to FICS, some to ICC, and some may be outdated---that is, they may reflect messages that no ICS produces anymore. Occasionally the same pattern appears more than once because earlier occurrences were inside if/then/else statements. There may also be a couple of places where I do a test without calling looking_at. zippy.c (runs first if Zippy is active, otherwise skipped): "* kibitzes: Hello from Crafty" "* is in the computer list." "* * is a computer *" "* offers to be your bughouse partner" "* tells you: [automatic message] I chose you" "* agrees to be your partner" "are no longer *'s partner" "no longer have a bughouse partner" "partner has disconnected" "partner has just chosen a new partner" "* tells you: [automatic message] I'm no longer your" "* (your partner) tells you: *" "* tells you: *" "* says: *" "--> * *" "* shouts: *" "* kibitzes: *" "* whispers: *" "You have * message*." "* has left a message for you." "* just sent you a message." "--* (*:*): *" "*. * (*:*): *" "*. * at *:*: *" "*(*): *" "*(*)(*): *" "Notification: * has arrived" "Not sent -- * is censoring you" "command is currently turned off" "* * match * * requested with * (*)" "* * match * requested with * (*)" * has made an alternate proposal of * * match * *." "Challenge: * (*) *(*) * * * * Loaded from *" "Challenge: * (*) *(*) * * * * : * * Loaded from *" "Challenge: * (*) *(*) * * * * : * *" "Challenge: * (*) *(*) * * * * * *" "Challenge: * (*) *(*) * * * *" "offers you a draw" "requests that the game be aborted" "would like to abort" "requests adjournment" "would like to adjourn" backend.c: "ics%" /* right after login only; nonessential */ "chessclub.com" /* before login; turns on ICC mode */ "\"*\" is *a registered name" "Logging you in as \"*\"" "Your name will be \"*\"" "* s-shouts: " "* c-shouts: " "--->" /* seen in FICS login, not a shout */ "* shouts: " "--> " "* tells you: " "* (your partner) tells you: " "* says: " "* has left a message " "* just sent you a message:\n" "*. * (*:*): " "*. * at *:*: " "* whispers: " "* kibitzes: " "*)(*): *" /* channel tell or allobs or admin comment */ "*(*): *" /* channel tell or allobs or admin comment */ "*)(*)(*): *" /* channel tell */ "Challenge:" "* offers you" "* offers to be" "* would like to" "* requests to" "Your opponent offers" "Your opponent requests" "\\ " /* continuation line */ "Black Strength :" /* need to issue "style 12; refresh" */ "<<< style 10 board >>>" /* need to issue "style 12; refresh" */ "<10>" /* need to issue "style 12; refresh" */ "#@#" /* need to issue "style 12; refresh" */ "login:" "\n<12> " "<12> " "\n " " " "* *vs. * *--- *" /* move list coming */ "* * match, initial time: * minute*, increment: * second" "Move " /* move list is here */ "% " /* end of prompt; nonessential */ "}*" /* ends a move list */ "Adding game * to observation list" "Game notification: * (*) vs. * (*)" "Entering examine mode for game *" "has made you an examiner of game *" "Illegal move" "Not a legal move" "Your king is in check" "It isn't your turn" "It is not your move" "still have time" "not out of time" "either player is out of time" "has timeseal; checking" "added * seconds to" "seconds were added to" "clock paused" "clock resumed" "Creating: * (*)* * (*)" "Creating: * (*) [*] * (*)" "{Game * (* vs. *) *}*" "Removing game * from observation" "no longer observing game *" "Game * (*) has no examiners" "no longer examining game *" "\n" "*% " /* end of prompt; nonessential */ xboard-4.8.0/draw.h0000644000175000001440000000630712421746612011040 00000000000000/* * draw.h -- declarations shared between xboard.c and draw.c * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #define DRAWABLE(X) ((cairo_surface_t *) ((X)->choice)) // defined in xboard.c void ResizeBoardWindow P((int w, int h, int inhibit)); void CreateGrid P((void)); void CreateGCs P((int redo)); void DelayedDrag P((void)); extern int lineGap, squareSize; // defined in draw.c void CreateGCs P((int redo)); void CreateAnyPieces P((int p)); void CreatePNGPieces P((void)); void CreateGrid P((void)); void DrawSegment P((int x, int y, int *lastX, int *lastY, int p)); void DrawRectangle P((int left, int top, int right, int bottom, int side, int style)); void DrawEvalText P((char *buf, int cbBuf, int y)); extern Option *disp; extern char svgDir[]; // defined in evaldraw.c float Color P((char *col, int n)); // defined in xoptions.c void GraphExpose P((Option *opt, int x, int y, int w, int h)); xboard-4.8.0/evalgraph.c0000644000175000001440000002434212421746612012046 00000000000000/* * evalgraph.c - Evaluation graph back-end part * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * Enhancments Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ // code refactored by HGM to obtain front-end / back-end separation #include "config.h" #include #if STDC_HEADERS # include # include #else /* not STDC_HEADERS */ # if HAVE_STRING_H # include # else /* not HAVE_STRING_H */ # include # endif /* not HAVE_STRING_H */ #endif /* not STDC_HEADERS */ #include "common.h" #include "frontend.h" #include "backend.h" #include "evalgraph.h" /* Module globals */ ChessProgramStats_Move * currPvInfo; int currFirst = 0; int currLast = 0; int currCurrent = -1; int range = 1; int differentialView; int nWidthPB = 0; int nHeightPB = 0; int MarginX = 18; int MarginW = 4; int MarginH = 4; // back-end static void DrawLine (int x1, int y1, int x2, int y2, int penType) { DrawSegment( x1, y1, NULL, NULL, PEN_NONE ); DrawSegment( x2, y2, NULL, NULL, penType ); } // back-end static void DrawLineEx (int x1, int y1, int x2, int y2, int penType) { int savX, savY; DrawSegment( x1, y1, &savX, &savY, PEN_NONE ); DrawSegment( x2, y2, NULL, NULL, penType ); DrawSegment( savX, savY, NULL, NULL, PEN_NONE ); } // back-end static int GetPvScore (int index) { int score = currPvInfo[ index ].score; if(differentialView) score = index < currLast-1 ? -currPvInfo[ index+1 ].score - score : 0; if( index & 1 ) score = -score; /* Flip score for black */ return score; } char * MakeEvalTitle (char *title) { int score, depth; static char buf[MSG_SIZ]; if( currCurrent <0 ) return title; // currCurrent = -1 crashed WB on start without ini file! score = currPvInfo[ currCurrent ].score; depth = currPvInfo[ currCurrent ].depth; if( depth <=0 ) return title; if( currCurrent & 1 ) score = -score; /* Flip score for black */ snprintf(buf, MSG_SIZ, "%s {%d: %s%.2f/%-2d %d}", title, currCurrent/2+1, score>0 ? "+" : " ", score/100., depth, (currPvInfo[currCurrent].time+50)/100); return buf; } // back-end /* For a centipawn value, this function returns the height of the corresponding histogram, centered on the reference axis. Note: height can be negative! */ static int GetValueY (int value) { if( value < -range*700 ) value = -range*700; if( value > +range*700 ) value = +range*700; if(value > 100*range) value += (appData.zoom - 1)*100*range; else if(value < -100*range) value -= (appData.zoom - 1)*100*range; else value *= appData.zoom; return (nHeightPB / 2) - (int)(value * (nHeightPB - 2*MarginH) / ((1200. + 200.*appData.zoom)*range)); } // the brush selection is made part of the DrawLine, by passing a style argument // the wrapper for doing the text output makes this back-end static void DrawAxisSegmentHoriz (int value, Boolean drawValue) { int y = GetValueY( range*value*100 ); if( drawValue ) { char buf[MSG_SIZ], *b = buf; if( value > 0 ) *b++ = '+'; sprintf(b, "%d", range*value); DrawEvalText(buf, strlen(buf), y); } // [HGM] counts on DrawEvalText to have select transparent background for dotted line! DrawLine( MarginX, y, MarginX + MarginW, y, PEN_BLACK ); // Y-axis tick marks DrawLine( MarginX + MarginW, y, nWidthPB - MarginW, y, PEN_DOTTED ); // hor grid } // The DrawLines again must select their own brush. // the initial brush selection is useless? BkMode needed for dotted line and text static void DrawAxis () { int cy = nHeightPB / 2, space = nHeightPB/(6 + appData.zoom); DrawAxisSegmentHoriz( +5, TRUE ); DrawAxisSegmentHoriz( +3, space >= 20 ); DrawAxisSegmentHoriz( +1, space >= 20 && space*appData.zoom >= 40 ); DrawAxisSegmentHoriz( 0, TRUE ); DrawAxisSegmentHoriz( -1, space >= 20 && space*appData.zoom >= 40 ); DrawAxisSegmentHoriz( -3, space >= 20 ); DrawAxisSegmentHoriz( -5, TRUE ); DrawLine( MarginX + MarginW, cy, nWidthPB - MarginW, cy, PEN_BLACK ); // x-axis DrawLine( MarginX + MarginW, MarginH, MarginX + MarginW, nHeightPB - MarginH, PEN_BLACK ); // y-axis } // back-end static void DrawHistogram (int x, int y, int width, int value, int side) { int left, top, right, bottom; if( value > -appData.evalThreshold*range && value < +appData.evalThreshold*range ) return; left = x; right = left + width + 1; if( value > 0 ) { top = GetValueY( value ); bottom = y+1; } else { top = y; bottom = GetValueY( value ) + 1; } if( width == MIN_HIST_WIDTH ) { right--; DrawRectangle( left, top, right, bottom, side, FILLED ); } else { DrawRectangle( left, top, right, bottom, side, OPEN ); } } // back-end static void DrawSeparator (int index, int x) { if( index > 0 ) { if( index == currCurrent ) { DrawLineEx( x, MarginH, x, nHeightPB - MarginH, PEN_BLUEDOTTED ); } else if( (index % 20) == 0 ) { DrawLineEx( x, MarginH, x, nHeightPB - MarginH, PEN_DOTTED ); } } } // made back-end by replacing MoveToEx and LineTo by DrawSegment /* Actually draw histogram as a diagram, cause there's too much data */ static void DrawHistogramAsDiagram (int cy, int paint_width, int hist_count) { double step; int i; /* Rescale the graph every few moves (as opposed to every move) */ hist_count -= hist_count % 8; hist_count += 8; hist_count /= 2; step = (double) paint_width / (hist_count + 1); for( i=0; i<2; i++ ) { int index = currFirst; int side = (currCurrent + i + 1) & 1; /* Draw current side last */ double x = MarginX + MarginW; if( (index & 1) != side ) { x += step / 2; index++; } DrawSegment( (int) x, cy, NULL, NULL, PEN_NONE ); index += 2; while( index < currLast ) { x += step; DrawSeparator( index, (int) x ); /* Extend line up to current point */ if( currPvInfo[index].depth > 0 ) { DrawSegment((int) x, GetValueY( GetPvScore(index) ), NULL, NULL, (side==0 ? PEN_BOLDWHITE: PEN_BOLDBLACK) ); } index += 2; } } } // back-end, delete pen selection static void DrawHistogramFull (int cy, int hist_width, int hist_count) { int i; // SelectObject( hdcPB, GetStockObject(BLACK_PEN) ); for( i=0; i 0 ) { DrawHistogram( x, cy, hist_width, GetPvScore(index), index & 1 ); } } } typedef struct { int cy; int hist_width; int hist_count; int paint_width; } VisualizationData; // back-end static Boolean InitVisualization (VisualizationData *vd) { Boolean result = FALSE; vd->cy = nHeightPB / 2; vd->hist_width = MIN_HIST_WIDTH; vd->hist_count = currLast - currFirst; vd->paint_width = nWidthPB - MarginX - 2*MarginW; if( vd->hist_count > 0 ) { result = TRUE; /* Compute width */ vd->hist_width = vd->paint_width / vd->hist_count; if( vd->hist_width > MAX_HIST_WIDTH ) vd->hist_width = MAX_HIST_WIDTH; vd->hist_width -= vd->hist_width % 2; } return result; } // back-end static void DrawHistograms () { VisualizationData vd; int i; double step = 1; if( InitVisualization( &vd ) ) { if( vd.hist_width < MIN_HIST_WIDTH ) { DrawHistogramAsDiagram( vd.cy, vd.paint_width, vd.hist_count ); step = 0.5*vd.paint_width / (((vd.hist_count | 7) + 1)/2 + 1.); } else { DrawHistogramFull( vd.cy, step = vd.hist_width, vd.hist_count ); } } if(!differentialView) return; differentialView = 0; DrawSegment( MarginX + MarginW, vd.cy, NULL, NULL, PEN_NONE ); for( i=0; i= start_x && InitVisualization( &vd ) ) { /* Almost an hack here... we duplicate some of the paint logic */ if( vd.hist_width < MIN_HIST_WIDTH ) { double step; vd.hist_count -= vd.hist_count % 8; vd.hist_count += 8; vd.hist_count /= 2; step = (double) vd.paint_width / (vd.hist_count + 1); step /= 2; result = (int) (0.5 + (double) (x - start_x) / step); } else { result = (x - start_x) / vd.hist_width; } } if( result >= currLast ) { result = -1; } return result; } // init and display part split of so they can be moved to front end void PaintEvalGraph (void) { VariantClass v = gameInfo.variant; range = (gameInfo.holdingsWidth && v != VariantSuper && v != VariantGreat && v != VariantSChess) ? 2 : 1; // [HGM] double range in drop games /* Draw */ DrawRectangle(0, 0, nWidthPB, nHeightPB, 2, FILLED); DrawAxis(); DrawHistograms(); } xboard-4.8.0/book.c0000644000175000001440000013060012421746612011022 00000000000000/* * book.c -- code for probing Polyglot opening books * * This code was first released in the public domain by Michel Van den Bergh. * The array Random64 is taken from the Polyglot source code. * I am pretty sure that a table of random numbers is never protected * by copyright. * * It s adapted by H.G. Muller for working with xboard / Winboard * * The following terms apply to the enhanced version of XBoard distributed * by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * * ------------------------------------------------------------------------ */ #include "config.h" #include #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "moves.h" #include "gettext.h" #ifdef ENABLE_NLS # define _(s) gettext (s) # define N_(s) gettext_noop (s) #else # define _(s) (s) # define N_(s) s #endif #ifdef _MSC_VER typedef unsigned __int64 uint64; #else typedef unsigned long long int uint64; #endif #ifdef _MSC_VER # define U64(u) (u##ui64) #else # define U64(u) (u##ULL) #endif typedef unsigned char uint8; typedef unsigned short uint16; typedef unsigned int uint32; typedef struct { uint64 key; uint16 move; uint16 weight; uint16 learnPoints; uint16 learnCount; } entry_t; entry_t entry_none = { 0, 0, 0, 0 }; char *promote_pieces=" nbrqac=+"; uint64 Random64[781] = { U64(0x9D39247E33776D41), U64(0x2AF7398005AAA5C7), U64(0x44DB015024623547), U64(0x9C15F73E62A76AE2), U64(0x75834465489C0C89), U64(0x3290AC3A203001BF), U64(0x0FBBAD1F61042279), U64(0xE83A908FF2FB60CA), U64(0x0D7E765D58755C10), U64(0x1A083822CEAFE02D), U64(0x9605D5F0E25EC3B0), U64(0xD021FF5CD13A2ED5), U64(0x40BDF15D4A672E32), U64(0x011355146FD56395), U64(0x5DB4832046F3D9E5), U64(0x239F8B2D7FF719CC), U64(0x05D1A1AE85B49AA1), U64(0x679F848F6E8FC971), U64(0x7449BBFF801FED0B), U64(0x7D11CDB1C3B7ADF0), U64(0x82C7709E781EB7CC), U64(0xF3218F1C9510786C), U64(0x331478F3AF51BBE6), U64(0x4BB38DE5E7219443), U64(0xAA649C6EBCFD50FC), U64(0x8DBD98A352AFD40B), U64(0x87D2074B81D79217), U64(0x19F3C751D3E92AE1), U64(0xB4AB30F062B19ABF), U64(0x7B0500AC42047AC4), U64(0xC9452CA81A09D85D), U64(0x24AA6C514DA27500), U64(0x4C9F34427501B447), U64(0x14A68FD73C910841), U64(0xA71B9B83461CBD93), U64(0x03488B95B0F1850F), U64(0x637B2B34FF93C040), U64(0x09D1BC9A3DD90A94), U64(0x3575668334A1DD3B), U64(0x735E2B97A4C45A23), U64(0x18727070F1BD400B), U64(0x1FCBACD259BF02E7), U64(0xD310A7C2CE9B6555), U64(0xBF983FE0FE5D8244), U64(0x9F74D14F7454A824), U64(0x51EBDC4AB9BA3035), U64(0x5C82C505DB9AB0FA), U64(0xFCF7FE8A3430B241), U64(0x3253A729B9BA3DDE), U64(0x8C74C368081B3075), U64(0xB9BC6C87167C33E7), U64(0x7EF48F2B83024E20), U64(0x11D505D4C351BD7F), U64(0x6568FCA92C76A243), U64(0x4DE0B0F40F32A7B8), U64(0x96D693460CC37E5D), U64(0x42E240CB63689F2F), U64(0x6D2BDCDAE2919661), U64(0x42880B0236E4D951), U64(0x5F0F4A5898171BB6), U64(0x39F890F579F92F88), U64(0x93C5B5F47356388B), U64(0x63DC359D8D231B78), U64(0xEC16CA8AEA98AD76), U64(0x5355F900C2A82DC7), U64(0x07FB9F855A997142), U64(0x5093417AA8A7ED5E), U64(0x7BCBC38DA25A7F3C), U64(0x19FC8A768CF4B6D4), U64(0x637A7780DECFC0D9), U64(0x8249A47AEE0E41F7), U64(0x79AD695501E7D1E8), U64(0x14ACBAF4777D5776), U64(0xF145B6BECCDEA195), U64(0xDABF2AC8201752FC), U64(0x24C3C94DF9C8D3F6), U64(0xBB6E2924F03912EA), U64(0x0CE26C0B95C980D9), U64(0xA49CD132BFBF7CC4), U64(0xE99D662AF4243939), U64(0x27E6AD7891165C3F), U64(0x8535F040B9744FF1), U64(0x54B3F4FA5F40D873), U64(0x72B12C32127FED2B), U64(0xEE954D3C7B411F47), U64(0x9A85AC909A24EAA1), U64(0x70AC4CD9F04F21F5), U64(0xF9B89D3E99A075C2), U64(0x87B3E2B2B5C907B1), U64(0xA366E5B8C54F48B8), U64(0xAE4A9346CC3F7CF2), U64(0x1920C04D47267BBD), U64(0x87BF02C6B49E2AE9), U64(0x092237AC237F3859), U64(0xFF07F64EF8ED14D0), U64(0x8DE8DCA9F03CC54E), U64(0x9C1633264DB49C89), U64(0xB3F22C3D0B0B38ED), U64(0x390E5FB44D01144B), U64(0x5BFEA5B4712768E9), U64(0x1E1032911FA78984), U64(0x9A74ACB964E78CB3), U64(0x4F80F7A035DAFB04), U64(0x6304D09A0B3738C4), U64(0x2171E64683023A08), U64(0x5B9B63EB9CEFF80C), U64(0x506AACF489889342), U64(0x1881AFC9A3A701D6), U64(0x6503080440750644), U64(0xDFD395339CDBF4A7), U64(0xEF927DBCF00C20F2), U64(0x7B32F7D1E03680EC), U64(0xB9FD7620E7316243), U64(0x05A7E8A57DB91B77), U64(0xB5889C6E15630A75), U64(0x4A750A09CE9573F7), U64(0xCF464CEC899A2F8A), U64(0xF538639CE705B824), U64(0x3C79A0FF5580EF7F), U64(0xEDE6C87F8477609D), U64(0x799E81F05BC93F31), U64(0x86536B8CF3428A8C), U64(0x97D7374C60087B73), U64(0xA246637CFF328532), U64(0x043FCAE60CC0EBA0), U64(0x920E449535DD359E), U64(0x70EB093B15B290CC), U64(0x73A1921916591CBD), U64(0x56436C9FE1A1AA8D), U64(0xEFAC4B70633B8F81), U64(0xBB215798D45DF7AF), U64(0x45F20042F24F1768), U64(0x930F80F4E8EB7462), U64(0xFF6712FFCFD75EA1), U64(0xAE623FD67468AA70), U64(0xDD2C5BC84BC8D8FC), U64(0x7EED120D54CF2DD9), U64(0x22FE545401165F1C), U64(0xC91800E98FB99929), U64(0x808BD68E6AC10365), U64(0xDEC468145B7605F6), U64(0x1BEDE3A3AEF53302), U64(0x43539603D6C55602), U64(0xAA969B5C691CCB7A), U64(0xA87832D392EFEE56), U64(0x65942C7B3C7E11AE), U64(0xDED2D633CAD004F6), U64(0x21F08570F420E565), U64(0xB415938D7DA94E3C), U64(0x91B859E59ECB6350), U64(0x10CFF333E0ED804A), U64(0x28AED140BE0BB7DD), U64(0xC5CC1D89724FA456), U64(0x5648F680F11A2741), U64(0x2D255069F0B7DAB3), U64(0x9BC5A38EF729ABD4), U64(0xEF2F054308F6A2BC), U64(0xAF2042F5CC5C2858), U64(0x480412BAB7F5BE2A), U64(0xAEF3AF4A563DFE43), U64(0x19AFE59AE451497F), U64(0x52593803DFF1E840), U64(0xF4F076E65F2CE6F0), U64(0x11379625747D5AF3), U64(0xBCE5D2248682C115), U64(0x9DA4243DE836994F), U64(0x066F70B33FE09017), U64(0x4DC4DE189B671A1C), U64(0x51039AB7712457C3), U64(0xC07A3F80C31FB4B4), U64(0xB46EE9C5E64A6E7C), U64(0xB3819A42ABE61C87), U64(0x21A007933A522A20), U64(0x2DF16F761598AA4F), U64(0x763C4A1371B368FD), U64(0xF793C46702E086A0), U64(0xD7288E012AEB8D31), U64(0xDE336A2A4BC1C44B), U64(0x0BF692B38D079F23), U64(0x2C604A7A177326B3), U64(0x4850E73E03EB6064), U64(0xCFC447F1E53C8E1B), U64(0xB05CA3F564268D99), U64(0x9AE182C8BC9474E8), U64(0xA4FC4BD4FC5558CA), U64(0xE755178D58FC4E76), U64(0x69B97DB1A4C03DFE), U64(0xF9B5B7C4ACC67C96), U64(0xFC6A82D64B8655FB), U64(0x9C684CB6C4D24417), U64(0x8EC97D2917456ED0), U64(0x6703DF9D2924E97E), U64(0xC547F57E42A7444E), U64(0x78E37644E7CAD29E), U64(0xFE9A44E9362F05FA), U64(0x08BD35CC38336615), U64(0x9315E5EB3A129ACE), U64(0x94061B871E04DF75), U64(0xDF1D9F9D784BA010), U64(0x3BBA57B68871B59D), U64(0xD2B7ADEEDED1F73F), U64(0xF7A255D83BC373F8), U64(0xD7F4F2448C0CEB81), U64(0xD95BE88CD210FFA7), U64(0x336F52F8FF4728E7), U64(0xA74049DAC312AC71), U64(0xA2F61BB6E437FDB5), U64(0x4F2A5CB07F6A35B3), U64(0x87D380BDA5BF7859), U64(0x16B9F7E06C453A21), U64(0x7BA2484C8A0FD54E), U64(0xF3A678CAD9A2E38C), U64(0x39B0BF7DDE437BA2), U64(0xFCAF55C1BF8A4424), U64(0x18FCF680573FA594), U64(0x4C0563B89F495AC3), U64(0x40E087931A00930D), U64(0x8CFFA9412EB642C1), U64(0x68CA39053261169F), U64(0x7A1EE967D27579E2), U64(0x9D1D60E5076F5B6F), U64(0x3810E399B6F65BA2), U64(0x32095B6D4AB5F9B1), U64(0x35CAB62109DD038A), U64(0xA90B24499FCFAFB1), U64(0x77A225A07CC2C6BD), U64(0x513E5E634C70E331), U64(0x4361C0CA3F692F12), U64(0xD941ACA44B20A45B), U64(0x528F7C8602C5807B), U64(0x52AB92BEB9613989), U64(0x9D1DFA2EFC557F73), U64(0x722FF175F572C348), U64(0x1D1260A51107FE97), U64(0x7A249A57EC0C9BA2), U64(0x04208FE9E8F7F2D6), U64(0x5A110C6058B920A0), U64(0x0CD9A497658A5698), U64(0x56FD23C8F9715A4C), U64(0x284C847B9D887AAE), U64(0x04FEABFBBDB619CB), U64(0x742E1E651C60BA83), U64(0x9A9632E65904AD3C), U64(0x881B82A13B51B9E2), U64(0x506E6744CD974924), U64(0xB0183DB56FFC6A79), U64(0x0ED9B915C66ED37E), U64(0x5E11E86D5873D484), U64(0xF678647E3519AC6E), U64(0x1B85D488D0F20CC5), U64(0xDAB9FE6525D89021), U64(0x0D151D86ADB73615), U64(0xA865A54EDCC0F019), U64(0x93C42566AEF98FFB), U64(0x99E7AFEABE000731), U64(0x48CBFF086DDF285A), U64(0x7F9B6AF1EBF78BAF), U64(0x58627E1A149BBA21), U64(0x2CD16E2ABD791E33), U64(0xD363EFF5F0977996), U64(0x0CE2A38C344A6EED), U64(0x1A804AADB9CFA741), U64(0x907F30421D78C5DE), U64(0x501F65EDB3034D07), U64(0x37624AE5A48FA6E9), U64(0x957BAF61700CFF4E), U64(0x3A6C27934E31188A), U64(0xD49503536ABCA345), U64(0x088E049589C432E0), U64(0xF943AEE7FEBF21B8), U64(0x6C3B8E3E336139D3), U64(0x364F6FFA464EE52E), U64(0xD60F6DCEDC314222), U64(0x56963B0DCA418FC0), U64(0x16F50EDF91E513AF), U64(0xEF1955914B609F93), U64(0x565601C0364E3228), U64(0xECB53939887E8175), U64(0xBAC7A9A18531294B), U64(0xB344C470397BBA52), U64(0x65D34954DAF3CEBD), U64(0xB4B81B3FA97511E2), U64(0xB422061193D6F6A7), U64(0x071582401C38434D), U64(0x7A13F18BBEDC4FF5), U64(0xBC4097B116C524D2), U64(0x59B97885E2F2EA28), U64(0x99170A5DC3115544), U64(0x6F423357E7C6A9F9), U64(0x325928EE6E6F8794), U64(0xD0E4366228B03343), U64(0x565C31F7DE89EA27), U64(0x30F5611484119414), U64(0xD873DB391292ED4F), U64(0x7BD94E1D8E17DEBC), U64(0xC7D9F16864A76E94), U64(0x947AE053EE56E63C), U64(0xC8C93882F9475F5F), U64(0x3A9BF55BA91F81CA), U64(0xD9A11FBB3D9808E4), U64(0x0FD22063EDC29FCA), U64(0xB3F256D8ACA0B0B9), U64(0xB03031A8B4516E84), U64(0x35DD37D5871448AF), U64(0xE9F6082B05542E4E), U64(0xEBFAFA33D7254B59), U64(0x9255ABB50D532280), U64(0xB9AB4CE57F2D34F3), U64(0x693501D628297551), U64(0xC62C58F97DD949BF), U64(0xCD454F8F19C5126A), U64(0xBBE83F4ECC2BDECB), U64(0xDC842B7E2819E230), U64(0xBA89142E007503B8), U64(0xA3BC941D0A5061CB), U64(0xE9F6760E32CD8021), U64(0x09C7E552BC76492F), U64(0x852F54934DA55CC9), U64(0x8107FCCF064FCF56), U64(0x098954D51FFF6580), U64(0x23B70EDB1955C4BF), U64(0xC330DE426430F69D), U64(0x4715ED43E8A45C0A), U64(0xA8D7E4DAB780A08D), U64(0x0572B974F03CE0BB), U64(0xB57D2E985E1419C7), U64(0xE8D9ECBE2CF3D73F), U64(0x2FE4B17170E59750), U64(0x11317BA87905E790), U64(0x7FBF21EC8A1F45EC), U64(0x1725CABFCB045B00), U64(0x964E915CD5E2B207), U64(0x3E2B8BCBF016D66D), U64(0xBE7444E39328A0AC), U64(0xF85B2B4FBCDE44B7), U64(0x49353FEA39BA63B1), U64(0x1DD01AAFCD53486A), U64(0x1FCA8A92FD719F85), U64(0xFC7C95D827357AFA), U64(0x18A6A990C8B35EBD), U64(0xCCCB7005C6B9C28D), U64(0x3BDBB92C43B17F26), U64(0xAA70B5B4F89695A2), U64(0xE94C39A54A98307F), U64(0xB7A0B174CFF6F36E), U64(0xD4DBA84729AF48AD), U64(0x2E18BC1AD9704A68), U64(0x2DE0966DAF2F8B1C), U64(0xB9C11D5B1E43A07E), U64(0x64972D68DEE33360), U64(0x94628D38D0C20584), U64(0xDBC0D2B6AB90A559), U64(0xD2733C4335C6A72F), U64(0x7E75D99D94A70F4D), U64(0x6CED1983376FA72B), U64(0x97FCAACBF030BC24), U64(0x7B77497B32503B12), U64(0x8547EDDFB81CCB94), U64(0x79999CDFF70902CB), U64(0xCFFE1939438E9B24), U64(0x829626E3892D95D7), U64(0x92FAE24291F2B3F1), U64(0x63E22C147B9C3403), U64(0xC678B6D860284A1C), U64(0x5873888850659AE7), U64(0x0981DCD296A8736D), U64(0x9F65789A6509A440), U64(0x9FF38FED72E9052F), U64(0xE479EE5B9930578C), U64(0xE7F28ECD2D49EECD), U64(0x56C074A581EA17FE), U64(0x5544F7D774B14AEF), U64(0x7B3F0195FC6F290F), U64(0x12153635B2C0CF57), U64(0x7F5126DBBA5E0CA7), U64(0x7A76956C3EAFB413), U64(0x3D5774A11D31AB39), U64(0x8A1B083821F40CB4), U64(0x7B4A38E32537DF62), U64(0x950113646D1D6E03), U64(0x4DA8979A0041E8A9), U64(0x3BC36E078F7515D7), U64(0x5D0A12F27AD310D1), U64(0x7F9D1A2E1EBE1327), U64(0xDA3A361B1C5157B1), U64(0xDCDD7D20903D0C25), U64(0x36833336D068F707), U64(0xCE68341F79893389), U64(0xAB9090168DD05F34), U64(0x43954B3252DC25E5), U64(0xB438C2B67F98E5E9), U64(0x10DCD78E3851A492), U64(0xDBC27AB5447822BF), U64(0x9B3CDB65F82CA382), U64(0xB67B7896167B4C84), U64(0xBFCED1B0048EAC50), U64(0xA9119B60369FFEBD), U64(0x1FFF7AC80904BF45), U64(0xAC12FB171817EEE7), U64(0xAF08DA9177DDA93D), U64(0x1B0CAB936E65C744), U64(0xB559EB1D04E5E932), U64(0xC37B45B3F8D6F2BA), U64(0xC3A9DC228CAAC9E9), U64(0xF3B8B6675A6507FF), U64(0x9FC477DE4ED681DA), U64(0x67378D8ECCEF96CB), U64(0x6DD856D94D259236), U64(0xA319CE15B0B4DB31), U64(0x073973751F12DD5E), U64(0x8A8E849EB32781A5), U64(0xE1925C71285279F5), U64(0x74C04BF1790C0EFE), U64(0x4DDA48153C94938A), U64(0x9D266D6A1CC0542C), U64(0x7440FB816508C4FE), U64(0x13328503DF48229F), U64(0xD6BF7BAEE43CAC40), U64(0x4838D65F6EF6748F), U64(0x1E152328F3318DEA), U64(0x8F8419A348F296BF), U64(0x72C8834A5957B511), U64(0xD7A023A73260B45C), U64(0x94EBC8ABCFB56DAE), U64(0x9FC10D0F989993E0), U64(0xDE68A2355B93CAE6), U64(0xA44CFE79AE538BBE), U64(0x9D1D84FCCE371425), U64(0x51D2B1AB2DDFB636), U64(0x2FD7E4B9E72CD38C), U64(0x65CA5B96B7552210), U64(0xDD69A0D8AB3B546D), U64(0x604D51B25FBF70E2), U64(0x73AA8A564FB7AC9E), U64(0x1A8C1E992B941148), U64(0xAAC40A2703D9BEA0), U64(0x764DBEAE7FA4F3A6), U64(0x1E99B96E70A9BE8B), U64(0x2C5E9DEB57EF4743), U64(0x3A938FEE32D29981), U64(0x26E6DB8FFDF5ADFE), U64(0x469356C504EC9F9D), U64(0xC8763C5B08D1908C), U64(0x3F6C6AF859D80055), U64(0x7F7CC39420A3A545), U64(0x9BFB227EBDF4C5CE), U64(0x89039D79D6FC5C5C), U64(0x8FE88B57305E2AB6), U64(0xA09E8C8C35AB96DE), U64(0xFA7E393983325753), U64(0xD6B6D0ECC617C699), U64(0xDFEA21EA9E7557E3), U64(0xB67C1FA481680AF8), U64(0xCA1E3785A9E724E5), U64(0x1CFC8BED0D681639), U64(0xD18D8549D140CAEA), U64(0x4ED0FE7E9DC91335), U64(0xE4DBF0634473F5D2), U64(0x1761F93A44D5AEFE), U64(0x53898E4C3910DA55), U64(0x734DE8181F6EC39A), U64(0x2680B122BAA28D97), U64(0x298AF231C85BAFAB), U64(0x7983EED3740847D5), U64(0x66C1A2A1A60CD889), U64(0x9E17E49642A3E4C1), U64(0xEDB454E7BADC0805), U64(0x50B704CAB602C329), U64(0x4CC317FB9CDDD023), U64(0x66B4835D9EAFEA22), U64(0x219B97E26FFC81BD), U64(0x261E4E4C0A333A9D), U64(0x1FE2CCA76517DB90), U64(0xD7504DFA8816EDBB), U64(0xB9571FA04DC089C8), U64(0x1DDC0325259B27DE), U64(0xCF3F4688801EB9AA), U64(0xF4F5D05C10CAB243), U64(0x38B6525C21A42B0E), U64(0x36F60E2BA4FA6800), U64(0xEB3593803173E0CE), U64(0x9C4CD6257C5A3603), U64(0xAF0C317D32ADAA8A), U64(0x258E5A80C7204C4B), U64(0x8B889D624D44885D), U64(0xF4D14597E660F855), U64(0xD4347F66EC8941C3), U64(0xE699ED85B0DFB40D), U64(0x2472F6207C2D0484), U64(0xC2A1E7B5B459AEB5), U64(0xAB4F6451CC1D45EC), U64(0x63767572AE3D6174), U64(0xA59E0BD101731A28), U64(0x116D0016CB948F09), U64(0x2CF9C8CA052F6E9F), U64(0x0B090A7560A968E3), U64(0xABEEDDB2DDE06FF1), U64(0x58EFC10B06A2068D), U64(0xC6E57A78FBD986E0), U64(0x2EAB8CA63CE802D7), U64(0x14A195640116F336), U64(0x7C0828DD624EC390), U64(0xD74BBE77E6116AC7), U64(0x804456AF10F5FB53), U64(0xEBE9EA2ADF4321C7), U64(0x03219A39EE587A30), U64(0x49787FEF17AF9924), U64(0xA1E9300CD8520548), U64(0x5B45E522E4B1B4EF), U64(0xB49C3B3995091A36), U64(0xD4490AD526F14431), U64(0x12A8F216AF9418C2), U64(0x001F837CC7350524), U64(0x1877B51E57A764D5), U64(0xA2853B80F17F58EE), U64(0x993E1DE72D36D310), U64(0xB3598080CE64A656), U64(0x252F59CF0D9F04BB), U64(0xD23C8E176D113600), U64(0x1BDA0492E7E4586E), U64(0x21E0BD5026C619BF), U64(0x3B097ADAF088F94E), U64(0x8D14DEDB30BE846E), U64(0xF95CFFA23AF5F6F4), U64(0x3871700761B3F743), U64(0xCA672B91E9E4FA16), U64(0x64C8E531BFF53B55), U64(0x241260ED4AD1E87D), U64(0x106C09B972D2E822), U64(0x7FBA195410E5CA30), U64(0x7884D9BC6CB569D8), U64(0x0647DFEDCD894A29), U64(0x63573FF03E224774), U64(0x4FC8E9560F91B123), U64(0x1DB956E450275779), U64(0xB8D91274B9E9D4FB), U64(0xA2EBEE47E2FBFCE1), U64(0xD9F1F30CCD97FB09), U64(0xEFED53D75FD64E6B), U64(0x2E6D02C36017F67F), U64(0xA9AA4D20DB084E9B), U64(0xB64BE8D8B25396C1), U64(0x70CB6AF7C2D5BCF0), U64(0x98F076A4F7A2322E), U64(0xBF84470805E69B5F), U64(0x94C3251F06F90CF3), U64(0x3E003E616A6591E9), U64(0xB925A6CD0421AFF3), U64(0x61BDD1307C66E300), U64(0xBF8D5108E27E0D48), U64(0x240AB57A8B888B20), U64(0xFC87614BAF287E07), U64(0xEF02CDD06FFDB432), U64(0xA1082C0466DF6C0A), U64(0x8215E577001332C8), U64(0xD39BB9C3A48DB6CF), U64(0x2738259634305C14), U64(0x61CF4F94C97DF93D), U64(0x1B6BACA2AE4E125B), U64(0x758F450C88572E0B), U64(0x959F587D507A8359), U64(0xB063E962E045F54D), U64(0x60E8ED72C0DFF5D1), U64(0x7B64978555326F9F), U64(0xFD080D236DA814BA), U64(0x8C90FD9B083F4558), U64(0x106F72FE81E2C590), U64(0x7976033A39F7D952), U64(0xA4EC0132764CA04B), U64(0x733EA705FAE4FA77), U64(0xB4D8F77BC3E56167), U64(0x9E21F4F903B33FD9), U64(0x9D765E419FB69F6D), U64(0xD30C088BA61EA5EF), U64(0x5D94337FBFAF7F5B), U64(0x1A4E4822EB4D7A59), U64(0x6FFE73E81B637FB3), U64(0xDDF957BC36D8B9CA), U64(0x64D0E29EEA8838B3), U64(0x08DD9BDFD96B9F63), U64(0x087E79E5A57D1D13), U64(0xE328E230E3E2B3FB), U64(0x1C2559E30F0946BE), U64(0x720BF5F26F4D2EAA), U64(0xB0774D261CC609DB), U64(0x443F64EC5A371195), U64(0x4112CF68649A260E), U64(0xD813F2FAB7F5C5CA), U64(0x660D3257380841EE), U64(0x59AC2C7873F910A3), U64(0xE846963877671A17), U64(0x93B633ABFA3469F8), U64(0xC0C0F5A60EF4CDCF), U64(0xCAF21ECD4377B28C), U64(0x57277707199B8175), U64(0x506C11B9D90E8B1D), U64(0xD83CC2687A19255F), U64(0x4A29C6465A314CD1), U64(0xED2DF21216235097), U64(0xB5635C95FF7296E2), U64(0x22AF003AB672E811), U64(0x52E762596BF68235), U64(0x9AEBA33AC6ECC6B0), U64(0x944F6DE09134DFB6), U64(0x6C47BEC883A7DE39), U64(0x6AD047C430A12104), U64(0xA5B1CFDBA0AB4067), U64(0x7C45D833AFF07862), U64(0x5092EF950A16DA0B), U64(0x9338E69C052B8E7B), U64(0x455A4B4CFE30E3F5), U64(0x6B02E63195AD0CF8), U64(0x6B17B224BAD6BF27), U64(0xD1E0CCD25BB9C169), U64(0xDE0C89A556B9AE70), U64(0x50065E535A213CF6), U64(0x9C1169FA2777B874), U64(0x78EDEFD694AF1EED), U64(0x6DC93D9526A50E68), U64(0xEE97F453F06791ED), U64(0x32AB0EDB696703D3), U64(0x3A6853C7E70757A7), U64(0x31865CED6120F37D), U64(0x67FEF95D92607890), U64(0x1F2B1D1F15F6DC9C), U64(0xB69E38A8965C6B65), U64(0xAA9119FF184CCCF4), U64(0xF43C732873F24C13), U64(0xFB4A3D794A9A80D2), U64(0x3550C2321FD6109C), U64(0x371F77E76BB8417E), U64(0x6BFA9AAE5EC05779), U64(0xCD04F3FF001A4778), U64(0xE3273522064480CA), U64(0x9F91508BFFCFC14A), U64(0x049A7F41061A9E60), U64(0xFCB6BE43A9F2FE9B), U64(0x08DE8A1C7797DA9B), U64(0x8F9887E6078735A1), U64(0xB5B4071DBFC73A66), U64(0x230E343DFBA08D33), U64(0x43ED7F5A0FAE657D), U64(0x3A88A0FBBCB05C63), U64(0x21874B8B4D2DBC4F), U64(0x1BDEA12E35F6A8C9), U64(0x53C065C6C8E63528), U64(0xE34A1D250E7A8D6B), U64(0xD6B04D3B7651DD7E), U64(0x5E90277E7CB39E2D), U64(0x2C046F22062DC67D), U64(0xB10BB459132D0A26), U64(0x3FA9DDFB67E2F199), U64(0x0E09B88E1914F7AF), U64(0x10E8B35AF3EEAB37), U64(0x9EEDECA8E272B933), U64(0xD4C718BC4AE8AE5F), U64(0x81536D601170FC20), U64(0x91B534F885818A06), U64(0xEC8177F83F900978), U64(0x190E714FADA5156E), U64(0xB592BF39B0364963), U64(0x89C350C893AE7DC1), U64(0xAC042E70F8B383F2), U64(0xB49B52E587A1EE60), U64(0xFB152FE3FF26DA89), U64(0x3E666E6F69AE2C15), U64(0x3B544EBE544C19F9), U64(0xE805A1E290CF2456), U64(0x24B33C9D7ED25117), U64(0xE74733427B72F0C1), U64(0x0A804D18B7097475), U64(0x57E3306D881EDB4F), U64(0x4AE7D6A36EB5DBCB), U64(0x2D8D5432157064C8), U64(0xD1E649DE1E7F268B), U64(0x8A328A1CEDFE552C), U64(0x07A3AEC79624C7DA), U64(0x84547DDC3E203C94), U64(0x990A98FD5071D263), U64(0x1A4FF12616EEFC89), U64(0xF6F7FD1431714200), U64(0x30C05B1BA332F41C), U64(0x8D2636B81555A786), U64(0x46C9FEB55D120902), U64(0xCCEC0A73B49C9921), U64(0x4E9D2827355FC492), U64(0x19EBB029435DCB0F), U64(0x4659D2B743848A2C), U64(0x963EF2C96B33BE31), U64(0x74F85198B05A2E7D), U64(0x5A0F544DD2B1FB18), U64(0x03727073C2E134B1), U64(0xC7F6AA2DE59AEA61), U64(0x352787BAA0D7C22F), U64(0x9853EAB63B5E0B35), U64(0xABBDCDD7ED5C0860), U64(0xCF05DAF5AC8D77B0), U64(0x49CAD48CEBF4A71E), U64(0x7A4C10EC2158C4A6), U64(0xD9E92AA246BF719E), U64(0x13AE978D09FE5557), U64(0x730499AF921549FF), U64(0x4E4B705B92903BA4), U64(0xFF577222C14F0A3A), U64(0x55B6344CF97AAFAE), U64(0xB862225B055B6960), U64(0xCAC09AFBDDD2CDB4), U64(0xDAF8E9829FE96B5F), U64(0xB5FDFC5D3132C498), U64(0x310CB380DB6F7503), U64(0xE87FBB46217A360E), U64(0x2102AE466EBB1148), U64(0xF8549E1A3AA5E00D), U64(0x07A69AFDCC42261A), U64(0xC4C118BFE78FEAAE), U64(0xF9F4892ED96BD438), U64(0x1AF3DBE25D8F45DA), U64(0xF5B4B0B0D2DEEEB4), U64(0x962ACEEFA82E1C84), U64(0x046E3ECAAF453CE9), U64(0xF05D129681949A4C), U64(0x964781CE734B3C84), U64(0x9C2ED44081CE5FBD), U64(0x522E23F3925E319E), U64(0x177E00F9FC32F791), U64(0x2BC60A63A6F3B3F2), U64(0x222BBFAE61725606), U64(0x486289DDCC3D6780), U64(0x7DC7785B8EFDFC80), U64(0x8AF38731C02BA980), U64(0x1FAB64EA29A2DDF7), U64(0xE4D9429322CD065A), U64(0x9DA058C67844F20C), U64(0x24C0E332B70019B0), U64(0x233003B5A6CFE6AD), U64(0xD586BD01C5C217F6), U64(0x5E5637885F29BC2B), U64(0x7EBA726D8C94094B), U64(0x0A56A5F0BFE39272), U64(0xD79476A84EE20D06), U64(0x9E4C1269BAA4BF37), U64(0x17EFEE45B0DEE640), U64(0x1D95B0A5FCF90BC6), U64(0x93CBE0B699C2585D), U64(0x65FA4F227A2B6D79), U64(0xD5F9E858292504D5), U64(0xC2B5A03F71471A6F), U64(0x59300222B4561E00), U64(0xCE2F8642CA0712DC), U64(0x7CA9723FBB2E8988), U64(0x2785338347F2BA08), U64(0xC61BB3A141E50E8C), U64(0x150F361DAB9DEC26), U64(0x9F6A419D382595F4), U64(0x64A53DC924FE7AC9), U64(0x142DE49FFF7A7C3D), U64(0x0C335248857FA9E7), U64(0x0A9C32D5EAE45305), U64(0xE6C42178C4BBB92E), U64(0x71F1CE2490D20B07), U64(0xF1BCC3D275AFE51A), U64(0xE728E8C83C334074), U64(0x96FBF83A12884624), U64(0x81A1549FD6573DA5), U64(0x5FA7867CAF35E149), U64(0x56986E2EF3ED091B), U64(0x917F1DD5F8886C61), U64(0xD20D8C88C8FFE65F), U64(0x31D71DCE64B2C310), U64(0xF165B587DF898190), U64(0xA57E6339DD2CF3A0), U64(0x1EF6E6DBB1961EC9), U64(0x70CC73D90BC26E24), U64(0xE21A6B35DF0C3AD7), U64(0x003A93D8B2806962), U64(0x1C99DED33CB890A1), U64(0xCF3145DE0ADD4289), U64(0xD0E4427A5514FB72), U64(0x77C621CC9FB3A483), U64(0x67A34DAC4356550B), U64(0xF8D626AAAF278509), }; uint64 *RandomPiece =Random64; uint64 *RandomCastle =Random64+768; uint64 *RandomEnPassant =Random64+772; uint64 *RandomTurn =Random64+780; uint64 hash (int moveNr) { int r, f, p_enc, squareNr, pieceGroup; uint64 key=0, holdingsKey=0, Zobrist; VariantClass v = gameInfo.variant; switch(v) { case VariantNormal: case VariantFischeRandom: // compatible with normal case VariantNoCastle: case VariantXiangqi: // for historic reasons; does never collide anyway because of other King type break; case VariantGiveaway: // in opening same as suicide key += VariantSuicide; break; case VariantGothic: // these are special cases of CRC, and can share book case VariantCapablanca: v = VariantCapaRandom; default: key += v; // variant type incorporated in key to allow mixed books without collisions } for(f=0; f= (int)BlackPawn) ? (int)BlackPawn :(int)WhitePawn; if(j > (int)WhiteQueen) j++; // make space for King if(j > (int) WhiteKing) j = (int)WhiteQueen + 1; p_enc = 2*j + ((int)p < (int)BlackPawn); // holdings squares get nmbers immediately after board; first left, then right holdings if(f == BOARD_LEFT-2) squareNr = (BOARD_RGHT - BOARD_LEFT)*BOARD_HEIGHT + r; else if(f == BOARD_RGHT+1) squareNr = (BOARD_RGHT - BOARD_LEFT + 1)*BOARD_HEIGHT + r; else squareNr = (BOARD_RGHT - BOARD_LEFT)*r + (f - BOARD_LEFT); // note that in normal Chess squareNr < 64 and p_enc < 12. The following code // maps other pieces and squares in this range, and then modify the corresponding // Zobrist random by rotating its bitpattern according to what the piece really was. pieceGroup = p_enc / 12; p_enc = p_enc % 12; Zobrist = RandomPiece[64*p_enc + (squareNr & 63)]; switch(pieceGroup) { case 1: // pieces 5-10 (FEACWM) Zobrist = (Zobrist << 16) ^ (Zobrist >> 48); break; case 2: // pieces 11-16 (OHIJGD) Zobrist = (Zobrist << 32) ^ (Zobrist >> 32); break; case 3: // pieces 17-20 (VLSU) Zobrist = (Zobrist << 48) ^ (Zobrist >> 16); break; } if(squareNr >= 64) Zobrist = (Zobrist << 8) ^ (Zobrist >> 56); // holdings have separate (additive) key, to encode presence of multiple pieces on same square if(f == BOARD_LEFT-2) holdingsKey += Zobrist * boards[moveNr][r][f+1]; else if(f == BOARD_RGHT+1) holdingsKey += Zobrist * boards[moveNr][r][f-1]; else key ^= Zobrist; } } } if(boards[moveNr][CASTLING][2] != NoRights) { if(boards[moveNr][CASTLING][0] != NoRights) key^=RandomCastle[0]; if(boards[moveNr][CASTLING][1] != NoRights) key^=RandomCastle[1]; } if(boards[moveNr][CASTLING][5] != NoRights) { if(boards[moveNr][CASTLING][3] != NoRights) key^=RandomCastle[2]; if(boards[moveNr][CASTLING][4] != NoRights) key^=RandomCastle[3]; } f = boards[moveNr][EP_STATUS]; if(f >= 0 && f < 8){ if(!WhiteOnMove(moveNr)){ // the test for neighboring Pawns might not be needed, // as epStatus already kept track of it, but better safe than sorry. if((f>0 && boards[moveNr][3][f-1]==BlackPawn)|| (f<7 && boards[moveNr][3][f+1]==BlackPawn)){ key^=RandomEnPassant[f]; } }else{ if((f>0 && boards[moveNr][4][f-1]==WhitePawn)|| (f<7 && boards[moveNr][4][f+1]==WhitePawn)){ key^=RandomEnPassant[f]; } } } if(WhiteOnMove(moveNr)){ key^=RandomTurn[0]; } return key + holdingsKey; } #define MOVE_BUF 100 // fs routines read from memory buffer if no file specified static unsigned char *memBuf, *memPtr; static int bufSize; Boolean mcMode; int fsseek (FILE *f, int n, int mode) { if(f) return fseek(f, n, mode); if(mode == SEEK_SET) memPtr = memBuf + n; else if(mode == SEEK_END) memPtr = memBuf + 16*bufSize + n; return memPtr < memBuf || memPtr > memBuf + 16*bufSize; } int fstell (FILE *f) { if(f) return ftell(f); return memPtr - memBuf; } int fsgetc (FILE *f) { if(f) return fgetc(f); if(memPtr >= memBuf + 16*bufSize) return EOF; return *memPtr++ ; } int int_from_file (FILE *f, int l, uint64 *r) { int i,c; for(i=0;ikey=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->move=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->weight=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->learnCount=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->learnPoints=r; return 0; } int find_key (FILE *f, uint64 key, entry_t *entry) { int first, last, middle; entry_t last_entry,middle_entry; first=-1; if(fsseek(f,-16,SEEK_END)){ *entry=entry_none; entry->key=key+1; //hack return -1; } last=fstell(f)/16; entry_from_file(f,&last_entry); while(1){ if(last-first==1){ *entry=last_entry; return last; } middle=(first+last)/2; fsseek(f,16*middle,SEEK_SET); entry_from_file(f,&middle_entry); if(key<=middle_entry.key){ last=middle; last_entry=middle_entry; }else{ first=middle; } } } void move_to_string (char move_s[6], uint16 move) { int f,fr,ff,t,tr,tf,p; int width = BOARD_RGHT - BOARD_LEFT, size; // allow for alternative board formats size = width * BOARD_HEIGHT; p = move / (size*size); move = move % (size*size); f = move / size; fr = f / width; ff = f % width; t = move % size; tr = t / width; tf = t % width; move_s[0] = ff + 'a'; move_s[1] = fr + '1' - (BOARD_HEIGHT > 9); move_s[2] = tf + 'a'; move_s[3] = tr + '1' - (BOARD_HEIGHT > 9); // kludge: encode drops as special promotion code if(gameInfo.holdingsSize && p == 9) { move_s[0] = f + '@'; // from square encodes piece type move_s[1] = '@'; // drop symbol p = 0; } // add promotion piece, if any if(p){ move_s[4] = promote_pieces[p]; move_s[5] = '\0'; }else{ move_s[4] = '\0'; } if(gameInfo.variant != VariantNormal) return; // correct FRC-style castlings in variant normal. // [HGM] This is buggy code! e1h1 could very well be a normal R or Q move. if(!strcmp(move_s,"e1h1")){ safeStrCpy(move_s,"e1g1", 6); }else if(!strcmp(move_s,"e1a1")){ safeStrCpy(move_s,"e1c1", 6); }else if(!strcmp(move_s,"e8h8")){ safeStrCpy(move_s,"e8g8", 6); }else if(!strcmp(move_s,"e8a8")){ safeStrCpy(move_s,"e8c8", 6); } } int GetBookMoves (FILE *f, int moveNr, entry_t entries[], int max) { // retrieve all entries for given position from book in 'entries', return number. entry_t entry; int offset; uint64 key; int count; int ret; key = hash(moveNr); if(appData.debugMode) fprintf(debugFP, "book key = %08x%08x\n", (unsigned int)(key>>32), (unsigned int)key); offset=find_key(f, key, &entry); if(entry.key != key) { return FALSE; } entries[0] = entry; count=1; fsseek(f, 16*(offset+1), SEEK_SET); while(1){ ret=entry_from_file(f, &entry); if(ret){ break; } if(entry.key != key){ break; } if(count == max) break; entries[count++] = entry; } return count; } int ReadFromBookFile (int moveNr, char *book, entry_t entries[]) { // retrieve all entries for given position from book in 'entries', return number. static FILE *f = NULL; static char curBook[MSG_SIZ]; if(book == NULL) return -1; if(!f || strcmp(book, curBook)){ // keep book file open until book changed strncpy(curBook, book, MSG_SIZ); if(f) fclose(f); f = fopen(book,"rb"); } if(!f){ DisplayError(_("Polyglot book not valid"), 0); appData.usePolyglotBook = FALSE; return -1; } return GetBookMoves(f, moveNr, entries, MOVE_BUF); } // next three made into subroutines to facilitate future changes in storage scheme (e.g. 2 x 3 bytes) static int wins(entry_t *e) { return e->learnPoints; } static int losses(entry_t *e) { return e->learnCount; } static void CountMove (entry_t *e, int result) { switch(result) { case 0: e->learnCount ++; break; case 1: e->learnCount ++; // count draw as win + loss case 2: e->learnPoints ++; break; } } #define MERGESIZE 2048 #define HASHSIZE 1024*1024*4 entry_t *memBook, *hashTab, *mergeBuf; int bookSize=1, mergeSize=1, mask = HASHSIZE-1; void InitMemBook () { static int initDone = FALSE; if(initDone) return; memBook = (entry_t *) calloc(1024*1024, sizeof(entry_t)); hashTab = (entry_t *) calloc(HASHSIZE, sizeof(entry_t)); mergeBuf = (entry_t *) calloc(MERGESIZE+5, sizeof(entry_t)); memBook[0].key = -1LL; mergeBuf[0].key = -1LL; initDone = TRUE; } char * MCprobe (moveNr) { int count, count2, games, i, choice=0; entry_t entries[MOVE_BUF]; float nominal[MOVE_BUF], tot, deficit, max, min; static char move_s[6]; InitMemBook(); memBuf = (unsigned char*) memBook; bufSize = bookSize; // in MC mode book resides in memory count = GetBookMoves(NULL, moveNr, entries, MOVE_BUF); if(count < 0) count = 0; // don't care about miss yet memBuf = (unsigned char*) mergeBuf; bufSize = mergeSize; // there could be moves still waiting to be merged count2 = count + GetBookMoves(NULL, moveNr, entries+count, MOVE_BUF - count); if(appData.debugMode) fprintf(debugFP, "MC probe: %d/%d (%d+%d)\n", count, count2,bookSize,mergeSize); if(!count2) return NULL; tot = games = 0; for(i=0; i max) max = deficit, choice = i; if(deficit < min) min = deficit; } // note that a single move will never be underplayed if(max - min > 0.5*sqrt(nominal[choice])) { // if one of the listed moves is significantly under-played, play it now. move_to_string(move_s, entries[choice].move); if(appData.debugMode) fprintf(debugFP, "book move field = %d\n", entries[choice].move); return move_s; } return NULL; // otherwise fake book miss to force engine think, hoping for hitherto unplayed move. } char *ProbeBook (int moveNr, char *book) { // entry_t entries[MOVE_BUF]; int count; int i, j; static char move_s[6]; int total_weight; if(moveNr >= 2*appData.bookDepth) return NULL; if(mcMode) return MCprobe(moveNr); if((count = ReadFromBookFile(moveNr, book, entries)) <= 0) return NULL; // no book, or no hit if(appData.bookStrength != 50) { // transform weights double power = 0, maxWeight = 0.0; if(appData.bookStrength) power = (100.-appData.bookStrength)/appData.bookStrength; for(i=0; i maxWeight) maxWeight = entries[i].weight; for(i=0; i 0) entries[i].weight = appData.bookStrength || weight == 1.0 ? 1e4*exp(power * log(weight)) + 0.5 : 0.0; } } total_weight = 0; for(i=0; i> 12; // create random < total_weight total_weight = 0; for(i=0; i j) break; } if(i >= count) DisplayFatalError(_("Book Fault"), 0, 1); // safety catch, cannot happen move_to_string(move_s, entries[i].move); if(appData.debugMode) fprintf(debugFP, "book move field = %d\n", entries[i].move); return move_s; } extern char yy_textstr[]; entry_t lastEntries[MOVE_BUF]; char * MovesToText(int count, entry_t *entries) { int i, totalWeight = 0; char algMove[6]; char *p = (char*) malloc(40*count+1); for(i=0; i=0;i--) fputc(r>>8*i & 255, f); } void entry_to_file (FILE *f, entry_t *entry) { int_to_file(f,8,entry->key); int_to_file(f,2,entry->move); int_to_file(f,2,entry->weight); int_to_file(f,2,entry->learnCount); int_to_file(f,2,entry->learnPoints); } char buf1[4096], buf2[4096]; void SaveToBook (char *text) { entry_t entries[MOVE_BUF], entry; int count = TextToMoves(text, currentMove, entries); int offset, i, len1=0, len2, readpos=0, writepos=0; FILE *f; if(!count && !currentCount) return; f=fopen(appData.polyglotBook, "rb+"); if(!f){ DisplayError(_("Polyglot book not valid"), 0); return; } offset=find_key(f, entries[0].key, &entry); if(entries[0].key != entry.key && currentCount) { DisplayError(_("Hash keys are different"), 0); fclose(f); return; } if(count != currentCount) { readpos = 16*(offset + currentCount); writepos = 16*(offset + count); fsseek(f, readpos, SEEK_SET); readpos += len1 = fread(buf1, 1, 4096 - 16*currentCount, f); // salvage some entries immediately behind change } fsseek(f, 16*(offset), SEEK_SET); for(i=0; i writepos) { fsseek(f, readpos, SEEK_SET); readpos += len1 = fread(buf1, 1, 4096, f); } else len1 = 0; // wrote already past old EOF fsseek(f, writepos, SEEK_SET); fwrite(buf2, 1, len2, f); writepos += len2; } while(len1); } fclose(f); } void NewEntry (entry_t *e, uint64 key, int move, int result) { e->key = key; e->move = move; e->learnPoints = 0; e->learnCount = 0; CountMove(e, result); } void Merge () { int i; if(appData.debugMode) fprintf(debugFP, "book merge %d moves (old size %d)\n", mergeSize, bookSize); bookSize += --mergeSize; for(i=bookSize-1; mergeSize; i--) { while(mergeSize && (i < mergeSize || mergeBuf[mergeSize-1].key >= memBook[i-mergeSize].key)) memBook[i--] = mergeBuf[--mergeSize]; if(i < 0) break; memBook[i] = memBook[i-mergeSize]; } if(mergeSize) DisplayFatalError("merge error", 0, 0); // impossible mergeSize = 1; mergeBuf[0].key = -1LL; } void AddToBook (int moveNr, int result) { entry_t entry; int offset, start, move; uint64 key; int i, j, fromY, toY; char fromX, toX, promo; extern char moveList[][MOVE_LEN]; if(!moveList[moveNr][0] || moveList[moveNr][0] == '\n') return; // could be terminal position if(appData.debugMode) fprintf(debugFP, "add move %d to book %s", moveNr, moveList[moveNr]); // calculate key and book representation of move key = hash(moveNr); if(moveList[moveNr][1] == '@') { sscanf(moveList[moveNr], "%c@%c%d", &promo, &toX, &toY); fromX = CharToPiece(WhiteOnMove(moveNr) ? ToUpper(promo) : ToLower(promo)); fromY = DROP_RANK; promo = NULLCHAR; } else sscanf(moveList[moveNr], "%c%d%c%d%c", &fromX, &fromY, &toX, &toY, &promo), fromX -= AAA, fromY -= ONE - '0'; move = CoordsToMove(fromX, fromY, toX-AAA, toY-ONE+'0', promo); // if move already in book, just add count memBuf = (unsigned char*) memBook; bufSize = bookSize; // in MC mode book resides in memory offset = find_key(NULL, key, &entry); while(memBook[offset].key == key) { if(memBook[offset].move == move) { CountMove(memBook+offset, result); return; } else offset++; } // move did not occur in the main book memBuf = (unsigned char*) mergeBuf; bufSize = mergeSize; // it could be amongst moves still waiting to be merged start = offset = find_key(NULL, key, &entry); while(mergeBuf[offset].key == key) { if(mergeBuf[offset].move == move) { if(appData.debugMode) fprintf(debugFP, "found in book merge buf @ %d\n", offset); CountMove(mergeBuf+offset, result); return; } else offset++; } if(start != offset) { // position was in mergeBuf, but move is new if(appData.debugMode) fprintf(debugFP, "add in book merge buf @ %d\n", offset); for(i=mergeSize++; i>offset; i--) mergeBuf[i] = mergeBuf[i-1]; // make room NewEntry(mergeBuf+offset, key, move, result); return; } // position was not in mergeBuf; look in hash table i = (key & mask); offset = -1; while(hashTab[i].key) { // search in hash table (necessary because sought item could be re-hashed) if(hashTab[i].key == 1 && offset < 0) offset = i; // remember first invalidated entry we pass if(!((hashTab[i].key - key) & ~1)) { // hit if(hashTab[i].move == move) { CountMove(hashTab+i, result); for(j=mergeSize++; j>start; j--) mergeBuf[j] = mergeBuf[j-1]; } else { // position already in hash now occurs with different move; move both moves to mergeBuf for(j=mergeSize+1; j>start+1; j--) mergeBuf[j] = mergeBuf[j-2]; NewEntry(mergeBuf+start+1, key, move, result); mergeSize += 2; } hashTab[i].key = 1; // kludge to invalidate hash entry mergeBuf[start] = hashTab[i]; mergeBuf[start].key = key; if(mergeSize >= MERGESIZE) Merge(); return; } i = i+1 & mask; // wrap! } // position did not yet occur in hash table. Put it there if(offset < 0) offset = i; NewEntry(hashTab+offset, key, move, result); if(appData.debugMode) fprintf(debugFP, "book hash @ %d (%d-%d)\n", offset, hashTab[offset].learnPoints, hashTab[offset].learnCount); } void AddGameToBook (int always) { int i, result; if(!mcMode && !always) return; InitMemBook(); switch(gameInfo.result) { case GameIsDrawn: result = 1; break; case WhiteWins: result = 2; break; case BlackWins: result = 0; break; default: return; // don't treat games with unknown result } if(appData.debugMode) fprintf(debugFP, "add game to book (%d-%d)\n", backwardMostMove, forwardMostMove); for(i=backwardMostMove; i text && start[-1] != ' ' && start[-1] != '\t') start--; while(*end && *++end != ' ' && *end != '\n'); *end = NULLCHAR; // find clicked word if(start != end) TypeInDoneEvent(start); // fake it was typed in move type-in } void FlushBook () { FILE *f; int i; InitMemBook(); Merge(); // flush merge buffer to memBook if(f = fopen(appData.polyglotBook, "wb")) { for(i=0; i #endif extern GameInfo gameInfo; /* ICS vars used with backend.c and zippy.c */ enum ICS_TYPE { ICS_GENERIC, ICS_ICC, ICS_FICS, ICS_CHESSNET /* not really supported */ }; enum ICS_TYPE ics_type; /* pgntags.c prototypes */ char *PGNTags P((GameInfo *)); void PrintPGNTags P((FILE *f, GameInfo *)); int ParsePGNTag P((char *, GameInfo *)); char *PGNResult P((ChessMove result)); /* gamelist.c prototypes */ /* A game node in the double linked list of games. */ typedef struct XB_ListGame { ListNode node; int number; int position; int moves; unsigned long offset; /* Byte offset of game within file. */ GameInfo gameInfo; /* Note that some entries may be NULL. */ } ListGame; extern int border; extern int doubleClick; extern int storedGames; extern int opponentKibitzes; extern ChessSquare gatingPiece; extern List gameList; extern int lastLoadGameNumber; void ClearGameInfo P((GameInfo *)); int GameListBuild P((FILE *)); void GameListInitGameInfo P((GameInfo *)); char *GameListLine P((int, GameInfo *)); char * GameListLineFull P(( int, GameInfo *)); void InitSearch P((void)); int GameContainsPosition P((FILE *f, ListGame *lg)); void GLT_TagsToList P(( char * tags )); void GLT_ParseList P((void)); int NamesToList P((char *name, char **engines, char **mnemonics, char *group)); int CreateTourney P((char *name)); char *MakeName P((char *templ)); void SwapEngines P((int n)); void Substitute P((char *participants, int expunge)); extern char* StripHighlight P((char *)); /* returns static data */ extern char* StripHighlightAndTitle P((char *)); /* returns static data */ extern void ics_update_width P((int new_width)); extern Boolean set_cont_sequence P((char *new_seq)); extern int wrap P((char *dest, char *src, int count, int width, int *lp)); int Explode P((Board board, int fromX, int fromY, int toX, int toY)); typedef enum { CheckBox, ComboBox, TextBox, Button, Spin, ResetButton, SaveButton, ListBox, Graph, PopUp, FileName, PathName, Slider, Message, Fractional, Label, Icon, BoxBegin, BoxEnd, BarBegin, BarEnd, DropDown, Break, EndMark, Skip } Control; typedef struct XB_OPT { // [HGM] options: descriptor of UCI-style option int value; // current setting, starts as default int min; // Also used for flags int max; void *handle; // for use by front end void *target; // for use by front end char *textValue; // points to beginning of text value in name field char **choice; // points to array of combo choices in cps->combo Control type; char *name; // holds both option name and text value (in allocated memory) char **font; } Option; typedef struct XB_CPS { char *which; int maybeThinking; ProcRef pr; InputSourceRef isr; char *twoMachinesColor; /* "white\n" or "black\n" */ char *program; char *host; char *dir; struct XB_CPS *other; char *initString; char *computerString; int sendTime; /* 0=don't, 1=do, 2=test */ int sendDrawOffers; int useSigint; int useSigterm; int offeredDraw; /* countdown */ int reuse; int useSetboard; /* 0=use "edit"; 1=use "setboard" */ int extendedEdit;/* 1=also set holdings with "edit" */ int useSAN; /* 0=use coordinate notation; 1=use SAN */ int usePing; /* 0=not OK to use ping; 1=OK */ int lastPing; int lastPong; int usePlayother;/* 0=not OK to use playother; 1=OK */ int useColors; /* 0=avoid obsolete white/black commands; 1=use them */ int useUsermove; /* 0=just send move; 1=send "usermove move" */ int sendICS; /* 0=don't use "ics" command; 1=do */ int sendName; /* 0=don't use "name" command; 1=do */ int sdKludge; /* 0=use "sd DEPTH" command; 1=use "depth\nDEPTH" */ int stKludge; /* 0=use "st TIME" command; 1=use "level 1 TIME" */ int excludeMoves;/* 0=don't use "exclude" command; 1=do */ char *tidy; int matchWins; char *variants; int analysisSupport; int analyzing; int protocolVersion; int initDone; int pseudo; /* Added by Tord: */ int useFEN960; /* 0=use "KQkq" style FENs, 1=use "HAha" style FENs */ int useOOCastle; /* 0="O-O" notation for castling, 1="king capture rook" notation */ /* End of additions by Tord */ int scoreIsAbsolute; /* [AS] 0=don't know (standard), 1=score is always from white side */ int isUCI; /* [AS] 0=no (Winboard), 1=UCI (requires Polyglot) */ int hasOwnBookUCI; /* [AS] 0=use GUI or Polyglot book, 1=has own book */ /* [HGM] time odds */ float timeOdds; /* factor through which we divide time for this engine */ int debug; /* [HGM] ignore engine debug lines starting with '#' */ int maxNrOfSessions; /* [HGM] secondary TC: max args in 'level' command */ int accumulateTC; /* [HGM] secondary TC: how to handle extra sessions */ int drawDepth; /* [HGM] egbb: search depth to play egbb draws */ int nps; /* [HGM] nps: factor for node count to replace time */ int supportsNPS; int alphaRank; /* [HGM] shogi: engine uses shogi-type coordinates */ int maxCores; /* [HGM] SMP: engine understands cores command */ int memSize; /* [HGM] memsize: engine understands memory command */ char *egtFormats; /* [HGM] EGT: supported tablebase formats */ int bookSuspend; /* [HGM] book: go was deferred because of book hit */ int pause; /* [HGM] pause: 1=supports it, 2=actually paused */ int highlight; /* [HGM] engine wants to get lift and put commands */ int nrOptions; /* [HGM] options: remembered option="..." features */ #define MAX_OPTIONS 200 Option option[MAX_OPTIONS]; int comboCnt; char *comboList[20*MAX_OPTIONS]; char *optionSettings; void *programLogo; /* [HGM] logo: bitmap of the logo */ char *fenOverride; /* [HGM} FRC: force FEN casling & ep fields by hand */ char userError; /* [HGM] crash: flag to suppress fatal-error messages*/ char reload; /* [HGM] options: flag to resend options with xreuse */ } ChessProgramState; extern ChessProgramState first, second; /* Search stats from chessprogram */ typedef struct { char movelist[2*MSG_SIZ]; /* Last PV we were sent */ int depth; /* Current search depth */ int nr_moves; /* Total nr of root moves */ int moves_left; /* Moves remaining to be searched */ char move_name[MOVE_LEN]; /* Current move being searched, if provided */ u64 nodes; /* # of nodes searched */ int time; /* Search time (centiseconds) */ int score; /* Score (centipawns) */ int got_only_move; /* If last msg was "(only move)" */ int got_fail; /* 0 - nothing, 1 - got "--", 2 - got "++" */ int ok_to_send; /* handshaking between send & recv */ int line_is_book; /* 1 if movelist is book moves */ int seen_stat; /* 1 if we've seen the stat01: line */ } ChessProgramStats; extern ChessProgramStats_Move pvInfoList[MAX_MOVES]; extern Boolean shuffleOpenings; extern ChessProgramStats programStats; extern int opponentKibitzes; // used by wengineo.c extern int errorExitStatus; extern char *recentEngines; extern char *comboLine; extern Boolean partnerUp, twoBoards; extern char engineVariant[]; char *EngineDefinedVariant P((ChessProgramState *cps, int n)); void SettingsPopUp P((ChessProgramState *cps)); // [HGM] really in front-end, but CPS not known in frontend.h int WaitForEngine P((ChessProgramState *cps, DelayedEventCallback x)); void Load P((ChessProgramState *cps, int n)); int MultiPV P((ChessProgramState *cps)); void MoveHistorySet P(( char movelist[][2*MOVE_LEN], int first, int last, int current, ChessProgramStats_Move * pvInfo )); void MakeEngineOutputTitle P((void)); void LoadTheme P((void)); void CreateBookEvent P((void)); char *SupportedVariant P((char *list, VariantClass v, int w, int h, int s, int proto, char *engine)); char *CollectPieceDescriptors P((void)); /* A point in time */ typedef struct { long sec; /* Assuming this is >= 32 bits */ int ms; /* Assuming this is >= 16 bits */ } TimeMark; extern TimeMark programStartTime; void GetTimeMark P((TimeMark *)); long SubtractTimeMarks P((TimeMark *, TimeMark *)); #endif /* XB_BACKEND */ xboard-4.8.0/README0000644000175000001440000000450512420374633010607 00000000000000What is XBoard? =============== XBoard is a graphical chessboard for the X Window System. It can serve as a user interface for chess engines such as Fairy-Max, Crafty or GNU Chess, for the Internet Chess Server, or for electronic mail correspondence chess. It supports all major forms of chess, such as international chess, xiangqi and shogi. XBoard can also be used by itself as viewer for stored chess games. See the manual page for further details. XBoard is free software, copyrighted by the Free Software Foundation and released under the GNU General Public License (GPL). See the file COPYING for details. You can build xboard on most systems with the following commands. ./configure make See the file INSTALL for more detailed instructions. See the file FAQ.html for answers to frequently asked questions. What is WinBoard? ================= WinBoard is a port of XBoard to run natively on Windows. It is part of the XBoard project and is released under the same terms as XBoard. You can build WinBoard using the free Cygwin toolchain from www.cygnus.com with the following commands. cd winboard make -f makefile.gcc You can build WinBoard using Microsoft Visual C with the following commands, or by opening the project in Visual Studio and clicking the build button. cd winboard nmake -f makefile.ms Reporting problems ================== Report bugs and problems with XBoard and WinBoard to . With XBoard, please use the "script" program to start a typescript, run XBoard with the -debug command line option, and include the typescript output in your message. With WinBoard, please use the /debug command line option and include the contents of the file WinBoard.debug. Also tell us what kind of machine and what operating system version you are using. On Unix, the command "uname -a" will tell you this. On Windows, right-click on My Computer and select Properties. Here is a sample of approximately what you should type (on Unix): script uname -a ./configure make ./xboard -debug exit mail bug-xboard@gnu.org Subject: Your short description of the problem Your detailed description of the problem ~r typescript . If you improve XBoard, please send a message about your changes, and we will get in touch with you about merging them in to the main line of development. xboard-4.8.0/m4/0000755000175000001440000000000012422467102010317 500000000000000xboard-4.8.0/m4/intlmacosx.m40000644000175000001440000000475312405103157012671 00000000000000# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) xboard-4.8.0/m4/progtest.m40000644000175000001440000000555012421746651012365 00000000000000# progtest.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ(2.50) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) xboard-4.8.0/m4/gettext.m40000644000175000001440000003457012421746651012206 00000000000000# gettext.m4 serial 60 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) xboard-4.8.0/m4/nls.m40000644000175000001440000000226612421746651011313 00000000000000# nls.m4 serial 3 (gettext-0.15) dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) xboard-4.8.0/m4/po.m40000644000175000001440000004460612421746651011141 00000000000000# po.m4 serial 15 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) xboard-4.8.0/m4/lib-prefix.m40000644000175000001440000001503612421746651012557 00000000000000# lib-prefix.m4 serial 5 (gettext-0.15) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing dnl the basename of the libdir, either "lib" or "lib64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. The current dnl practice is that on a system supporting 32-bit and 64-bit instruction dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit dnl libraries go under $prefix/lib. We determine the compiler's default dnl mode by looking at the compiler's library search path. If at least dnl of its elements ends in /lib64 or points to a directory whose absolute dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the dnl default, namely "lib". acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ]) xboard-4.8.0/m4/iconv.m40000644000175000001440000001375312421746651011640 00000000000000# iconv.m4 serial AM6 (gettext-0.17) dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) xboard-4.8.0/m4/lib-link.m40000644000175000001440000007205512421746651012223 00000000000000# lib-link.m4 serial 13 (gettext-0.17) dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.54) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Autoconf >= 2.61 supports dots in --with options. define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], [ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIB[]NAME[]_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) xboard-4.8.0/svg/0000755000175000001440000000000012422467102010576 500000000000000xboard-4.8.0/svg/WhiteGoldSilver.svg0000644000175000001440000000734512420374633014327 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteHSword.svg0000644000175000001440000000713012421746530013453 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackCanon.svg0000644000175000001440000000770112420374633013243 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoHorse.svg0000644000175000001440000001102012421746530014333 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteAdvisor.svg0000644000175000001440000000762312420374633013663 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteHawk.svg0000644000175000001440000001556612420374633013153 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackGoldLance.svg0000644000175000001440000000673112420374633014037 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoHorse.svg0000644000175000001440000001174512421746530014305 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteRook.svg0000644000175000001440000000637512420374633013171 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoSword.svg0000644000175000001440000000640212421746530014361 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackCrownedRook.svg0000644000175000001440000000750612420374633014444 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteNightrider.svg0000644000175000001440000001044112420374633014343 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackArchbishop.svg0000644000175000001440000001405712420374633014271 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_White.svg0000644000175000001440000000532012420374633013006 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteSword.svg0000644000175000001440000000700212421746530013341 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackHawk.svg0000644000175000001440000001643312420374633013101 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteLion.svg0000644000175000001440000002162612421746530013154 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoRook.svg0000644000175000001440000000764512421746530014207 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackGoldPawn.svg0000644000175000001440000000601112420374633013711 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackQueen.svg0000644000175000001440000000770212420374633013263 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoHSword.svg0000644000175000001440000000750312421746530014430 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteQueen.svg0000644000175000001440000001740512420374633013330 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackGoldKnight.svg0000644000175000001440000000726412420374633014243 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteGoldKnight.svg0000644000175000001440000000741512420374633014305 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteBishop.svg0000644000175000001440000001175212420374633013476 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteArchbishop.svg0000644000175000001440000001235412420374633014333 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackCobra.svg0000644000175000001440000001232112420374633013225 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoDragon.svg0000644000175000001440000001072012421746530014427 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackCrownedBishop.svg0000644000175000001440000001201312420374633014743 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoHSword.svg0000644000175000001440000000652112421746530014473 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackKing.svg0000644000175000001440000001302712420374633013073 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteDolphin.svg0000644000175000001440000001240112421746530013637 00000000000000 image/svg+xml xboard-4.8.0/svg/icon_black.svg0000644000175000001440000000627312420374633013337 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackMarshall.svg0000644000175000001440000001203512420374633013744 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Clear.svg0000644000175000001440000000200712420374633012753 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackLeopard.svg0000644000175000001440000002435712421746530013601 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteCommoner.svg0000644000175000001440000000757212420374633014036 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPrincess.svg0000644000175000001440000001501512420374633013770 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoSword.svg0000644000175000001440000000737212421746530014324 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteUnicorn.svg0000644000175000001440000001402212420374633013660 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackUnicorn.svg0000644000175000001440000001411112420374633013613 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoBishop.svg0000644000175000001440000001140212421746530014503 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteGold.svg0000644000175000001440000000711112420374633013131 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackRook.svg0000644000175000001440000000706012420374633013115 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteKing.svg0000644000175000001440000001050212420374633013132 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteGoldLance.svg0000644000175000001440000000711112420374633014074 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteClaw.svg0000644000175000001440000001726012421746530013140 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteCobra.svg0000644000175000001440000001052512420374633013275 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteMarshall.svg0000644000175000001440000001224112420374633014007 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Analyzing.svg0000644000175000001440000001023512420374633013663 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteLance.svg0000644000175000001440000000571512420374633013276 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoRook.svg0000644000175000001440000001015112421746530014125 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteChancellor.svg0000644000175000001440000002233712420374633014325 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackLance.svg0000644000175000001440000000571512420374633013232 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackGold.svg0000644000175000001440000000673412420374633013077 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackSword.svg0000644000175000001440000000775112421746530013310 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePrincess.svg0000644000175000001440000001531412420374633014036 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackBishop.svg0000644000175000001440000001275312420374633013434 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePromoDragon.svg0000644000175000001440000001061212421746530014473 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackHCrown.svg0000644000175000001440000001667712421746530013421 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteCrownedBishop.svg0000644000175000001440000001114612420374633015015 00000000000000 image/svg+xml xboard-4.8.0/svg/icon_white.svg0000644000175000001440000000673112420374633013402 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteLeopard.svg0000644000175000001440000002410412421746530013633 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackLion.svg0000644000175000001440000002150212421746530013101 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteGoldPawn.svg0000644000175000001440000000626212420374633013765 00000000000000 image/svg+xml xboard-4.8.0/svg/WhitePawn.svg0000644000175000001440000000356012420374633013155 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackKnight.svg0000644000175000001440000001211512420374633013424 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteHCrown.svg0000644000175000001440000001717712421746530013461 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackClaw.svg0000644000175000001440000001731312421746530013073 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Ponder.svg0000644000175000001440000001242212420374633013156 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteCanon.svg0000644000175000001440000000674012420374633013311 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteKnight.svg0000644000175000001440000001115112420374633013467 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackDolphin.svg0000644000175000001440000001237212421746530013602 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackElephant.svg0000644000175000001440000001712012420374633013741 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Unknown.svg0000644000175000001440000000531712420374633013373 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteElephant.svg0000644000175000001440000001531212420374633014006 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackNightrider.svg0000644000175000001440000001312712420374633014303 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackGoldSilver.svg0000644000175000001440000000717112420374633014260 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPromoBishop.svg0000644000175000001440000001256712421746530014454 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Black.svg0000644000175000001440000000530512420374633012745 00000000000000 image/svg+xml xboard-4.8.0/svg/eo_Thinking.svg0000644000175000001440000001057212420374633013506 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackAdvisor.svg0000644000175000001440000001010012420374633013577 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackCommoner.svg0000644000175000001440000001031112420374633013753 00000000000000 image/svg+xml xboard-4.8.0/svg/WhiteCrownedRook.svg0000644000175000001440000000731112420374633014502 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackHSword.svg0000644000175000001440000001007212421746530013406 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackChancellor.svg0000644000175000001440000001513112420374633014253 00000000000000 image/svg+xml xboard-4.8.0/svg/BlackPawn.svg0000644000175000001440000000357112420374633013113 00000000000000 image/svg+xml xboard-4.8.0/compile0000755000175000001440000001624512407335704011312 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xboard-4.8.0/zippy.README0000644000175000001440000004525012420374633011763 00000000000000Zippy README file For version xboard/WinBoard 4.2.4 and later only ----------------------------------------------------- Zippy is a program that lets GNU Chess act as a computer player on an Internet Chess Server. It also works with Crafty. Zippy is unsupported, experimental code. Zippy is based on XBoard, a graphical interface to GNU Chess and to the ICS for the X Window system on Unix. Zippy consists of exactly the same code as XBoard, plus one extra module that ties together the otherwise-separate functions of talking to GNU Chess and talking to the ICS. Zippy is included in the XBoard distribution. There is also a version of Zippy that is based on WinBoard, a port of XBoard to Win32 (Microsoft Windows NT and Windows 95). WinBoard does *not* run on Windows 3.1 or 3.11, not even with Win32s. In versions 3.5 and later, the Zippy code is included in WinBoard.exe. If you use Zippy, I ask you to do the following: - Don't expect fast response if you send me mail about problems. It might take weeks for me to get back to you, or I might answer right away. Try to solve problems yourself before you mail me about them. Try asking someone who is actively running a Zippy-based player on ICC or FICS for help getting started. Mail me only if you get stuck. - Be honest. Tell the admins of whatever ICS you use that your player is a computer, so that it gets put onto the computer list, and follow the ICS computer policies. On ICC these are in "help computer"; read this file and abide by what it says. - If you want to interface some other chess program to ICS, feel free to start with this code. Some documentation is in the file engine-intf.html in the distribution. - Please do not use the -zt flag to have your program shout Zippy the Pinhead sayings (or other things that my Zippy shouts). One pinhead per server is plenty, and I'd like to keep the franchise. Feel free to use -zt to have your program shout some other kind of sayings if you like. Some of the jokes that Zippy shouts on ICC came from ftp://ftp.cco.caltech.edu/pub/humor. The poetry came from Project Gutenberg; try http://www.cs.cmu.edu/Web/booktitles.html as a starting point. You might find other suitable material at these sites. Prose tends to work poorly because it is dull when shouted in isolated 250-character chunks. --Tim Mann http://www.tim-mann.org/chess.html * * * Unix: To build the Zippy version of xboard, on most systems just do: configure --enable-zippy make Windows: WinBoard.exe (versions 3.5 and later) includes the Zippy code. There is no longer a distinct WinZippy.exe. In both xboard and WinBoard, the Zippy features are off by default. You can activate them with two new resources/command line options, and you can fine-tune them with some new environment variables, all described below. You will probably want to make a shell script or Windows .BAT file that sets the environment variables you want to use and invokes Zippy with the right command line options for your situation. Some examples are at the bottom of this file. If you have problems building or running Zippy, see the rest of the xboard documentation: INSTALL documents the configure program, while READ_ME and xboard.man (or xboard.txt) document xboard itself, and WinBoard.hlp documents WinBoard. FAQ answers some frequently asked questions. The file engine-intf.html contains some information about the interface between xboard/WinBoard and GNU Chess (or other chess engines). =========== NEW OPTIONS =========== -zippyPlay True/False or -zp/-xzp If zippyPlay is set to True, when xboard is in -ics mode, it will interface a chess engine to the ICS instead of letting you play. You must also set -ics when you use this mode. In zippyPlay mode, xboard blindly issues an accept command for every (well, almost every, see below) challenge it gets, without remembering anything about the challenge afterwards. This means that often it will get several challenges very close together and try to accept them all! ICS gives an error message for every accept command after the one that actually starts a match, but xboard just happily ignores the message. xboard doesn't actually start the chess engine playing until the first board image comes in from ICS. The getMoveList option controls how adjourned games are continued. If it is True (the default), xboard fetches the move list from ICS and feeds it into the chess program before having the program start play. If False, xboard feeds the current position into the chess program and has it start from there. The latter option gets the program going sooner, but can cause problems with detection of en passant legality, castling legality (if a king or rook has moved and then returned to its home square), draw by repetition, and draw by the 50 move rule. In zippyPlay mode, colorization in the ICS interaction window, and the sounds corresponding to colors in that window, do not work. zippyPassword and related features (see below) capture the tells, etc., before they can be matched by the color/sound code. -zippyTalk True/False or -zt/-xzt If zippyTalk is set to True and xboard is in -ics mode: (1) It will reply to anything said to it with a saying (if there is a file of sayings in its working directory). This includes channel tells and shouts where its name is mentioned. Some things it says to opponents in specific situations will also be made Zippy-ish; you might want to change that. See zippyLines below for the file format. (2) If a player XXX in your notify list logs on, xboard sends the command "greet XXX" to ICS and tells XXX something from its sayings file. You can alias this to whatever you like. If XXX is censoring you, he is automatically removed from your notify list. (3) If a player XXX in your notify list logs off, xboard sends the command "farewell XXX" to ICS. You can alias this to whatever you like. Note that the player is already gone, so telling him something is futile. If zippyTalk is on, colorization in the ICS interaction window, and the sounds corresponding to colors in that window, do not work. The reply feature captures the tells, etc., before they can be matched by the color/sound code. In both -zp and -zt modes, if admin X spoofs Zippy, Zippy sends the command "spoofedby X" to ICS. You can alias this to something if you want; otherwise it will produce a harmless error message. -zippyPinhead string In zippyTalk mode, if user XXX shouts anything containing this string, xboard sends the command "insult XXX" to ICS. You can alias "insult" to whatever you like. This feature is disabled if the option is not set. -zippyPassword string If someone does an ICS "tell" to xboard that begins with this password, it will type the same string back as a command with the password stripped off. For example, if the password is !%%! and xboard sees the string "Darooha tells you: !%%!shout Hi there", it will type the command "shout Hi there" to the ICS. This feature is disabled if the option is not set. -zippyPassword2 string If someone does an ICS "tell" to xboard that begins with this password, it will send the same string directly to the chess engine with the password stripped off. This feature is disabled if the option is not set. Use with caution. -zippyWrongPassword string This is a joke feature. If player XXX does an ICS "tell" to xboard that begins with this password, it will send the command "wrong XXX" to ICS. ICS does not define a "wrong" command, but you can alias it to whatever you like. The feature is supposed to be used after you've changed the zippyPassword, so that people who knew the old password get a funny message. Disabled if not set. -zippyUseI True/False or -zui/-xzui If this option is true, Zippy's shouts use the "i" command with funny verbs; otherwise they use the "shout" command. Default is true. The variable is automatically set to false if the "i" command is disabled on ICS by the admins. -zippyLines filename Name of the file Zippy looks in for sayings when -zt is set. Default: yow.lines. File format: There must be a single ^ character or null character (control-@, ASCII code \000) after each saying. Sayings can have newlines in them; Zippy will remove them. Sayings can be at most about 250 characters; longer ones will be ignored. The first saying in the file is never used; you should put a comment there. If you have only one or two sayings in your file, Zippy may get into a loop trying to choose one. Zippy chooses a saying by seeking to a random character position in the file, skipping ahead to the *next* null character, and printing the saying that starts there. If it hits end of file without finding a new saying, it tries again. Yes, this is a dumb algorithm. -zippyAcceptOnly string Normally, Zippy automatically accepts challenges from all opponents. If this option is set to an ICS login name, Zippy will auto-accept challenges only from that opponent. Set the option to an invalid name like "0" if you don't want Zippy to auto-accept any challenges. You can still accept challenges manually. Setting this option also suppresses the zippyGameEnd feature described below. Default: not set. -zippyNoplayCrafty True/False or -znc/-xznc If this option is set to True, if Zippy's opponent kibitzes "Hello from Crafty" within the first couple of moves, Zippy will abort the game and add the opponent to his noplay list. Default: False. -zippyGameStart string At the start of each game Zippy plays (including resuming from adjournment), it sends this string to ICS, followed by a newline. If the option is not set, nothing is sent. -zippyGameEnd string At the end of each game, Zippy sends this string to ICS, followed by a newline. If you do not set this option, the string "gameend" is sent. This is not a legal ICS command, but you can alias it to whatever you like, or you can leave it undefined, which will cause ICS to print a harmless error message after each game. If you want to send more than one command at the end of the game, on ICC you can alias gameend to a "multi" command (see the ICC help files), but on FICS that does not work. Instead, use the -zippyGameEnd option to have a string of several commands sent, with newlines in between. For example, you could give WinBoard the command line option -zippyGameEnd=\"say thanks\\nseek 5 0\\nseek 2 12\\n\" Note the extra backslashes: these are essential, because the shell will strip them from the command before passing it to XBoard, and XBoard needs to see the quotes (which would otherwise be stripped by the shell as well), because only within quotes it will recognize the \n as a linefeed. -zippyAdjourn True/False or -zadj/-xzadj Zippy will allow its opponent to adjourn if this option is set to true. Default: False. -zippyAbort True/False or -zab/-xzab Zippy will allow its opponent to abort if this option is set to true. Default: False. -zippyVariants string Zippy will decline to play chess variants unless their names (as given in engine-intf.html) are listed in this option. Default: "normal". Example: "suicide,losers,bughouse,normal". Obviously, zippyVariants other than "normal" will work only if your chess engine can play those variants. GNU Chess certainly cannot, but there are some suicide and bughouse engines available. While playing bughouse, Zippy passes certain extra information on to the engine; see engine-intf.html. -zippyBughouse int This option controls how Zippy handles bughouse partner requests. If zippyBughouse is set to 0, Zippy will decline any offers of partnership and tell the offerer that it cannot play bughouse. If zippyBughouse is set to 1, Zippy will decline offers, but you can make Zippy your partner by having *it* offer *you* partnership (by using zippyPassword or typing directly into its window). If zippyBughouse is set to 2, Zippy will accept all offers of partnership, even if it already has a partner. zippyBughouse must be at least 1 for partner tells to be relayed to the engine with the ptell command. -zippyMaxGames int -zippyReplayTimeout If zippyMaxGames > 0, Zippy will play at most the given number of consecutive games against the same opponent. Thereafter, Zippy will decline all challenges from that opponent (with an explanatory tell) until either someone else has played or zippyReplayTimeout seconds have elapsed. Defaults: zippyMaxGames=0, zippyReplayTimeout=120. Note: If you use these options and you have Zippy doing seeks, be sure to include the "m" flag in the ICS seek command. If you use "seek m", when a player responds to the seek, the ICS gives Zippy a challenge that it can either accept or decline. If you use a seek without the "m" flag, the ICS immediately starts a game between Zippy and the first opponent to respond, giving Zippy no choice about whether to accept or decline. -zippyShortGame int If zippyShortGame > 0, Zippy will decline all challenges from an opponent that terminated a game before the given number of ply (with an explanatory tell) until either someone else has played or zippyReplayTimeout seconds have elapsed. Do not set the number of moves to large; the number of ply during which opponents can abort a game without rating change would be a good setting. Default: zippyShortGame=0. ===================== ENVIRONMENT VARIABLES ===================== For backward compatibility with version 4.0.2 and earlier only, most of the command line options listed above can also be set as environment variables. For boolean options, use 0 for false, 1 for true in the corresponding environment variable. The following environment variables are supported.: ZIPPYPINHEAD, ZIPPYPASSWORD, ZIPPYPASSWORD2, ZIPPYWRONGPASSWORD, ZIPPYUSEI, ZIPPYLINES, ZIPPYACCEPTONLY, ZIPPYNOPLAYCRAFTY, ZIPPYGAMESTART, ZIPPYGAMEEND, ZIPPYADJOURN, ZIPPYABORT, ZIPPYVARIANTS, ZIPPYBUGHOUSE Warnings: (1) If both the command line option and the corresponding environment variable are set, the environment variable takes precedence! (2) Some of the environment variables have names that are too long for Solaris 2.5's /bin/csh. Use the command line options instead. (3) Newer options DO NOT have environment variables. If you don't see it in the list above, it doesn't exist. (4) In the future the environment variables may go away entirely. It would be a good idea to stop using them now and switch to the command line options. You may also want to customize other things by editing zippy.c and recompiling the program. ===================== ICS VARIABLE SETTINGS ===================== You need to do the following settings on ICS: set highlight 0 <-- I'm not sure this is still needed set oldmatch 0 set examine 0 If you want to use the zippyPassword remote-control feature, it's a good idea to do the following, so that commands you give Zippy won't be truncated because the ICS wrapped a "tell" to a new line: set wrap 0 <-- on ICC, or set width 255 <-- on FICS You will probably want to turn on server-side autoflagging too: set autoflag 1 ====== SIMULS ====== It has been discovered that Zippy can play simuls on ICC (but not on FICS). If you arrange for Zippy to send the ICC command "simulize" in the -zippyGameStart string, it will accept additional games while playing. Zippy will use the same engine for every game, so whenever it switches opponents, the engine's state will be reset with the "new" command. This will of course weaken its play, so don't enable simuls if you want your engine to have the highest possible rating. Zippy was never designed to work with simuls; it just works by accident, and it hasn't been tested much. So please report any bugs you notice, but don't expect them to be fixed rapidly. Be sure to use xboard/WinBoard 4.2.4 or later for simuls, because some obscure bugs are fixed in that version that affect starting a game in the middle (as with resuming from adjournments or switching opponents in a simul). As noted under -zippyPlay above, you should have -getMoveList on to ensure that the engine knows the game history after switching boards and thus handles draw by repetition and by the 50-move rule correctly. It should, however, also work to turn off this option to speed things up and reduce network bandwidth, if you don't mind the engine occasionally failing to see draw possibilities. Unfortunately, though, with Crafty 18.3 (and probably other versions too) as the engine, users trying this have experienced Crafty crashes. This looks to me like a Crafty bug, but I wasn't able to reproduce it, so it remains a mystery. ======== EXAMPLES ======== Here are some small example command lines. You may want to use more options; see the man page, info file, or help file, and perhaps the FAQ file too. You may want to put the command line into a Unix shell script or Windows .BAT file, which is simply a text file of commands. On Unix, turn on execute permission for the file (chmod a+x file); on Windows, give it the extension .BAT. You can then run it just like an ordinary program. Please do not ask me questions about how to make a shell script or .BAT file; these are not functions of xboard/WinBoard, but basic operating system features that you can learn about from introductory books, friends, teachers, or the online help for your system. The examples below should be more than enough to get you started. Unix command lines: # xboard + GNU Chess on chessclub.com xboard -zp -ics -icshost chessclub.com -icshelper timestamp \ -zippyPassword beer # xboard + GNU Chess on freechess.org xboard -zp -ics -icshost freechess.org -icshelper timeseal \ # xboard + Crafty on chessclub.com xboard -zp -ics -icshost chessclub.com \ -fd /home/crafty -fcp crafty -icshelper timestamp \ -zippyPassword beer # xboard + Crafty on freechess.org xboard -zp -ics -icshost freechess.org -autoflag \ -fd /home/crafty -fcp crafty -icshelper timeseal \ -zippyPassword beer Windows command lines: REM WinBoard + GNU Chess on chessclub.com WinBoard -zp -ics -icshost chessclub.com -fcp GNUChess -icshelper timestamp -zippyPassword beer REM WinBoard + GNU Chess on freechess.org WinBoard -zp -ics -icshost freechess.org -fcp GNUChess -icshelper timeseal -zippyPassword beer REM WinBoard + Crafty on chessclub.com WinBoard -zp -ics -icshost chessclub.com -fd C:\Crafty -fcp WCrafty -icshelper timestamp -zippyPassword beer REM WinBoard + Crafty on freechess.org WinBoard -zp -ics -icshost freechess.org -fd C:\Crafty -fcp WCrafty -icshelper timestamp -zippyPassword beer xboard-4.8.0/engineoutput.h0000644000175000001440000000536312421746530012631 00000000000000/* * wengineo.h -- Clipboard routines for WinBoard * * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ // [HGM] define numbers to indicate icons, for referring to them in platform-independent way #define nColorBlack 1 #define nColorWhite 2 #define nColorUnknown 3 #define nClear 4 #define nPondering 5 #define nThinking 6 #define nAnalyzing 7 // [HGM] same for output fields (note that there are two of each type, one per color) #define nColorIcon 1 #define nLabel 2 #define nStateIcon 3 #define nStateData 4 #define nLabelNPS 5 #define nMemo 6 /* must match the ranking of the TextBox in following option list! */ #define STRIDE 7 /* must match the number of option in one pane! */ #define MEMO (nMemo-1) /* Module variables */ #define H_MARGIN 2 #define V_MARGIN 2 #define LABEL_V_DISTANCE 1 /* Distance between label and memo */ #define SPLITTER_SIZE 4 /* Distance between first memo and second label */ #define ICON_SIZE 14 enum ENGINE_STATE { STATE_UNKNOWN, STATE_THINKING, STATE_IDLE, STATE_PONDERING, STATE_ANALYZING }; extern int windowMode; extern char exclusionHeader[]; extern int highTextStart[2], highTextEnd[2]; // back-end called by front-end void SetEngineState( int which, enum ENGINE_STATE state, char * state_data ); // front-end called by back-end void SetEngineColorIcon( int which ); void SetIcon( int which, int field, int nIcon ); void DoSetWindowText(int which, int field, char *s_label); void InsertIntoMemo( int which, char * text, int where ); void DoClearMemo(int which); void ResizeWindowControls( int mode ); int EngineOutputDialogExists(); void SetEngineOutputTitle( char *title ); void Collapse P((int colNr)); void InitEngineOutput P((Option *opt, Option *memo2)); // XB only void DrawWidgetIcon P((Option *opt, int nIcon)); // XB only xboard-4.8.0/childio.h0000644000175000001440000000474112420374633011515 00000000000000/* * childio.h -- set up communication with child processes * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ void SetUpChildIO P((int to_prog[2], int from_prog[2])); xboard-4.8.0/nhistory.c0000644000175000001440000000657112421746612011760 00000000000000/* * New (WinBoard-style) Move history for XBoard * * Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * ------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "dialogs.h" #include "gettext.h" #ifdef ENABLE_NLS # define _(s) gettext (s) # define N_(s) gettext_noop (s) #else # define _(s) (s) # define N_(s) s #endif // templates for calls into back-end (= history.c; should be moved to history.h header shared with it!) void RefreshMemoContent P((void)); void MemoContentUpdated P((void)); // variables in xoptions.c extern Option historyOptions[]; // ------------- low-level front-end actions called by MoveHistory back-end ----------------- void ClearHistoryMemo () { SetWidgetText(&historyOptions[0], "", HistoryDlg); } // the bold argument says 0 = normal, 1 = bold typeface // the colorNr argument says 0 = font-default, 1 = gray int AppendToHistoryMemo (char * text, int bold, int colorNr) { return AppendText(&historyOptions[0], text); // for now ignore bold & color stuff, as Xaw cannot handle that } void HighlightMove (int from, int to, Boolean highlight) { HighlightText (&historyOptions[0], from, to, highlight); } char *historyText; int SelectMove (Option *opt, int n, int x, int y, char *text, int index) { if(n != 3 && n != 1) return FALSE; // only on button-1 and 3 press FindMoveByCharIndex( index ); // [HGM] also does the actual moving to it, now return (n == 3); // suppress context menu for button 3, but allow selection with button 1 } Option historyOptions[] = { { 200, T_VSCRL | T_FILL | T_WRAP | T_TOP, 400, NULL, (void*) &historyText, NULL , (char**) &SelectMove, TextBox, "", &appData.historyFont }, { 0, NO_OK, 0, NULL, (void*) NULL, "", NULL, EndMark , "" } }; void ScrollToCurrent (int caretPos) { ScrollToCursor(&historyOptions[0], caretPos); } // ------------ standard entry points into MoveHistory code ----------- Boolean MoveHistoryIsUp () { return shellUp[HistoryDlg]; } Boolean MoveHistoryDialogExists () { return DialogExists(HistoryDlg); } void HistoryPopUp () { if(GenericPopUp(historyOptions, _("Move list"), HistoryDlg, BoardWindow, NONMODAL, appData.topLevel)) AddHandler(&historyOptions[0], HistoryDlg, 0); MarkMenu("View.MoveHistory", HistoryDlg); } void HistoryShowProc () { if (!shellUp[HistoryDlg]) { ASSIGN(historyText, ""); HistoryPopUp(); RefreshMemoContent(); MemoContentUpdated(); } else PopDown(HistoryDlg); ToNrEvent(currentMove); } xboard-4.8.0/xboard.xml0000644000175000001440000000651112420374633011727 00000000000000 PGN chess game notation تدوينة لعبة الشطرنج PGN Zaciem ab šachmatnaj partyi PGN Zaciem ab šachmatnaj partyi PGN Игра шах — PGN notació de joc d'escacs PGN Šachová notace PGN PGN-skakspilsnotation PGN-Schachspielnotation PGN chess game notation Notación de partida de ajedrez PGN PGN xake jokoaren notazioa PGN-šakkipelinotaatio notation de jeu d'échecs PGN nodaireacht chluiche ficheall PGN PGN sakkfeljegyzés Notasi permainan catur PGN Notazione partita a scacchi PGN PGN チェスゲーム記録 PGN шахмат ойыны PGN 체스게임 기보 PGN šachmatų žaidimo žymėjimas PGN šaha spēles notācija PGN sjakkspillnotasjon PGN-schaakspelnotatie PGN-sjakkspelnotasjon Plik PGN notacji gry w szachy Notação de jogo de xadrez PGN Notație joc șah PGN шахматная партия PGN Njoftim loje shahu PGN PGN-schackpartinotation запис гри у шахи PGN Cách ghi lượt chơi cờ PGN PGN 象棋游戏注记 PGN chess position XBoard tournament XBoard options xboard-4.8.0/configure0000755000175000001440000114545112422467077011654 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for xboard 4.8.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-xboard@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xboard' PACKAGE_TARNAME='xboard' PACKAGE_VERSION='4.8.0' PACKAGE_STRING='xboard 4.8.0' PACKAGE_BUGREPORT='bug-xboard@gnu.org' PACKAGE_URL='' gt_needs= # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CONFIGURE_OPTIONS ZIPPY_FALSE ZIPPY_TRUE CONF_LDFLAGS CONF_CFLAGS POST_XMULIB PRE_XMULIB FRONTEND_LIBS FRONTEND_CFLAGS SW_VERS withXaw_FALSE withXaw_TRUE withGTK_FALSE withGTK_TRUE X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF GTK_LIBS GTK_CFLAGS GAMEDATADIR MIMEDIR DESKTOPDIR SVGICONSDIR ICONSDIR XDG_ICON_RESOURCE XDG_DESKTOP_MENU XDG_MIME ENABLE_UPDATE_MIMEDB_FALSE ENABLE_UPDATE_MIMEDB_TRUE OSX_APP_FALSE OSX_APP_TRUE CAIRO_LIBS CAIRO_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG PKGCONFIG EGREP GREP PERLPATH AWKPATH NROFFFLAGS NROFF MINFO RSH POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix with_gtk with_Xaw3d with_Xaw with_iconsdir with_svgiconsdir with_desktopdir with_mimedir with_gamedatadir enable_update_mimedb enable_osxapp with_x enable_ptys enable_zippy enable_sigint ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR CAIRO_CFLAGS CAIRO_LIBS GTK_CFLAGS GTK_LIBS XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures xboard 4.8.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/xboard] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of xboard 4.8.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-update-mimedb disable the update-mime-database after install [default=no] --enable-osxapp build a OSX app [default=no] --enable-ptys force use of pseudo-ttys with child processes --enable-zippy support interfacing a chess program to ICS (default) --enable-sigint sending SIGINT (^C) wakes up GNU Chess (default) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-gtk use GTK front-end --with-Xaw3d use Xaw3d front-end (not fully supported anymore) --with-Xaw use Xaw front-end (default) --with-iconsdir=DIR path where icons get installed (default: $datadir/icons/hicolor/48x48/apps) --with-svgiconsdir=DIR path where svg icons get installed (default: $datadir/icons/hicolor/scalable/apps) --with-desktopdir=DIR path where desktop files get installed (default: $datadir/applications) --with-mimedir=DIR path where mime files get installed (default: $datadir/mime/packages) --with-gamedatadir=DIR path where game data files get installed (default: $datadir/games/xboard) --with-x use the X Window System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path CAIRO_CFLAGS C compiler flags for CAIRO, overriding pkg-config CAIRO_LIBS linker flags for CAIRO, overriding pkg-config GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF xboard configure 4.8.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------- ## ## Report this to bug-xboard@gnu.org ## ## --------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by xboard $as_me 4.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.13' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='xboard' VERSION='4.8.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers config.h" if test -z "$CFLAGS" ; then CFLAGS=" " fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.17 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBICONV_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBINTL_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" for ac_prog in remsh rsh do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RSH+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RSH"; then ac_cv_prog_RSH="$RSH" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RSH="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RSH=$ac_cv_prog_RSH if test -n "$RSH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RSH" >&5 $as_echo "$RSH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$RSH" && break done test -n "$RSH" || RSH="rsh" for ac_prog in makeinfo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MINFO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MINFO"; then ac_cv_prog_MINFO="$MINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MINFO="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MINFO=$ac_cv_prog_MINFO if test -n "$MINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MINFO" >&5 $as_echo "$MINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MINFO" && break done test -n "$MINFO" || MINFO="makeinfo_not_found" if test "$MINFO" = makeinfo_not_found ; then echo Please install \"makeinfo\" exit 1 fi cat >>confdefs.h <<_ACEOF #define REMOTE_SHELL "$RSH" _ACEOF # Extract the first word of "nroff", so it can be a program name with args. set dummy nroff; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NROFF+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NROFF"; then ac_cv_prog_NROFF="$NROFF" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NROFF="nroff -man" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_NROFF" && ac_cv_prog_NROFF="cat" fi fi NROFF=$ac_cv_prog_NROFF if test -n "$NROFF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NROFF" >&5 $as_echo "$NROFF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in awk mawk gawk nawk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AWKPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $AWKPATH in [\\/]* | ?:[\\/]*) ac_cv_path_AWKPATH="$AWKPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AWKPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AWKPATH=$ac_cv_path_AWKPATH if test -n "$AWKPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWKPATH" >&5 $as_echo "$AWKPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWKPATH" && break done for ac_prog in perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERLPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $PERLPATH in [\\/]* | ?:[\\/]*) ac_cv_path_PERLPATH="$PERLPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERLPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERLPATH=$ac_cv_path_PERLPATH if test -n "$PERLPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERLPATH" >&5 $as_echo "$PERLPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PERLPATH" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stropts.h sys/time.h string.h unistd.h sys/systeminfo.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h sys/fcntl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done for ac_header in sys/socket.h lan/socket.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done ac_fn_c_check_header_mongrel "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" if test "x$ac_cv_header_stddef_h" = xyes; then : else $as_echo "#define X_WCHAR 1" >>confdefs.h fi for ac_func in _getpty grantpt setitimer usleep do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in gettimeofday ftime do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break fi done for ac_func in random rand48 do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break fi done for ac_func in gethostname sysinfo do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF break fi done ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setlocale in -li" >&5 $as_echo_n "checking for setlocale in -li... " >&6; } if ${ac_cv_lib_i_setlocale+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-li $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setlocale (); int main () { return setlocale (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_i_setlocale=yes else ac_cv_lib_i_setlocale=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_i_setlocale" >&5 $as_echo "$ac_cv_lib_i_setlocale" >&6; } if test "x$ac_cv_lib_i_setlocale" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBI 1 _ACEOF LIBS="-li $LIBS" else $as_echo "#define X_LOCALE 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpseudotty in -lseq" >&5 $as_echo_n "checking for getpseudotty in -lseq... " >&6; } if ${ac_cv_lib_seq_getpseudotty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lseq $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getpseudotty (); int main () { return getpseudotty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_seq_getpseudotty=yes else ac_cv_lib_seq_getpseudotty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_seq_getpseudotty" >&5 $as_echo "$ac_cv_lib_seq_getpseudotty" >&6; } if test "x$ac_cv_lib_seq_getpseudotty" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSEQ 1 _ACEOF LIBS="-lseq $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler understands -Wall -Wno-parentheses" >&5 $as_echo_n "checking whether compiler understands -Wall -Wno-parentheses... " >&6; } SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall -Wno-parentheses" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } CFLAGS="$SAVE_CFLAGS" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext for ac_prog in pkg-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PKGCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PKGCONFIG"; then ac_cv_prog_PKGCONFIG="$PKGCONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKGCONFIG="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi PKGCONFIG=$ac_cv_prog_PKGCONFIG if test -n "$PKGCONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 $as_echo "$PKGCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PKGCONFIG" && break done test -n "$PKGCONFIG" || PKGCONFIG="pkgconfig_not_found" if test "x$PKGCONFIG" = xpkgconfig_not_found; then : as_fn_error $? "cannot find pkg-config! Please install it." "$LINENO" 5 fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 $as_echo_n "checking for CAIRO... " >&6; } if test -n "$CAIRO_CFLAGS"; then pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CAIRO_LIBS"; then pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 " 2>&1` else CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CAIRO_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ( cairo >= 1.2.0 librsvg-2.0 >= 2.14.0 ) were not met: $CAIRO_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables CAIRO_CFLAGS and CAIRO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables CAIRO_CFLAGS and CAIRO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS CAIRO_LIBS=$pkg_cv_CAIRO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi FRONTEND_CFLAGS="" FRONTEND_LIBS="" # Check whether --with-gtk was given. if test "${with_gtk+set}" = set; then : withval=$with_gtk; with_GTK=$withval else with_GTK="no" fi # Check whether --with-Xaw3d was given. if test "${with_Xaw3d+set}" = set; then : withval=$with_Xaw3d; with_Xaw3d="$withval" else with_Xaw3d="no" fi # Check whether --with-Xaw was given. if test "${with_Xaw+set}" = set; then : withval=$with_Xaw; with_Xaw="$withval" else with_Xaw="yes" fi # Check whether --with-iconsdir was given. if test "${with_iconsdir+set}" = set; then : withval=$with_iconsdir; ICONSDIR="$withval" else ICONSDIR='$(datadir)/icons/hicolor/48x48/apps' fi # Check whether --with-svgiconsdir was given. if test "${with_svgiconsdir+set}" = set; then : withval=$with_svgiconsdir; SVGICONSDIR="$withval" else SVGICONSDIR='$(datadir)/icons/hicolor/scalable/apps' fi # Check whether --with-desktopdir was given. if test "${with_desktopdir+set}" = set; then : withval=$with_desktopdir; DESKTOPDIR="$withval" else DESKTOPDIR='$(datadir)/applications' fi # Check whether --with-mimedir was given. if test "${with_mimedir+set}" = set; then : withval=$with_mimedir; MIMEDIR="$withval" else MIMEDIR='$(datadir)/mime/packages' fi # Check whether --with-gamedatadir was given. if test "${with_gamedatadir+set}" = set; then : withval=$with_gamedatadir; GAMEDATADIR="$withval" else GAMEDATADIR='$(datadir)/games/xboard' fi # Check whether --enable-update-mimedb was given. if test "${enable_update_mimedb+set}" = set; then : enableval=$enable_update_mimedb; enable_mimedb="no" else enable_mimedb="yes" fi # Check whether --enable-osxapp was given. if test "${enable_osxapp+set}" = set; then : enableval=$enable_osxapp; enable_OSXAPP=$enableval else enable_OSXAPP="no" fi if test x"$enable_OSXAPP" = x"yes"; then : prefix=`pwd`/XBoard.app/Contents $as_echo "#define OSXAPP 1" >>confdefs.h with_GTK="yes" enable_mimedb="no" datarootdir='$(prefix)/Resources' datadir='$(datarootdir)/share' sysconfdir='$(datarootdir)/etc' infodir='$(datadir)/info' mandir='$(datadir)/man' bindir='$(prefix)/MacOS' localedir='$(datadir)/locale' GAMEDATADIR='$(datadir)/xboard' fi if test x"$enable_OSXAPP" = x"yes"; then OSX_APP_TRUE= OSX_APP_FALSE='#' else OSX_APP_TRUE='#' OSX_APP_FALSE= fi if test x"$enable_mimedb" = x"yes"; then ENABLE_UPDATE_MIMEDB_TRUE= ENABLE_UPDATE_MIMEDB_FALSE='#' else ENABLE_UPDATE_MIMEDB_TRUE='#' ENABLE_UPDATE_MIMEDB_FALSE= fi if test x"$enable_mimedb" = x"yes"; then # Extract the first word of "xdg-mime", so it can be a program name with args. set dummy xdg-mime; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XDG_MIME+:} false; then : $as_echo_n "(cached) " >&6 else case $XDG_MIME in [\\/]* | ?:[\\/]*) ac_cv_path_XDG_MIME="$XDG_MIME" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XDG_MIME="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XDG_MIME=$ac_cv_path_XDG_MIME if test -n "$XDG_MIME"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XDG_MIME" >&5 $as_echo "$XDG_MIME" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xdg-desktop-menu", so it can be a program name with args. set dummy xdg-desktop-menu; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XDG_DESKTOP_MENU+:} false; then : $as_echo_n "(cached) " >&6 else case $XDG_DESKTOP_MENU in [\\/]* | ?:[\\/]*) ac_cv_path_XDG_DESKTOP_MENU="$XDG_DESKTOP_MENU" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XDG_DESKTOP_MENU="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XDG_DESKTOP_MENU=$ac_cv_path_XDG_DESKTOP_MENU if test -n "$XDG_DESKTOP_MENU"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XDG_DESKTOP_MENU" >&5 $as_echo "$XDG_DESKTOP_MENU" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xdg-icon-resource", so it can be a program name with args. set dummy xdg-icon-resource; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XDG_ICON_RESOURCE+:} false; then : $as_echo_n "(cached) " >&6 else case $XDG_ICON_RESOURCE in [\\/]* | ?:[\\/]*) ac_cv_path_XDG_ICON_RESOURCE="$XDG_ICON_RESOURCE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XDG_ICON_RESOURCE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XDG_ICON_RESOURCE=$ac_cv_path_XDG_ICON_RESOURCE if test -n "$XDG_ICON_RESOURCE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XDG_ICON_RESOURCE" >&5 $as_echo "$XDG_ICON_RESOURCE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x"$with_GTK" = x"yes" ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" gtk+-2.0 >= 2.16.0 gmodule-2.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " gtk+-2.0 >= 2.16.0 gmodule-2.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags " gtk+-2.0 >= 2.16.0 gmodule-2.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \" gtk+-2.0 >= 2.16.0 gmodule-2.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors " gtk+-2.0 >= 2.16.0 gmodule-2.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs " gtk+-2.0 >= 2.16.0 gmodule-2.0 " 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " gtk+-2.0 >= 2.16.0 gmodule-2.0 " 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " gtk+-2.0 >= 2.16.0 gmodule-2.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ( gtk+-2.0 >= 2.16.0 gmodule-2.0 ) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi FRONTEND_CFLAGS=$GTK_CFLAGS FRONTEND_LIBS=$GTK_LIBS with_Xaw="no" fi if test x"$with_GTK" = x"no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test -n "$no_x" ; then as_fn_error $? " \" $PACKAGE requires the X Window System header files and libraries! They were not found on your system. See FAQ topic C.2. configure failed\"" "$LINENO" 5 fi save_cflags="$CFLAGS" save_cppflags="$CPPFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" CPPFLAGS="$CPPFLAGS $X_CFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "X11/Intrinsic.h" "ac_cv_header_X11_Intrinsic_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Intrinsic_h" = xyes; then : xt="yes" else xt="no" fi CFLAGS="$save_cflags" CPPFLAGS="$save_cppflags" if test "$xt" = "no" ; then as_fn_error $? "Xt headers not found. Please install the X11 packages." "$LINENO" 5 fi FRONTEND_LIBS= if test x"$with_Xaw3d" != x"no"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XawTextReplace in -lXaw3d" >&5 $as_echo_n "checking for XawTextReplace in -lXaw3d... " >&6; } if ${ac_cv_lib_Xaw3d_XawTextReplace+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXaw3d -lXaw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XawTextReplace (); int main () { return XawTextReplace (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xaw3d_XawTextReplace=yes else ac_cv_lib_Xaw3d_XawTextReplace=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xaw3d_XawTextReplace" >&5 $as_echo "$ac_cv_lib_Xaw3d_XawTextReplace" >&6; } if test "x$ac_cv_lib_Xaw3d_XawTextReplace" = xyes; then : FRONTEND_LIBS="-lXaw3d" $as_echo "#define USE_XAW3D 1" >>confdefs.h else as_fn_error $? "--with-Xaw3d was given, but test for Xaw3d failed. Make sure that you have Xaw3d installed, else you might want to try the configure option --without-Xaw3d" "$LINENO" 5 fi fi if test x"$with_Xaw3d" = x"no" ; then with_Xaw=yes save_cflags="$CFLAGS" save_cppflags="$CPPFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" CPPFLAGS="$CPPFLAGS $X_CFLAGS" ac_fn_c_check_header_mongrel "$LINENO" "X11/Xaw/Dialog.h" "ac_cv_header_X11_Xaw_Dialog_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xaw_Dialog_h" = xyes; then : xaw_headers="yes" else xaw_headers="no" fi CFLAGS="$save_cflags" CPPFLAGS="$save_cppflags" if test x"$xaw_headers" = x"no" ; then as_fn_error $? "Xaw headers not found. Please install the Xaw package and headers." "$LINENO" 5 fi FRONTEND_LIBS="-lXaw" fi fi if test x"$with_GTK" = x"yes"; then withGTK_TRUE= withGTK_FALSE='#' else withGTK_TRUE='#' withGTK_FALSE= fi if test x"$with_Xaw3d" = x"yes" || test x"$with_Xaw" = x"yes"; then withXaw_TRUE= withXaw_FALSE='#' else withXaw_TRUE='#' withXaw_FALSE= fi USE_PTYS=0 case "$host" in *-*-hpux* ) $as_echo "#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, \"/dev/pty/tty%c%x\", c, i);" >>confdefs.h $as_echo "#define PTY_NAME_SPRINTF sprintf (pty_name, \"/dev/ptym/pty%c%x\", c, i);" >>confdefs.h if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" else CONF_CFLAGS="-Aa -D_HPUX_SOURCE" fi if test -d /opt/hppd/include/X11; then X_CFLAGS="$X_CFLAGS -I/opt/hppd/include" X_LIBS="$X_LIBS -L/opt/hppd/lib" elif test -d /usr/contrib/X11R5/include; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include" X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib" elif test -d /usr/contrib/mitX11R5/include; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include" X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib" elif test -d /MIT/X11R5/include; then X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include" X_LIBS="$X_LIBS -L/MIT/X11R5/lib" elif test -d /usr/local/include/X11R5; then X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5" X_LIBS="$X_LIBS -L/usr/local/lib/X11R5" fi if test -d /usr/include/X11R5; then X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5" X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4" elif test -d /usr/include/X11R4; then X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4" X_LIBS="$X_LIBS -L/usr/lib/X11R4" fi ;; romp-ibm-aix* ) $as_echo "#define IBMRTAIX 1" >>confdefs.h ;; i386-ibm-aix ) if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" fi ;; *-*-aix3* | *-*-bosx* ) $as_echo "#define PTY_ITERATION for (c = 0; !c; c++)" >>confdefs.h $as_echo "#define PTY_NAME_SPRINTF strcpy (pty_name, \"/dev/ptc\");" >>confdefs.h $as_echo "#define PTY_TTY_NAME_SPRINTF strcpy (pty_name, ttyname (fd));" >>confdefs.h ;; *-*-cxux* ) $as_echo "#define FIRST_PTY_LETTER 'A'" >>confdefs.h $as_echo "#define LAST_PTY_LETTER 'P'" >>confdefs.h ;; *-*-uniplus* ) $as_echo "#define UNIPLUS 1" >>confdefs.h ;; *-*-rtu* ) $as_echo "#define FIRST_PTY_LETTER 'z'" >>confdefs.h $as_echo "#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, \"/dev/ttyp%x\", i);" >>confdefs.h $as_echo "#define PTY_NAME_SPRINTF sprintf (pty_name, \"/dev/pty%x\", i);" >>confdefs.h $as_echo "#define RTU 1" >>confdefs.h ;; *-*-iris* | *-*-irix3* ) $as_echo "#define PTY_ITERATION for (c = 0; !c; c++)" >>confdefs.h $as_echo "#define PTY_NAME_SPRINTF strcpy (pty_name, \"/dev/ptc\");" >>confdefs.h $as_echo "#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, \"/dev/ttyq%d\", minor(stb.st_rdev));" >>confdefs.h ;; *-*-irix* ) ;; *-*-sunos4* | *-*-solaris1* ) if test "$GCC" = yes; then PRE_XMULIB="-static" POST_XMULIB="-dynamic" else PRE_XMULIB="-Bstatic" POST_XMULIB="-Bdynamic" fi ;; *-*-sunos5* | *-*-solaris2* ) X_LIBS="$X_LIBS -lelf" ;; *-*-sco* ) $as_echo "#define PTY_ITERATION for (i = 0; ; i++)" >>confdefs.h $as_echo "#define PTY_NAME_SPRINTF sprintf (pty_name, \"/dev/ptyp%d\", i);" >>confdefs.h $as_echo "#define PTY_TTY_NAME_SPRINTF sprintf (pty_name, \"/dev/ttyp%d\", i);" >>confdefs.h ;; *-*-dynix* | *-*-ptx* ) ;; *-*-esix* ) ;; *-*-usg5-4* | *-*-sysvr4* ) ;; *-*-usg* | *-*-sysv* | *-*-aix* ) ;; vax-*-ultrix ) if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" fi ;; *-apple-* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Apple support is experimental, please report any problems to bug-xboard@gnu.org" >&5 $as_echo "$as_me: WARNING: Apple support is experimental, please report any problems to bug-xboard@gnu.org" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: use --enable-osxapp to enable the build target and automatically adjust target directories" >&5 $as_echo "$as_me: WARNING: use --enable-osxapp to enable the build target and automatically adjust target directories" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building an OSX app currently relies on some programs such as dylib that we don't test for" >&5 $as_echo "$as_me: WARNING: Building an OSX app currently relies on some programs such as dylib that we don't test for" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: patches welcome ;)" >&5 $as_echo "$as_me: WARNING: patches welcome ;)" >&2;} # Extract the first word of "sw_vers", so it can be a program name with args. set dummy sw_vers; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SW_VERS+:} false; then : $as_echo_n "(cached) " >&6 else case $SW_VERS in [\\/]* | ?:[\\/]*) ac_cv_path_SW_VERS="$SW_VERS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SW_VERS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SW_VERS=$ac_cv_path_SW_VERS if test -n "$SW_VERS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SW_VERS" >&5 $as_echo "$SW_VERS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$SW_VERS" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking Mac OS X version" >&5 $as_echo_n "checking Mac OS X version... " >&6; } MACOSX_VERSION=`$SW_VERS -productVersion` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MACOSX_VERSION" >&5 $as_echo "$MACOSX_VERSION" >&6; } fi FRONTEND_LIBS="$FRONTEND_LIBS -headerpad_max_install_names " if test x"$enable_OSXAPP" = x"yes" ; then FRONTEND_LIBS="$FRONTEND_LIBS -lgtkmacintegration" fi FRONTEND_CFLAGS="$FRONTEND_CFLAGS -I/opt/local/include -L/opt/local/lib" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ptys or pipes should be used" >&5 $as_echo_n "checking whether ptys or pipes should be used... " >&6; } # Check whether --enable-ptys was given. if test "${enable_ptys+set}" = set; then : enableval=$enable_ptys; if test "$enableval" = yes; then USE_PTYS=1 enable_ptys="ptys" { $as_echo "$as_me:${as_lineno-$LINENO}: result: ptys (user override)" >&5 $as_echo "ptys (user override)" >&6; } fi if test "$enableval" = no; then USE_PTYS=0 enable_ptys="pipes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: pipes (user override)" >&5 $as_echo "pipes (user override)" >&6; } fi else if test "$USE_PTYS" = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ptys" >&5 $as_echo "ptys" >&6; } enable_ptys="ptys" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: pipes" >&5 $as_echo "pipes" >&6; } enable_ptys="pipes" fi fi cat >>confdefs.h <<_ACEOF #define USE_PTYS $USE_PTYS _ACEOF # Check whether --enable-zippy was given. if test "${enable_zippy+set}" = set; then : enableval=$enable_zippy; else enable_zippy="no" fi if test x"$enable_zippy" != x"no"; then $as_echo "#define ZIPPY 1" >>confdefs.h else $as_echo "#define ZIPPY 0" >>confdefs.h fi if test x$enable_zippy != xno; then ZIPPY_TRUE= ZIPPY_FALSE='#' else ZIPPY_TRUE='#' ZIPPY_FALSE= fi # Check whether --enable-sigint was given. if test "${enable_sigint+set}" = set; then : enableval=$enable_sigint; if test "$enableval" = yes; then $as_echo "#define ATTENTION 1" >>confdefs.h fi enable_sigint=$enableval else enable_sigint="yes" $as_echo "#define ATTENTION 1" >>confdefs.h fi if test x"$with_Xaw3d" = x"yes" -o x"$with_Xaw" = x"yes" ; then X_LIBS="$X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS -lXmu -lX11 -lXt " fi CONFIGURE_OPTIONS="prefix=$prefix; datarootdir=$datarootdir; \ datadir=$datadir; gamedatadir=$GAMEDATADIR; desktopdir=$DESKTOPDIR; \ mimedir=$MIMEDIR; iconsdir=$ICONSDIR; svgiconsdir=$SVGICONSDIR; infodir=$infodir; \ sysconfigdir=$sysconfigdir; update_mimedb=$enable_mimedb; NLS=$USE_NLS; \ GKT=$with_GTK; Xaw3d=$with_Xaw3d; Xaw=$with_Xaw; \ ptys=$enable_ptys; zippy=$enable_zippy; sigint=$enable_sigint" ac_config_files="$ac_config_files Makefile cmail po/Makefile.in osxapp/Info.plist" ac_config_commands="$ac_config_commands test-stamp-h" ac_config_commands="$ac_config_commands chmod-cmail" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_APP_TRUE}" && test -z "${OSX_APP_FALSE}"; then as_fn_error $? "conditional \"OSX_APP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_UPDATE_MIMEDB_TRUE}" && test -z "${ENABLE_UPDATE_MIMEDB_FALSE}"; then as_fn_error $? "conditional \"ENABLE_UPDATE_MIMEDB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${withGTK_TRUE}" && test -z "${withGTK_FALSE}"; then as_fn_error $? "conditional \"withGTK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${withXaw_TRUE}" && test -z "${withXaw_FALSE}"; then as_fn_error $? "conditional \"withXaw\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ZIPPY_TRUE}" && test -z "${ZIPPY_FALSE}"; then as_fn_error $? "conditional \"ZIPPY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by xboard $as_me 4.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ xboard config.status 4.8.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "cmail") CONFIG_FILES="$CONFIG_FILES cmail" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "osxapp/Info.plist") CONFIG_FILES="$CONFIG_FILES osxapp/Info.plist" ;; "test-stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS test-stamp-h" ;; "chmod-cmail") CONFIG_COMMANDS="$CONFIG_COMMANDS chmod-cmail" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "test-stamp-h":C) test -z "$CONFIG_HEADERS" || date > stamp-h ;; "chmod-cmail":C) chmod 755 cmail ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" echo " Configurations summary:" echo "" echo " prefix: $prefix " echo " datarootdir: $datarootdir " echo " datadir: $datadir " echo " gamedatadir: $GAMEDATADIR " echo " desktopdir: $DESKTOPDIR " echo " mimedir: $MIMEDIR " echo " iconsdir: $ICONSDIR " echo " svgiconsdir: $SVGICONSDIR " echo " infodir: $infodir (info files will go here)" echo " sysconfdir: $sysconfdir (xboard.conf will go here)" echo "" echo " update mimedb: $enable_mimedb" echo "" echo " NLS support: $USE_NLS" echo "" echo " GTK: $with_GTK" echo " Xaw3d: $with_Xaw3d" echo " Xaw: $with_Xaw" echo "" echo " ptys: $enable_ptys" echo " zippy: $enable_zippy" echo " sigint: $enable_sigint" xboard-4.8.0/draw.c0000644000175000001440000010000512421746612011021 00000000000000/* * draw.c -- drawing routines for XBoard * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include #include #include #include #if STDC_HEADERS # include # include #else /* not STDC_HEADERS */ extern char *getenv(); # if HAVE_STRING_H # include # else /* not HAVE_STRING_H */ # include # endif /* not HAVE_STRING_H */ #endif /* not STDC_HEADERS */ #if ENABLE_NLS #include #endif #include "common.h" #include "backend.h" #include "board.h" #include "menus.h" #include "dialogs.h" #include "evalgraph.h" #include "gettext.h" #include "draw.h" #ifdef __EMX__ #ifndef HAVE_USLEEP #define HAVE_USLEEP #endif #define usleep(t) _sleep2(((t)+500)/1000) #endif #ifdef ENABLE_NLS # define _(s) gettext (s) # define N_(s) gettext_noop (s) #else # define _(s) (s) # define N_(s) s #endif #define SOLID 0 #define OUTLINE 1 Boolean cairoAnimate; Option *currBoard; cairo_surface_t *csBoardWindow; static cairo_surface_t *pngPieceImages[2][(int)BlackPawn+4]; // png 256 x 256 images static cairo_surface_t *pngPieceBitmaps[2][(int)BlackPawn]; // scaled pieces as used static cairo_surface_t *pngPieceBitmaps2[2][(int)BlackPawn+4]; // scaled pieces in store static RsvgHandle *svgPieces[2][(int)BlackPawn+4]; // vector pieces in store static cairo_surface_t *pngBoardBitmap[2], *pngOriginalBoardBitmap[2]; int useTexture, textureW[2], textureH[2]; #define pieceToSolid(piece) &pieceBitmap[SOLID][(piece) % (int)BlackPawn] #define pieceToOutline(piece) &pieceBitmap[OUTLINE][(piece) % (int)BlackPawn] #define White(piece) ((int)(piece) < (int)BlackPawn) char svgDir[MSG_SIZ] = SVGDIR; char *crWhite = "#FFFFB0"; char *crBlack = "#AD5D3D"; struct { int x1, x2, y1, y2; } gridSegments[BOARD_RANKS + BOARD_FILES + 2]; void SwitchWindow (int main) { currBoard = (main ? &mainOptions[W_BOARD] : &dualOptions[3]); csBoardWindow = DRAWABLE(currBoard); } void SelectPieces(VariantClass v) { int i; for(i=0; i<2; i++) { int p; for(p=0; p<=(int)WhiteKing; p++) pngPieceBitmaps[i][p] = pngPieceBitmaps2[i][p]; // defaults if(v == VariantShogi && BOARD_HEIGHT != 7) { // no exceptions in Tori Shogi pngPieceBitmaps[i][(int)WhiteCannon] = pngPieceBitmaps2[i][(int)WhiteTokin]; pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteKing+2]; pngPieceBitmaps[i][(int)WhiteGrasshopper] = pngPieceBitmaps2[i][(int)WhiteKing+3]; pngPieceBitmaps[i][(int)WhiteSilver] = pngPieceBitmaps2[i][(int)WhiteKing+4]; pngPieceBitmaps[i][(int)WhiteQueen] = pngPieceBitmaps2[i][(int)WhiteLance]; pngPieceBitmaps[i][(int)WhiteFalcon] = pngPieceBitmaps2[i][(int)WhiteMonarch]; // for Sho Shogi } #ifdef GOTHIC if(v == VariantGothic) { pngPieceBitmaps[i][(int)WhiteMarshall] = pngPieceBitmaps2[i][(int)WhiteSilver]; } #endif if(v == VariantSChess) { pngPieceBitmaps[i][(int)WhiteAngel] = pngPieceBitmaps2[i][(int)WhiteFalcon]; pngPieceBitmaps[i][(int)WhiteMarshall] = pngPieceBitmaps2[i][(int)WhiteAlfil]; } if(v == VariantChuChess) { pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteLion]; } if(v == VariantChu) { pngPieceBitmaps[i][(int)WhiteNightrider] = pngPieceBitmaps2[i][(int)WhiteKing+1]; pngPieceBitmaps[i][(int)WhiteUnicorn] = pngPieceBitmaps2[i][(int)WhiteCat]; pngPieceBitmaps[i][(int)WhiteSilver] = pngPieceBitmaps2[i][(int)WhiteSword]; pngPieceBitmaps[i][(int)WhiteFalcon] = pngPieceBitmaps2[i][(int)WhiteDagger]; } } } #define BoardSize int void InitDrawingSizes (BoardSize boardSize, int flags) { // [HGM] resize is functional now, but for board format changes only (nr of ranks, files) int boardWidth, boardHeight; static int oldWidth, oldHeight; static VariantClass oldVariant; static int oldTwoBoards = 0, oldNrOfFiles = 0; if(!mainOptions[W_BOARD].handle) return; if(boardSize == -2 && gameInfo.variant != oldVariant && oldNrOfFiles && oldNrOfFiles != BOARD_WIDTH) { // called because variant switch changed board format squareSize = ((squareSize + lineGap) * oldNrOfFiles + 0.5*BOARD_WIDTH) / BOARD_WIDTH; // keep total width fixed if(appData.overrideLineGap < 0) lineGap = squareSize < 37 ? 1 : squareSize < 59 ? 2 : squareSize < 116 ? 3 : 4; squareSize -= lineGap; CreatePNGPieces(); CreateGrid(); } oldNrOfFiles = BOARD_WIDTH; if(oldTwoBoards && !twoBoards) PopDown(DummyDlg); oldTwoBoards = twoBoards; if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap); boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap); if(boardWidth != oldWidth || boardHeight != oldHeight) { // do resizing stuff only if size actually changed oldWidth = boardWidth; oldHeight = boardHeight; CreateGrid(); CreateAnyPieces(0); // redo texture scaling /* * Inhibit shell resizing. */ ResizeBoardWindow(boardWidth, boardHeight, 0); DelayedDrag(); } // [HGM] pieces: tailor piece bitmaps to needs of specific variant // (only for xpm) if(gameInfo.variant != oldVariant) { // and only if variant changed SelectPieces(gameInfo.variant); oldVariant = gameInfo.variant; } CreateAnimVars(); } void ExposeRedraw (Option *graph, int x, int y, int w, int h) { // copy a selected part of the buffer bitmap to the display cairo_t *cr = cairo_create((cairo_surface_t *) graph->textValue); cairo_set_source_surface(cr, (cairo_surface_t *) graph->choice, 0, 0); cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); cairo_rectangle(cr, x, y, w, h); cairo_fill(cr); cairo_destroy(cr); } static void CreatePNGBoard (char *s, int kind) { float w, h; static float n[2] = { 1., 1. }; if(!appData.useBitmaps || s == NULL || *s == 0 || *s == '*') { useTexture &= ~(kind+1); return; } textureW[kind] = 0; // prevents bitmap from being used if not succesfully loaded if(strstr(s, ".png")) { cairo_surface_t *img = cairo_image_surface_create_from_png (s); if(img) { char c, *p = s, *q; int r, f; if(pngOriginalBoardBitmap[kind]) cairo_surface_destroy(pngOriginalBoardBitmap[kind]); if(n[kind] != 1.) cairo_surface_destroy(pngBoardBitmap[kind]); useTexture |= kind + 1; pngOriginalBoardBitmap[kind] = img; w = textureW[kind] = cairo_image_surface_get_width (img); h = textureH[kind] = cairo_image_surface_get_height (img); n[kind] = 1.; while((q = strchr(p+1, '-'))) p = q; // find last '-' if(strlen(p) < 11 && sscanf(p, "-%dx%d.pn%c", &f, &r, &c) == 3 && c == 'g') { if(f == 0 || r == 0) f = BOARD_WIDTH, r = BOARD_HEIGHT; // 0x0 means 'fits any', so make it fit textureW[kind] = (w*BOARD_WIDTH)/f; // sync cutting locations with square pattern textureH[kind] = (h*BOARD_HEIGHT)/r; n[kind] = r*squareSize/h; // scale to make it fit exactly vertically } else if((p = strstr(s, "xq")) && (p == s || p[-1] == '/')) { // assume full-board image for Xiangqi while(0.8*squareSize*BOARD_WIDTH > n[kind]*w || 0.8*squareSize*BOARD_HEIGHT > n[kind]*h) n[kind]++; } else { while(squareSize > n[kind]*w || squareSize > n[kind]*h) n[kind]++; } if(n[kind] == 1.) pngBoardBitmap[kind] = img; else { // create scaled-up copy of the raw png image when it was too small cairo_surface_t *cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, n[kind]*w, n[kind]*h); cairo_t *cr = cairo_create(cs); pngBoardBitmap[kind] = cs; textureW[kind] *= n[kind]; textureH[kind] *= n[kind]; // cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); cairo_scale(cr, n[kind], n[kind]); cairo_set_source_surface (cr, img, 0, 0); cairo_paint (cr); cairo_destroy (cr); } } } } char *pngPieceNames[] = // must be in same order as internal piece encoding { "Pawn", "Knight", "Bishop", "Rook", "Queen", "Advisor", "Elephant", "Archbishop", "Marshall", "Gold", "Commoner", "Canon", "Nightrider", "CrownedBishop", "CrownedRook", "Princess", "Chancellor", "Hawk", "Lance", "Cobra", "Unicorn", "Lion", "GoldPawn", "HSword", "PromoHorse", "PromoDragon", "Leopard", "PromoSword", "Prince", "Phoenix", "Kylin", "PromoRook", "PromoHSword", "Dolphin", "Chancellor", "Unicorn", "Hawk", "Sword", "Princess", "HCrown", "Knight", "Elephant", "PromoBishop", "King", "Claw", "GoldKnight", "GoldLance", "GoldSilver", NULL }; char *backupPiece[] = { "King", "Queen", "Lion" }; // pieces that map on other when not kanji RsvgHandle * LoadSVG (char *dir, int color, int piece, int retry) { char buf[MSG_SIZ]; RsvgHandle *svg=svgPieces[color][piece]; RsvgDimensionData svg_dimensions; GError *svgerror=NULL; cairo_surface_t *img; cairo_t *cr; snprintf(buf, MSG_SIZ, "%s/%s%s.svg", dir, color ? "Black" : "White", retry ? backupPiece[piece - WhiteMonarch] : pngPieceNames[piece]); if(svg || *dir && (svg = rsvg_handle_new_from_file(buf, &svgerror))) { rsvg_handle_get_dimensions(svg, &svg_dimensions); img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, squareSize, squareSize); cr = cairo_create(img); cairo_scale(cr, squareSize/(double) svg_dimensions.width, squareSize/(double) svg_dimensions.height); rsvg_handle_render_cairo(svg, cr); if(cairo_surface_status(img) == CAIRO_STATUS_SUCCESS) { if(pngPieceImages[color][piece]) cairo_surface_destroy(pngPieceImages[color][piece]); pngPieceImages[color][piece] = img; } cairo_destroy(cr); return svg; } if(!retry && piece >= WhiteMonarch && piece <= WhiteNothing) // pieces that are only different in kanji sets return LoadSVG(dir, color, piece, 1); if(svgerror) g_error_free(svgerror); return NULL; } static void ScaleOnePiece (int color, int piece) { float w, h; char buf[MSG_SIZ]; cairo_surface_t *img, *cs; cairo_t *cr; g_type_init (); svgPieces[color][piece] = LoadSVG("", color, piece, 0); // this fills pngPieceImages if we had cached svg with bitmap of wanted size if(!pngPieceImages[color][piece]) { // we don't have cached bitmap (implying we did not have cached svg) if(*appData.pieceDirectory) { // user specified piece directory snprintf(buf, MSG_SIZ, "%s/%s%s.png", appData.pieceDirectory, color ? "Black" : "White", pngPieceNames[piece]); img = cairo_image_surface_create_from_png (buf); // try if there are png pieces there if(cairo_surface_status(img) != CAIRO_STATUS_SUCCESS) { // there were not svgPieces[color][piece] = LoadSVG(appData.pieceDirectory, color, piece, 0); // so try if he has svg there } else pngPieceImages[color][piece] = img; } } if(!pngPieceImages[color][piece]) { // we still did not manage to acquire a piece bitmap static int warned = 0; if(!(svgPieces[color][piece] = LoadSVG(svgDir, color, piece, 0)) && !warned) { // try to fall back on installed svg char *msg = _("No default pieces installed!\nSelect your own using '-pieceImageDirectory'."); printf("%s\n", msg); // give up DisplayError(msg, 0); warned = 1; // prevent error message being repeated for each piece type } } img = pngPieceImages[color][piece]; // create new bitmap to hold scaled piece image (and remove any old) if(pngPieceBitmaps2[color][piece]) cairo_surface_destroy (pngPieceBitmaps2[color][piece]); pngPieceBitmaps2[color][piece] = cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, squareSize, squareSize); if(!img) return; // scaled copying of the raw png image cr = cairo_create(cs); w = cairo_image_surface_get_width (img); h = cairo_image_surface_get_height (img); cairo_scale(cr, squareSize/w, squareSize/h); cairo_set_source_surface (cr, img, 0, 0); cairo_paint (cr); cairo_destroy (cr); if(!appData.trueColors || !*appData.pieceDirectory) { // operate on bitmap to color it (king-size hack...) int stride = cairo_image_surface_get_stride(cs)/4; int *buf = (int *) cairo_image_surface_get_data(cs); int i, j, p; sscanf(color ? appData.blackPieceColor+1 : appData.whitePieceColor+1, "%x", &p); // replacement color cairo_surface_flush(cs); for(i=0; i> 24; r = c >> 16 & 255; // alpha and red, where red is the 'white' weight, since white is #FFFFCC in the source images f = (color ? a - r : r)/255.; // fraction of black or white in the mix that has to be replaced buf[i*stride + j] = c & 0xFF000000; // alpha channel is kept at same opacity buf[i*stride + j] += ((int)(f*(p&0xFF0000)) & 0xFF0000) + ((int)(f*(p&0xFF00)) & 0xFF00) + (int)(f*(p&0xFF)); // add desired fraction of new color if(color) buf[i*stride + j] += r | r << 8 | r << 16; // details on black pieces get their weight added in pure white if(appData.monoMode) { if(a < 64) buf[i*stride + j] = 0; // if not opaque enough, totally transparent else if(2*r < a) buf[i*stride + j] = 0xFF000000; // if not light enough, totally black else buf[i*stride + j] = 0xFFFFFFFF; // otherwise white } } cairo_surface_mark_dirty(cs); } } void CreatePNGPieces () { int p; for(p=0; pngPieceNames[p]; p++) { ScaleOnePiece(0, p); ScaleOnePiece(1, p); } SelectPieces(gameInfo.variant); } void CreateAnyPieces (int p) { // [HGM] taken out of main if(p) CreatePNGPieces(); CreatePNGBoard(appData.liteBackTextureFile, 1); CreatePNGBoard(appData.darkBackTextureFile, 0); } void InitDrawingParams (int reloadPieces) { int i, p; if(reloadPieces) for(i=0; i<2; i++) for(p=0; p> 4*n & 255; return c/255.; } void SetPen (cairo_t *cr, float w, char *col, int dash) { static const double dotted[] = {4.0, 4.0}; static int len = sizeof(dotted) / sizeof(dotted[0]); cairo_set_line_width (cr, w); cairo_set_source_rgba (cr, Color(col, 4), Color(col, 2), Color(col, 0), 1.0); if(dash) cairo_set_dash (cr, dotted, len, 0.0); } void DrawSeekAxis( int x, int y, int xTo, int yTo ) { cairo_t *cr; /* get a cairo_t */ cr = cairo_create (csBoardWindow); cairo_move_to (cr, x, y); cairo_line_to(cr, xTo, yTo ); SetPen(cr, 2, "#000000", 0); cairo_stroke(cr); /* free memory */ cairo_destroy (cr); GraphExpose(currBoard, x-1, yTo-1, xTo-x+2, y-yTo+2); } void DrawSeekBackground( int left, int top, int right, int bottom ) { cairo_t *cr = cairo_create (csBoardWindow); cairo_rectangle (cr, left, top, right-left, bottom-top); cairo_set_source_rgba(cr, 0.8, 0.8, 0.4,1.0); cairo_fill(cr); /* free memory */ cairo_destroy (cr); GraphExpose(currBoard, left, top, right-left, bottom-top); } void DrawSeekText(char *buf, int x, int y) { cairo_t *cr = cairo_create (csBoardWindow); cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size (cr, 12.0); cairo_move_to (cr, x, y+4); cairo_set_source_rgba(cr, 0, 0, 0,1.0); cairo_show_text( cr, buf); /* free memory */ cairo_destroy (cr); GraphExpose(currBoard, x-5, y-10, 60, 15); } void DrawSeekDot(int x, int y, int colorNr) { cairo_t *cr = cairo_create (csBoardWindow); int square = colorNr & 0x80; colorNr &= 0x7F; if(square) cairo_rectangle (cr, x-squareSize/9, y-squareSize/9, 2*(squareSize/9), 2*(squareSize/9)); else cairo_arc(cr, x, y, squareSize/9, 0.0, 2*M_PI); SetPen(cr, 2, "#000000", 0); cairo_stroke_preserve(cr); switch (colorNr) { case 0: cairo_set_source_rgba(cr, 1.0, 0, 0,1.0); break; case 1: cairo_set_source_rgba (cr, 0.0, 0.7, 0.2, 1.0); break; default: cairo_set_source_rgba (cr, 1.0, 1.0, 0.0, 1.0); break; } cairo_fill(cr); /* free memory */ cairo_destroy (cr); GraphExpose(currBoard, x-squareSize/8, y-squareSize/8, 2*(squareSize/8), 2*(squareSize/8)); } void InitDrawingHandle (Option *opt) { csBoardWindow = DRAWABLE(opt); } void CreateGrid () { int i, j; if (lineGap == 0) return; /* [HR] Split this into 2 loops for non-square boards. */ for (i = 0; i < BOARD_HEIGHT + 1; i++) { gridSegments[i].x1 = 0; gridSegments[i].x2 = lineGap + BOARD_WIDTH * (squareSize + lineGap); gridSegments[i].y1 = gridSegments[i].y2 = lineGap / 2 + (i * (squareSize + lineGap)); } for (j = 0; j < BOARD_WIDTH + 1; j++) { gridSegments[j + i].y1 = 0; gridSegments[j + i].y2 = lineGap + BOARD_HEIGHT * (squareSize + lineGap); gridSegments[j + i].x1 = gridSegments[j + i].x2 = lineGap / 2 + (j * (squareSize + lineGap)); } } void DrawGrid() { /* draws a grid starting around Nx, Ny squares starting at x,y */ int i; float odd = (lineGap & 1)/2.; cairo_t *cr; /* get a cairo_t */ cr = cairo_create (csBoardWindow); cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); SetPen(cr, lineGap, "#000000", 0); /* lines in X */ for (i = 0; i < BOARD_WIDTH + BOARD_HEIGHT + 2; i++) { int h = (gridSegments[i].y1 == gridSegments[i].y2); // horizontal cairo_move_to (cr, gridSegments[i].x1 + !h*odd, gridSegments[i].y1 + h*odd); cairo_line_to (cr, gridSegments[i].x2 + !h*odd, gridSegments[i].y2 + h*odd); cairo_stroke (cr); } /* free memory */ cairo_destroy (cr); return; } void DrawBorder (int x, int y, int type, int odd) { cairo_t *cr; char *col; switch(type) { case 0: col = "#000000"; break; case 1: col = appData.highlightSquareColor; break; case 2: col = appData.premoveHighlightColor; break; default: col = "#808080"; break; // cannot happen } cr = cairo_create(csBoardWindow); cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); cairo_rectangle(cr, x+odd/2., y+odd/2., squareSize+lineGap, squareSize+lineGap); SetPen(cr, lineGap, col, 0); cairo_stroke(cr); cairo_destroy(cr); GraphExpose(currBoard, x - lineGap/2, y - lineGap/2, squareSize+2*lineGap+odd, squareSize+2*lineGap+odd); } static int CutOutSquare (int x, int y, int *x0, int *y0, int kind) { int W = BOARD_WIDTH, H = BOARD_HEIGHT; int nx = x/(squareSize + lineGap), ny = y/(squareSize + lineGap); *x0 = 0; *y0 = 0; if(textureW[kind] < squareSize || textureH[kind] < squareSize) return 0; if(textureW[kind] < W*squareSize) *x0 = (textureW[kind] - squareSize) * nx/(W-1); else *x0 = textureW[kind]*nx / W + (textureW[kind] - W*squareSize) / (2*W); if(textureH[kind] < H*squareSize) *y0 = (textureH[kind] - squareSize) * ny/(H-1); else *y0 = textureH[kind]*ny / H + (textureH[kind] - H*squareSize) / (2*H); return 1; } void DrawLogo (Option *opt, void *logo) { cairo_surface_t *img; cairo_t *cr; int w, h; if(!logo || !opt) return; img = cairo_image_surface_create_from_png (logo); w = cairo_image_surface_get_width (img); h = cairo_image_surface_get_height (img); cr = cairo_create(DRAWABLE(opt)); // cairo_scale(cr, (float)appData.logoSize/w, appData.logoSize/(2.*h)); cairo_scale(cr, (float)opt->max/w, (float)opt->value/h); cairo_set_source_surface (cr, img, 0, 0); cairo_paint (cr); cairo_destroy (cr); cairo_surface_destroy (img); GraphExpose(opt, 0, 0, appData.logoSize, appData.logoSize/2); } static void BlankSquare (cairo_surface_t *dest, int x, int y, int color, ChessSquare piece, int fac) { // [HGM] extra param 'fac' for forcing destination to (0,0) for copying to animation buffer int x0, y0; cairo_t *cr; cr = cairo_create (dest); if ((useTexture & color+1) && CutOutSquare(x, y, &x0, &y0, color)) { cairo_set_source_surface (cr, pngBoardBitmap[color], x*fac - x0, y*fac - y0); cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); cairo_rectangle (cr, x*fac, y*fac, squareSize, squareSize); cairo_fill (cr); cairo_destroy (cr); } else { // evenly colored squares char *col = NULL; switch (color) { case 0: col = appData.darkSquareColor; break; case 1: col = appData.lightSquareColor; break; case 2: col = "#000000"; break; default: col = "#808080"; break; // cannot happen } SetPen(cr, 2.0, col, 0); cairo_rectangle (cr, fac*x, fac*y, squareSize, squareSize); cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE); cairo_fill (cr); cairo_destroy (cr); } } static void pngDrawPiece (cairo_surface_t *dest, ChessSquare piece, int square_color, int x, int y) { int kind; cairo_t *cr; if ((int)piece < (int) BlackPawn) { kind = 0; } else { kind = 1; piece -= BlackPawn; } if(appData.upsideDown && flipView) kind = 1 - kind; // swap white and black pieces BlankSquare(dest, x, y, square_color, piece, 1); // erase previous contents with background cr = cairo_create (dest); cairo_set_source_surface (cr, pngPieceBitmaps[kind][piece], x, y); cairo_paint(cr); cairo_destroy (cr); } static char *markerColor[8] = { "#FFFF00", "#FF0000", "#00FF00", "#0000FF", "#00FFFF", "#FF00FF", "#FFFFFF", "#000000" }; void DoDrawDot (cairo_surface_t *cs, int marker, int x, int y, int r) { cairo_t *cr; cr = cairo_create(cs); cairo_arc(cr, x+r/2, y+r/2, r/2, 0.0, 2*M_PI); if(appData.monoMode) { SetPen(cr, 2, marker == 2 ? "#000000" : "#FFFFFF", 0); cairo_stroke_preserve(cr); SetPen(cr, 2, marker == 2 ? "#FFFFFF" : "#000000", 0); } else { SetPen(cr, 2, markerColor[marker-1], 0); } cairo_fill(cr); cairo_destroy(cr); } void DrawDot (int marker, int x, int y, int r) { // used for atomic captures; no need to draw on backup DoDrawDot(csBoardWindow, marker, x, y, r); GraphExpose(currBoard, x-r, y-r, 2*r, 2*r); } static void DrawText (char *string, int x, int y, int align) { int xx = x, yy = y; cairo_text_extents_t te; cairo_t *cr; cr = cairo_create (csBoardWindow); cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, align < 0 ? 2*squareSize/3 : squareSize/4); // calculate where it goes cairo_text_extents (cr, string, &te); if (align == 1) { xx += squareSize - te.width - te.x_bearing - 1; yy += squareSize - te.height - te.y_bearing - 1; } else if (align == 2) { xx += te.x_bearing + 1, yy += -te.y_bearing + 1; } else if (align == 3) { xx += squareSize - te.width -te.x_bearing - 1; yy += -te.y_bearing + 3; } else if (align == 4) { xx += te.x_bearing + 1, yy += -te.y_bearing + 3; } else if (align < 0) { xx += squareSize/2 - te.width/2, yy += 9*squareSize/16 - te.y_bearing/2; } cairo_move_to (cr, xx-1, yy); if(align == -2) cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); else if(align < 3) cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); else cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); cairo_show_text (cr, string); cairo_destroy (cr); } void InscribeKanji (ChessSquare piece, int x, int y) { char *p, *q, buf[10]; int n; if(piece == EmptySquare) return; if(piece >= BlackPawn) piece = BLACK_TO_WHITE piece; p = appData.inscriptions; n = piece; while(piece > WhitePawn) { if(*p++ == NULLCHAR) { if(n != WhiteKing) return; p = q; break; } q = p - 1; while((*p & 0xC0) == 0x80) p++; // skip UTF-8 continuation bytes piece--; } strncpy(buf, p, 10); for(q=buf; (*++q & 0xC0) == 0x80;); *q = NULLCHAR; DrawText(buf, x, y, n > WhiteLion ? -2 : -1); } void DrawOneSquare (int x, int y, ChessSquare piece, int square_color, int marker, char *tString, char *bString, int align) { // basic front-end board-draw function: takes care of everything that can be in square: // piece, background, coordinate/count, marker dot if (piece == EmptySquare) { BlankSquare(csBoardWindow, x, y, square_color, piece, 1); } else { pngDrawPiece(csBoardWindow, piece, square_color, x, y); if(appData.inscriptions[0]) InscribeKanji(piece, x, y); } if(align) { // square carries inscription (coord or piece count) if(align > 1) DrawText(tString, x, y, align); // top (rank or count) if(bString && *bString) DrawText(bString, x, y, 1); // bottom (always lower right file ID) } if(marker) { // print fat marker dot, if requested DoDrawDot(csBoardWindow, marker, x + squareSize/4, y+squareSize/4, squareSize/2); } } /**** Animation code by Hugh Fisher, DCS, ANU. ****/ /* Masks for XPM pieces. Black and white pieces can have different shapes, but in the interest of retaining my sanity pieces must have the same outline on both light and dark squares, and all pieces must use the same background square colors/images. */ static cairo_surface_t *c_animBufs[3*NrOfAnims]; // newBuf, saveBuf static void InitAnimState (AnimNr anr) { if(c_animBufs[anr]) cairo_surface_destroy (c_animBufs[anr]); if(c_animBufs[anr+2]) cairo_surface_destroy (c_animBufs[anr+2]); c_animBufs[anr+4] = csBoardWindow; c_animBufs[anr+2] = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, squareSize, squareSize); c_animBufs[anr] = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, squareSize, squareSize); } void CreateAnimVars () { InitAnimState(Game); InitAnimState(Player); } static void CairoOverlayPiece (ChessSquare piece, cairo_surface_t *dest) { static cairo_t *pieceSource; pieceSource = cairo_create (dest); cairo_set_source_surface (pieceSource, pngPieceBitmaps[!White(piece)][piece % BlackPawn], 0, 0); if(doubleClick) cairo_paint_with_alpha (pieceSource, 0.6); else cairo_paint(pieceSource); cairo_destroy (pieceSource); } void InsertPiece (AnimNr anr, ChessSquare piece) { CairoOverlayPiece(piece, c_animBufs[anr]); } void DrawBlank (AnimNr anr, int x, int y, int startColor) { BlankSquare(c_animBufs[anr+2], x, y, startColor, EmptySquare, 0); } void CopyRectangle (AnimNr anr, int srcBuf, int destBuf, int srcX, int srcY, int width, int height, int destX, int destY) { cairo_t *cr; c_animBufs[anr+4] = csBoardWindow; cr = cairo_create (c_animBufs[anr+destBuf]); cairo_set_source_surface (cr, c_animBufs[anr+srcBuf], destX - srcX, destY - srcY); cairo_rectangle (cr, destX, destY, width, height); cairo_fill (cr); cairo_destroy (cr); if(c_animBufs[anr+destBuf] == csBoardWindow) // suspect that GTK needs this! GraphExpose(currBoard, destX, destY, width, height); } void SetDragPiece (AnimNr anr, ChessSquare piece) { } /* [AS] Arrow highlighting support */ void DoDrawPolygon (cairo_surface_t *cs, Pnt arrow[], int nr) { cairo_t *cr; int i; cr = cairo_create (cs); cairo_move_to (cr, arrow[nr-1].x, arrow[nr-1].y); for (i=0;i:C[Xeȏ{tsy}st{}}}zytrlihe^[][TSTVOIMVL>>>[Eks}sz}st}{wvvriehf][[ZWWVPSSOOMC<>rm?اzzwzwvy{}zwwtrkfeeb[ZXWSTPOLIML?5OJ]ŋ{w{y}zwvz}{ywtrliee^ZZXSPPMLOLFFH;ZC{ֲyw}{wvy}}}}{wslkie^[ZXPPOJJJIFC:f̳wsy}{tlrz{{{}}z{ysrokfd]ZWSMLHEE<8:ebAștvy}tlsy{{yvwvrmlid_[WTSMFC?;4?ozPX}yz}{smvzyz{}}}{}}{wtssmhed^XVTOJFCA:8_{dS{{zwwyvy{{zyyzzyz{{{zywvsrolhe_ZWSMLJE>:>dyeZzwyzyyz{zywwy{{wttvtmkihe_[VSOHA<87Tsres{yyz{{zwyyywwwwvvwywvtrlkkieb^[XTOLFAJ^ovyzy{yyzz{zywwwwyyzzzyywwvvssolifeb^[ZWSPV^ehhilow}}}{{zwtommossssrrooooomlheb^[XWTV]dfhfimt{}}}{yvromosttsroomoooomkheb^[XTV[dffehlsz}zwtrrrstsrommlllllifd_]ZVVZbeffehlt{yvtttvvvtroommlkihe_]XTTZ_efeehks}}zwvtvwvtsrromlkifeb]ZTTZbeeddfho{{ywvvwwvtsromlkheb_]XWZ_efedfhlw}{ywwwwvvtsromkhfd_]XX^defedfhmy{zywvvtttssomkhe_]Z[_ehheeeflv}{{zywvttttsrmieb^[^ehiifffhmv}{zzyywvvvvtsrmkfb_^dfhihfffiov{{ywwwwwwwvvwwwwvsoie^XSOPXer}zyz}{zz{}zwttvwyz{{}}}{{{zwslfb]WX_ly{wvwz{{ytrstvyzyywwyyyywvssromliedkt}vrtz}{yvtvvwzzyywvtttvwvtsrrstvvtssvz}{}{z{}}{ywwwwwwvsrsrookd]eoy}wosyzzyyz{}{yvwyy{}}{zyz}}}}zzyyzzywvtssstssssvvz}y{{z{{ytsrsstwyzyyvsrlhdhs{ztw{}}wvyz{}{{zzz{}}}}}{zyyywyyywywvvvvtvwyyzz{{}}}}{zyzzzywvttvwz{}}}{zyyyyyywsty}}yy{}}{{{}}}{zzyzz{{{{zywyywwywvwwwyyvtvvvvvwz{{z{}}}}}}}}}}}{}}}}{{zzyzzyvvsroolhdbhs}ytty}zz{}}}}}}}{zzz{zzywtrmheb_^bis{zvsty}{{zz{}}zyvtttsolhdb^^^_emy{yvwz}zyy{}{wtrmkkkiihe_[ZVV^r{zyw}{{zyz{}}}{zvrmkhikkhe^ZWTTVV]t{sszz{{yy{{vrommlkihedd_[WVTPPSWlvms{y}}}yvrlkkfb^]]^_[ZWVSJIFIbykry{{}}}}wtolifd_^]]][WVVMJJC77Xwelyz}}ww{}{tmiebb__b_^[XTPOIFA;48ihft}vry}}vokfd_][[]_]XTSJIF?;7.Is^{ztvy{tohed_[XZ[[ZZSLIFAA?71bdo}vvv}y}}{tmkhfd^ZWWTTTOMLIC>;8?8-HObúmi{wz{okms}zwzrrrmhb][__[XVTSOJA<:5&0^Swlzy}yloty{trsoke^dfdb^XWXSIE>::58Weýsw{oo}}rs{{}wtttsmffhhe^XVVPIA;:784VSszmir{wzzywyzwmffhe]WTPMLF<:;;70&mW{wztkkv}{{wz}wlfdeb[VVPLIJA;>><;*7heá{m{smmy}}z{{}zyz{tkeb^[]ZPJLMIC>>>;8*Altwv{rrsv}}}}zvtrib_bbZTSPOMMLHCEC;4Zh{}{wts{}zwvtsrliifeeb_^^]]ZXWSPMJXvzlv}{{}}}}yvy{}}{}}zywvtsomkhhhfe_^[XXVTOJM^hehir{zwwtwwtrrtyz{zz}}{ywtrmlkkieb^[[[XVSMLZhhhimzzwvvwwvsrswzz{{{}}}{zwtroomkhebb_][XVSPOSdoihms{{zwvvwwtrosvz{{{{{ywwvvsmkhhed_^]ZXWTPOMM^y}ov}{zzytsvyyywsrtw{{z{{{zyvssroomihffedb^[[][VVTPPSZy}o}wyyzvmloov{zyyy{{}}}yzzwwtommlkiffhhfd_^bb_^]^_[Z[WP_i{vtsy{rkow{zzww{}z}{}{zywwwtrrtvtrrsrmlllifffe_^df^X[Z^i}y}}zwyyyzywyzz{}}ztstw}}}zywyyywvsstsollmmiefhb^bd_bddddbfktzywyywwwwy{{zzzz{ywwy{{yz{zwwwyywwwvttvtoorrmkkkikihhkiehmiekmov{zzywwyyyyz{{zz{zywyz{{{zwwzzyvvwyyyyvtvvtrossrmmoommmmmoolhkmklmrw}{zzyzzz{{}}}}}}}{{{}}}}zvy{{wwyzzzyywvvvvrrstsoorrmmomklolikmoorw{}{{{{{{}}{{{{{}}{}}{{{{zzzz{{{{{{zzzywwwwvvttssttsrstrorromlklommv{}}}}}}}{{}yw{}{yz}}{{zwz}{z{}{zz{ywwwwwttwyvvwwvvwvttwwvtvwwwvvvwvtsrswzvw{z{{}}z{{z}}{}}}}{{}}{zzzzzywwwwwwvvwwwwyyyyz{zyyz{{z{}}{{{}{yy{}{yy}wy}vv{}wty}yy{}{}}{}{{}{y{{yz{zwy}yvyzyvw{zyz{{{z{{z{}{{{z{z}}{{}{}{}}{z}}}{}}{{}}}}}}}}}}}}{{{{}}}{{{}}}}}{}z}}}{{}z{{}}}}{{}}}}y{{}}}}}z{{{z}}}}{z}}z}}}z}{{y{{}{{z}{{z{}{}{{}z}{ww}w}z}y}w}}}{{}}z{{{}{}{}}{}}}{{{}}{}}yzz{}}{{{yzzz{{{yzyy{z}{{{wy{{}y}yy{}z{v{w{y}zy}}{}{z{z{{{}vr}zyyzy{zy{ywzz{{ww}zwtyzw{{yy{w{v{}y}{}{y{yz}vy}z}wwzv}{mvsvz}}w{}vyryy}wyzv}zyw{z{v}y{v{z{}{wyyvw}zzv}}}zwsvvy{w{zv}{ywyzzw{}z{{}w{{}s}twyt}}wzz}y}{{z}y}}{{z}}{w{{{{wyws}}vy}w{t}{vyzz{}v}rty{{tw}zzzzzyzwyyyrwtv{w{v{v}{}wzs}w{{{yzz{zv}z}y}}tzty}{ywtso{tzv{y}ttzzy}y}}zy{}zwsvr{s{}wyztytzyswzzw{{w}w{{zzytzz}t}{z{zwy}ywzzttyy{z{}{w}{}w}{yy}}zz}w{{}{z{zz{{}}{z{}}}{y{}{yzv{t}z{y}}}{{{z}z}}{{}y}}}{}{}}{}}}}}}}}{}{}}}}}}}{}}}{y{{}{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{yyy}{z}{{}}}}}z}z}}z}}{{}}z{}yw{zwy{zw{wzyz{}}}zzz}yzzy{z{{{}{{{}zz}{}{z}}}{{}{}{}}{}}}}}}}{}}{}}{}}}}}}}}}{}}}}}{}}}}}}}}}}}}}}}}{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{}}{}}}}}}}}}}}}}}}}}}}}{}}}}}{}}}}}{}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/squeak.wav0000644000175000001440000000316412420374633013252 00000000000000RIFFlWAVEfmt **dataHpgfhjlhovh]agipompbffiginncccW\fjqpXZbmoilwd]ahgdmtzp[[\\^dj||cXZ^dfjxd[db`gkpf^d^_gipv\\]Y^jlwaM`ifjqut^\_dnhipX^cbnnlo\gnfcfvl`imggfp|cafcjjhh^jfepptqd^_k}ZZl`\dc|iV_`[Z]vnYac\Waadj`^^c{cmmadhqlaklfepgVgn`bnnRXjgbms_\`Y]loZ\b[WgiWalYOgaVag\bxu`^g]Tfh]`bRXjY\dWVxlfg`PNhwaZi_C_qih`^Xkrgfpcbsnvmf\vZYenjlZN\XSelXXMMZwWc`SKag`WR\tpokXMTofnf\ansp_^zmblg`riWig[hxX\jcdqR`m\XWJSW]vONYNUxKNSMagNVTNci`\NPwNS][j^PGHajPKFS|SEGPn]PNDZgRTJRvRPRRq~`WSPl^TTJ\wNKNH\pMRRCZmHPQMh\FWTEf]E[[DadM\VCdnLX^QbsRYbYaVOgi]j]_j\\z{c_caan|Y`dXV{p_gZSa{a\cg[`igk^Xcw`el`Wuitn]SepfacTaohhbSOuga`aXXyg[`kWQxke_`[ZpkUZgYNpt[U\`XdqWTea\igS^h[Upr\[ggYg{bZptflxijwpbdmqhmi^\fz~\isYSXhh]`VLT`~~TOXZ[\lkQZc_`guo\`b\kyv`Zekmf`QQkfadgdXjieokse]mldll{ySdrhkcasafia^in`X^bhb\wtTYf\^mo~^Q^binmxzodlm`l|xq\[dpvuymxboard-4.8.0/sounds/tell.wav0000644000175000001440000001313212420374633012715 00000000000000RIFFRWAVEfmt ++data.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x{~{|~|~~|~|~|~~~{~{{|x{~|~~y~|~~{y~x{~y|{{v|yq{~|{~||{yxqv~y{s|{syx{~tt|~|{{vt~{~vpt{|yx{|sq~||v~xtv~vttn{{{xnx{v||{~~xy{||y~yy|y~qps|~|~||~|tstqy~yxy|vx~yy~yx|{yy~ynq|x{|y~~{y~yx{~x~qy{{{~|yyyx||v~{y~{||~y~{|~~~~~|{y|y{~|yx|y{{{{|~||y~{~|~y~y|{|{||~{{y{xy||~{|~|~~|~|~~~~{{{~|{|||~{|~~|~~~~~~|~~|~~~||~|~|{~{{|~~{~~||~|y~y~||~~|~{~~|~~|||~|{|~~|||||{~|~~~~~|{~~~~~~~~~~~|{{~~|{y|y|x{|{{vx{tt|vs{{vtv{|vx|||{x{~~{vx~~~~~|{yyxttssqqstsnpsnkkklkifhhddda^Vp~~~~~|{~|{xyyxtstspppnnnkllfcc`^[SSUPXvsv~{v|~y{|ytstvssqnnpqlhikf```^UPPKHQ{xnlsxxtt~~|xvxvsqstvtsqqnkhd`^]XSQKH@`ɹ~h]av|tqxysy|x{tv~|{{||ysnqtvspkiid^YVPNNH>8qඎnUM^yslx{kcn~|tnt{y{|{tnpv{xsnkhc^YSQQQKA8t߹qSFUvyn{{h^k{{x|xqs{ytx{xqlnttqia[USPIEF5P͛x]@Aavsż|yq]Ysqp{tpv|xtx{xplqtsk`YUSPKFE;]Ģ{s^EE^~xqqph`ntks|{x~~vpqxytppsph`XPIHIEFtıxi[MSi{xsqkdhy~npx~|~~qkptxqppnlcYQIEECSxdQHYs{tqnkhn|tnqx{~yplpqqpnlhc[SKEAA^tcMMd{plnnlp{~sqv{~~vsqsttqkd]VPI@>Hl~kXFNhxhfklpvxvxxv{~|~yttyyxtqkcYSMF@>IxylUESlqhklnt{|~~||~xtsv{|yvsnh]SIC>=V{viPMav~nknsx{~||{xtsv{|ytnh`XQMH;As{qxt]KYl~qlpsv||xxy{{{~~xnha[VSNH=FvpinqaQ^l|{pqvtv~{~xqv|~{tld^YXVSNFItlahpi]fqx~vpkq|~yy||~{vv{xpkd`][][YUIQth^cllfpxyqiiq|xy~|{{||{|~|slhdddddhd`VMSqnfhnpnv|{{nip~~{yy~{{~|~~yqlklllppnha]UIKakhcfhp{||vicky~{~{xx~|yxvvsqqssttsnic]UPNXv~qa[aft~yldhly~~~|{~|~||~|{{{yyy{|~|{xvvtsplhc^YUQVivdU[`p~tc]^fx{yvsxx{||~{xxvxy~|xtqqpsstssqlhd^YXYav{d^afv~qkhks|~|xtssx~{yy{||xvx|{xtqqssvxyyyvsnkhfffhhikv~xifdlv~|vqnqsy~{vvssvy|||xx{||~~{xx{~|{yyyy||~~~~{yxvsqppppqqqnkkilt{|tnlpt||{yvxy~~{yxxxy|~|{{||||~~~~~~||||{{{{{y{|{|{{yvvvvvttttsttstssstx||yyy{~~|{{{{|~|{{{||~~|{||~|{{yyyy{||~~~|{yxvvvxxyyyxxxvttsqqqssvx{|xttx{~||{{y{{|~~{yxxy{~~~~|~~~~~~||{{{{{{||||||{{{{yyyxxxvvvvxxvvtttvx{~{xvvx||||{|||~~|{yyy{~|~~~~~~~|~|||||||||{{{{{{y{{{{{{{{yyyyyyyyxxxxvvvvxxyy{|~~|{{{|~~||||~~~||||~|||~~~~|||~|~~~~~~||||{{{{{{{||||||{{{yyyyyyyyyyyy{{{{|||~~~~|||~~~~~||~~~~~~~~~~~~~~~~~~~~~~~~~~||||||||||~~~~|||||{{{{{{{|||{{{{{{{{{|||||||~~~~~~~~~~~~~|||||~~~~|||||||~~~~~~~|||||||||||||||||||{||{{{|{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|||||||||||||||||||||{{{{{{{{{{{{{{{y{{{|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||||||||||||||||||||||||||{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~||||~~~~~~~~~~~|~~~~~~~|||||||||||||||||||||||{{{{{{{{{{{{yy{{|~~~|||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~|||||||||||||||||||||{|{{{{{{yyyyyyyy{|~~||{||~~~~~||~~~~~~~~~~~~~~~~~~~~~~~~~~~||||||||||||||||||||{{{{{{{yyyyxyy{|~~|{{|||~~~|||||~~~~~||||~~~~~~~~|||||~~|~|||||||||||||||||||||||{{{{{{yyyyxyy{{|~~||||~~~~||||~~~~~~~~~~~~~~~~~||||||||||||||||||||||||||{{{{{{{{{{{{yyyyyyyy{|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|||||||||||||||||||||||{{{{{{{{{{{{{||~~~~~~~~~~~~~~~~~~~||||||||||||||||||~||||~~~~~~~||||||~~~~~|||||~~~~|||||||||||~~~~~~~~~~~~~~||||||||||||||||~~~~~~~|||||~~~~~~~||||||||||||{{{{{{{||||||||~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~|||||||~~|||{|{{||||||||||||||||||||||~~~~~~||~~~~~~~~~~~~~~~~~~~||||||||~~||||{{{||~~~~||~~~||||~~~~~~~||||~~~~~~~~~~~~||||~~~~|||~~~~|~~~~~~~~~~~~~~~~~|~~~~~~~~||||~~~~~~~~~~~~~~~~|||||~~~~~||~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/README0000644000175000001440000000056212420374633012121 00000000000000The sound files in this directory are in the public domain. alarm.wav, challenge.wav, channel1.wav, channel.wav, draw.wav, kibitz.wav, lose.wav, request.wav, seek.wav, shout.wav, sshout.wav, tell.wav, unfinished.wav, and win.wav were recorded and contributed by Timothy Mann on 17 September 2000. move.wav was recorded and contributed by Pete Galati in February 1999. xboard-4.8.0/sounds/challenge.wav0000644000175000001440000001611412420374633013702 00000000000000RIFFDWAVEfmt ++data ~~~~~~~~}}~}}|~}~|}{|}|||}z~|~yyy||||~|{|~~{~{|y||umr||ywy|tt~{|wy|rq|~y{uy|yuu|u~to{xr~wx|~xtyyxrr{{{w~|wryuo~{|y|~~~ut~{|yux|{{{{{t|{~|tyywr{yt~{wy|w~yy{~{x|~{ux{~uu{u||qux~|{y~r|y{~|uq{x~{{y~xx~~~|rwtyy|yu{yy{|wuy|y~u|||w{yu~w|~w|{~~||wxyyx{{x|||{|~~||~{yxy{~~yy{~~~x~{xy{|~{~|{y|~y|||{~{x||{|y~xw{{~~r{~|{|y~||~x{~|~|~~{~~~|~|~~~|~~~{~~||~|{~~~~|~~~~~y{~|y{||yx~yuxyywtwxuywttqotokmkkg^oy|~~y||||yutrrrqonmnkkmhhmhdgfa]`\VZptyx|y~{~~wwy{ytrtqqnjjhfgd]Z\\`\VVU[lo~|yy~~|~||~{yuqonmjhdafga]Z]`]\UMXnrywoux|~~y{y{|wtoonkkgaaacacc``]VXUN]}}yw~ynmt{yy~{ywx~xrqoomggfacgkhd^``ZYTNWxtw~yqot~ur{|{rw~~{unmkjkgc`ajkf^Z^^VZUFZruu{|~wqt{~tq{{{xw{|wrjddfghhddccgdWRT]^LS̻}ruyxw{~{xx{~yx~{{~xuwtkd]]gkhdcddc`YPMSUPgլ|ortx|qrtx~~w{{y{y~wqnmf]Z]fkkmhab[WQIQWQsخyqtty|qnowwt{{{~umdcccacdfhjhaWLJJPPTȘ~xqhŷ{qdf|{uqu~xu{{rg^\]dgdacfb]SIGGJ[ϥyto|ykduy|~wuy||ytoh`^]`ddfaYXUJDGI^Ƨrvxo°lgxyntyy{wy{{|~wnga^\\^cca]YOFB9Gzln|pĭ{y{ttyjgns~{|ztx|~rg^Z\``\]\WPJC;)zьW4 Uެh=5פe7?H"0t˕a5$VԿZ:+CrҴwNES_i̊_G63Fκxkdaji]l~Q2\vMIOP_lk^[vjkvjLBQnpTGIVruXHFQi|sh^Zbp~kYNOZpznjg`[_pƼcJ=8@Vu}iXNHJTawþqYB;CVrr``huwmjirxk`VS\lzsgbgn|kcckxm]PLRf~~gWMN_x|qllmt|}ysposxxpjkmprw|}~rjfkry|{{zqmkgcckqyzkb[[enu{v|zqmpxuokilw~}zvrss||uqooqt{}rjcabiv{tifemy}wtvumdaju{unoszvutw|}|zxvy{}wqmnmnu|vqmmmmuz||~wrrsv|{rkjmuwspqx|slgjr{zx{|zvqolpyyrqsz{rmgiox~zwv|}yutux|{|~}|~}|xwwwz~~|||~zvtprrxz}zywwz|~~{yxxz{~}xwwwwyzy{}|vomotz~ztsqrvx}~||yxzz}|yvsw{{yyxz|~zxvx||~zvyy~~ysrsuy~{wvwx|z{xy~|wuvy~}yyxy|~~|xwyz~z|{}z{{{zvxy|}{{|}}~|}}|~~}|}{y|}}|~~~}}}~}{|}~~}~~}~~~~|zxxz}~}~|}}~~~||||~}z||~~||}{|{|~||{}|}|z~}~|{{z}}}}}~~|z}|}{|{}~}|yx{|~~}~}~~{}~~}}~~}~~}}~~~~~}}}}}~}~~~~~~~~}~~~~|||~}~~~~~~~~~~}~}~~}~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~xboard-4.8.0/sounds/laser.wav0000644000175000001440000000360412420374633013066 00000000000000RIFF|WAVEfmt **dataXxfizwrwlQWkk|pd}VBdwrgR_٧Q/:kƱpS\YcѓL*2Pưo.(8tӰvJ@1&Z]#DYPiJUiZ?Svnp>1Ed鿜R'1PkѲkGFUangI3Ctko٬C#0Slr\ZƳNF]MEazwMCFFBJ`s~z6Gln~K*BNETi۹a/8gʮqE2LdnìP*/TnpT$'dĀ`^6RR%$9gX,&FȾ_clqyQ2G]6.I_CFaS\NPkl~oSZt]L`r_mc`umgnwr|aRSzal`TnXOt|Ocp:Ex{dXHiSHvJWff[We+RԋIW89~CefA`̎5Jڢ<.дd>w]JϹW R΀>`߉1>׎'.\ Gل;Yԛ<ty4JȶlMh{cpm^ngbzj`qxQȩ]'AȵzR]{mjzw>@rws}|U3Wָu;Lvs>0gkCv̱nQAOfzҦi<<Ò{rT4=xܷmK70G-.b@SzġzO$0oqO:A|WAOyq`Uu`NLl|rHIhgOekn{}d^mv`\}waj|QEWnfjRZWaPUǐH9lr_hG]THqWQfk_Pzu4FѧcQU0{Ȅ9Lx@R֣@<߾R[~Fhp>kw$:͕HR؟>3>ix4ޠD=ܸ_QЎ@>~|NVd`wZbkcygio~d^ȖJ0cxbwlbpIJqtbf<0f̤lQezyʵf#&tܛgXhq^l؀+3foHGxXVGSlܱc(6Rw̑A(Uոp(7xǴÀE NѼg0)^ŲP#.HeƼn0#EWfŸzFHSgtisêz>!>Q^mhϵyI5>UgaaʌfR;7Lc̽Q1)Fguʰ;"4[}֨wdE ;~G,?ϾC*|)+bZMbИO&'Vյz?'Lrhdf}dO]jniav|WDaretiPXe\vrttsitɔR1Gxl}xYPzvVatgx|77*SǪ^gjksT\u̽ytwtbWPOSOI?8,9㼤lYYX|f[q}Ͳvt|wru|p\RIGMOF?51|δ}XNHkqev{Ѻripy~vvy{gXKBEMJB;4mӿ\LA`vulz|Ѿ~pemx}vrrzm\PEAGHA=;p[IA]qwq}~н{l`kzznnqzo\QFAEGD>=sXC>[p}yϻyfZk}unmq{zgYNFBCA@6LβoI8EaxʯpZYq}mkowp^SKDDCA=:mʒR=5PkξbQbynkmqwaUNHDED@4Tӯc@-@`ınTVowlko{xbTNHEGGD5CsB-5T{¸yYQgvponw|cSMHFIID8<{E--Nv`PbzĴsprrxfTLHGJJD97r͉E+'HqeO]uʼpmrw{hTKHFJIF97sЈH*%DngR[r}ihrziTKHGKJH<2iґH'AllQWnƬyjgp{jVKHIOMH=/`כK(;fsTTh˳}icmzoZOKJPSMG2=k3'NcOZqèp`ds|fVQOQUVKB+A׹`*-X~`LXrɫp\^q{j\WURUWM@/5xu1#N~mMPfԺzdXf~tf_\XVVTG>+@ӹc+0V~eLQiԷscXhxka]WSSVMC03s}8'I{|sRPcξmacv}pe`\YX[XKA-7xr6,LzuXVeqifnwmfedc_ZULD4.dѓG!!CptaTXrǼqhkv}sligfea]XRI9-^ΙM)$Kqzp²`QUqķsjmy~vonlifc`]\SF1;uxC&:]wuzSR_{tuy{vsojjifdbZK4,aИP/0UtzyZQZu|z}wtsrsrmgecZK:.YʡX50Wrvx[KVs~xz||~vstwxupkgc[L=.RĩbA4Xovz]O]x|~{u{}wx|~{tlijnj`M7%Oƥ];4\urx]Te|tnyzx|vnknqpiXD5*SöW9;hyo~wYVotupcpxpx~vmjr{~xgQ:.#L^EIs}trwcd|yu|yl`qsqtjfp~nZC862YcO[vs{zrr{ynkkz{vxwmknz|jYKCEE>li]f}yw}~vvsipvy{~qmrxvfYSQPO=J{`]t~|tzvr{uln{yvux}vnje^WNE7Fs^byujttutu|}ystw}~xtpni`XQJ>Cy{np|~phuzx~~~|yyuvz|||||}|wne_ZXUODVyvx{qq|{||~yvx|{xy}zqhca_ZSLGdzx}{rmx~{~wz~yy}}xwz}}zwqmmkfaXPIJkt{}vst~{||}}zxx{|{xwwuqmhc`ZSMRquwsv}~{|{xyz{{{xwxytpligb[RKRv}vrrz}||}}|xy}~{ywwy{yupljhcZROWvzw}or~}~~}}zx{{xwxz{ysponjbZTQWrzu~pr~~~~{y|zwvxzzwtponjc\WSVmzurq}~}~|z{~{xwxzzyuqnnlhaZVUb~w{|tx}~|z{}}|zwwxzxtqolie_ZV[qz~|y||z{~~}zyyzzyxvttsqmhb][Z`sz|~~||||}~|zxxxxxwusplhea^\ew{z|}||||}}|{zzzzzyxwusqmjgddjs{}{z{~~~}}{zyyyyxwvtrpomkighlqttssux{~~~~}}|zyxyyyyxwvtrpnljikosttstvx|~~~}|zyyyzyyxwusrqonlklorssstvx{~~~~~~}|zyyyyyyxwvtsrqpnmnqtuttuvx{~~~~~~}|zzzzzyyxwutsrqpnnprtutuvvx{~~~}}|{zyyxxxxxxvutsrqpoqsuvuvvwx{~~~~~}|{zyyyxxxxxwvutsrrqrtuvwwxxy{}~~}}}|{{zyyyxxxxwvvutssrsuvwxxxyz|~~~}}||{{zyyxxxxxwwvvuttsstvwxyyyz{}~}|||{{zyyxxxxxxwwwvvuuuuvwxyzz{{|}~}||{{{zzyyxxxxxxxwwwwvvvvvwyzz{{||}~}|{{zzyyyyyxxxxxxxxxxxxxxwyz{|||}}~~}|{zzzzyyyyyyyyyyyyyyyzzyyz{|}}}~~~}}||{{zzyyyyyyyyyyyyyyzzzz{{{|}~~~~}}}}}||||}}}|||}}}}~~~~~~~~~~xboard-4.8.0/sounds/draw.wav0000644000175000001440000002066012420374633012716 00000000000000RIFF!WAVEfmt ++data!~~~~~~~~~~~~~~~~}~~~~~~~~~~~~}}~~}~~~}~~~~~~~||||{{zzzyyywvwvtttssssssstxzz}}}|zx{}~~|}||y{|zy{zzxz|{}}~||zwutsromopolopsqqv|~}}|x}~yx|}}}y{}z{|{{||{}}}~}}~}{zzxxusspoomklpmloqopqpy~y}y|{wx|w{y~{zy}~}xyzyyxyy{{z}||}|{yxvuupnmkmkiiijmnmmpros|~}|~{vwz~~|}|{zywxxuwwwyxxzzzzyvwwsqpnmmijllijlnq~wZex~owttv{}{~}}|zwvwuvtruutuvtvxwtutsqnnlkkjhehjifcyuyx|}sq}~|||zxtsttsrsrsvtsuuvwsrusqooopmikljgeagyyyvw{}|yx||}~}}}~|xwwxxvsruuuutuvxxxwxywvwxtvxswuutusu~~~~~~~~}}~|}|||}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}{||~}~~~~~~~~~~~~~~~~~~~~~~~}}}~~}}~}~~}~~~|~}z{}{|zz~~~~~~|y~}~}}z|}yz}}|}{}}z~}y|}{~~||y}}z{|z}y}~{~}xy~~z~}}|uvxtwwz|y|}w{}tyvu{~}y|{xyzrvz{zqupqulv~|y|}yz}yu{}y~vrtvxvtwxzy}{x{|utq~~twwxy~|u{~{vyz|~y}}{z}}y{{txop{xhpsy{{}}|v|||}{|}}|w~~|xy{y~}xz}{}|{z~}~~{z|x{~zv~|xx}y|zzz~{~~|~z}|z~|y|z||zzy}}{|~~~}}~{|y||z|}~}{}}~x~{~|}}|~x~yz|zz|{||{}{}}~~~|||xzyuyuuwvtxssstprollkiprr}|w}|}|~~{}|~~}}{{|}|{zzyyzxxwvxuwtqropnkigdeknqxxv}{}~~}~~~|~~~}}}}|{zywxvvvtssuroplnigdfnoszxw~~}~}||}~}~|}~}}}}}|{zyzxxwvvuvwustoprmkihglqqtxvx~{|~}}~~}}~~z~{z{{|{w{zwxzzuvwwsvwvuwyxy{~~~}}|||||||||}}}}~~~~~}}||{{{z{zzyyyxxxxxwxxyyyz{{|}~~~}}}}||||||}}}}~~~~~~~~}}}}||||{|{{{z{{{{{{{||}}~~~}}}}|||||}}}}}}~~}~~~~~~~~~~~~~~~~~}}}}}}}}}}}}|||||||||||}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~wv}z~}z}~z|}~{~x|}{~~~~{}~yz{y~t~y}z|~|wzz}~y}}}}x~|}}~~~y~y~z~|}~~~~~}}x~}~}}~{~}~~}zy|t{xyy~}~~z|z~~}y}y}~}y~~~z~~~z{{{x}}z~}z{}|z~|{}}~~~}|~zz|||}{yvxz{zwttvuvwwtsuv|~~|{~}{zyz{zwuttuvtrolkjjhb][YVV]k{zpjklnrx~vsuwy{{z{}}~~{voieccca^[XVUUVYf{xtsrrnjhhjr~yssuy{{ywwz}unihhiiheb__aba]YTS]q|ldcjquvusu|}qjioy{uswyzvqkffimpplfa^\ZXSPXl|k`Z^fpz}|zwroorzzrnnqtvurligilonjcZSMIGNbzfYRU`m|rjilpsvz~{{}~{xuttttsqnmlkkkjf_WME@G^ĭ{eTJL[qxe[[dq}vqqv}}xtomkkllkifb\ULD>E_β~qaTKL\wpc\\h{ytsvz{tmhfgkmmje^VMF?v֧yG0:K_yrUABXzƲ}i^_m|rdXRU`nz}nW?."(NƖb3.=QoiM@Hb©tcZasuj]UU]ju}}q_I7*%>rکr;%1A_vYKK[y­yaX`qthZSV_lws_J8+#;o{?%,8Ww]PMZxŰvYOYovhYQU_js}~p^J8)#?sq7"(6[q[QPaĭiUPYp|l`YY^grytgUC3*+QϜ`1'-Bkm]UUgϾ`KPb{tg]X]fow~rcO>/)/]ŌQ+&.Gu|h^Y`yŭkUP^usd\[^eozwjZJ=4.>g㽇Q,(0Kwyia\d}ǻ\MObl_VXaiuqeUG974?gR+&.Ftzke`f|]IF]~i\SX`kyrcUK?::=YѤh9%*6`~ngccoĴx]LRlvh\W^gszl]QHC>CDPw۸|G'&-L|riecjīdPKYwiYUZepteWPNIHKHLlĊM&#?użsjfacw˸sQFMis`WVbo{{ocXRNKIIICa͓M"3lʿ}~||shgeex¶vYHYksbVZcq~ulaWQNLNLRM_̞\-"0a|}}}znmkiqrXTh|zkcbio|~sf\UQPTYYZRX}֫lP|uvuz~~uomt}ropw}wtstvxzyxwspljd_\YVQcȥ]C9E\ysuv~sons|omqw~zxwvvwzywyvsokga]]]ZXlbMGSeyvvvytswxrsy~|xvwwwy{{zzxrlgb_]_ba_peQLXi|}~~xvx|{uv{~}~~|zyywvwvrpnkgeed`]kr[R[f~|~zww~vvw|~|}~~||{wusrqoomkgecb]dzvbW^h}~}yx||xz}}}}~~{{zvutrqonkhfdb`k{we^dm{}~~~~|||{yvutrppplkjfebky{lfjr~~}{|||{|zwusrrqpomjigfp|ymlpw}~~~{{zyyyywvtsssrsqnmjgku|yrtw~|~~{z|~}zwvwxxxxwvuuusrrpnnnszxwz}~|{{~}{yxxxyyyxxxwuvvuttsstw||~~~}|}}~~~}{{{{{||{yxwwwxyzyyxwuvuuw|~~}||{{||}}}}|{zzyz{{{||{{{zyyzz{{||~~~|{zzzz{{{{{{zzz{{{{{{{{{{|||{||}~~~~~~}}}}}}|||||}}}}}|||||}}~~}~}}~~~~~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/slap.wav0000644000175000001440000000556512420374633012727 00000000000000RIFFm WAVEfmt ++dataI Ã=T0FUK-10bbX2f@3CZdSZZz=7_eaGyb{P}avpS|lX^w{rz^gx[{ye|Jcxv[Aobpp|irp[xvgijxrqccZt;aRBǬPAqsdPqydlCv[Pɬs>/>Si_hN^{ltoGcdmL7lsQ\gˮCH\w.=p@6?VNH,X؅)YɌ=/Tp~nlnk`R3mnk`lk9lvf=SbΜg(.h~}p:^-"oۚ4"ӟj^ZsG/~M>nyiQi{IXm|[8Ny]ERҼT4}Ռ=3k_l[iɚ_l38I0=xk.e8AZH`|ZmcW~_;OLj~Y1h¬WSbB_¸l}7\ch{h̠@&Gj>DB}Q!`'kU5T;&<t wsQF !"P$G%$%#!!"r"""![i?d|D6 gbH q4En$(bo~|[0*={Ot-5jcPiwMGnY  1 W ( y P I  M, X| I495J%vu^)uRXbqlv5 Y2+0ek  = : ZO"V/g_h-_U 4 D ~)^mMy-Q_w B+2}Ik4_g-D@  q 1:{I%uc%/g f]  }6) P6fV 5 1mYF|h*BMBhhEy}`}5R)T$t_ UrQXXv!-4E6`)Sy"U7` p 4  H W =  Y Mr#RJhLVS9G4D|X5-k3x0S';/tA_ q 7=-6Hrx=#Ou0bXa0Pe*)"$su=X,y`U*$a8(MljAM6ph4p(NY]uTx;{uxb/rUiOiBm/a80_5G.k-I-%6vU0sGM [BZ jN[pCihFO uNGAFZ`_fyP)NZmt{i!G.ass2]#)9_ AS- aRTdkEnn^bPc9s EZypTQ@(d^OGOB.whX`gccbcVENJ6  $2J`ddqv]NAB?DNT^gmowv[O^gXA05=d,!=++FFAYef_\egh̾vmfdXLMMMJAA770*)'/# !  #)%,.0<<95662/2..2/.,**+*+.0.+///2345756;>@CDGJMQRTY\^bigjmsvy}yvppmfdb_\[XUQNROOMJGEEA@A<::999665533110/-0/.0101257857:<:?ACFHJKLPRSVXX^abcfilpotwx|~~{{zxwwussroppppnnmnmikjhfefcebba_``]^[\X[YWXVVVUWWWVUTTTUSSTTUTUSSUSTVVVYYZ[Z\]_`accehhimlqqruwxzz~}~}||z{zzywwuvtttqqpoonmlllkljkjihighgghfgfhefgffgghfigggggfhhfggghhfigigihijijjjkjkmmmnppqrttuuvxyzy|}}~~}}{|{z{zyyyxxxxxvxvvvuutvtvtvuvuvuvsutusutttstsstrrrrrqqpqoqpppoopnpoonppnppqorprrtrssstusvvwvwwxxxz{zzz{||||~}~~~~~~}}}}{}||||z|{|{zzz{yzzzyyyy{wzzwyzywywxywxvxxwwwwvwuwutvtvtuttttutttttvtuuuwvwuxxvzxxzxzy{z|z}{}}}}~|~~~~~~~~~~}}|}||}}{}}{|{}|{{}{{}{{||{{{||{{{||y{{|{{y|zz{{y|{{z{{|z{z}z|{|{|{{|{|}z||||{|{}{|{}{|||||||||||}|}|}~}}~~}~~~~~~~~~~~}~~~}~~~~}~~~}}|~}}||}|}|}||}|||}{}||}|}||}}|}}}}}~}}}~~}~~~}~}~~~}~~~~~}~~~~~~~~}~}~~~~~~}~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/woodthunk.wav0000644000175000001440000000353612420374633014006 00000000000000RIFFVWAVEfmt VVdata1yyyzzyzzzzyzzyyyyzzzzyxyyz{{{|~n\LA<Uo{^;)*:tg(c϶~gWQVfzɬsU5$Hpr]F,$6I[jwſ|gTC4(*9K]oùwnga]YVSQQSW\bhov{}~{yxvxz|}|xpfYK>1&"'.5;BHMRV[^adfec^YQG>71+('),048=AFJNTZahntwxyxvtqmjgeca_\XTOKHFFIPZgu}vqmieb`__`adhntzzuplhecaaacgmt|zwuttvwy{}xusrqqqrrsttvxz|yrkc]ZXWXZ^eks{}zwtromlkjlosw}~ytokgca`__`cehlptw{~~yupmjfdegiknruxz|~}{{{{z{|}~~~~}zxxwvuttssrrqpppqrtvwxxxwvtrrqqrsuw{|yz||{{zz{{{{|~}||||||}~~||||{{{|}|zyywuromljklnqvz{}{xusrqqpqruwy{}}zxwvuuvxxvwz{|~|{zyzzzz{}~|{zyxwwwwxyz{|}~~}|zywusrqpoopqrstttttssssrsstuuvvwvvvvuuvvwwxyyz{|}~~}|{zyxwvvvwxz|}}ytpmjiijloruwxzz{|}~~~~~~~}}||{zyyxvusrpoooopqrsttuuuuvwxyyyyyyxxwvvuuuuvwxyz{{{{zyxxwwwwxz{}~~}~~~{{|}}~~~~~}|{zyxwvvuuuvvwwwxxxyyxxxxxxxxxxxxxxwvutsrqqqqrrsuvy{~{xusqonnnoqsvy}~{xvtrpnmllkkkkkllmoprux{~{xusqpopqruwy|~~}}}}~~~~~}||{yxxwvvvvvwyz|~~|zxwuttttvx{}~}|yxxwuuvvvvwwxy{~|xvsrppprstvxy{|}~~~}}}|{||}~~~}|||{zyyyyz|~~}|||{{||||}~|yxvuttsrrsstuvwyzz|}~~~}||||}~~~~~}}|{yyyxxwwvvwxxxz{{{|||}||}}}}~~|zywwvvvxboard-4.8.0/sounds/click.wav0000644000175000001440000000420612420374633013044 00000000000000RIFF~WAVEfmt ++dataY||~~|z~t|t|~vrttb~^|pnbd|`phjtpxlnzx|vzxx~xx|xv~xvzv|zzp~vrtxz~|~~|||~zp~vv|z~zz|zz~~|||zzx~|x|~zt~0N.HTT>hvdjbtlp|zxppt~v||x~vvrr~pr~~xfnnhhlrlrrvrjrpprxx|x|~~tzzz|x|~x~zxxxrztp~bzhjnhrpfrdjl^dfnnf`lhlnprrttvztzz|||trtxrjlljhhdbfbbd^\^`^\`\`fd`hjjjlrnttnrxrxz|~~xztxzzxvpnrphlhlllhljjnnlpnjnljjnprttvxz|||~~zzzxxtvvtvttttrntprnprnlpppplnnvrtrttxvtxxzzz~z|z|||~~~~zz~|||~|zxzzzxzxvvtxzzzxxzz|||zzzz||z||~~|~~~~~|~~~~~~~~~~~~~~~~~~~~||~||||||z|zzzzz|z~|z~||z||||||~~~~~~~~~~~~~~~~~~|~~||||~|zz|z||z|||z||||||||z|z|~z|||z|~||||||~z~||~|~||~~|~~~~~~~~~~~~~~~~~~~~~~~~~~|~~||||~||zz|z|||||||z|~||||||z||||~~~~~~~~~~~||~||||~~||~~~~|~|~|~|~~~||~|~~~~~~~~~~~~~~~|~~|~~||||||||||z|zz~|||z~~|~~~~~~~~~~~~|||~~~~~|~~~~~~~~~~~~~~~~~~~~~~~|~~||~|||||||||||||||||||zzzz|||||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||||~||||~|||||||||~|||~~~|~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||||||||||||||~~~~~||~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||~|~||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~|~~~~~~~~~~~~|px~xzxv~rv~xtz~~zx|~||~xzx~x~zz~|||~~pxvz|~~|tr~t|r|~rhtt|p~fjphrv||~pxv|v~~x|~z|z|~xzv~t~~z||~|x~~x~px|rz~~t~xzz~v|xz||z~|~~z~~~~z||~|~z~~|~~|~|~z||z~z||~~|~~|~||z~z|~~~||z|zz|zz||z|||||~~~~~~|~~||z|||~|~~~~~~|~|~|~~~~~~~~~~~~~~~~~~~||~|~~~~~|~~|||||||x||||||~~|~||||||zzz|z~~z~~~|~~~|~~~~~~~~~~~~~~~~||~~~~~~~~~~~~~~~~~~~~~~~||~|||||||~~~~~~|zz~|z||||~|~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~xboard-4.8.0/sounds/request.wav0000644000175000001440000002170012420374633013445 00000000000000RIFF#WAVEfmt ++data#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}|||{{zzyxwwwvvutsrrqrrrrrsstuvwyz{|~~|{yyxwvvvvuuuuuuututsqpomljigeca_]ZWUUVX\_emw|wutvxz{|}~}|{ywussrqomljihggfeca_^^]ZXVUVY^bhq}|yvuvxz|}~}|}~~{xvsqnkihhgghgedefd`^\YVRPPOKGFKT_oü~yvsrrrrsv}~wvy~yqlklmkhfdehlnmjfffec_ZTPOMID@>?CJR^outvvqmou}}xy~zrjgghfcabgjihhiiiheb^XRMIEB<426;:68I^s׹ibkuwqmsȷtv{rnookfbcgknomkmoomic_[WSMID>88;8106?GMUoѫo]fvztnrɷvu|vnklljfbaelpokijmnkfa]YTPLH@::=<746:@GLWyŬwpyxst{}vrnmlkgcbcfihecdgijhgdeknjdbadffd`^agkjffjnsy}~}{zyyzzzyyyyyzyzyxzyyzyxxxyy|zxyz{{{zy{}~~}|{||~~}|~~~~~~~~~~~~~~~~}}}}~~}}~~~~~~~~~~~}}}}}}}}}|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~vnwyyi]bh{|eXV^qyld`is}rjikr}wplmqw{ussuz~zwvwy||zz{~~~~}~zwtsvx|}yuuuwz~|yxxy{}}~|zzz}}xutvy~~{xuwx|}yyz}}z{{}~~~~}}~~}~|{|{~~|{{}{z{z}|{{||{|}}~}}{{zxyyz{~~~~~~~}~}~|}|}}}}}{zzwxwvwvwywxxvuvsssqsqqrppqpnpooomllljmlmpnqqoppmpqnsrsvuwvxwwxy{{~~}{}{}~}|yxvssrppnlljjljlmllmllkikkknonqrrvwvzxwzwvwsstrsuuwxwz{yz|xyywwvtvutyyy||{}{{}zz}}~~~|{}|}|yuqqpqtuxz{{{zyxvvustuuuutsrrsuvwxxwutronnmmmnonqrsuuvvvutsrqrsux{|}~{{{yy{|}{yyxxyzyyxvtqppoooorstvwxyyyyyyz{{{z{{{}~~xsmic_ZUQKECEM[p׹wpqw~ϵqkoz}{wrkbYPMLKKJF=3' Qƌ_B49EQ_ddcl빃U80@]}|od`cjsvtkYF6--3;AA6!DqSLOU_[K@?Mmۜe?4@\|ĺjUPYrmRA>DS`d]L8!JċcND?GWSN_wQDHXoˬn[Tc|n`ZY`de_SLA6* CΝnXIFA499Bl͓iLGR^im|սg]gz~xqjbWSV]ca[K32ծ}W>(&!,FYbI>GRbsּvigs~seZVX_jrsbM4 pޤYF,# )Njԫ`RBJVezǣh`lnYRYer}}s_E+ }mQD-#1cѬp\TFPbyl`dwxh[V\kz~scP<&KnTE4&&/\ͦnVPOTmϼi_ctwi\Ycv{hV@-  _v_ME7',?w氌obSQUdӹvecn{rieermYH;+% /bXFA-,=b×v`ZQXd~{pgk}wljpz|j[MB92573& pj\TP;-6YsfaYYe~IJroovrvstytcSIILKF=2# ilaTO90Cbuf`W^srpos~xsz}siebb`bdaWK=,&f[PB5;Omӝ{g]UVi}Ÿwa^htyleiwzpgbdltxvri_UH@5)4nZQGDDP_{߮jXS^iv¯zh[duzx}wps{tlhjihffda\TH2 LՕr\SFO]_sѴwd\cnx|sktxz{}{z|zwsprvxurnhaa^YQNMF:5\ѮubZ`jnq{xx|{x}||{}|zzxvroqqrpomkkkmkjkhc`\][bjwvwvz}~~~}||~~}zyyyw{{|{yzxxxwvuwxwx|~|{yuvrsqsy{{}{~~}{{{{{{{~~}|{wwz{yy{x{{wyyvruwsuvwqzqyrqwoupvoxr{q{uysxvtuyr|o{tu|yz{u{r{vxpipwzw~os|yz|x||uyu}stzzww|~z|}}}~~~}y|w{}~}x}}{xz}xx}z{|yx|xu~yxxyuutty~{vt{}{~{pv|{wqzzvx}{yxvsv|~y|~~~{}{vzwrpqu}toty}|xqopt~uqvodo}y}|~wpnq~w|}ytx|~z~vu}w|}{}|~yzz}{w{~xvw}{{{}}~{z{~}wstvv|||}~|y{}zyzytyvurjpxwtumhu|xsx{t{{yvnmy~z{|{wuts{~vqrpdmzrrysr{{soiquhhquuuw}ywwy}~xrssvv{wyxogo|}{~{{{{oanwr|{qg]calvxu|tefvupls~iqphejzzinyyu`nny|y~p_eei|{nnrv|po{~wzon|~xxxwy{xzqw|iryz{|wjs~|su|}svqovrsru}j`[yoW`wvaahzventx|xusy{iOgrtssy}vljlcarsmvsaeox{hfj~xrzzbaistjw{vu}vohqwpx}vsqztw|v~zwuyy~lly|sqrxwtmmovw}~vtgh|{{so{}v|yx|yu~}z~}uy|x}{zz{~{yy{}~{}}ox~~}wx{pw~~~{v|}~z~ztusz|up}vu{zsrx~~uny~ts}}~}~~|x{~}yx{~~~z~~z~}~}}~}}~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~zz~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~x~}}}{~~|}wy}ollpmsjl~{|vyhx}|x~x{iqfz}|t~p|nmyz~{{s~vz|~|{}z{y|||~}xsx{{|t}suv~}{}{}z~yy}{y}}}{vyz{ywy}{~x{z}tzyz}~~|~}y~zyy~w}y||{z~|{~{|~yx|v~|x~z~||~{|z}}|{|~|~||{{~zx~{y|}zx~|v}yvz|wy~{y{{z}~yz~||}|}}|}z~}~~~}}}~~~~}}|{~~}~{|~}|~{}|{z||{||}}||{{z{}}||}~~}}|}~}|}}~~~~~~~}~~~}}~}||||~~}~|~}||}||}~{}}~~~|}~~~|||}~}|~}||}}{|zy{zz{{{{||z{z{}}|{}~}~}|zz{{{||||}}|}|{||||}|}|}~~~}~~}|}|{|}}|~}|~|||{z{|z{~}|}}}~}}~~}~~~~}~~~~}}~~}~~~~}~}}~~~}x}~|~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/kibitz.wav0000644000175000001440000001506612420374633013261 00000000000000RIFF.WAVEfmt ++data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z|}z}}zzyxxzx}|xzvxzy~|y~y||z}z~}|~~}~}~}~}zz~}x|~~y|~~z|z||||||~z||~}||~~|zz~zz~|z|~|y}v~z~~~y|yv||zz~}}}~~~|z}}|z}~~|}~|}}~~|~}}}~}}}~~|}}}~~~~~~}~}~}~}~~}~~~}~~}~}}~~}|~}~~}~}~}~~z|~~|~~~~}}~~~}~}~}}}}~|~}}~~~~}~~}~}}~~~}~z~~~~~~~}~}}~~~}~}~|}|~~~}}~~~}~~~~}~}~~~~~}}~~}}~~~~~~~~~~~~~~~~~~}~~}~~~~~~~~~~~~}}~~}}~~~~}~~~~}~}~~~~~~~~~~~~~~}~~~~~~~}~~~~|}|z|z|zxyyxvvtvxrrvutvutxvxyy}|}~~}zyyvutrqnmjiedd`ZY\VQMFVfnxytuyxnx}|xuplinqpprvz|zzzyvphe`YUMFA<>ya]νmljiprfi~|uqqpjdhqrrtvz|yvune]VMFA8*YrVxΫvee\drparxmimplhmrvz}|~}umhdXPE<5*4vb\˾zzjdZUfzrl}~vieltrqtv|~||zpdZTMD6,!>bfƲrqxlhXPbyvx|xxvqhhmry}zy~|urneXNE<4-5`znlrnihdVXiqtyuqnlmnntz}}}~ztmeZNE>56Pijlytpqjadhipz|rmmmmnpptvx|}yvtpie^XRUbjlnuy~~}|zyxyz~~}zyxvuvvvxxyyyyzzyxvutrrttrtuvxyz|~~}}}||zyyxvuutrrqpqrttuvxyz|}~~}}}}|||zzyyyxxvvutttuuuvxxyy|}~~~}}|||zzzyyyyyxxvvuuuuuuuvvxxyz|}~~~}}}||zzzzzyyyyxxxvvvvvvvxxxyz||}~~~~}}}||zzzzyyxxxvvuuuvvvvvvxxyz}~~~~~~~}}||||||zyyyxxvuuttuvttttvxz}|z||zzzyxxvurnjie^XYdmmjp|}zyyxqmt}zuqpqqplmrtrqpmhb^VMTfpimy}xurtrnjt~ytpquvvuv|~|vrpi`XLA>I^lfnxpjfffffjr}qiilnqvy}zpe]YTNHB>AMjiXVXYaiqz~rmjifdfpyztnlmpnllmmppidb^XY]hvy~vlllhmry~xqnpqpr|}yvuttvxz~zuqnjfda\YYVU\m~~ynhfimv}xpjiimquyyrrrpqvyz~zz|}|z|~~|z|yvtqplea^^\]dp||rqnhfpx~|tmifjnqv}|xurqtyzzzxvvuvxy}|zvvvvvxz|}}}}|zyvrqnlllmqv~yyxrquyz|xvtuvx|~}zyvvxxyz}~~|zyz}||~~|zzzzz||z|}~~~~~~}}}|||||}}}~~~~~~}~~}}}}||}}}}}}~}}}|zzzzyxvvutuy|~}|yyz|}}|zyxyyz|}~~}|||zz||}~~~}}}|||~~~}}}}~|z|}}}}}}~~~~~}~~}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~}~~~~~~~~~}}~~~}~}}~~~}~~~~~~~~~~~~~~~}~~~~~~}}~}~}~~}~}}}}~~~~}~}|~~~}~}}~}~}~~~~}}~~}~~}~~~}}}}~~~}}~}~~|~~}}~}|z|}}~|}}~}}}|}~~}}}~~~~~~}}}}~~~~}}~|~|}}}||}}|zyz~}}}~}}}~~~~~~}~}}~~}}|~}}~|}}~}|}}}}}}}}}~}y||z~~}~~}~~~~|z}~}}~~}}~~||~~~~~~}~~~~}||~~|}~~}}~~~}|zz|||}~}}|}}||zz~~}}||~~}~~~}~~~|}~~}}~}}~~~~~~~~~~~}}}~~~}||~}}~~~~~~}~~~}|}~zz}}|~~~~~}~~~}|}~~}z}}}}}~|z}}}}|}~x|~yxx~||}}|}~~~~}||~~~~}~}|~~~}z}~xy}}~~}}}}~~}z}|z~~~}~~~zx|~~}~~}~}|y|}~}~~}|~}|}~|}~zz|~}|||zy}~~~}}~|y}~}~~~~~|zy~ztxxuyuv}}|}~~~~z|||~~~~z}~zzyx|}}}}~~yyyvy}~|yzyvx|~zzy~zv|yvzz|~|~~~}~}z~||||~~|yztu|}y}~}~zyzxu}|ux}}~}}z}~}}z~|}}}}~||}|z}}zz|zz}}yy}~}}|}}yz~}~~~}z}~~~xx||yyyz|zz}}~~~|z~|xz~~yxy~~}}~z}~~|||~~}~}|}}zz~~~}}zx}|z}~|}~~}~z}}|z|~|}}}}|~|}~||}|yzz}}~}yzyyyz~z|}||~}~}~z|z|~z}~~zzzy~}vy}zz}||~y|~}~~|v~xuzz||}z|~y|~~~}y~|z}~||~~}}}}}zzzz~}}~~~z|~y|}|z}|x~z|}}~~~~||~}|~}}}~}||}~~||~~~|}~z~}||~~}~|~~~}~~~}~~~~}}}zzz|~}~}}}}||}~~}~~~~|}}}}zz}zxyz~y~}zx}}~~~|~~~~}|z~y~z|}}}~}z~||~|}}~}~~|}}~}}}~|~~~~}~~~~~~}~}~~}~~~~~~}~}~~}~~~~~~~~~~~~~~~~~~~~~}~~}~}~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/ding1.wav0000644000175000001440000002374612420374633012773 00000000000000RIFF'WAVEfmt "VDdata'   .]U$-)N6g,=9mc0` %ԼmϨ:5 25D-2ug:u qAQs1C/_*&2y-NXb@:)@HW~fO4Dy%"wj$7 ['6:*QkF<+1$̻7 A{!iN/eO M14^B:Yy4E: .B( V; A9D'!)mc @ڛiH & eD wݬ1B<'208 XbE T | 6 ƒnrH]?w ھA..ʚ t$^` mn`3C 8l! (=(]w7?'1x Tn l50*j .ױ#]<f\"O¿=D0 p9ݥ& 7خgG "R-8@3#B0+-/ /F.hW"A0 NS526t1 8) δA_s 3nòss3p37 #ƾ_ǒ%2j"7,  8uMFX,@3b,Qq5e7{ ZQR(]1zT'c|M6 !EٔX7''fC{d @3Ʃ  !+8ֺL8U!!7 ?.X շ `+?xN Y>.; V!?(}e'D.m w8.8+i/!0d!|QE=FM 9,. ?4 (Yq/=,( , h & %#VFY.n ( -L|=* T% Y,enS2>uZ$Q/ 3&\*j C bܾT1x6g} ,!|\^'Z3% d^`e~ڈW 4 G<2x W'p1fa> 0==7 Hp  Q@8,%Rfe;Z#NB(@1X %luk0 "S)oYzU&J 3;ZP"- $,K tTX f %4z X%z?=z U;< L7^? #=H1 P'`IM*M5v '}N@^#q/9(װW!lN&A5$llIwv!)}N> vF sslBZ l + vL j O$ ^~z-'"l?V3xoQ;nj g! cNr"I 2wu7@@SB>Y9N2 ~u D U  ! xE~>i"G H eS { s "N * #  6cRu :Yi #D"e&31 8 h$ N a{a a)/ !_6%)fB43~C:3w B6=y"9 <6e߭(/YX4O p FE NZ =2 Tha$ P^  s( 'F0@-+37J-} En~vi_P]~*ozD EbmW ea6}Gqu V0sD  Y Yjyq(6w k",.NCO L^ C +ZgU o"BW$( HDjW q+!0]!Zx5 5`6+c%., X;5P)h]U,Nd p@YP@@ 75 vc S! *\d,UD@' ) c"A   K "/G cZ [([ <3?t=VV +\"+Je q *TD8 i~T\l Ydvb0 \)MwG!:Q#N QY v!wOrPv )e a#l a Ag b7x:9*#bX .%  ;/< xtHE: :uv|/*l: 6gR rSq#&. H T 1}( OF}Q 3} D Wg{ XnD#jVX</+6 .[R:x(2n! !cyv3=KMsv?}1v,  }P,_ m ^  I |UWx 0, J TRq U  sebld mo RLi' zm@*y/ 7w(a+^"VxRg: G% S,@  W ,3] cH 6 Gn h No  'Y&dk:1&i~#$5 !H Y4{`g @d*1{ fsllq3?FX -Gs% 4IU y{d12 k: 0 {C# @LZW e}ya l US v)4x Qr 84xmK l hZX]lB#0l@ aQ6;:%*Bb xfl g  w9` +p|s LQ G=/  6h [| 8  E(co\Q +?{  y}Hxr n (i67=]Tpc N gbc9s C ^ 3y\Q  I<C+{j  _ h '!gZ1 X 8  Gl@5F;4M  KAu A~bNwi; p7< FVQc]X4&lB 8rX8D O p M _ x$xK >R= j N { nC  5ZUO \qU` 0r 4=  M27~t nF9 [ Bg-Zr#F; pH /2* xG~~i w#E/ \Q'~JU g* W N7+ \I$ g =``U +xos [L(" 4 "l hg s Eo4F  ~&v FsgF=Xm_;  N|Nn  ^Ae5 <T8zZt YC D z@) U 4,E  Pc\ Sa4 cc + z U eec@dye H= ze_iiyf T31G/= "m)oGL c s rF;"Y( R{4n -)cK 0TU ICL=| Gsg)*] gWm :'FsNLK WO9 ~o-$> u AU@  fscn! 9K?* !B Wh$M  4x$CU (#xW*V($}_ AY+ 9_&U7*xU Fs$Sl_N^: :Sr$cJD -toT3 ^|yxuS ;QL0 BW /93E n$^a(#%#0"i~6o0"Ufh 9[bH\&5cAbfBZ) c;uO-4]V%[c)^R1&zhA\UR`}v1f{>?Hx7 b.Qnjlz@E-t"f\,t=1N+2Q0a(}(f)@npnmT6xGM.8V;N0l CPJEnZ=M^K4hF?[<n@@2m}Az S2[d@(:"?z[)QZ=Y!laQ.vS?%ctNK[4axBZ{+Y"bUf$#`T,:E\;@tOoG f.Rl[boV:~\A6OSk)8a/8!#u}mZ|2.tA KL)UdG@Z8Q8n[Uw|Ey%^ZL%X;?vX7#]6r*2gK!N8,6AGhtG) fK-}t>W+{<k6MX7 GVlb<].v-BUwyvWGE9OWUL f(|A}R Q?Sg82F 3 !/ xboard-4.8.0/sounds/sshout.wav0000644000175000001440000002261612420374633013311 00000000000000RIFF%WAVEfmt ++datab%~~~~~~yxtr{zvw{|wtx~ysquvsrrpqsolfdfhlsz~|stvuvx}vqtvwvxwssvyz|~ywqmlnorswxtqwwnbabd\\`jwvqpprxzttuy}xwxyy|zvokpuwtorvpdYRPNIELQTw²za\^`ejs~gZ]gqy|sifkw}wpmnokgjnkc[WTQJED?7CoǬ_HHTcotzɭcOM\o~wrnhjxumfccfecba_WQIDE?6;94xڣΰxH:=CA;mխsjbRXnŵx~z{}wqkgecdhkkf_ZYRL>;?HC>CEpӽye[h}}zytnhc`beiie`]\WYZN:6@>4)Atldy~|~~~|wtqlid_[__]YX]Z[ZXLD<:GIHd}{zyxyxxxtnjfeb_[][UX]db`TPQTZ\X[o{||xutttsnklmifffdcdfhbdc^_ccfhqoow~~zytvtpuqvptjvplpnoimkjkhsozzvwwxw}~ry~~xuw~|qqsx~xorw{t}zwtzyuzx{~~yx|}||yv{~w~ut{yy}~wx{{}|||{{|{|w~{uutrt|~~zvyy}}}}~xy{}|zv|{~{~{qvxy}{xv~|{|}zy~~v~{y{|}{y~~|~|~~|yx}yw{{}|y~|wy~}xy~~x{}||yz~yz}|v{~|~y~{~|z~{|vw{{|~y}|}y}yvx{{}|}}~y}~z|}z{{wy|}y|~z~~zu{{|~~~|~|ttv|zz}}}ws~w{{u~{{zz~{zy{|~v{|ywwyzy{|{z{{{xrq}|{|}}yr|}y{~}xs~zv}xtz}sz}v}yy{zztuyut~}|~yzwurr~~}zy}|}yy{~~xs||z~~zrs}shv{|~|xqsuz{u{xu{|{|{y|}{s|xrt~yww{~zz{|{{xqwzvuwx}~~xz}~~{x~}{vuyul~wz|qws~~~}~~~x|}~wwxw~~{x|x{xxvy||vz~yyx~}qx}}zuoz}~vx~x{~{wq}zvy}{||t|~wx~yz~w}{z}|}|z~~|w}{||ys}pn~my{xtxxys~uy{nqprotyb{x~vt~xvyzzyy|suz}}yqyszy~v{{xqy}wruww~{}}{z~{z|{vzuyy|zupqvyxzyx~{zv~{y|yz}~~ouuyz~|~{}zxtwuttr|z|||||}y~}|{~~}{wxw{|~~zxvswy~{|zyo}xpexwpxwpppnot}uy|vtuz|y|w}~~y}}{{{}{}{w||vzy}}x}xw}~yvpy|}zwxsr}v|v}w}z}wvy~w}zzz~x}zzr}zxszvuxt}~t~tz}yy|~|~~~}wrxt{}y{x~zuvsy{j|yuu~~~}x~xyzy}xwsytvzzt{|}~{xsx|un}|{~x~w~o|}y}l}xsw~~{trz~{{w}~pzhju{{vpxofx|}z~zoo|w{{ysyry~zq}zuv{~{w{s{|xr}yhxpryv{ou|zusqla||lzoztzyz{tyzxkuuwz}||{~p~iv~r{p{uxuy|joqsr}qq~wuxmnrzzwmkm}p||}y~{zzy{yyp}{thus~{pzp||s{zop{x}{vzyz|~txn~xy}|}x}}{~t|zz}u{pw}yvvy}yyx|tzu{z~zyvyy~{w{o||ypzw~~{uqywxurtqyvyyywx~r~sz{szswr|z~v~m~|x{|vt}}w~t{~}}su~~wo~zo|z~u}~w{ty|r|vzw|u}|}xyytrw{u}}~z|{y}px}w~n}yz~p|uxuszzw~}{zx}zz~~|~rrx}}v{y{|~wtq|xy}}~}|{w~}t~}yxwrx~|w}z~}q~{n}zx~xp|l|tzw|{{xztr|vvyy~wx~{xyxuvor~~x||~}~|xyvty{|wyt~|w{|qsuqxx~|s~xv{sx{}yt||y}}tvzvy~}s~vo{lwts|s|rxrwpz{uwuwqx|zx}s|t{utuv{wk|o|oxvs{lyvqrtowh}zrtjtrmvssr}}yzgwmzoqxx|z|y|~{yrmyw}s|qws}u~v}xz|v{ty~u}x~x|~yzxtywt~zz~v|~ozq||l{ps~vt~p|wx}|}~~y}uxzsxz|z{yz~y{|x~|~}||~|}~z|~~z|{{{~~~|{}}|}|~~||{~~~}~}z}{|~||}}~}~~~~~~}~}}~~||~}{zz||ywwz|wuxwvwvwvutuvtpptwspqrsx}{|||{{{{|{zyyxutuusrrqqqpmlmmjdccb_ZZ\aizyrrz{uqrx}}||~}}}~~~}|{z{|yvvyzyvtvwwwuttvsqqsqkgimjebdhihflyxos}|wsw{~~}|{yx|}|}}|}}|xxyyxxyz|}|yxxxyyxutvwvrqstromoqrpnnopsyyqr|{z||{{}{xwxz~~}~~~}zyz|}|zz|~~}|zyyz|{xvvxz|zxuuuvwtsruwtsponpttrnpsy~~yxyz{}zy{}~~~~}|||z{~~}ywvx{{{|~~}zyvuvxyzzzz{{wsrtvtswvrpqsompssqtx}z|}}~~}|}}~~}}~}|zz||{z{}~||||zy{|{zz|{|zzzvuuy{ywy{wsptsrqnmkmpuywsp{}zux{z}|z|~~~~}{}~|||{||}~}~}||}}|{{|z{}}|z{|{xxzyyvwxwtstuurqpqtvvtrsv}~|}}~~~~~~{{}~~}~|{{zxy|~}~~zz{{zxz~~~}yuuwxz||zwuvtvtsqoqqsuwwuttvy}}~~~}~}~}}||{|}}}|}}|{{{{|{{|||{{{|zxwwxxxyywuvtttqsspqqqrtvz|}||~~~||{{|||}}}|{zzzz{{{{{{{{{zyxwvwyzzyyxwvttsqopqquy~~|}~}}~~~}}|}~~~}}|{{{|}}|||{|{||{zzzyz{}~~~~}|{{{{{{}~~~~~~}|{{z|~}ywvwyyzzyvv|{xwxz~|{{}~~~||{|}}}||zyyyz{{{{zyxxwvutsrqqppomknw~wrqsy{xuuw{~||}}~}}}~}}}~~~}}~~~~~~~~}}}~~~~}}|||||}}~~}~}}}}~~~~~~}}}}~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~}}||~}~~|||{||}}~}~}}}}~~~~|}|{}~}}~{{}~~|~}|{~|||yz~}{~~}}}~~~~|~}}|}~~||||}~~~~~~~~}~~~}}~~}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~w}}~~|~~}~z~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/win.wav0000644000175000001440000002054012420374633012553 00000000000000RIFFX!WAVEfmt ++data4!}}~}}}}~~~~}~~}}~~~~~~~~~~}~~~}}~}}}}~~~}}}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~}~~~}~~~}~~~}}}~}~}~}~}~~}}}~~}}~}}}~}}~~}}}~}}}~~}}~~}}~~~}~~~~~~~~}~~}~~~~~~~~~~~~~~~~~|}}|||||zzzzyzyyzyyyyxzyyyyyyyyyyyzzz|}}~~~~}}}}}}~~~}~~~}}~}}}}}}||||zzzzyyyyxyyvvxxvvvuuutttttutxzuz}|}|}|z||z|||}}}~~~}~}}||zzzzzyxxxvvvtutsstqpqqpstquxu}z~|}}uv|vtyyvy|x|~~~|~|yzzxxxvvuuttsssopqoomkkooosqt|y~z}}uvzvuxxuy}xz~}~}zzyyvvvutttppqpllmllhghiptli|vzyxzyusuuustvxzyy~~~}y|yvvvtstopqollkhkhbcgksm`q}o~vzxquyxutv|~yy~~~~zvxyusqssolmmkihgfd__s}^Uiqztusx}|vu|zz}}|~~~zxx|xqttqqolooihkiffcc_`ySWbt}}}vu~uvy~}y~}}z}vqsvpkomkligkidfg``c\ZxYMlkt}ymqzpvzz|}}}z|yyvqlpphgffgf`^bb^YY[VbsAk^}s|sgysoy||}|}xvxvqlllihfcdd_^_[VVWUqU=scȺ}tuof|utu|}~}}}zvqqtoghhcbc_[\_ZSSU[~EMqiϽqosdvyoz|}}zxtyxoilmib_cd[V\[QONWBE|iǪˡ|osmmuvq~|~|yvmpuphffff_YZ`\SNQO[|BQu̳̬mmvok~~qyz|zvquxldfikdZW^_YRRRQNOp_@xz̝ͽzsgkv}sgl}}y~vuzytkdhkbZZYWURNNLM`~qObʾus~qghs|ulq~}~tmpqof`_\ZWVSNJEMcuiWcxsy|xmfmvtqvz|~|}|vqlmld_`_WSSROHMbohdiz|vvxvspquvx|}~~yvtpligd`[YYVQNJN`lhgmu}xuqtxxutx}}yxxtpifdb\ZYUOMHM\hdgps~~|xssxzxyz}zuqmkhf`[WUSQLHObggotv~zz|}yssuxz~~|xqkfdb_ZUOIEHWdfhmpzyutuxvsqqtzzxxuqoh`\ZYUQHDM[bgost~~yusstvxuuy|~zxtokhc_\YSNHIS^bksvx|xuvxz|z|~|xuqoid_\ZVQLINY_dovx~~~|xxxyz|~}ytmkfb^YSNJEHQY^itx|}|zyxxxxyz~}zuqlhc^ZSOJHJRY`ltx~~|zz||}}}|}~|yvsolhc^ZSOLLQW^hqv||yz|}~~}}|||}}~}zvsoifdb^ZVQNNSZbktz~|||~~}|zyxvusplgd`\YVRQQUZ`it|~~~}|yvsoligc_[WUOMNRY_hsz~}}}~~~}|xuqmigc`_[YUQOOSY`ku}}}}}||zyuqoid`_[ZWUSSVY^dmu}~}|yxvuspmidb_[YUSSUY^dmv~~|yxvutqolifc`^[WUUVZ^fmu}}zxuspmlkhfdb_\YWVWZ^fmu}|xusolkhgfc`^[YYYZ^dkt|}yvsolkhhgddb^ZYYZ\bhpy~|yxupokiifdcb`^[Z[^_dlt}}zxvspmlihfdcb_^\\^_bgmt|~}zvuspolkihgfcb_^[\^bflsz~|yutpoolkkiggdc`^\\^bdisy~|yvtpoomlmmkkigdb_^\_bflt|}yutsppqqqsqpmkhfc`^[_bgmu~}yusqqsuvxxusokhfdb_\\^cgmv~~zvvuvxyzzzxvqokigfdb_[\`dks|~|xxxx|}}~~|yuqolkkihd`ZUV[`ix~zzyy|}~zvusstsspmic\ULFJU`o~~}}z|||~}|xtpmkifb\UME?DVdsxz~|xvz}yx|}}|xqkc\WSNIE==Oku}~|yvz~~~|usqlhd_YSLFD@89Uy}z}~~yx~}vssplgc^YRNLFA;4Iy}}~uqu||}ztssqlhc\WSQNIB<74Zi||vv|~}tu~zvusmkhfb[WUOJHEB7Epd~x}~zvy}}|xyvqmifdb\YUQONF@7AgU~~}suz~uuyvxvslgffb[WRNONE@5JZj~ĺuT3$)4@N_pƽ|]:%+:ESfxɽ~hH-)7ESfzĹ~a<',;GWk~ʾa?1:GSbvµhH49GP]rʿb<-9EO^tͽ]1!0AK\tϽyK&&:FRg·X1*Wv¬e85Ng̴~I1Eeëa<<[~ȿO/?cҽ{G/Ho{Q9My`DFkiC?\ñW?O~PAYuMHiYG^]FYPDfVFesPZhYmpc}a^tSX|k^tgurxr_kn_kxboard-4.8.0/sounds/honkhonk.wav0000644000175000001440000001176012420374633013601 00000000000000RIFFWAVEfmt ++data~~{z|z|{~~{{z}w{{}|}x|w}r}klo}r~y}}{w{}z~~tt{r}nj|t}vzzxyp~{{x~jtllptzxvv{v|uxyiwXxYiiru{stvoto|{}uf~^riwx{}qf}gyzlu|oevo{q{{tuopw|fr{emkpqu|z~{q}xr~h`}iryruq}z~xtlwwW{dlyvus|qz|zu~{e`gphrvtofyzyqtaxfYyeszylxiux|~{|lhhwZwgos}ukvl~z~|qt`]d`mut}k~h~|}{}zmsP\\if~~l}qbxzy|xqhQlhMv]vkut}lnx|xt}dgRwPkZktlutyczxyww`ryK\[ef}prkhwwy|suijPshVkcxqtjlutwvps`\hvV|ybtwwlvuw}qxsa}hXzTocoyykqwlzq{t{fuwSYe]j}vsjkzqyrzgnLZX\ctwiisu}nwniRr\PfZ~swkmpu{juwbVgdFrUvqpq|pqstpo|[bZmE{~Xnyip~tqwsmcSdZmGv\h{]rtszjq]U{b[qLu\bw^}r{\oTx[}d[tMpSa_bkoqOfVpnl`uKuFiKpuZbZ_foprpUxLv|NeZSr~clulrpMmTe^[aTqwujltz^sn_vz_vtb~v|a}l{|sjvrkyjtzw{|bj]wmylon}|`v\jk}wty{|~my]{~ca]Zn`ru~~~f}`gl\px[~etsrm`xZuySc`eu}r{wk{~dytc`tmj|xzy|xpxpppqxvvxtmzxy}yyywzssr~rrtuxyuy{{}}uwuzn|isjo{qtz~vx~yyvzv}wt{qtumuzkyyvs|r~s{zwzvwkx|kyvvz{tyyw{w}~|{xz}}|{~z~y|~y~zrp~x}xq~yv{y}xzw|y{z|{{{zsv||ty}~{~yu|w|}wwrvutz~z~wy{}{{}{}~u}|x}}y~}~|}}y{uy|}||xx}t|ty{yzz~zw}}zy{vz~wxxyur{uu}wy|zwxux|z}~wztshlcun{ml{wvw~|vu~uuzxnqoknuxvtuv}{qtnevfylyz|}y~tzx~pmWyOu^}lqwhfd~|trtidrq}wypvhdzme|shot{|vz{yyxx}oioo{yl~sz}{zpzx`xlrsmuy|}{}~k_cihzvirw}x~}}o|pWx\rrbjp~y~nkjwXqbh~sdypj{}{yu}\Pi\fzwnm{otu|wqtZTZc_|monjwttotrVu_JrWtnmimqp{jton`ioOUiukgnrs|piz]}d]zPnajtdstn}xxnz_oqQPc_j~qjmlvqzmujmT~WX_a|lpppvlntwjWo]KeSxjkrlxn|oxzifdcHtKppcrmwqxjqkzh^lD~NftanowrrlpiyqYvCwMhy^quvmnljjzwZyFuMexaw|~y|ofj^dytYuDsJdl[}nwkXt[oorSz8sCc[a{^vlOi^}wutRu7uŎ8mHrpV`V[m{uwVx={9|yEbYOx{akjy]rBjM`]YowTcysl]rclP_iRut\de|h[{csqogk~y\o`kzrh]ctllxxhrckdqtv~czs}lnjhihm{x{v|jzypsgy`rg|gjmgz}ksgid|evcecoq{}qy_zY|o_]}vf~uu}}}juftXhmveik{_~o|_rlkw{lghyrTjYyqnod{}`vm||wn{uWMfe~{npeok~wprm_qevxwhq^sceuwjvmp}_xgkg]d^lgf~jgkhrz|hwbu~rzreyp\vi~xau[mllcZakpzmyfrir{iplayvjst{yzr~jk}ybn{ms~vyy}ytn}yoouzywssvp|zz|{zwvv}~omlelkvq~~{z{|usxqz~ptqqspsvrvxuxz{x~~{w}zxrxsyuwxz~zzzw|w|vzz}x{}~x|}|w{uxupprt}vy{~~zzq{zqz~|z{}||~z~~|}y{}z}wr~zrywzz}~zx|x~wx{u}wyyx{ryr~zw{||wx}x}~{xwws{zz~t|su~w}z~~}{|}~}xywzz|tr}t|t}wxyyy||}{w{twsvwvx{|{z~yyxxt{t}x}~}{yz{{x{w}||{~zz{||z{vyvz~wzzw~{{|{~xt~~t~}xz|~z|{~}{{y}xz~~{}{z}|y}{y~z~x{x|z|{y~|z}|zz~x|x}x~}yz||z|yx|vzx{x}}yzz{z{~}|y}x|x~{zz}|~}|~z|x|y|}{~{}{~~{~z~~z}~z}}}~{~~|~}~}{}|~}|~~||~}{}~}~~}~}~}}}}|}~}~~~~~~~~~}~}~~}|~}|~~|}~}~~~~~~~~~~}}}~~}~}~~~}~}~~~~~~~~~~}~~}}~~~~~~~}}}~~~~}~~~}~~~~}}}}}~}~~~~~~~~~~~~}~~~~~}~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/gong.wav0000644000175000001440000012213012420374633012706 00000000000000RIFFPWAVEfmt @@data,~~~~}{zz{||||}~~}|{{{|||||}~{zz}{uqmkkmquy|{vsrsuy|}{zyz|~~}{zyxwvwyz|~~|zyz|}}}zwtrrstwz}}zwvtuz}~~||}}~~~~{xusrruz}xsqpqsux|}yussttwz{}xokjmsy}|zyywvxyz||||~~}~~}zxvvx}}xvuwz}~xrqsw}|xsnnqv|vle`bgmrux{|zwqkgccfmw~vokknqtvxxwuttw}zy{~~xrqpqstvy{}~}|wrnlloszyqkku|xvxz{}~|yuqrxvsssqlijnu{nXLJR\fntz{xuqmkmoomknt|void^XVXbo~}xx|z{|{ytqqu{}oechpu{}xsojikosu|xux}~{xvwwvyxtqmkjhgho{t^LFLZiqtz|qcXRNRZahmqv{{~ufZXaoz}{}yjfkx~uoljpx{yvxwlgksy~vrv|~{wyyty{sh\TPXfqvtpr{ytvvcct|srx~tdXV\dggjowusw{{vngfly|vyzh\\ajyugbisy{}{sowwqprtwvnkr~~yroni`^eqslny}{phfmvh^\^ds~~ykhox|xt|~qko{ys}{|~wkc^`eozwieqylmyvruz{xtv}}vljm~qkoojghjmuxqmq}o\Xdpjcll^`gotuxwoqlTFBN`p}~}xu|}s~wkcelkjuz|yso|{ien{^NTkyxvno||y}uwxhcmy}ys|ursmdcnwsikzqimw{~|laVV\\fv|}~tddrrmjnzzhTFNgzyi`be^TVhwy}{urwrysoz~kR@@^v\Z^esxtrs|lZXdmnlrz}xoeZdxijuntrvq^Zf~ydRNR\hru{vjk{{~}o\LRf||wi\Zkvlq}ybTVXRN\s~nq}yrq}yswzqVBBTi{q\Xfjhn|{z~p`ZXoo^Zaenznovqyx|whTFPjŮyb\^mzzucLHVkgVPNXuipx^Zhr~nXTdqhczqjiafqmks}ŰeF9DZ`^\humqwtt{mcehdk~sZNjsa`r{rw\FFXyulzfP\yvfxm\Zbn~y\Tbecl|t`dxt`aaexff^\j{objqrgRdr}~ozj^i}zkbZq^^w~c@Hb{{n\flbhsx|sdRJTpwoJNf|wV\xwtjhdXbv`^s{t{|ZRc{xcijvsmgbexud^bgjlko~{VTbjkek~~xjg}fDLvwqVJh|}rmz~qg|xb^ykqnqxrfTHFVxwanrfcl~x\PZfvl\RTl|h\h}XZquZXl{winz~}~{{oX\oveLPn{g^fi`au|fc|{vk^fv|}|vnvmV`xdizxiZVuwpni|eVRZu{w|ultsgNFetaTc}g\l{vy{^i~adp{|gTXhwn{^bx{ojcu|~ifjug=9bnk}^czwZV^vlk{}zojslvzuxpdrou}nlomuksww}zuusnu}V\yzz|g\ZgVDV|~kjupmvfinnjNNzu\^wx~um|ujVZrridnvdojLPmuf\\}{xvysoqsyvmeZq~orhfhv}ruvtlahoyyxvmxkZ^qr}j\izzjj}zp`io\czw{|vrnn||{rvwxwz~ts|x{l\B^~|symPVwxcszsy~ufekmkr|}sqjouup|ooxizuxqty{}vwwsz|cutP\wr`Zg|ymvzjm{g{sovqmns||u~xigoc\~}^toXZziRbwteN\w|e`rxj~y|n`bt|}n||pzvuso~|y{qnukVtr`hvyxzv|{rum|oybef\Xkusdg||zqy~ruwuulbt|syu^rthnnLcu^~l^}tn|`psZ=P~\a{zvpu{iXd{x||c^{ttvvowolufZfzxvv~umojmf\dhf|ekzz{i`mgkozs{m^^xyfvgjgZirRnqJ=hxj~ruo|wj}{bet|hotuwxsqgt~vo{}tzji|x}vhr}njukaoz}yro{|v}~yw}ucaovdaktgjiozvyne~x~m~olbegj\PZx{flnbrq}ykZ^efXbrox{tm^b}ykxɶ}X\aXzyk}mojhuuzsdenT\lo^~sz|xhkkDLtwosmxhemlhxw|}v~~Z\urqwbqrkTqVFtojswwy~t{ob`o\Xzwt}aFNnlXliqhfvy~~vvkjvxogs~ZXi`tnZkbytfunlnfwwrzssydac~}yj{vxwal|~y~}mRXoy}mlzqlfu~s}xp|suuf}oeo|vx}lcuhXsixz^h|~guveq|{}yuxn}{eoshvpfkw^l{t`alh}r^exztcfjzqo\k}qiXn}{uohuvm^^|orxzxwx}|{}z~z\yjZrqm~f^zkbvzla{sn|}fNknbvkxkf~~u^nzqNLvto{~{^vtrno|}|z{jtuZbsxJPryunosicz~lev|ryrbuZTrgXmtn~v\i~XmcHJxxavz}wql{o^bjyunNg~wos|{q~{yrtlisdZvj|wll~qZJbhHV~~y{mtuoq^`z}rl{{o}NP{yr{ynstl\k}nrq~z{wphswNVg\u|vvihqjoyveZjwwrwrwslmVl{}rfmqgkx}{wcs|uqv}{zyucTr{wufi}nVvy^^VXvmqyp{vnnhi|nxrh{tvlyns`~|VLawc}xcz~NNqdvq}r|{yg|im{tofXVuc\e}wuqvkVuh`inyl~ilzgxzyoev{{yvtv^gzioe^nwvZ\{aerhqnRdv~{jrTFw|jjdlrvd^a\lxntxyleZlsyzyrsxrq{h`cz{rhismmkTclevszqZvkdq~o{{vru{yu~sisv\cnm{}immafN^kpzzzdi|nlmwu{{gNZjZhvzyeg{y^kpTmy}rxsuymvyqy{|~yyZXkrt~upvcoyhH^emucXdxdzqqsxsfzv}txfjllbdfykn}}r{jlxz}xs}s}wjpr{kNezznrmz~naujtxws~{ntl^h{{vtvx{z{ohzlZqtjrckuldyyetiu}lioss{hsq{slmt}mfuyohu}twhrui}fxbiy~fmz\Zr|oxu~^xsvx|rto|k{l`jnlz{l\o}w^qoenx|xacehuoZ^cwxdawk^w~|q}syv}|tyom~pamyq^t{pvzau}qhrjrrswnuvydu^blTZ|~ZX}whyow}qx}vxz}o~vl|m`dwVRudqslkxsnvliZ^mhTcxLc~sjxp^mqp~nXlgHJVZ~hu^Vvd{xgi{jTlgVlnkjzjtyayu\z}n~u|{|n{ZRiw}boqk~jzwzuu|z}xy{crsbn}~xqun^kfXgoXo|lqusz{mzzdvycJrrZVqbb|sty^adZzws~v{suJP}pXjz\hu^gh|~k|ticyvy~ixylc}oT\jfx|gugVf{gu{{qeNVrmDXiVtm^uw`bkyt{irupgm~\ZyqargZ|tqzkxkVn~vv|}k|zeNVft~x}vtmyo^~wwqt\\^NgT\r\Trqe}~uqmrstvwhhV=bhZVi^^}Zc~~qydRm|TZcej~vmggbl}{pfcblojPcfX^cBTrJbwer|{tzcpw\fmjixaX^\zXTn~xpmv|tkZh{ZXzZ^yrfolqtoks}{x~u}sjykfsk`nqLZ{efoha\hjjxpe}ZLu~RJm`ixy|emr^fwziw~ot~pjlmtXZxj\ntymezwefu}ts|{bixzTt~gRZy^dyz}rxjXxxht|t}}eseejaZ{rj~RcZoyvxblugbyrng~s~~^`jpyqk|}ruoZvys~vmxehxqX^zur{}xrfu~qorwznf~vhVqhXgzqvoZqwZ\rw||~f^sihrtw}wuz}}qntohmxzw}rzwsjojXctx{xxqktvrvy}t{s~pir}jus{|qv~uktzqovgtnrtotjv{cg~lZs|nu{usryzt{rmxgd{tx~vae{os`\|sdtsr{ig~qhxuel{ymyrzv}{rskty|~nu{zz{{oi~lRl|nuvnpwyrrqvymtx}|tez~w}q~qlsfaqz|aiogosvn\ushrtzu~adlrtuunk}q~q|phwrwhd{mumXg{{{u}{v{c`o}cptTumfeksl{}tlgy|lvvsgr^krpoamwirwv}}~zx{{{jr|~w}}qny}kttr{~{yqcq}vmuzuky{rwqxzpywsxpjv~~|tnu{~tiq}{vz}|nmxvZfy}edwyuzwt|smvvcesifm~ywy^ohdu{pah~``u}to{xjXjrw~pq{ilywy~v|xz~vungdfytfmz|||uy{||y}ujr~}{e^hlnzqq~tmzyikt}|wvrv}{z{lo~ziqvouo~vg{trvyz~~~tu|zjdnorynxxzzw}xjyyfkujmvwlnxxlrqvym|s^hzr~lj|zrung{nkxqpxuyptux~ljs}yt{~ytjszr|{w{y||pj{zuv{jj|yr~wdl{y{{svjnljmlzmja|jiy{omx|vxtvyqlz|k|ymx{~kqyxz{ohx{umvt|yogxyuqno{pshnz~}vopquv}w|zush\rstliwvpmzjdr|}qprzqn}fhz|z|rku}{sjkis}vygs{{zwiosjoz}}uwiam~u{{mNazlzsss{{qtmmw{ynbb}ohlw\Z}xflzxkurmr|yoxpVTZ{qlqvpche}`gacwwzlb{jbi~{zx~{uixjV^|ghh}kat`Vmtmlkv|sq}uxuj`f~ekxtoysqoxl`vvsiT^{y{vxsh{{}txhZ\skgs~rwin{cgn{|klv~}n{~vt~qf|xqmkytw~}y\Tfq`jrujeunVzvlzfa{~tft`nyzaZ|tb^mrsuw}\PcuVVwzo}~nhi|zkhuwqma^{vaZmyos|mtxmstl{v~~rah|xpssw~epz~yikx}ojxuo|j~sxr{lXc|~ys|qlnzruusqlqz~c\kxm}yr~}sz^Xq}muz~zv{{rzm^e~y^ounxf{egzflu}|ek}|zxon{xz{wwlThyqtjZmvvlgrxq{}uw}|xulk|ytt~uzwfk|ymrzz~nq~wnuetr|odzyxvuwuhnggy}gZyekz~~uwxxrytws~ttzx}p^l{suw~xan{xx^Tqxzsbrrchkxzsk^oxsohvnr}zqjs{tnfo}|npx}~{vvzjpwxzrequm}kzymy~norwqanhdvvzwlyltyy|y}tx|vvx|{c^jueurvtwrntmnakqvsvvmlqslzz}~syyvh^cq}szo^txwszypyyu{n}~{~omv~}vx|gg~nqvwtwwxtrz{ztu}}x~{tuxrrsuvmuqnxywsuvvzru}{s}uw~zs{ry}}wns{zzx}yxdg~|ms{sy{{~}xsnv}zvy||yto}~t|x{{{hqsuo^vzrtxy{ztsvlsv~~qz|{{~}{zts~{suqmqu{||zoitvolw~z}hizsgxszy|rnu}xu~vZZvi`e{}qmvvwugoz}yxom|{}qjo~zws|mwuz~~quwyvyy{uu|~igwy~|xnw}xxs~vuv}xslx|wzw{~xsx~uvyocyupnw{oj{qhqjpwjzx|x{xwnklx||~~}sw}lhqsw}~|xvt~yrforqswnv{tsw|mm{}ytqis}wgZrumdkvrtyr~{wz~vrwv~wvvzxstuliy~xy|tqyvw}|ywuvrv~riq~|}wtntxplo~ia~zxzlk|ii~zxroy}uw~v~zst}}~tswrnr}|zuy|sbmz|}ru~yyzxz}uzqir}pu~|{{sdgmtyzro}|~ninwy~~y{rzxwlo~vx|uv~zxvy||tu}|wvx~|lls||}}u}velxy~||~wz}|xkl{}{~~}stth|u|whv{rzzzz|}vnrwyur|xxqjrzy}vrxr|vwur{ov~u}t{~{}|stytz~{zwov~yzhctzwts~}yqlxxqz}tr~xivuyyqt||u||}yv}{mvx|~~{vwy}}sq}}|syolwgdyr}h\w}nk{|t|mlxmxu{}rsmorqvyxvjfxz|tmqstq{z}}tuzujkqzyw}{{yz~lpz}|rw|uqsolwxo~qnzw{zz}|{v}vn|~{vy~~}vy}y~~~x{|}sryzxp~|~uurhw}|u}yr{nms{~}s{|{~|vy|rk~xwv||ooyolvo{v{}}jnrsy~|}z{utx~yu}}{wrs~~usvxp~|x~||y}zr|}u{xzkiqmwyqxxmxciuenvoqtzwr~rzzw~tnytvmw~tpx~zyx|}wmqqr}t|yqwxw{{{{qxqcjw|~zssxwu~}vov|z}}yw~}{|xm^f~sn{}xswwqnuy}s{nw}pr}ww}lsrgtsvhs|swy{~|yuy|yt|z~~rpu|thp|~}}yloqqqoq~wxbn}|vpswmriqwuzlwvw}xwt|di{uxxw|rv}vty}}{xr{yht|msxkrw|z|xuoeuzuy|}yv{||zvoxs{n^ryuz}~yy{s{uhqy}ytz}uv}~wzilvts{}qzx}{~~slyuzyu{v{~ujprv~qpytp}vosvwu|xylz|sx{|y~xmm|wz~xs|{kq|}~{zzrtyrx~on}sk{zus~{qwwyvy{}{lowjvzwz|yvx~}~{vy{pz{rrx|vs}{|wuwrzyyxs|}|y|ypy}kgztr}~}}yxzstzy~~uvsvyw~ntnl||s~{npzxy}zooytmouz{}{oxwecxvxvklw}zuxw{snvtpz~~wz{|}}|x{{sr~szv|~yzukdm~zyyoty|{wurxyyzx||{vuzzsu}}wy{jku~tqvqoll|}~{|zwunmv{{wy~~tuyqq|yim|~~~|}~~xt}hqs~ztry{qlv~}tnzt{tqwxwvsv|~}tpnswvx|suzrz~z{~tmx~{t}|ibt~lfy~|{w{{qq|zy}{}xywz~}zoqy}sxxnyuzzyxwz|||wtz~}~}yxrvzxz{rz||{z{yz{su|yyut~~z{||y{}{lo|wwzvz~rlp~x}}zy{~|~|wtw}~xlu{y{xy~{|~us{~}~{~wrx~yz{vv~wy{}trtwy{|}zxrlo|x{zty}rtyuwwtw~w||y}y|yqt|wmt{sxx{}mjkkp|nt}yrs||uqvy~}{vv{}}y{~uvw~vwwot~{|udexrq|ynls||ypnw{vttx~yy|~zsrz~}soyyw}{x}|tmqqnlw|xuu~ysjhrx~yvvwzuqw}}{tsx}trw~{yqq|wzz}ut{u{~xuutvsw~}ot{|sxwommv||ttz{xx{ypx~}pruzz}yqs||~|u~}~vllw|{wwysu~~{vw{~z}zx~ysx}~{xyw|xuyxsz{sy{yx{}qt}}upy}zu||{{tv{|zzyz}|z{s{{yypou{u}ww~|xzzzyuw{tx{z{wz~}zxw~}{}hfy~or~}v~yxrwwt~{y{uv|zrr{tkjnvxts{}{xz~ynmwwww{{~~}qiwzqx}~ytvz|xx|sruu{{uy~}~}{yywwtz~tv~{|z{||~zxrq}xytv}wyyv~wnxzpy}}{uw~}x}tox}xw}}|xywt}|y~|{~xjtzvwz{{zpnuuoxzw}zyysorzztv|~yuxzxwz~u|{z{uu~zy}{pnwunynuxzyry~{xw{}rs|x}z}vvx}}qp}}y~~uq|{~}|z~}|ts{{uu}vyzqkt{|w{{x}|}zx{~|z~ywx|~~z{|zupq~zz{~}wy}x~~wvssx}~yvvoq{|zz{z~~wqu}{~y{}yzzxztyyz|xz~|zwv{zux~}|||~{zwz{y~~yy|vy~~}~{uz~~{v{~vysot}~|zvw~yuv{~|{vsz~xx}~|}|xzzuy|y}~uw|~}x}}zuxnxxrw}~y|{sqz}vy{~ux}~z}xw~}ytw}{~|z~||~{|~~|}yxz}vyz}~zx|~}yz~~tu|x}}|}zvz}}ztrz|onz}w{zvz~yz}}y~zzvllsuqy~}|qtz|~wv||}upxzu|{xx||}zruy}sv{|~{z~}uv|{|~{}|vr}~}xikzzu{|}~zsp}|txult~{|~}~|z~rmrw{|u{yqw~{wvw}y|xvwvrv{z{xz~|wvz|zw|{vllyvz}zy}{uoqw}|z~{|xlky~ww}{|}ztpsy~~{{yw~}|zz}y|x{vtx~zyt{~tsx~}~~}hezxpt}}s~}xvvx~}{{~{kn}y{{xux~~up||wuvzzw}~y}~ztwxtzyw}wv~uuvz|}~~ss{{z{~{w{~zxzywuyz||{yz~|wruyz~}xst{yz~y{{tyywzw~yv~vyvtyv~{}z}x{xnu|vw}~qjmvxqlq|{u|trv~}qgtxvu~~wx~|w{vzwoy|vno~~yvy}}lr|~wy|y~vvxvw{|~{w}ptxwwuu~{z}y}yz~}m|z|~yxwrry{v}vz{vroy}vrwx|~yx||uyypt}~~{swyntxs{|w~|sz}~}{}w}{zz|yovxwzrnt}~}~}~~y}zwx{{{xzss}}|yijzzoz~y~~~|xx{ytwtr|yv|vyqjtyqzxr}~yvu{}}zouuuvq{to~yrt|t{ysz|txwsw}{}xz}z}yz{|xos}~ww~vv||tr|~||~||{svv|rnwzsxz{~|yyyupt{vqw|z{ruvv~~|~|}rq{{vov~sltzr{|mn~}|~|z}{v|}z|{y{|uw~su~}}~yv|wnz|ru{~wx|~yxx|y}}x|~pjy~{~zwy{xzxx}}~}uu{uo{x}wv}vw{|{ty|wx|~|x}smuzrt{{}}}vuxx{}||uqoryzz|ps{vxy{{y|z~z}{suxwx}}~{wty~zxy|{|}uz|{|~vz~xyzvprx~zx}yy{~vpy~zor}}rmv~~|{~}sov|{y|srvy}~yw}~xxxt~|wx|vy{uxxuy}~}||{wz}xsu~{x~xpow|{~xsyzxwzxvtglzwqqxuqww{~yoow{vu~{ywsz{~|||yux}yz~x}vps~}|vu{~xy{~z|yw|wqu{~{rnxsjow~|{{|}{z||xw|{uty}{xx~}yusy~yx|~||}xu|}z~}|}~~}}xrw}vu|||usz{y~|uyzwy}}|{}{xx{tqw~yuz|xwx|~z{||xx{~~|yx~|wxy|}w{xst|}xw{~yw}{}wwww~z|}|ulr}xrsx~||~~}~|}~zyz~{{|vuz~|||x{~}zxwyz}v{zwz|}}z{vrzzsu|~yz}~xx}{xzyquyqr{~~~us|}yz~~zy}~|}{y}{y{}~zx}~~}~}vuz|}|}|vz}vw~zyz~}y|~~z{ysnq{}~}zx~yz}tt||z|}zwy||}~xv}{vwwx|~zuz|z}}|zvz}|yw|~xy||{z|||{w|zts{||~z|}zvuz|y}~||}|}yz{}xuuvwz~~{~{|~yww~zxx{~z{~~}z~|usv{zwzy~zxz{}}{~yv|ux}}xsqt|~}|}}{y{||}{|~{y}yuv}|~wu||srw|{xz{vsyxwyu}}{{}~|xz}z{zxxx~{zzx~}{|}}uy|{{}~wy|wz}wt{~vvxz}}}|}|x{wy~yy{|}||~z}}wqr{vt}|wt{yvwxy}|}{{}zy|~y}{|{wxxp{~}sls|uw{w|}|y{vyz~}x}||}}wx~soy~z}~z|{xz}}~{x{yy}srz{{tpr}twzqqv}nl{yrz}vowvs|yy~x||{}{{~x}uw{zzvuzxxy{}ww}xz|~}yzz{woywtzx~{}ytu|~y~yxzuz}or~{{w{~uu}yrs{~||zslt}|vz~yx{}{y}}yztrttwxxtz{ty}yz~xor}ysv~~v|yx~y|~wsxvv|ttzzrx|}vnouy}|nlr{z|}x{{wwy{}~ywy~}wy{zwsvw}}rq~{~|wy|y~xvwv}~try}}{xutssvy}}z{x{}|{}{y~~vtx|yspwzywvz{}x|zsv~}}}yxxzyz|||x{z}|wx{~}zz}{y~~|}~~yx{wvz~~}}}}~yy}{tu{{xxw|~}~z}zy}~}~}}~}}~zw|~tu{xz~}~xw{~~xv|~|wsrw|~}}{}{{~{{}}~~~{{|y}yx~}xx~}}zxx}}~}}z|zvz|wv|zz~{y|vv|~}}~}{}}~{xz~|xw}z{}~~~yxz}{v|}yww}zy{}~}y}zw|||vx~~{~~}z}}{z|{wy|}~~|{}}~}xrw~vsxyv}zyxzz~w}zw|~{|w{|vx|}{ww~{{xy~z}}{}~~zyytw|{wy}{|~{z}}{|~uvyu}|x{~}xv|}zyyvyx|yu{|z|}zx{~{{~z}~{y~~{z{|}|}{zz{{yvy~}yz~}|}}zyuy|y~yzyx~|x}}~|xvy~}zx{|ywvz|vy~~~}|zz}zv|~|ywy}}~|x}|xx~~|z|}tsz|yzz|}yx~}us{~{uv{}|xv}}}||{~|wty~zww{~{xy~~|yvrty{|~~{||z|}~}}{z|}~}}yvy|~~|~zw{{w}~|}{}~{}}yz~{|vvz|~yz~~~~}{{~z{}xz|{~{xx{}|z}zw}z{}}}wvy}~}|z{}~{xz~x{xvyztsy{}uu|{{{{zwz~vsx~{xw{}}~~{}|}{|{~|xzzx}|}}||z}}|}{uy}}y}|}xx{||~}yw{~y{||{{~}y|z{~|~~zxz|}|~}}~~~zy{~{|}yx|zz}|}~zz}}}~~~zy{}~|zyxwyz|~~}yw{}}}~}~z||yxxz}ywy~~||}xzzx~||}|}|xx|~yy~~{y|~}|}}{|~{|||}}y||~}zy|}{y|}|}}~}{xvx~~{z~{yz~}yy|}~~~{y|}y{}zz~}}z~}z{{yz}|~~~}|}~}|{}zy~}}|}xvw}||wuw}|zzz~|}~{}yz}z{~~}zy|{z~~}~~}xx{|||yy}}z|~}~{}~}~~|~~|~~}~~}~|{}}yvx}~{zz~~yy|ytv}}|{|~~{{}|z{}|{~~~|y|}|~~~~zx}|wyxvy}}}{~~zvwz~zz~||~~{{y{{ww{~|x|}zz~~~~~yv|}||~|{}{{~~~||}||xv|}}~}}z|{}~zsv||yy~}}|zxz||~}|}xy~}{wx~}zwx~|~|{{xz}}||~{zz{vtz}xy}zx}}y}zuuz}{~yw{ytu|}|}|x}||~|z}{}{zz{~|z~{||yz~z{|{}~~}yy|~~}yz|~~}|yy}ysw~~~yxyz|~zz~~~||}|yyzvx}{~}vw{y{|z|~{{{{}|}~|z|~z{zwz}~zyz~}zz|{{~}{}~~~zwy~yz~|~|}|~~z}zwy}{}~~zux|y||~}{{{~~~~~}~|||~}~}{zyz~~~~zz|||~xz~z~~~{|~}{~}~zvz||}}|{yuv|wu}|{|}}zy~~xvz~}}~~{|~{z{}|y{|z}~}{}}{}~~}{{}~||}~}}}}~~}~}}||~|~|}~yvx~}}||~}|||~~}~ztv|~}|{~~~|xsv~}~}~{y|}{}}|~|y|~~~zy~{||x{}|~}{zy{yuy~~}~}~||{z~zxww{~{}~|z|~}||{|~|~}}~{yz|}~}}~}~~~~}|}||}}~|}}{|{z}~}~~}}|z~{}|yx{~~~~z{||~|z|z{}|}~~|{~||~}~|||z}~}}}~}||}||}~~||~~~z}}zz}zwz~y{}~}{~~}{z~~{}}zx{{|||}x{||}yy}|{|{}}~~~~~~~zy}}{zz{~~|xz|~}~~~z}||{}|yz}~}}}~||yz}~~}|{}}}{}~}z{~{xz~xz}~~|}}{xx{~}~}~{|}}}||}{}||||}|{~|z~~|||}{xy}~~~~{{}y{~}|zz|}}||}|{{~~}{}{z~zvz~}{{~}||~{|~~|zx{~}~}|}|{}}~~zz}~||~~}}}~~{z||{}{{~~~~{z~~{|yz{|}~}xvx|z~~}{y~|}~~~z|~wtw|~~{y{{x}|z~{z~~}|}}~|xy}}z|{x|z|}z|{y}~}~~}~y{}z|~}xx|zzzz}|zzy}~|~zx}~|~}~}}~}}wu}|z|z{}{}}~}zyy|~~}z|uyzsw|~~~~~|xw~}|~yw{{~}}}|~}{}~wx{z~|z}|{~||xx|}y{~z|}wy~wv|}|{|~{}zy}|yt{{{~~}}{}|}xvz~|{||z{}~}{|}zz}{y{}z}y|}wx|y{||~}}~zz~{uxxw~~|{~}{}}|}zx|}zz}~~|y|}|~||~z||}~~zz{xy}~|~~x{yx~|{|~~|wxyw}~|~~||~~~zw}}{|~}z}}|~{{|~}~~}}|ux~|}z|}wvw{|}~|~~{|{xy~{~zz{}}zz~~}}yx}||||}~~}{{}~|}~}xzzxz~|zz}}{}~zwx}~~}{zxy~~vqv}~}{z|~}~{z{}}|~|z|}|}~|{}~|}~zx{~|}~{~zz|~~}}}|z}yx}||}}{yzvz~}{zz}~}{~}xx~~~~~}~}~{y{|{||~~}|wy~~{~}}~{{}~yxy}}}|yz}zw{{z|||{z|y{~yx||ww{}{z{}{wz|~|{|||}}|~~|}~~||~}~{zz|~}}}}}~~zy}z{~yy||z}}x{|wx~}{||}~{zzz~~|}zz}~~yy~|y{~~}zz}z{~~|||||}}|~~z{{yxz~~{}{zyxz}{{~}{|~|~~|{}|{|~}{z|}yvx|~}}}~z{~~~}|{~~zy{|x{~}}{~~{{~zvw|~yx}}}|{}~~~}}~~~}}~{{~~{{~|yz|{|~|{|}|{~}{|~}yx|}||}}yz{|~zz|~{{|~~{|{xy|~}~{{}~|yy}}~|z|}yy}|}~zx|{z}}|}{xy~~xx||z|~}|||}|{}|xwy}{xy~{|~z{~~~~|}~zz|||zwx{{y||z{}}}{yz}~yz}{{|ywx|}{|}{~||~~|{}}xx|{y|~}~xtv|~|}~}}~~~|||zy{~~~}~}xxxy~|}}}~|~{xz||{xy}~{{}~yuw~}|}|yz{~~~{y|~{z{}~}~~~|{}|{wz~~|ywy}}}yux}z{|y||z}yuv{|yz}~~{{vy~||}~~|z|||~~{|}}~|{}}{}}}~{yz~~}~}yxy{~~~}|xwz~~|}zx{~~~}||~~~|}|||{~~{yxz~~|~}|zwx}~|y|~|xx||z|}}}~~{|~xv|~{|}}z{~~}}~|~~}}~~~~~~|}||~{}~{z}}{z|~~~{}}zz}~yw|zwz}}}|z{~}|~~~}}~|~|zy|~}}}}~|}~}~~~~|{}~~}|zz}~~|~}z{~~~}}{{}}~}|~~~~~|wx}y{||}z}}}}||{|~~~~{z|{y|{|~||}y|~}|}}|}}{{|~~}~~}~{{~||~}||}{|~~||~~{{||~~}||}~}~~~~|}|{|~~|}~~~|~|xy{}}{|}{|~}|}~{y||}|z|~~}}}|{~}~||~}|}~}{|~|}{z|}}}}~~||~}|}~}~}}~~~}~}~}}~{x{}zwx~|}|{~~}~~yz~|{~~~~}zy||}}{|}}}~}z|~~~yx}}}~{|~~}||}~~}~{|~{z~~|zz|~}||{|~}}~|{|~{||y{|}}~}|~|}||~~~}}}|||zz~~}}{z{}~~|{}}~{xy~|{{}~~}~}|}~}}~|||xxz}}~{{|~~|{}~~~}}~~||~~~|z{|}~~zyz|{xz~~|y{{wy~yxz~}{~~{{}~}|}~~~}|~}|}~|yz}|}}{}}|}}|~}z|~~~~~{{|~{{}~~~|~~yz}|z{}}~~}|}~~}|}}~~~|}~~|||}}~}~~~~~}|zz~~}~|ywx|~~||{{|~}}}yvx~~~}|yx{~~~||~~{xx{~|}~}~}~~}ww{~~}~~~}{{~|}~|{}}|{|}}{|~~}{|{||{|~~|{}~||{{|}~}}~~|{}~~{yxxz}~||{{|}~~}}||~~{zvy~~~~}|{{|~~~||~}~{xy{ywy}~||{|~|}~~}{}{z}|z{||z{~{z{~}{|}|}}|}~}~~~zx}~~~{}~|||~}zz}~~~~~}{z}{z}~}z{|{}|z~}z|}{z|~|}|~}~~{{{{|z{~|{{zw}||~|{}|}~{}~{|}{z{}}}|||}}~~~|{}~|||}}~zz~~|||}~|}~|}}~}{||}}~~~~~~|||}~~|{~~{{{wx|~~~}~|z{}~}~~~~~}}~}|||~~}|}}}~{z|~}ywz~|}~}{}||}}~zy{|}~}~~~}|}}}~~}|{~}|}|{}~~~}{{}{x{{x{~~}{|~~|}~~}{}{}~~}~~||~}{{}~}||}~~}}~~~~}{|~}}~}~}~~{z}{|}|}}{}~}|}}||~|{~{zz{}~||||}~}zz}~}~}{z{~~~}}}~~|}~}{xy~~{|}~~|{|}}||~~~{|~~~~}~~~~~~~~~}}~~}~~~}}}~||}~}||~}}~~~~~{z}~|}~~|~~~~~}{}}}}~}||}}}~~}{|}}}|}~~~~~~~|z{|z|~}}|}~~~}}~~~~|}}{|~|}~}}}{|~~~~~~~~~}}~~~{z}~||}~~~}~~}|}~~~}~~}~z{}}~|{~~|}~}{{|}{|~~~~{|~|{}}||~}~}||}|}~}}~}}|}}}|~~~~~~{{}~}{|~~}~}|}~~}~}{{}}}~~~~|||~~}~}~|z~}|}{~}}~~|{}||~}}~~~~~~~}z{~}~~}~}{z|~}}||~~~~}}}~}{|~{z|~}~~~}}}~~}}|{}~}}~}}~~~}|}~~z{~~}z}}}}~}~~}~~}~~~~~}|}~|}~}}~~|~~}~}}~~}z|~~|}~~~{z|~~~~~||~~}~|{~}|~{}}~}~~~}|~}~~|}~}~}|}~}~~}}~}~}{|~~}~~~||~|{~~|}}~~}|~}}~~}{}}|~~~~}~}~~~~~}}~~~~~~~||~|}~~}}~~~}}~}|~~~~~~}~~~~}~}~|}~~~~~~~~~~}~~~~}}}}~}~}}~}}}{}~~~|}~~}~}~}}~~}~}}~~~~}}~~~~~~~~}~}}}|{}~}}~~}}~~}~~~~{|~~~~~~~~}}~~|~~~~~~~}~~}}}~~~~~~~~}|~~~~}~~||~~|{|~~~~~~~}~~}~||}~}}}}}~~~~~~~~~~~~}{|~|~~~}}~~~~~~}~~}|}~~~~~~~~}|}~~~}~~||~~~}~~~~}~~~~~~}~~~~~~~~~~~}}~~~~~~~~~~}~~~}}}}~~}~~}}~~~}~~~~~~}~~~~~~}|~}~~}~~~~~~~~~~}~~~~~~~~~~~~~}~~~~~~}}~~~~~~~~~}}~~~}~~~}}~}~~~|{{}~}~~|||~~|}~~~~~~~~}||~}~~~~~~~}}~||}~~}~~~}~~}~~|}~}~}{z|~~~~|}~~~~~~~~~}}~}}~~}}~~}}}~}~~}~~~~}}}}~~~~~~~~~~~~~~}{|~~}|}~~~~|{|}~}}~{|~~~~~~~~}~~~~~~~~~}}~~~~~}~~}~~|}~~~~~}~~~~~}~~~~~~~~~~~~~~~}}~}}~}|~~}~~~}}~~~~~~~}~~~}~~~~~~~}|}~~~~~}|}~}~~||~~}}~~~~~}~~}~~}|~~~~~~~||~~}~}}~}|}~~}~}~~~~}}~~}}}~}}~~}~~~~}}}}~}~~}}~~}}~}}}}~~~~~}}~~}}~~~~~~~~}}~~~~~~}~}~~~}|}}~~~~~}~~}}}}~~~~~~~~}}~}}~~~~}~~~~}}~}~~~~~~~}}~~~|}~~~~}}~~}~~}}~~}|}~~~}~}}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~}~~~~~~~~~~~~~}|~~}~~~~~~~~}~~~~}~~~~}}~~}~~~~~}}}~}}}}~}}~~~~~~~~~~}~~~~~}~~}~~~~~~~|}~~~~~~}}~~~~~}}~~~~}~~~~~~~~~~~~~~~~}|}~~~}}~~~~~~~~~~~~~~~~|}}}~~}}~~~~~~~~~~~~~~~~~~}{}~}~~~~~~~~}~~}~~~~}~}~~~}~~}~~~~~}~~~~}|~~}~~}~~~~~~~~~~~~~~~~~~}}~~}}~}~~~~}~~~~}~~~~~~~}~~~~~~~}~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~}}~~~~~}}|~~}~~~~~~~~~~~~~~~~~~~~}~~~}}~~~~~~~~~~~~~~~~~~~~~~}~~~~|}~~~~~|}~}~~~~~~~}}~~~}}~~~~}}~}}~~~~~~~~~~}}~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~}~~~~}}~~}}~~~~~~~~~~~~~~~}}~~~~~~~}|}~~~~~~~~~~~}~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~}~~~}}~~}~~~~}~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~}|}~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~}}~}}}~~~~~~~~~~~~~}}~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~}~~~~~~~~~~~~}}~}}~~~~~~~~~~~~~~~~~~~}}~~}}~~~~~~~~~~~~~~~~~~~~~}~~}}}}~~~~~~~~~~~~~}}~~~~~~~~~~~}}~~}~~~~~~~~~~~~~~~~~~~}}}~}}~~~~~~~~~~~}~~~~~~}~~}}~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/penalty.wav0000644000175000001440000001420612420374633013434 00000000000000RIFF~WAVEfmt ++dataZtz}wf===KtqN=?[qa^dvo]JFTok_afpzhmzsjjq}rdi³yvdTQQ\}zS==DZmxvmb[caWawvkptpp{wsvw{ykn~kaag¼vt¯{tqsa===KtwO=>Ys^ZbvzfNDSkpklhommqmhmytjgy¼~zaTTZqpM=EZjtqjbddVVezyjhsspzqrsy|vs|{aZ^s¬muxqx{X===YfG=Eem^^gz~jWHGZv}gadixzkt}ukmvqdm³xwgXUTazT?>I_s|vod_gaVavqhotmnzyvxx}ykp}mcagws±~s}qnd===Hs{S==Vzc[at|iQCNdohigismssmlvxmhu¿{jZUXjzT?DWgrvnffj]Tax{lhrtmsqpquzvr}|f_at¹tw°{q}wxU===XkK>Ffqa_kjXHGZv{d[_dq{~sfnwndfpl_l¯v|dVSQaqK==G]mzsma^f^Td|qktvmo{uvxz}wlx~la`k¸tt¿zrorZ===VsK=Dcta]hwdLGXrzkjhfq}mmqmhjwsijºv`UU_|^C=K^itzqjdidUZntiowsr}{rstxztw|q^Za{ znwºtsvsF==Cj]A>Qz{e[cws_NGQjsa_di}pmzylgmxxecz¹}vv_WTYtaD>EWlx{qj_ccTZq{nmvtnwvyxz}sm|e_`tªpyºus}mtT===XmG=Ddo[[hs`KFWqzjhhfqsqtqknztjj|¸~xcWU^xfKDO_kvrkegcVZotilspoz{srquxtw{~zgdkz·zxzqJ==MoaIDVz}h_dvqaOITko_^ch}}nlwvkgmywfd{·}vr[SQVrZB=ASgtzqj_a`T[txkltqmx|tuswznl}va[az¢~s·uyzoqA==?i\==Mu}aU]q~jSAJdqffgh~wmpojgo}zkem²lWQVitO>CSckywqhdeWPa||ngoqktutrtyxt~zfZZl¸tt²sz}{W===XmK=Cam][jiTEI^{f[afs{ou{qhktmai°x~iXSTdtRC@J^mztod^aWQd}sjqtmrzxwv{wmv}n_\f¼vst|sob===Jw}T==Vv^WaxvdKAQmofffjzqqqkjszmfp½~m[TXkwWEGWeo}ypgffTPdzlfmpjtrqqqutq}{i_^m¼wxµt{}zW===XmJ=Can^[j}hTDFZx~dW[al}xmqwpfgp|rdh´z}mYTT`qM==GYhswpg`c\Sa}vlqtno{{vwsvvkm}t`Z`}ž{rµquwmj===AmT==Oyx^T\s{jTDNgsfdcd~{srqjis{mgr´lWQXmtQ@FVckyzqhegYPa~{mgpslsvsssvurzyiZXd½sn²}ot}x\===SsN=?\o\WfjTDFZwm[^cn}sw}tihq}scd~²z}o^WWfvSDCK\jutmf_aWO`{rjptmnz}yxuxxnq~vaY^x |qµtzzqm>==Ak]==Ltx^SZpzgQBKc}tgdef{zwvpimzqgkvaTTd~\DDQ`hq|qhdeYKWqqgmtmm}zttsvwsvztc^dœ}v¸xz{d===OzyQ==T~q\T_ynWDDVsm[Z_h}}{zqrythcdqqaaz¶zt^TR[zZC>CSdm}}rkcb[NWttmqwqjs~uwtwxml{ze]\r¬qz¶sxynuG===d^==JoyaV]s}hTCKdwjecavxwwphjushjvaTTa]DCQ_gptkgj^NYtqgmvqmw}sqptwuwyzzaWZq¦rx»squpB==Do[>=KryaUZrz`JCPjxd^bg{}{tknx|f_r·zxgcdjpQHT[dutgpvmvsg^DA^kZ[dz~t`^etspvzqjs~z^E=DWq|slgd_\dqtvz|sk`_jx|jhgqgbm}zwx{xldosvw}tc[bqaJAHXe}gcjm}shRHcwYMTcy}jjwvmq}w{k[TZq|qgcafv}}qf^PQ^q}md^azdXap|}vqmntzzwrs}}w~}|mbVWdwn_am~{gZYjwbUWbs}wvyzy}zx}x|wf]^m}x{{{~}wvwvx|wnhdfquk_[dqxtkglz{qw{skhs}olwnjwmXHHSbw{jcjxtmqvos}zy}utzzkc`gz~hVNQ\kz{xvstvwz}}thddjz}}zwmeekswyyvqkkvoo{qaUT\k~wonq{vpq{}}{}}}}zojgm~zsjhkqwz~~{xtz}~ztmjjq}}wx|xrw{}{xusokltz}|vmktzyqe[Y^k{wrv{~{vx}zz|~||~vppt~|xztjjqyzx|}vv{~|zxvqhccnsknz~|xtxznjmv~~}}||~}xxzztqooqvyzxx|}{}|utz~}}}{vtvyzwz~{}}xzxqppsx|}{z||{vqlmt|onzzuw{zokq{wtz~{vmkjkqxxutw{}|{wqns|}zzz{{tsv}|zzwstuw|~}zy|{tojkuvsv{}zzz{z|~wsvzrt}umlpstxzxvtvz|}}}}~}}{z{~{yz{|}tqtwzyusrsv|}zwzztrqqty}~tmox{~{{}xpov|vyztokjkqwzyxz}}{}}~~||}}{z{~{}~{{}{}}{z}{z{}}}}~zwtpjgiqz}wtuwwtqt}z{~{zxvx~}}xqtzuvxxxyy{}zxww{zwz}}}}yvwz}z}zz}vtv}|xw{zxy}}}{z}}}}vqnptx~}usw|}|xvx}}}yvw}xst}~~}zwuw|}vrtz{vx}~}|ywy}~|}}}||~~{ww{}}zsootx|~{zz}}}{xvy}{xx{}{zyz}{vtw{{z{|{}~zxwxy|ztsvy{}}{{|}}}}|}}~}z}}{|}|zzzzyy{~ztstx{}}|zvsstvwvuvz}{||zxvuwz}}}}}|}{~~~|ww{}|{zzz}{}|{}}|{zzz}{vttvxzzzxvtvy{{yvux~yz{}}z{}}yvwz}~}zxwwyz{}}~|wvy}}yvuvy}}zwx~~}}~}{z{|}{z{}~}}}{{{z{}}|{zz}~~{wttw{xboard-4.8.0/sounds/roar.wav0000644000175000001440000006013012421746530012720 00000000000000RIFFP`WAVEfmt ++data,`~z|}|}~~}{yy|~{y|}}||{{{x|}{zwz{{}||~}}{}~{wx{{|}||~~{zxvutsqpprttuttuwxwvvvwyyyy|||}zzyzyvssttuvwyxy||z|z{~{zyz{|}{y{|||zyyyzyxyz{{{{}}{{zyunlpromnoqqrsvxyz~}xwvrnnopnkkmnpqrtx{~~~}}~~}zyy|~~}}}|zvqnnqrpnqtqporuvyz}wtqmhfdeffegjkjmpux{~{usopqrqry|zvrjccglrsuz|}xpkea_^cgfeflsvvx~|}}{wwvrptx{}wttsty{~}tnihjjgjnquwxy{~|tmicabbcbdedfnruw}}vqniecfjouzzohd]UONPRUW]ensywld]ZZVUTW_ehgefigegjlmpv{}zwtttrsv{}{xxvtonkihfggnsvwwxy{xuvutvw~}vme`ZRLIFCBAB@AGNSWbn{{rkeZQMJHE?AEFDCELRTV\afls{{smigf`]_`^YY]``_`bdhov{ypke_YRMOU[XX\bc`\\^addir~sdYQI?;9>B@CIMPTV[agknot|}|tlghfghlqpmpvwwvvuxwvy}pifaXRNMKJHLPPS[gpx{ncZRJB?<;8@FNeȾnT?,",7E[mwuokgYMGKVlx`NF>0+5?+ 2FZi~ta^kyz[E82259=BADFH7%  %Ec{~si\SMNRRMJE>BHPMPV^_^TKJXjpj[G2# '+'"#,59@O\emwzztpiegy}n]OB/  +7BSclv~}|wxskaVOF>1#   (5AHJIKNSYbjv{qR9$ )?YiyzgVJ<. "AXl˵r[GHUcrúp][`gpۿzcSMQVVL?6?KTXh{»zkhu˾zzyo`PXnάslbSB;31K[`_oӸse`gxŽn\W_ewl[QF8)$#+:Sj|Ĵs]W[`ikj[RMU^ftvgSGOoûhSEA7( 2Kj~{xcKBA7/,2:GU^_`]`i||maNB85//+,44+ %=YngE4'"  (AScptXB0&$7IRUOMDMS\\[XWPIC=2''%" (-4@HMONQD60CYn~k`M9 ! 0=HB/-@Zh{|r[OC70$  &;NSYgʼ}fH% >Rbt~^C+1^~}xnaG. 0SewaSWhsrnqtwU<:HWZ[_jqx~vvfQDIOYZ]Zcll\<$#06D]ȿtk^L?5*2Pcyû~~fD) />ITdnnwƩwt{zpi]R=81;L_rscmɧfVKGPMMZeqzyle_VUSMJFNXjzԺukhd\WX[ZVJ4%&6Me}xogYKC<2(#.BS[dwϷzbNN[q{fYWfxƽyj`fmzmI4P~̻qldW@+%7Rkzγͺɽs`POU]oкmd^YQIHLTexпμ|eZSU_kuľǼtstqg\WXZ]TA6AHPXckms}|n`PJQbs`VGPd~jL<6:BFMOWaimmj`O>-.C[qǷvd\RHCD??DLME;0,/=NUe̴m^M>74,'/BRfϾ˴}rllqzȵ|plllr˼hI47HW]]bdffhs̼yhUFFOV]fs}ȾÿǴ}}yxz}vj]ZawӵiTA5,$'2>IOSSUanɸyri`YY^gotx|}y~ֽuh_XSTYac\RFGN]p͵xiaVJ=5137IS_nzzzɼ}wjZNB7-"!&+06>B@=GUcoºwjYE/   /8=>;435:CNV]iurmjklxznjdXI;,"  #,8BMVWUNMPW_fkuzrsjcZYWNGB;1% !0>IV_gjlmnponptonqz|{yuoja[VRPT`effhdVA0 "'&3G\h{}shN7& %+-/8@DKVcgc\]esyw|xri\J=2%  .;HLTY\]ekop}vrj_^_ZQPOI;*  *9IUYQFBNatкznaRD:3048=AGJMNQOKIFCBDE@>ADJWbinvz}wk`TMIIA827>HNPROKFDDEFGCAAKYgps\H9/*&%!" !$,003:?ETajoxsd\WOGBEJOTXWPE=60)#"-8DMTXROJNMVi~|yxtoi_SMD5("!*7AMW`hnh\RU`o¹o^ND8+!'.8BHOVbnz{k[OD@;5376/)$!$&*2;BLZgga[]h{û{qfXOGC:5574-#"*1CCCDEGFGMRW_o|~ſvplknmmnsvvofXOIKH@7214?LV^bhntz}~zphfhly~sot}yslaUI?4'%.9EPYbjptyzy{}{ttssywgVC5,''+2;DOYcmwzxtnhikoxǾvmdZOB:2,(&'+29@GLR\gnnorxĹ{vnbVG=5-)+**.38GUeq}ž|}~xrka]XSOS[`]ZYXWY`gmsz|usr}{yz|pc[XSMB9659@LU[^cjnsz}sf_ahyʾzw}~yvzytoh`YVL@1&"+:HQY`iry~}wpiijuz}}ysk`VH>4+!!+9GVairyog]OC<80+-0026;=@GPU]iv}ywwpc[Y[]cmx||z}~rh]SKHH><=CGR^ehihgfgiiiopg_\_bq{mYD92.' $1?LV^dknosqkggmvľzztjdfikkong_QC70*(+1;HWdrvpw˾}xrnhaZTOMPTSQMOPWZainsx|¼yk\RKC@@EJOWZXUX^fpx~~xpkf_XUVWSRTXZXZdmt{wofa[TRX`iptx|{{ý{qcVOJJKKMLPTY`iowyslf`RD;70/3=EUgoyŻytqlhc]VUTUXROLLMPORX^imwwjc\XUSW[_jomltwzyyzwu|ux{p`QKEC>;:?ABGPYcmu~¼zsoprrssqlg_OC<60-)%&-5ANZaflmnqtwymg`WPNJJKLE<5/,+.047;DO[aflr{¿}oaYPGBB@><<=<=>AAFTdwyj_XRMGDEEHMQSV[_bdhnv~¾{wtssy}vqoid_[VUX_bkw̿tdVLE=:=FOX`mxxkf_VRNIJR\gs{|õrlaWOFECFHP\gow~}x}ymaWL@730-.4=EO[cir{}rjdb`bcegfggfedb`_]SGBBDGOYajty{{~voqrxzttssuvz~pbWMF=65:?AIQ]elqrrqssrsvxzvx~yxuuz{yztj_VQNID@??CJS]eikowxuuy{{obYPJGGJMS]fpw|}|}}}|~}pd`[YXYWZ^eny¹ytqlf_[WTSYajr{volig_YUUXamuy~zqqvǼvj]TKB>ENWbnu}od\VQSPLMU[clu{zxxww}zsqqrqnmke_`bcelsvyzvojgdbffhntx~~}~~yuvxvy~{{}qd]VNB=9;@ITbknrtrlea]YTUYcp}~uof]VQOKD=8;@CFJNT[dinsvy|}sfdmz}rlkmmpt}iR<1)'-8=BLWeqyxsngejpx~~zuslgeefgghhjmty{{|xkYMJFJKOQVZ]bjoux|xstuvzyw{ynf^WSRMLMPQV]bcb^XQQSWcn{rnszyoaRGBCHNT^m{ynic__adgir}~qda__jz~xy{vg[PJHEHSaks|wqruzxv~mYMJGIIIIOUZbkoprtz~ý}{~pe\UOIHHKMS\gp|xl`UQMMMRVZ^hqzzvy}~~wtqojmookhfcdehkntz~|zyslgd^YVW[`fmrwy}~}|{vokkn{xkXF<51/.2HR^jy}|{{|{}~vqswog_[][\`kv}|tic^XXY[[`fr~tnnruz}~wi\QKIHIMS[agpx}~{utrttrd[RTQSSY]eoyzy}ºzuuz}~wkc]SKKOMMT_hs~{|zzz{tnge`[XULLQUUWdlprrtuy|~}}zsi_XYXXXbiu~{aNHGIOWbo{}zrh_XTU[dp}wne]Y[\^bnvutwupkeb^`hr~riaUSTSSVVWZ_bgfdfjheiou|}}~|{|yl`WUQV\][_is{}vv{zn^SLKFCCCDGKOU_isxvsrqrtwz|~{ridb_[X[aba_bhnuwz{}}tomokjkjgkqtsstuwxx||vuw~wl`[YVOG?FLQRZ`iu}|{wphcca_`cfgijifeeejljltxz}{{|~{z}|~}wqlhfa^^_^`ddefifefdfjmoqv~tbUNMPYepvyz}|ukaXUW_ix~~ric^ZXX[bjou|}ytpopszussqopnihjhgga`degnu{|zund_[UX_hmsy|~}}}zz|}||}{vrljgggiihkprpspmnv~}~{vqmhgfhklopswv{ypkhfbdgkloqpqrpljjgfgmu{tvtqrs{r]LGOX]guxpkgjjkq{~}ysswwqcXTU^l}~slgea\[]Z[_ccdbcdhid_]alsvif_ZYWSX^bdccbefkssx}~ywmaZZY\eov{zuqhc```__^YWY[\\]\\`dgkoqrw~ulc\VRSSTVY\\^beffjoqv}}tlfdabdgiou|~{wvx{{yvqmljimlqvw{}utu{wpmjigd_]\_`ejmovz{tkjkedeinruwz{}~}zqic`]\]`bceeccflptyzrle_\\ZX[aejpuvtsqqv{{wsqtv{}|zxxvtrty|~oe\[[_hhjlpplkkecddjr}zzy{}{ukfdegjnoonhikmoooomnmqssvvy{}~~|{~yrnnopuy~~~{|||}~}ujd`^babdfgfhlpnigffjps|}urvz~zy{znd[RJHDC?==GUbmuvxyz}{xukffecddaaadefinruz~wsrpppoponllhgieehkmorw{usmb^\ZY[[YXYZ[\^dinu|~}{}~{{xvrturrpnhaYQMMMPV^gnu{|z}}{|wrpoqqokhffecdhijklkkqtw}zsnga`_agkqw||zxsjb[WSSYbjs}}tjfc`^adfiknoplkifa_[WUXZ^ckmpsuuy~|}~{z{yuwxutoomllhdb^\XSNLKIGLMMNMOSZ_aaa^_`cfmu}|xxuqomkkjga[VQLGCBFOYaglnllnnqsrstuwy{y{}pbVNHFEC?@BDJQSSRQMNQU[bflnlimpsxwpligijmjf]ULF@>>CGJIKKMNRUXZZ^^_cfgjpu{xqmmorw||rke^YXYY]`bdhiighhhjjhiiklou{}wsw{~umfaZWUTSSTTWY[_bfimprtuwxz|~|yyxxuromhedda]\ZXVVXVTVUTYbhlsx~{zz|urppsstokhcbbbbdhnrz{zzxuuvxx{{yutsrtvwwrlf\UTU\dmw~{y{~xngc``emx}zwvssqrrt|zvrppsxzvuv{}}}xvpoprvxzxwz|zyy{xwxxz{yzzurokigfhotx~xwvxz}|~}zwuuxzyoggikqyxrpqswyy|wnihhlsy~}||{~|ywxx{zpiggjpxztpsx~yvsokge`_emt{}wqlkllnoosw{||zxuuw{~}}|yvssststz}~zvtsrsw{}{wtsrsvw|~|zyvvwz~~}}zvtux|~yuuuwz~~||~zvrswz~zvrmifhjmsvx{ypfcabfkrv||}}ytljknt{~xrmlmpqv{}{}}}~zyywwz~|yz{}||~}yy{|~~~~xtrqqrtxz{~~||{}~~}~~|}|{ytsomkknruw{|~{wvtvvwz|vtpkjiijmnonkgc`^^bkuzsmloy}tnjghjlnruz~~}zuoifbcglvzxwy{xuplihhfhjnpoppoqusruwvx}ytnifdbbejnpqrsrrponqx}{uqlhhilot{{xvvwz}|{}}xtppty~~ungccfmrx|tmeaacgoy~z}}utwuv~vj\SSY_cinprv}~|wssxzwoklu||zwpkn{{smhc`_^beffiosyzvtrqquxnfb_^`cgkooqsusnhbeiry|}|wj\TRRU[chkortuvrmgfegkr|ztlgca`bdb_ZWWX[\]__acksz~{qf_]`^]cefgihda]ZSQSW]epzxqllns{zslfbaflquvwwutvyyvqke]Z]`fnsuusqlhecaa^_bipx~yslgimu}womosw{~sha\[^aipxxpgb__bjtwoheb__dly|qh`\^elt|{upqu{vkbXSRU]hrz~~yrjb^^`emxxtssw}qjdchoxyne^\\`jr{}upooqtx{{wspmnqtw}|wsprsw{xyxwz}~}~|zwvtpnnmkjnqv|{wtqruzxpmns{tjc][\bjrx~}wqniggjmrw~{vusrtwy|~ytoihijpx|vrnmosy~~yrkgedhmswy||zxusqonnpqsvy~||~{wspnljjikllmnnptwz~{wrqssuvwvy{~~}~|yxyyz{{|}}{yxvuuwz}ztqoquy{vrpqv|~xspquwz~{uqpprv|~{xsnkhhiknrvyyxusrnopty~{wsqojggda``_`abcfgeehmpswz}wrnljjlkkklmmnnoooqrsuuxz}||}|{yutrpnnopqrqnieb_^_bfkpsvwvsronpsw|~|xtsuvwy{||zvsnjhfdfjloqsuwy{|}{xvuy~~}|{zwspnliggimqv|}{{}~~|}|xussrsv{~xsppsw|}}}xspponmnoooprsrppoppppv{{tkd`_adinpqmkjgc```bdfipy|xx{|zy{}xsnkklmorv{|yvuvy~|wqkgfginquy~~{z{}|{zxvspnlhc`^^`adfkotvuutsux{}}xvvvwy|~{vspnmllmnqtwwvurokkkkjjkmooooooonmnmmmnprsuvxxvtrpnmoquz~~}|xspnmmnoprtttttspnljhgffghhjlmopqrrsrpnoqsux{|}~|zwwvutsqoommllkjhecccdeeefgikklnorux{||zyvtuuy}|wtsrssstttvyyxwuroonllllnrvxxxwuuutrstvzzxwwyz}~}|{zzz{}|wtsttvyzzyyywusrqrttwy|~~~}|||{zyxyzxwwvtrrqonoqtx||zy{}~}}}}}zusrsx|{urtvy}}xvvvwz~}{{zyz{|{{ywututstvxz}~~~|{||||zyzzzzz{{|}}{z|{yz|~}zvuttuxz{{ywvtrqrrtuvwyzxxxxwxyz|}wqmkkmoqrw||vpljjmt{|zwussstvy|~~}}~|yvuuvwz~}|zwuvvwwwx{||{zvrpnmlmpsuvuttttuuuuvx{~|{}}|{|~}zvrnlllmqtvxyzzz|~zwvvwz~}{zzxwx{~}{{}}|}~}{zywxzzz{~~}~|ywuuuuvxz|}}|{ywuttuvy|~}|{{{z{||}~}{yxxz{|~}zxusppqruwy{{|{yxxxyz{|}~~~~~~~}|{|}}~~}~}}|{yxwvutuvwxz|~~~||{{}}{zxxxyyzz{ywutrommnoptwz}~~~~|{|}~|zyyz}~|xuronoqsvz}~}{ywwxy|~}zxxxwwxyz{||{yxwvvwxz}~|zywwwxy{|}}~~~}~~}||}~}||||}}||||||}~|{|}|{|}~~~}||}~~}|||{z{{{zzz{|}}~~~}}|}}}}|{zyyyyz|~~}}}}}}{z{zyxyzz{|}|{{zz{|}}~}|{{zxwvuttstuvwwwwxyzzz{}~~}|{zyxxwwwxyyyzyxwwwyz{|~~~~~~~}|{{{{{||||||||zyxxwwxyz|}~~~|{{zz{{|}~~~~}|||{zyyyyzzz{|}}}|{zzywwxz|~~}|{{|~~|{zzzyyyyyyyyyxxwwwwwyz{}~~~}}}~~~~~~~||||}}}~~~|{yxxxyzz{|}~~~~~~~~}~~}|||}|z{{{{{zyyz{|~~}}}|zzzyyyyyz|~}|{zz||||}}}}}}}}~~}}|||}~~}|zzyy{|}~~~}||||||}~~~~}}}}{{|||}~~~~~~~~~~~~~~~}}}}}}}}~~~}}}}}}~~}}}}~~~~~~}||||}~~}}~~}}|||||{||}}}}~~~}}|{{zzzzzyyyzzzzz{{|}~~}}|{{{||||}}||{{zzz{{}~~~~~~}}}|{||||{{{{{{{{{{{{{{{|}~~~}}|}}~~~~}|{{{z{{|}}~~~~~~~}}|||}}}}}}}}|{{{{{{|}~~~~~~~~~~~~~~}}}|||||}}}}~}}}}||}}~~~~}}}}}~~~}}}}}}}}}}}~~~~~~}}|}}}|}}}~~~~~~~~~~~~~~~~}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xboard-4.8.0/sounds/ching.wav0000644000175000001440000001277112420374633013055 00000000000000RIFFWAVEfmt ++data~}y~zyvzzttpquwrjsuf|ileyj`SmoYZeyXbatPzaKLckMęHJk3kV=ʆ?XY9ė@Km@w§IH}?iZN8Zo>tƬSKIanOxT`]|ik}a~gfo]|g^]n{hnlqchixcoozqv||txv~qzq~jt~dzneoug{grxaicsrxqwyv~ty}u|{|{qv~{}y{{qe}esxVi]{TqdHicrZa^vReXKROc?rOM@[ML=`WMȐ9jf4xЙ;Py)n̦N=ۈ.fĻX(َ2K_yխC5o(qͶ?.ގ)8__F.IM+ܑ7TȿH:ƈ7bƦHFz.sӦFHn(xӲH&@m u<-vuL!xVQ$Ձ4JI4מ3B[+vط9Gq-jҢ)CvdB(/Sy@oZun>>~-ELcώ{қǏ@#a-XD(Fտ"k~ O;$",nAG{6)Y(zb،A'j<j֔]5^*l}Wm`m8=VYIQPk֯NAɗ$[Y7(mě7lRyƆD_o.xiTzE{oKs@WR$H`D[IҗYNL:|QQr_|d\Pxb4Q̐MD}1wȿq<9ErZX8ތH\HBs&aWK&N\&xکOZx-gTCĈFonkgm+z(E@յ/YȈ'=rJGÃVR83l°--bѱ"l;2d,&bMo=rTUvE*NWO_KQIA>LޑB2e5Oژ.g7؄kmE?tPDօG֟"c[=i}+tjg,]0αI*KܹV9*H:k;aƧC6LW}?/ufkư9st;gד5WÎnӠd@z}#d|tf(|*dn2yFcp2_JMSWz՜19y lѴ`4~ܠ8E¦9SƽpIlҹDOĕ0MbRiTy`zVkImLmJ/y3L_<ҳC:s;fƺOLGQdRyK_zkU|kI~N\{+dP4ܘ:\z)qХLDՁ;qc?ńNd]Cd|Xjd=mOQ˖4Ro:l˦FMƒ7_u= 1.2.0 librsvg-2.0 >= 2.14.0 ]) AC_SUBST(CAIRO_CFLAGS) AC_SUBST(CAIRO_LIBS) dnl | check which front end to use dnl | first check for gtk dnl | then for Xaw3d dnl | and then for Xaw FRONTEND_CFLAGS="" FRONTEND_LIBS="" AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk],[use GTK front-end])], [with_GTK=$withval], [with_GTK="no"]) AC_ARG_WITH([Xaw3d], [AS_HELP_STRING([--with-Xaw3d],[use Xaw3d front-end (not fully supported anymore)])], [with_Xaw3d="$withval"], [with_Xaw3d="no"]) AC_ARG_WITH([Xaw], [AS_HELP_STRING([--with-Xaw],[use Xaw front-end (default)])], [with_Xaw="$withval"], [with_Xaw="yes"]) AC_ARG_WITH([iconsdir], [AS_HELP_STRING([--with-iconsdir=DIR], [path where icons get installed (default: $datadir/icons/hicolor/48x48/apps)])], [ICONSDIR="$withval"], [ICONSDIR='$(datadir)/icons/hicolor/48x48/apps']) AC_ARG_WITH([svgiconsdir], [AS_HELP_STRING([--with-svgiconsdir=DIR], [path where svg icons get installed (default: $datadir/icons/hicolor/scalable/apps)])], [SVGICONSDIR="$withval"], [SVGICONSDIR='$(datadir)/icons/hicolor/scalable/apps']) AC_ARG_WITH([desktopdir], [AS_HELP_STRING([--with-desktopdir=DIR], [path where desktop files get installed (default: $datadir/applications)])], [DESKTOPDIR="$withval"], [DESKTOPDIR='$(datadir)/applications']) AC_ARG_WITH([mimedir], [AS_HELP_STRING([--with-mimedir=DIR], [path where mime files get installed (default: $datadir/mime/packages)])], [MIMEDIR="$withval"], [MIMEDIR='$(datadir)/mime/packages']) AC_ARG_WITH([gamedatadir], [AS_HELP_STRING([--with-gamedatadir=DIR], [path where game data files get installed (default: $datadir/games/xboard)])], [GAMEDATADIR="$withval"], [GAMEDATADIR='$(datadir)/games/xboard']) AC_ARG_ENABLE([update-mimedb], [AS_HELP_STRING([--disable-update-mimedb],[disable the update-mime-database after install [default=no]])], [enable_mimedb="no"], [enable_mimedb="yes"]) AC_ARG_ENABLE([osxapp], [AS_HELP_STRING([--enable-osxapp],[build a OSX app [default=no]])], [enable_OSXAPP=$enableval], [enable_OSXAPP="no"]) AS_IF([test x"$enable_OSXAPP" = x"yes"], [ prefix=`pwd`/XBoard.app/Contents AC_DEFINE([OSXAPP], [1], [We are building an OSX APP, redefine some functions]) with_GTK="yes" enable_mimedb="no" datarootdir='$(prefix)/Resources' datadir='$(datarootdir)/share' sysconfdir='$(datarootdir)/etc' infodir='$(datadir)/info' mandir='$(datadir)/man' bindir='$(prefix)/MacOS' localedir='$(datadir)/locale' GAMEDATADIR='$(datadir)/xboard'],[]) AM_CONDITIONAL(OSX_APP, test x"$enable_OSXAPP" = x"yes") AM_CONDITIONAL(ENABLE_UPDATE_MIMEDB, test x"$enable_mimedb" = x"yes") if test x"$enable_mimedb" = x"yes"; then AC_PATH_PROG([XDG_MIME],[xdg-mime]) AC_SUBST(XDG_MIME) AC_PATH_PROG([XDG_DESKTOP_MENU],[xdg-desktop-menu]) AC_SUBST(XDG_DESKTOP_MENU) AC_PATH_PROG([XDG_ICON_RESOURCE],[xdg-icon-resource]) AC_SUBST(XDG_ICON_RESOURCE) fi AC_SUBST(ICONSDIR) AC_SUBST(SVGICONSDIR) AC_SUBST(DESKTOPDIR) AC_SUBST(MIMEDIR) AC_SUBST(GAMEDATADIR) dnl | check for libraries if test x"$with_GTK" = x"yes" ; then PKG_CHECK_MODULES([GTK], [ gtk+-2.0 >= 2.16.0 gmodule-2.0 ]) FRONTEND_CFLAGS=$GTK_CFLAGS FRONTEND_LIBS=$GTK_LIBS with_Xaw="no" fi if test x"$with_GTK" = x"no" ; then dnl | general check for Xaw and Xaw3d AC_PATH_XTRA if test -n "$no_x" ; then AC_MSG_ERROR([ " $PACKAGE requires the X Window System header files and libraries! They were not found on your system. See FAQ topic C.2. configure failed"]) fi save_cflags="$CFLAGS" save_cppflags="$CPPFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" CPPFLAGS="$CPPFLAGS $X_CFLAGS" AC_CHECK_HEADER([X11/Intrinsic.h],[xt="yes"],[xt="no"]) CFLAGS="$save_cflags" CPPFLAGS="$save_cppflags" if test "$xt" = "no" ; then AC_MSG_ERROR([Xt headers not found. Please install the X11 packages.]) fi dnl | check availability of Xaw3d FRONTEND_LIBS= AS_IF([test x"$with_Xaw3d" != x"no"], [AC_CHECK_LIB([Xaw3d], [XawTextReplace], [ FRONTEND_LIBS="-lXaw3d" AC_DEFINE([USE_XAW3D], [1], [Define if you want to use Xaw3d])], [AC_MSG_ERROR([--with-Xaw3d was given, but test for Xaw3d failed. Make sure that you have Xaw3d installed, else you might want to try the configure option --without-Xaw3d])], [-lXaw])]) dnl | no Xaw3d, check for Xaw; make it the default if test x"$with_Xaw3d" = x"no" ; then with_Xaw=yes save_cflags="$CFLAGS" save_cppflags="$CPPFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" CPPFLAGS="$CPPFLAGS $X_CFLAGS" AC_CHECK_HEADER([X11/Xaw/Dialog.h],[xaw_headers="yes"], [xaw_headers="no"]) CFLAGS="$save_cflags" CPPFLAGS="$save_cppflags" if test x"$xaw_headers" = x"no" ; then AC_MSG_ERROR([Xaw headers not found. Please install the Xaw package and headers.]) fi FRONTEND_LIBS="-lXaw" fi fi dnl | make results available in Makefile.am AM_CONDITIONAL([withGTK], [test x"$with_GTK" = x"yes"]) AM_CONDITIONAL([withXaw], [test x"$with_Xaw3d" = x"yes" || test x"$with_Xaw" = x"yes"]) dnl | end Front-end check AC_CANONICAL_HOST dnl| The following info is mostly gathered from GNU Emacs 19.24. Basically, dnl| we are trying to find out whether this is a System-V derivative in dnl| which pipes don't work with select() and if so, whether there is anything dnl| strange about the way to open a pty. Some of the work was done above dnl| by looking for _getpty, grantpt, and getpseudotty. A few other strange dnl| properties of particular systems are also handled here. dnl| 4/6/97 I'm not sure there really are any systems where pipes dnl| don't work with select(), and ptys cause problems on many dnl| systems, so I'm changing the default to disable ptys in all dnl| cases. I will change it back if I get bug reports that are fixed dnl| by doing a "configure --enable-ptys" USE_PTYS=0 case "$host" in *-*-hpux* ) AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty/tty%c%x", c, i);]) AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptym/pty%c%x", c, i);]) dnl| USE_PTYS=1 if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" else dnl| Note: You might be able to build xboard even if your compiler does not dnl| support ANSI C (-Aa). xboard itself does not require ANSI C. I don't dnl| know whether the X header files on HP-UX require it. CONF_CFLAGS="-Aa -D_HPUX_SOURCE" fi dnl| HP doesn't supply a full set of X header files and libraries. People dnl| often have some things installed in one place and some in another. dnl| AC_PATH_XTRA will find only one place, so we try to add all the dnl| likely ones that might be missing here. It might be better to dnl| change AC_PATH_XTRA to try to extract this information from imake, dnl| since folks who install the missing bits often configure their dnl| imake to find them, but I don't want to delve into autoconf and dnl| hack on its internals. if test -d /opt/hppd/include/X11; then X_CFLAGS="$X_CFLAGS -I/opt/hppd/include" X_LIBS="$X_LIBS -L/opt/hppd/lib" elif test -d /usr/contrib/X11R5/include; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/X11R5/include" X_LIBS="$X_LIBS -L/usr/contrib/X11R5/lib" elif test -d /usr/contrib/mitX11R5/include; then X_CFLAGS="$X_CFLAGS -I/usr/contrib/mitX11R5/include" X_LIBS="$X_LIBS -L/usr/contrib/mitX11R5/lib" elif test -d /MIT/X11R5/include; then X_CFLAGS="$X_CFLAGS -I/MIT/X11R5/include" X_LIBS="$X_LIBS -L/MIT/X11R5/lib" elif test -d /usr/local/include/X11R5; then X_CFLAGS="$X_CFLAGS -I/usr/local/include/X11R5" X_LIBS="$X_LIBS -L/usr/local/lib/X11R5" fi if test -d /usr/include/X11R5; then X_CFLAGS="$X_CFLAGS -I/usr/include/X11R5" X_LIBS="$X_LIBS -L/usr/lib/X11R5 -L/usr/lib/X11R4" elif test -d /usr/include/X11R4; then X_CFLAGS="$X_CFLAGS -I/usr/include/X11R4" X_LIBS="$X_LIBS -L/usr/lib/X11R4" fi ;; romp-ibm-aix* ) AC_DEFINE(IBMRTAIX, 1) dnl| USE_PTYS=1 ;; i386-ibm-aix ) dnl| USE_PTYS=1 if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" fi ;; *-*-aix3* | *-*-bosx* ) AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)]) AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");]) AC_DEFINE(PTY_TTY_NAME_SPRINTF, [strcpy (pty_name, ttyname (fd));]) dnl| USE_PTYS=1 ;; *-*-cxux* ) AC_DEFINE(FIRST_PTY_LETTER, 'A') AC_DEFINE(LAST_PTY_LETTER, 'P') dnl| USE_PTYS=1 ;; *-*-uniplus* ) AC_DEFINE(UNIPLUS, 1) dnl| USE_PTYS=1 ;; *-*-rtu* ) AC_DEFINE(FIRST_PTY_LETTER, 'z') AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyp%x", i);]) AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/pty%x", i);]) AC_DEFINE(RTU, 1) dnl| USE_PTYS=1 ;; *-*-iris* | *-*-irix3* ) AC_DEFINE(PTY_ITERATION, [for (c = 0; !c; c++)]) AC_DEFINE(PTY_NAME_SPRINTF, [strcpy (pty_name, "/dev/ptc");]) AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyq%d", minor(stb.st_rdev));]) dnl| USE_PTYS=1 ;; *-*-irix* ) dnl| USE_PTYS=1 ;; *-*-sunos4* | *-*-solaris1* ) dnl| Work around a bug in the SunOS 4.x linker. Not needed if you have patches dnl| 100512-02 and 100573-03 from Sun. The X FAQ says that the following is dnl| "overkill," but doesn't explain what should be done instead. if test "$GCC" = yes; then PRE_XMULIB="-static" POST_XMULIB="-dynamic" else PRE_XMULIB="-Bstatic" POST_XMULIB="-Bdynamic" fi ;; *-*-sunos5* | *-*-solaris2* ) dnl| USE_PTYS=1 dnl| I'm not sure -lelf is needed, but it was in the old Imakefile. dnl| The other libraries should all be found by Ac_PATH_XTRA or other dnl| code above. X_LIBS="$X_LIBS -lelf" ;; *-*-sco* ) AC_DEFINE(PTY_ITERATION, [for (i = 0; ; i++)]) AC_DEFINE(PTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ptyp%d", i);]) AC_DEFINE(PTY_TTY_NAME_SPRINTF, [sprintf (pty_name, "/dev/ttyp%d", i);]) dnl| USE_PTYS=1 ;; *-*-dynix* | *-*-ptx* ) dnl| USE_PTYS=1 ;; *-*-esix* ) dnl| USE_PTYS=1 ;; *-*-usg5-4* | *-*-sysvr4* ) dnl| USE_PTYS=1 ;; *-*-usg* | *-*-sysv* | *-*-aix* ) dnl| USE_PTYS=1 ;; vax-*-ultrix ) if test "$GCC" = yes; then CONF_CFLAGS="-fwritable-strings" fi ;; dnl| add some libs for OS X *-apple-* ) AC_MSG_WARN([Apple support is experimental, please report any problems to bug-xboard@gnu.org]) AC_MSG_WARN([use --enable-osxapp to enable the build target and automatically adjust target directories]) AC_MSG_WARN([Building an OSX app currently relies on some programs such as dylib that we don't test for]) AC_MSG_WARN([patches welcome ;)]) AC_PATH_PROG(SW_VERS, sw_vers) if test "x$SW_VERS" != "x"; then AC_MSG_CHECKING(Mac OS X version) MACOSX_VERSION=`$SW_VERS -productVersion` AC_MSG_RESULT([$MACOSX_VERSION]) fi FRONTEND_LIBS="$FRONTEND_LIBS -headerpad_max_install_names " if test x"$enable_OSXAPP" = x"yes" ; then FRONTEND_LIBS="$FRONTEND_LIBS -lgtkmacintegration" fi FRONTEND_CFLAGS="$FRONTEND_CFLAGS -I/opt/local/include -L/opt/local/lib" ;; esac AC_SUBST(FRONTEND_CFLAGS) AC_SUBST(FRONTEND_LIBS) AC_SUBST(PRE_XMULIB) AC_SUBST(POST_XMULIB) AC_SUBST(CONF_CFLAGS) AC_SUBST(CONF_LDFLAGS) AC_MSG_CHECKING(whether ptys or pipes should be used) AC_ARG_ENABLE( [ptys], [AS_HELP_STRING([--enable-ptys],[force use of pseudo-ttys with child processes])], [if test "$enableval" = yes; then USE_PTYS=1 enable_ptys="ptys" AC_MSG_RESULT([ptys (user override)]) fi if test "$enableval" = no; then USE_PTYS=0 enable_ptys="pipes" AC_MSG_RESULT([pipes (user override)]) fi], [if test "$USE_PTYS" = 1; then AC_MSG_RESULT(ptys) enable_ptys="ptys" else AC_MSG_RESULT(pipes) enable_ptys="pipes" fi]) AC_DEFINE_UNQUOTED(USE_PTYS, $USE_PTYS) dnl | define not to build zippy as a default, so that autoheader is happy AC_ARG_ENABLE( [zippy], [AS_HELP_STRING([--enable-zippy],[support interfacing a chess program to ICS (default)])], [], [enable_zippy="no"]) if test x"$enable_zippy" != x"no"; then AC_DEFINE(ZIPPY, 1,[should zippy be enabled]) else AC_DEFINE(ZIPPY, 0,[should zippy be enabled]) fi AM_CONDITIONAL([ZIPPY], [test x$enable_zippy != xno]) AC_ARG_ENABLE(sigint, [AS_HELP_STRING([--enable-sigint],[sending SIGINT (^C) wakes up GNU Chess (default)])], [if test "$enableval" = yes; then AC_DEFINE(ATTENTION, 1) fi enable_sigint=$enableval ], [enable_sigint="yes" AC_DEFINE(ATTENTION, 1)]) if test x"$with_Xaw3d" = x"yes" -o x"$with_Xaw" = x"yes" ; then dnl | save all information for X in X_LIBS, also add the libraries themself dnl | since AC_PATH_XTRA only adds the paths X_LIBS="$X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS -lXmu -lX11 -lXt " AC_SUBST(X_CFLAGS) AC_SUBST(X_LIBS) fi dnl create a string with configure options that can be passed to the dnl program, good for bug reports and version printout, see output below CONFIGURE_OPTIONS="prefix=$prefix; datarootdir=$datarootdir; \ datadir=$datadir; gamedatadir=$GAMEDATADIR; desktopdir=$DESKTOPDIR; \ mimedir=$MIMEDIR; iconsdir=$ICONSDIR; svgiconsdir=$SVGICONSDIR; infodir=$infodir; \ sysconfigdir=$sysconfigdir; update_mimedb=$enable_mimedb; NLS=$USE_NLS; \ GKT=$with_GTK; Xaw3d=$with_Xaw3d; Xaw=$with_Xaw; \ ptys=$enable_ptys; zippy=$enable_zippy; sigint=$enable_sigint" AC_SUBST(CONFIGURE_OPTIONS) dnl | output Makefile AC_CONFIG_FILES([Makefile cmail po/Makefile.in osxapp/Info.plist]) AC_CONFIG_COMMANDS([test-stamp-h],[test -z "$CONFIG_HEADERS" || date > stamp-h]) AC_CONFIG_COMMANDS([chmod-cmail],[chmod 755 cmail]) AC_OUTPUT dnl dnl Output a summary dnl echo "" echo " Configurations summary:" echo "" echo " prefix: $prefix " echo " datarootdir: $datarootdir " echo " datadir: $datadir " echo " gamedatadir: $GAMEDATADIR " echo " desktopdir: $DESKTOPDIR " echo " mimedir: $MIMEDIR " echo " iconsdir: $ICONSDIR " echo " svgiconsdir: $SVGICONSDIR " echo " infodir: $infodir (info files will go here)" echo " sysconfdir: $sysconfdir (xboard.conf will go here)" echo "" echo " update mimedb: $enable_mimedb" echo "" echo " NLS support: $USE_NLS" echo "" echo " GTK: $with_GTK" echo " Xaw3d: $with_Xaw3d" echo " Xaw: $with_Xaw" echo "" echo " ptys: $enable_ptys" echo " zippy: $enable_zippy" echo " sigint: $enable_sigint" xboard-4.8.0/Makefile.in0000644000175000001440000023353712422467077012014 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = xboard$(EXEEXT) subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in mkinstalldirs $(srcdir)/cmail.in \ $(top_srcdir)/osxapp/Info.plist.in ABOUT-NLS depcomp \ $(xboard_TEXINFOS) mdate-sh $(srcdir)/version.texi \ $(srcdir)/stamp-vti texinfo.tex $(dist_icon_DATA) \ $(dist_pixmaps_DATA) $(dist_png_DATA) $(dist_shogi_DATA) \ $(dist_sounds_DATA) $(dist_svg_DATA) $(dist_svgicon_DATA) \ $(dist_themes_DATA) $(dist_xiangqi_DATA) COPYING TODO compile \ config.guess config.rpath config.sub install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = cmail osxapp/Info.plist CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(man6dir)" "$(DESTDIR)$(Applicationsdir)" \ "$(DESTDIR)$(icondir)" "$(DESTDIR)$(pixmapsdir)" \ "$(DESTDIR)$(pngdir)" "$(DESTDIR)$(shogidir)" \ "$(DESTDIR)$(soundsdir)" "$(DESTDIR)$(svgdir)" \ "$(DESTDIR)$(svgicondir)" "$(DESTDIR)$(themesdir)" \ "$(DESTDIR)$(xiangqidir)" "$(DESTDIR)$(mimedir)" \ "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am__xboard_SOURCES_DIST = backend.c backend.h backendz.h book.c \ childio.c childio.h common.h frontend.h gamelist.c ngamelist.c \ gettext.h lists.c lists.h moves.c moves.h parser.c parser.h \ pgntags.c uci.c args.h xboard2.h board.c board.h draw.c draw.h \ dialogs.c dialogs.h engineoutput.c nengineoutput.c \ engineoutput.h evalgraph.c nevalgraph.c evalgraph.h history.c \ nhistory.c menus.c menus.h usounds.c usystem.c usystem.h \ zippy.c zippy.h gtk/xboard.c gtk/xboard.h gtk/xoptions.c \ gtk/xtimer.c gtk/xengineoutput.c xaw/xboard.c xaw/xboard.h \ xaw/xengineoutput.c xaw/xgamelist.c xaw/xgamelist.h \ xaw/xhistory.c xaw/xhistory.h xaw/xoptions.c \ bitmaps/checkmark.bm bitmaps/icon_black.bm \ bitmaps/icon_white.bm @ZIPPY_TRUE@am__objects_1 = zippy.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp am__objects_2 = gtk/xboard.$(OBJEXT) gtk/xoptions.$(OBJEXT) \ gtk/xtimer.$(OBJEXT) gtk/xengineoutput.$(OBJEXT) am__objects_3 = xaw/xboard.$(OBJEXT) xaw/xengineoutput.$(OBJEXT) \ xaw/xgamelist.$(OBJEXT) xaw/xhistory.$(OBJEXT) \ xaw/xoptions.$(OBJEXT) @withGTK_FALSE@@withXaw_TRUE@am__objects_4 = $(am__objects_3) @withGTK_TRUE@am__objects_4 = $(am__objects_2) am_xboard_OBJECTS = backend.$(OBJEXT) book.$(OBJEXT) childio.$(OBJEXT) \ gamelist.$(OBJEXT) ngamelist.$(OBJEXT) lists.$(OBJEXT) \ moves.$(OBJEXT) parser.$(OBJEXT) pgntags.$(OBJEXT) \ uci.$(OBJEXT) board.$(OBJEXT) draw.$(OBJEXT) dialogs.$(OBJEXT) \ engineoutput.$(OBJEXT) nengineoutput.$(OBJEXT) \ evalgraph.$(OBJEXT) nevalgraph.$(OBJEXT) history.$(OBJEXT) \ nhistory.$(OBJEXT) menus.$(OBJEXT) usounds.$(OBJEXT) \ usystem.$(OBJEXT) $(am__objects_1) $(am__objects_4) xboard_OBJECTS = $(am_xboard_OBJECTS) xboard_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(xboard_SOURCES) DIST_SOURCES = $(am__xboard_SOURCES_DIST) AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/xboard.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = xboard.dvi PDFS = xboard.pdf PSS = xboard.ps HTMLS = xboard.html TEXINFOS = xboard.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man6dir = $(mandir)/man6 MANS = $(man6_MANS) DATA = $(Applications_DATA) $(dist_icon_DATA) $(dist_pixmaps_DATA) \ $(dist_png_DATA) $(dist_shogi_DATA) $(dist_sounds_DATA) \ $(dist_svg_DATA) $(dist_svgicon_DATA) $(dist_themes_DATA) \ $(dist_xiangqi_DATA) $(mime_DATA) $(sysconf_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ AWKPATH = @AWKPATH@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ CONF_CFLAGS = @CONF_CFLAGS@ CONF_LDFLAGS = @CONF_LDFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DESKTOPDIR = @DESKTOPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LIBS = @FRONTEND_LIBS@ GAMEDATADIR = @GAMEDATADIR@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ ICONSDIR = @ICONSDIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIMEDIR = @MIMEDIR@ MINFO = @MINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NROFF = @NROFF@ NROFFFLAGS = @NROFFFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERLPATH = @PERLPATH@ PKGCONFIG = @PKGCONFIG@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POST_XMULIB = @POST_XMULIB@ POSUB = @POSUB@ PRE_XMULIB = @PRE_XMULIB@ RSH = @RSH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ SVGICONSDIR = @SVGICONSDIR@ SW_VERS = @SW_VERS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XDG_DESKTOP_MENU = @XDG_DESKTOP_MENU@ XDG_ICON_RESOURCE = @XDG_ICON_RESOURCE@ XDG_MIME = @XDG_MIME@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @ZIPPY_FALSE@ZPY = ### if we are compiling with ZIPPY we need some extra source files @ZIPPY_TRUE@ZPY = zippy.c zippy.h ### define sources for the front-end and backend GTKsources = gtk/xboard.c gtk/xboard.h \ gtk/xoptions.c gtk/xtimer.c \ gtk/xengineoutput.c Xsources = xaw/xboard.c xaw/xboard.h \ xaw/xengineoutput.c \ xaw/xgamelist.c xaw/xgamelist.h \ xaw/xhistory.c xaw/xhistory.h \ xaw/xoptions.c \ bitmaps/checkmark.bm bitmaps/icon_black.bm bitmaps/icon_white.bm @withGTK_TRUE@FRONTENDsources = $(GTKsources) @withXaw_TRUE@FRONTENDsources = $(Xsources) @withGTK_TRUE@FRONTENDextras = $(Xsources) @withXaw_TRUE@FRONTENDextras = $(GTKsources) @withGTK_TRUE@headers = -I gtk @withXaw_TRUE@headers = -I xaw -DX11 xboard_SOURCES = backend.c backend.h backendz.h \ book.c \ childio.c childio.h \ common.h \ frontend.h \ gamelist.c ngamelist.c \ gettext.h \ lists.c lists.h \ moves.c moves.h \ parser.c parser.h \ pgntags.c \ uci.c \ args.h xboard2.h \ board.c board.h \ draw.c draw.h \ dialogs.c dialogs.h \ engineoutput.c nengineoutput.c engineoutput.h \ evalgraph.c nevalgraph.c evalgraph.h \ history.c nhistory.c \ menus.c menus.h \ usounds.c usystem.c usystem.h \ $(ZPY) $(FRONTENDsources) ### SUBDIRS = po xboard_LDADD = -ldl -lm @FRONTEND_LIBS@ @X_LIBS@ @LIBINTL@ @CAIRO_LIBS@ EXTRA_DIST = pixmaps themes png sounds winboard \ xboard.texi gpl.texinfo texi2man texinfo.tex xboard.man xboard.desktop xboard-config.desktop \ xboard-fen-viewer.desktop xboard-pgn-viewer.desktop xboard-tourney.desktop xboard.xml \ COPYRIGHT FAQ.html engine-intf.html ics-parsing.txt readme.htm zippy.README \ xboard.conf SHORTLOG DIFFSTAT history.c ABOUT-NLS $(FRONTENDextras) DISTCLEANFILES = stamp-h GITVERSION = $(shell sh -c 'git describe --dirty --always 2>/dev/null') AM_CPPFLAGS = -DINFODIR='"$(infodir)"' @X_CFLAGS@ @CAIRO_CFLAGS@ @FRONTEND_CFLAGS@ -DSYSCONFDIR='"$(sysconfdir)"' \ -DLOCALEDIR='"$(localedir)"' -DSVGDIR='"$(svgdir)"' -D__GIT_VERSION='"$(GITVERSION)"' \ -DCONFIGURE_OPTIONS='"@CONFIGURE_OPTIONS@"' -DDATADIR='"$(datadir)/games/xboard"' $(headers) ACLOCAL_AMFLAGS = -I m4 info_TEXINFOS = xboard.texi xboard_TEXINFOS = copyright.texi man6_MANS = xboard.man ### config file sysconf_DATA = xboard.conf ### icon files icondir = @ICONSDIR@ dist_icon_DATA = xboard.png svgicondir = @SVGICONSDIR@ dist_svgicon_DATA = xboard.svg ### desktop files for KDE and gnome Applicationsdir = @DESKTOPDIR@ Applications_DATA = xboard.desktop xboard-fen-viewer.desktop xboard-pgn-viewer.desktop xboard-tourney.desktop xboard-config.desktop ### mime file mimedir = @MIMEDIR@ mime_DATA = xboard.xml gamedatadir = @GAMEDATADIR@ ### directory and files for svgs svgdir = $(gamedatadir)/themes/default dist_svg_DATA = svg/icon_white.svg svg/icon_black.svg \ svg/BlackAdvisor.svg svg/WhiteAdvisor.svg \ svg/BlackArchbishop.svg svg/WhiteArchbishop.svg \ svg/BlackBishop.svg svg/WhiteBishop.svg \ svg/BlackCanon.svg svg/WhiteCanon.svg \ svg/BlackChancellor.svg svg/WhiteChancellor.svg \ svg/BlackCobra.svg svg/WhiteCobra.svg \ svg/BlackCommoner.svg svg/WhiteCommoner.svg \ svg/BlackCrownedBishop.svg svg/WhiteCrownedBishop.svg \ svg/BlackCrownedRook.svg svg/WhiteCrownedRook.svg \ svg/BlackElephant.svg svg/WhiteElephant.svg \ svg/BlackGoldKnight.svg svg/WhiteGoldKnight.svg \ svg/BlackGoldLance.svg svg/WhiteGoldLance.svg \ svg/BlackGoldPawn.svg svg/WhiteGoldPawn.svg \ svg/BlackGoldSilver.svg svg/WhiteGoldSilver.svg \ svg/BlackGold.svg svg/WhiteGold.svg \ svg/BlackHawk.svg svg/WhiteHawk.svg \ svg/BlackKing.svg svg/WhiteKing.svg \ svg/BlackKnight.svg svg/WhiteKnight.svg \ svg/BlackLance.svg svg/WhiteLance.svg \ svg/BlackMarshall.svg svg/WhiteMarshall.svg \ svg/BlackNightrider.svg svg/WhiteNightrider.svg \ svg/BlackPawn.svg svg/WhitePawn.svg \ svg/BlackPrincess.svg svg/WhitePrincess.svg \ svg/BlackQueen.svg svg/WhiteQueen.svg \ svg/BlackRook.svg svg/WhiteRook.svg \ svg/BlackUnicorn.svg svg/WhiteUnicorn.svg \ svg/BlackSword.svg svg/WhiteSword.svg \ svg/BlackHSword.svg svg/WhiteHSword.svg \ svg/BlackLeopard.svg svg/WhiteLeopard.svg \ svg/BlackLion.svg svg/WhiteLion.svg \ svg/BlackPromoBishop.svg svg/WhitePromoBishop.svg \ svg/BlackPromoRook.svg svg/WhitePromoRook.svg \ svg/BlackPromoHorse.svg svg/WhitePromoHorse.svg \ svg/BlackPromoDragon.svg svg/WhitePromoDragon.svg \ svg/BlackPromoSword.svg svg/WhitePromoSword.svg \ svg/BlackPromoHSword.svg svg/WhitePromoHSword.svg \ svg/BlackHCrown.svg svg/WhiteHCrown.svg \ svg/BlackDolphin.svg svg/WhiteDolphin.svg \ svg/BlackClaw.svg svg/WhiteClaw.svg \ svg/eo_Analyzing.svg svg/eo_Black.svg \ svg/eo_Clear.svg svg/eo_Ponder.svg \ svg/eo_Thinking.svg svg/eo_Unknown.svg \ svg/eo_White.svg shogidir = $(gamedatadir)/themes/shogi dist_shogi_DATA = \ themes/shogi/WhiteGold.svg themes/shogi/WhiteCrownedBishop.svg\ themes/shogi/WhiteBishop.svg themes/shogi/WhiteKing.svg\ themes/shogi/WhiteKnight.svg themes/shogi/WhiteGoldKnight.svg\ themes/shogi/WhiteLance.svg themes/shogi/WhiteGoldLance.svg\ themes/shogi/WhitePawn.svg themes/shogi/WhiteGoldPawn.svg\ themes/shogi/WhiteRook.svg themes/shogi/WhiteCrownedRook.svg\ themes/shogi/WhiteAdvisor.svg themes/shogi/WhiteGoldSilver.svg\ themes/shogi/BlackGold.svg themes/shogi/BlackCrownedBishop.svg\ themes/shogi/BlackBishop.svg themes/shogi/BlackKing.svg\ themes/shogi/BlackKnight.svg themes/shogi/BlackGoldKnight.svg\ themes/shogi/BlackLance.svg themes/shogi/BlackGoldLance.svg\ themes/shogi/BlackPawn.svg themes/shogi/BlackGoldPawn.svg\ themes/shogi/BlackRook.svg themes/shogi/BlackCrownedRook.svg\ themes/shogi/BlackAdvisor.svg themes/shogi/BlackGoldSilver.svg xiangqidir = $(gamedatadir)/themes/xiangqi dist_xiangqi_DATA = themes/xiangqi/BlackAdvisor.svg themes/xiangqi/WhiteAdvisor.svg \ themes/xiangqi/BlackCanon.svg themes/xiangqi/WhiteCanon.svg \ themes/xiangqi/BlackElephant.svg themes/xiangqi/WhiteElephant.svg \ themes/xiangqi/BlackKnight.svg themes/xiangqi/WhiteKnight.svg \ themes/xiangqi/BlackGold.svg themes/xiangqi/WhiteGold.svg \ themes/xiangqi/BlackPawn.svg themes/xiangqi/WhitePawn.svg \ themes/xiangqi/BlackRook.svg themes/xiangqi/WhiteRook.svg ### directory and files for themes (and other) configuration files themesdir = $(datadir)/games/xboard/themes/conf dist_themes_DATA = conf/shogi conf/xq conf/chu conf/ics conf/mini conf/mini.fen conf/sho conf/sho.fen ### directory and files for pixmaps pixmapsdir = $(gamedatadir)/pixmaps/textures dist_pixmaps_DATA = pixmaps/cross32.png pixmaps/cross48.png pixmaps/board32.png pixmaps/board48.png pixmaps/ini32.png pixmaps/ini48.png ### directory and files for pngs pngdir = $(gamedatadir)/themes/textures dist_png_DATA = png/hatch.png png/wood_d.png png/wood_l.png png/xqboard.png ### directory and files for sound files soundsdir = $(gamedatadir)/sounds dist_sounds_DATA = \ sounds/cymbal.wav sounds/pop2.wav sounds/slap.wav sounds/ding1.wav sounds/laser.wav \ sounds/woodthunk.wav sounds/gong.wav sounds/penalty.wav sounds/honkhonk.wav sounds/phone.wav sounds/roar.wav all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .dvi .html .info .o .obj .pdf .ps .texi am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 cmail: $(top_builddir)/config.status $(srcdir)/cmail.in cd $(top_builddir) && $(SHELL) ./config.status $@ osxapp/Info.plist: $(top_builddir)/config.status $(top_srcdir)/osxapp/Info.plist.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gtk/$(am__dirstamp): @$(MKDIR_P) gtk @: > gtk/$(am__dirstamp) gtk/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) gtk/$(DEPDIR) @: > gtk/$(DEPDIR)/$(am__dirstamp) gtk/xboard.$(OBJEXT): gtk/$(am__dirstamp) \ gtk/$(DEPDIR)/$(am__dirstamp) gtk/xoptions.$(OBJEXT): gtk/$(am__dirstamp) \ gtk/$(DEPDIR)/$(am__dirstamp) gtk/xtimer.$(OBJEXT): gtk/$(am__dirstamp) \ gtk/$(DEPDIR)/$(am__dirstamp) gtk/xengineoutput.$(OBJEXT): gtk/$(am__dirstamp) \ gtk/$(DEPDIR)/$(am__dirstamp) xaw/$(am__dirstamp): @$(MKDIR_P) xaw @: > xaw/$(am__dirstamp) xaw/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) xaw/$(DEPDIR) @: > xaw/$(DEPDIR)/$(am__dirstamp) xaw/xboard.$(OBJEXT): xaw/$(am__dirstamp) \ xaw/$(DEPDIR)/$(am__dirstamp) xaw/xengineoutput.$(OBJEXT): xaw/$(am__dirstamp) \ xaw/$(DEPDIR)/$(am__dirstamp) xaw/xgamelist.$(OBJEXT): xaw/$(am__dirstamp) \ xaw/$(DEPDIR)/$(am__dirstamp) xaw/xhistory.$(OBJEXT): xaw/$(am__dirstamp) \ xaw/$(DEPDIR)/$(am__dirstamp) xaw/xoptions.$(OBJEXT): xaw/$(am__dirstamp) \ xaw/$(DEPDIR)/$(am__dirstamp) xboard$(EXEEXT): $(xboard_OBJECTS) $(xboard_DEPENDENCIES) $(EXTRA_xboard_DEPENDENCIES) @rm -f xboard$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xboard_OBJECTS) $(xboard_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f gtk/*.$(OBJEXT) -rm -f xaw/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backend.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/board.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/book.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/childio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialogs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/engineoutput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evalgraph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gamelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lists.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moves.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nengineoutput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nevalgraph.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngamelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nhistory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgntags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uci.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usounds.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usystem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zippy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gtk/$(DEPDIR)/xboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gtk/$(DEPDIR)/xengineoutput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gtk/$(DEPDIR)/xoptions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@gtk/$(DEPDIR)/xtimer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@xaw/$(DEPDIR)/xboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@xaw/$(DEPDIR)/xengineoutput.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@xaw/$(DEPDIR)/xgamelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@xaw/$(DEPDIR)/xhistory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@xaw/$(DEPDIR)/xoptions.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/xboard.info: xboard.texi $(srcdir)/version.texi $(xboard_TEXINFOS) xboard.dvi: xboard.texi $(srcdir)/version.texi $(xboard_TEXINFOS) xboard.pdf: xboard.texi $(srcdir)/version.texi $(xboard_TEXINFOS) xboard.html: xboard.texi $(srcdir)/version.texi $(xboard_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: xboard.texi $(top_srcdir)/configure @(dir=.; test -f ./xboard.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/xboard.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf xboard.t2d xboard.t2p clean-aminfo: -test -z "xboard.dvi xboard.pdf xboard.ps xboard.html" \ || rm -rf xboard.dvi xboard.pdf xboard.ps xboard.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man6: $(man6_MANS) @$(NORMAL_INSTALL) @list1='$(man6_MANS)'; \ list2=''; \ test -n "$(man6dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man6dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man6dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.6[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man6dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man6dir)" || exit $$?; }; \ done; } uninstall-man6: @$(NORMAL_UNINSTALL) @list='$(man6_MANS)'; test -n "$(man6dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man6dir)'; $(am__uninstall_files_from_dir) install-ApplicationsDATA: $(Applications_DATA) @$(NORMAL_INSTALL) @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(Applicationsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(Applicationsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(Applicationsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(Applicationsdir)" || exit $$?; \ done uninstall-ApplicationsDATA: @$(NORMAL_UNINSTALL) @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(Applicationsdir)'; $(am__uninstall_files_from_dir) install-dist_iconDATA: $(dist_icon_DATA) @$(NORMAL_INSTALL) @list='$(dist_icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-dist_iconDATA: @$(NORMAL_UNINSTALL) @list='$(dist_icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) install-dist_pixmapsDATA: $(dist_pixmaps_DATA) @$(NORMAL_INSTALL) @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pixmapsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pixmapsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pixmapsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pixmapsdir)" || exit $$?; \ done uninstall-dist_pixmapsDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pixmaps_DATA)'; test -n "$(pixmapsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pixmapsdir)'; $(am__uninstall_files_from_dir) install-dist_pngDATA: $(dist_png_DATA) @$(NORMAL_INSTALL) @list='$(dist_png_DATA)'; test -n "$(pngdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pngdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pngdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pngdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pngdir)" || exit $$?; \ done uninstall-dist_pngDATA: @$(NORMAL_UNINSTALL) @list='$(dist_png_DATA)'; test -n "$(pngdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pngdir)'; $(am__uninstall_files_from_dir) install-dist_shogiDATA: $(dist_shogi_DATA) @$(NORMAL_INSTALL) @list='$(dist_shogi_DATA)'; test -n "$(shogidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shogidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shogidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shogidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shogidir)" || exit $$?; \ done uninstall-dist_shogiDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shogi_DATA)'; test -n "$(shogidir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shogidir)'; $(am__uninstall_files_from_dir) install-dist_soundsDATA: $(dist_sounds_DATA) @$(NORMAL_INSTALL) @list='$(dist_sounds_DATA)'; test -n "$(soundsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(soundsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(soundsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(soundsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(soundsdir)" || exit $$?; \ done uninstall-dist_soundsDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sounds_DATA)'; test -n "$(soundsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(soundsdir)'; $(am__uninstall_files_from_dir) install-dist_svgDATA: $(dist_svg_DATA) @$(NORMAL_INSTALL) @list='$(dist_svg_DATA)'; test -n "$(svgdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(svgdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(svgdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(svgdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(svgdir)" || exit $$?; \ done uninstall-dist_svgDATA: @$(NORMAL_UNINSTALL) @list='$(dist_svg_DATA)'; test -n "$(svgdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(svgdir)'; $(am__uninstall_files_from_dir) install-dist_svgiconDATA: $(dist_svgicon_DATA) @$(NORMAL_INSTALL) @list='$(dist_svgicon_DATA)'; test -n "$(svgicondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(svgicondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(svgicondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(svgicondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(svgicondir)" || exit $$?; \ done uninstall-dist_svgiconDATA: @$(NORMAL_UNINSTALL) @list='$(dist_svgicon_DATA)'; test -n "$(svgicondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(svgicondir)'; $(am__uninstall_files_from_dir) install-dist_themesDATA: $(dist_themes_DATA) @$(NORMAL_INSTALL) @list='$(dist_themes_DATA)'; test -n "$(themesdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(themesdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(themesdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(themesdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(themesdir)" || exit $$?; \ done uninstall-dist_themesDATA: @$(NORMAL_UNINSTALL) @list='$(dist_themes_DATA)'; test -n "$(themesdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(themesdir)'; $(am__uninstall_files_from_dir) install-dist_xiangqiDATA: $(dist_xiangqi_DATA) @$(NORMAL_INSTALL) @list='$(dist_xiangqi_DATA)'; test -n "$(xiangqidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(xiangqidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(xiangqidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xiangqidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(xiangqidir)" || exit $$?; \ done uninstall-dist_xiangqiDATA: @$(NORMAL_UNINSTALL) @list='$(dist_xiangqi_DATA)'; test -n "$(xiangqidir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(xiangqidir)'; $(am__uninstall_files_from_dir) install-mimeDATA: $(mime_DATA) @$(NORMAL_INSTALL) @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(mimedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(mimedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mimedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(mimedir)" || exit $$?; \ done uninstall-mimeDATA: @$(NORMAL_UNINSTALL) @list='$(mime_DATA)'; test -n "$(mimedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(mimedir)'; $(am__uninstall_files_from_dir) install-sysconfDATA: $(sysconf_DATA) @$(NORMAL_INSTALL) @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man6dir)" "$(DESTDIR)$(Applicationsdir)" "$(DESTDIR)$(icondir)" "$(DESTDIR)$(pixmapsdir)" "$(DESTDIR)$(pngdir)" "$(DESTDIR)$(shogidir)" "$(DESTDIR)$(soundsdir)" "$(DESTDIR)$(svgdir)" "$(DESTDIR)$(svgicondir)" "$(DESTDIR)$(themesdir)" "$(DESTDIR)$(xiangqidir)" "$(DESTDIR)$(mimedir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f gtk/$(DEPDIR)/$(am__dirstamp) -rm -f gtk/$(am__dirstamp) -rm -f xaw/$(DEPDIR)/$(am__dirstamp) -rm -f xaw/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-aminfo clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) gtk/$(DEPDIR) xaw/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: $(DVIS) html: html-recursive html-am: $(HTMLS) info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-ApplicationsDATA install-dist_iconDATA \ install-dist_pixmapsDATA install-dist_pngDATA \ install-dist_shogiDATA install-dist_soundsDATA \ install-dist_svgDATA install-dist_svgiconDATA \ install-dist_themesDATA install-dist_xiangqiDATA \ install-info-am install-man install-mimeDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-binPROGRAMS install-sysconfDATA install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man6 install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) gtk/$(DEPDIR) xaw/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic mostlyclean-vti pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive ps-am: $(PSS) uninstall-am: uninstall-ApplicationsDATA uninstall-binPROGRAMS \ uninstall-dist_iconDATA uninstall-dist_pixmapsDATA \ uninstall-dist_pngDATA uninstall-dist_shogiDATA \ uninstall-dist_soundsDATA uninstall-dist_svgDATA \ uninstall-dist_svgiconDATA uninstall-dist_themesDATA \ uninstall-dist_xiangqiDATA uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-man uninstall-mimeDATA \ uninstall-pdf-am uninstall-ps-am uninstall-sysconfDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man6 .MAKE: $(am__recursive_targets) all install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-aminfo \ clean-binPROGRAMS clean-cscope clean-generic cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-info dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-ApplicationsDATA install-am \ install-binPROGRAMS install-data install-data-am \ install-data-hook install-dist_iconDATA \ install-dist_pixmapsDATA install-dist_pngDATA \ install-dist_shogiDATA install-dist_soundsDATA \ install-dist_svgDATA install-dist_svgiconDATA \ install-dist_themesDATA install-dist_xiangqiDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man6 install-mimeDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-sysconfDATA \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ mostlyclean-vti pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-ApplicationsDATA uninstall-am uninstall-binPROGRAMS \ uninstall-dist_iconDATA uninstall-dist_pixmapsDATA \ uninstall-dist_pngDATA uninstall-dist_shogiDATA \ uninstall-dist_soundsDATA uninstall-dist_svgDATA \ uninstall-dist_svgiconDATA uninstall-dist_themesDATA \ uninstall-dist_xiangqiDATA uninstall-dvi-am uninstall-hook \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man6 uninstall-mimeDATA uninstall-pdf-am \ uninstall-ps-am uninstall-sysconfDATA ### the man page depends on several files, so we add a special rule xboard.man: xboard.texi copyright.texi gpl.texinfo version.texi $(srcdir)/texi2man $(srcdir)/xboard.texi > xboard.man || (rm -f xboard.man ; false) ### install mime-type files and corresponding icons and menu entries if enabled during configure install-data-hook: install-mime-database uninstall-hook: uninstall-mime-database install-mime-database: @ENABLE_UPDATE_MIMEDB_TRUE@ -if test -z "$(DESTDIR)" -a -n "$(XDG_MIME)" -a -n "$(XDG_DESKTOP_MENU)" -a -n "$(XDG_ICON_RESOURCE)" ; then \ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_MIME) install --mode system --novendor xboard.xml ;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-pgn-viewer.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-fen-viewer.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-tourney.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) install --mode system --novendor xboard-config.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/board32.png application-x-chess-pgn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/cross32.png application-x-xboard-trn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 32 pixmaps/ini32.png application-x-xboard-opt;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/board48.png application-x-chess-pgn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/cross48.png application-x-xboard-trn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) install --context mimetypes --size 48 pixmaps/ini48.png application-x-xboard-opt;\ @ENABLE_UPDATE_MIMEDB_TRUE@ fi uninstall-mime-database: @ENABLE_UPDATE_MIMEDB_TRUE@ -if test -z "$(DESTDIR)" -a -n "$(XDG_MIME)" -a -n "$(XDG_DESKTOP_MENU)" -a -n "$(XDG_ICON_RESOURCE)" ; then \ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_MIME) uninstall --mode system --novendor xboard.xml;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-pgn-viewer.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-fen-viewer.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-tourney.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_DESKTOP_MENU) uninstall --mode system --novendor xboard-config.desktop;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 board32.png application-x-chess-pgn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 cross32.png application-x-xboard-trn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 32 ini32.png application-x-xboard-opt;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 board48.png application-x-chess-pgn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 cross48.png application-x-xboard-trn;\ @ENABLE_UPDATE_MIMEDB_TRUE@ $(XDG_ICON_RESOURCE) uninstall --context mimetypes --size 48 ini48.png application-x-xboard-opt;\ @ENABLE_UPDATE_MIMEDB_TRUE@ fi @OSX_APP_TRUE@osxapp: all-recursive install install-recursive @OSX_APP_TRUE@ $(MKDIR_P) $(datarootdir)/bin @OSX_APP_TRUE@ $(MKDIR_P) $(datarootdir)/lib @OSX_APP_TRUE@ $(MKDIR_P) $(sysconfdir)/gtk-2.0 @OSX_APP_TRUE@ $(MKDIR_P) $(sysconfdir)/pango @OSX_APP_TRUE@ $(MKDIR_P) $(datadir)/themes @OSX_APP_TRUE@ $(MKDIR_P) $(gamedatadir)/themes @OSX_APP_TRUE@ $(INSTALL) ./osxapp/Info.plist $(prefix) @OSX_APP_TRUE@ $(INSTALL) ./osxapp/PkgInfo $(prefix) @OSX_APP_TRUE@ $(INSTALL) ./osxapp/XBoard.gtklauncher $(bindir)/XBoard @OSX_APP_TRUE@ $(INSTALL) ./xboard $(bindir)/xboard-bin @OSX_APP_TRUE@ cp -R ./osxapp/icons/. $(datarootdir) @OSX_APP_TRUE@ $(INSTALL) ./osxapp/man.command $(datarootdir)/bin/man.command @OSX_APP_TRUE@ $(INSTALL) ./osxapp/info.command $(datarootdir)/bin/info.command @OSX_APP_TRUE@ sed -e 's?-soundProgram "aplay -q"?-soundProgram "afplay"?'\ @OSX_APP_TRUE@ -e 's?-firstChessProgram fairymax?-firstChessProgram "./fairymax"?'\ @OSX_APP_TRUE@ -e 's?-firstChessProgramNames {fairymax?-firstChessProgramNames {"fairymax" -fcp "./fairymax" -fd "~~/../../bin/fairymax"?'\ @OSX_APP_TRUE@ -e 's?"Fruit 2.1" -fcp fruit -fUCI?"fruit" -fcp "./fruit" -fd "~~/../../bin/fruit" -fUCI?'\ @OSX_APP_TRUE@ -e '/"Crafty" -fcp crafty/d'\ @OSX_APP_TRUE@ -e '/"GNU Chess" -fcp gnuchess/d'\ @OSX_APP_TRUE@ -e 's?-polyglotDir ""?-polyglotDir "~~/../../bin"?'\ @OSX_APP_TRUE@ -e 's?polyglot ?./polyglot ?'\ @OSX_APP_TRUE@ -e 's?-icsNames {"fics" -icshost freechess.org -icshelper timeseal?-icsNames {"fics" -icshost 69.36.243.188 -icshelper ~~/../../bin/timeseal?'\ @OSX_APP_TRUE@ -e 's?"icc" -icshost chessclub.com -icshelper timestamp?"icc" -icshost 207.99.83.228 -icshelper ~~/../../bin/timestamp?'\ @OSX_APP_TRUE@ -e 's?"kc" -icshost alanimus.com -icshelper timeseal?"vics" -icshost winboard.nl -icshelper ~~/../../bin/timeseal?'\ @OSX_APP_TRUE@ -e '/; Save user settings./d'\ @OSX_APP_TRUE@ -e '/; Must be last in file to make user options prevail over system-wide settings!/d'\ @OSX_APP_TRUE@ -e '/-saveSettingsOnExit true/d'\ @OSX_APP_TRUE@ -e '/-saveSettingsFile "~\/.xboardrc"/d'\ @OSX_APP_TRUE@ -e '/-settingsFile "~\/.xboardrc"/d'<./xboard.conf >$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '; OSX' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo ';'>>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-clockFont "Sans Bold 26" '>>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-pieceImageDirectory "~~/themes/default"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-autoLogo true' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-logoDir "~~/logos"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-logoSize 100' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-openCommand "cd %s/../../bin; open"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-firstDirectory "~~/../../bin/fairymax"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-secondDirectory "~~/../../bin/fairymax"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-secondChessProgram "./fairymax"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo ';' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '; Save user settings.' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '; Must be last in file to make user options prevail over system-wide settings!' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo ';' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-saveSettingsOnExit true' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-saveSettingsFile "~/Library/Preferences/XBoardOSX.conf"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ echo '-settingsFile "~/Library/Preferences/XBoardOSX.conf"' >>$(sysconfdir)/xboard.conf @OSX_APP_TRUE@ sed 's?/opt/local/lib?/tmp/skl/XBoard.app/Contents/Resources/lib?' $(sysconfdir)/gtk-2.0/gdk-pixbuf.loaders @OSX_APP_TRUE@ sed -e 's?/opt/local/lib?/tmp/skl/XBoard.app/Contents/Resources/lib?' -e 's?/opt/local/share/locale?/tmp/skl/XBoard.app/Contents/Resources/share/locale?' $(sysconfdir)/gtk-2.0/gtk.immodules @OSX_APP_TRUE@ $(INSTALL) ./osxapp/launcher_rc $(datarootdir)/ @OSX_APP_TRUE@ $(INSTALL) /opt/local/etc/gtk-2.0/im-multipress.conf $(sysconfdir)/gtk-2.0 @OSX_APP_TRUE@ $(INSTALL) ./osxapp/gtkrc $(sysconfdir)/gtk-2.0/gtkrc @OSX_APP_TRUE@ $(INSTALL) ./osxapp/pango.modules $(sysconfdir)/pango/pangorc @OSX_APP_TRUE@ cp -R /opt/local/lib/gtk-2.0 $(datarootdir)/lib @OSX_APP_TRUE@ cp -R /opt/local/lib/gdk-pixbuf-2.0 $(datarootdir)/lib @OSX_APP_TRUE@ cp -R /opt/local/share/themes/Mac $(datadir)/themes @OSX_APP_TRUE@ cp -R ./osxapp/default/. $(gamedatadir)/themes/default @OSX_APP_TRUE@ $(INSTALL) ./png/marble_d.png $(gamedatadir)/themes/textures @OSX_APP_TRUE@ $(INSTALL) ./png/marble_l.png $(gamedatadir)/themes/textures @OSX_APP_TRUE@ $(INSTALL) ./png/xqwood.png $(gamedatadir)/themes/textures @OSX_APP_TRUE@ cp -R ./osxapp/logos $(gamedatadir)/ @OSX_APP_TRUE@ cp -R ./osxapp/osx-localization/. $(datarootdir)/ @OSX_APP_TRUE@ for i in po/*gmo; do lang=`basename $$i .gmo`; $(INSTALL) /opt/local/share/locale/$$lang/LC_MESSAGES/gtk20.mo $(localedir)/$$lang/LC_MESSAGES/; done @OSX_APP_TRUE@ dylibbundler -of -b -x $(bindir)/xboard-bin -d $(datarootdir)/lib -p @executable_path/../Resources/lib @OSX_APP_TRUE@ dylibbundler -of -b -x $(datarootdir)/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib @OSX_APP_TRUE@ dylibbundler -of -b -x $(datarootdir)/lib/gtk-2.0/2.10.0/immodules/im-quartz.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib @OSX_APP_TRUE@ dylibbundler -of -b -x $(datarootdir)/lib/gtk-2.0/2.10.0/engines/libpixmap.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib @OSX_APP_TRUE@ find ./XBoard.app -name '*.a' -print0 | xargs -0 rm @OSX_APP_TRUE@ rm -r $(datarootdir)/lib/gtk-2.0/include @OSX_APP_TRUE@ rm -r $(datarootdir)/share/applications @OSX_APP_TRUE@ rm $(datarootdir)/share/info/dir @OSX_APP_TRUE@ rm -r $(datarootdir)/share/icons @OSX_APP_TRUE@ rm -r $(datarootdir)/share/mime @OSX_APP_TRUE@ mv $(datarootdir)/share/games/xboard/themes/conf $(datarootdir)/share/xboard/conf @OSX_APP_TRUE@ rm -r $(datarootdir)/share/xboard/pixmaps @OSX_APP_TRUE@ rm -r $(datarootdir)/share/games # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xboard-4.8.0/winboard/0000755000175000001440000000000012422466071011610 500000000000000xboard-4.8.0/winboard/winboard.dsw0000644000175000001440000000103512420374633014053 00000000000000Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "winboard"=".\winboard.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### xboard-4.8.0/winboard/makefile.gcc0000644000175000001440000001210412420374633013761 00000000000000# WinBoard makefile using gcc PROJ=winboard OBJS=backend.o book.o gamelist.o lists.o moves.o pgntags.o uci.o zippy.o\ parser.o wbres.o wclipbrd.o wedittags.o wengineoutput.o wevalgraph.o\ wgamelist.o whistory.o history.o winboard.o wlayout.o woptions.o wsnap.o\ wsockerr.o help.o wsettings.o wchat.o engineoutput.o evalgraph.o # make compiling less spammy compile = @echo "$1"; $(CC) $(CFLAGS) $1 # Debugging? USE_DEBUG=0 # JAWS support? JAWS=0 # set this to 1 unless you don't mind linking with cygwin1.dll USE_MINGW=1 # set up for cygwin or not ifeq ($(USE_MINGW),1) CFCYG = -mno-cygwin -DUSE_I64 LFCYG = -mno-cygwin -lmsvcrt endif CC = gcc FLEX = "flex.exe" # we need version 2.5.4 or later, cygwin's is 2.5.35 # "c:/mingw/mingw32/bin/flex.exe" HC="C:/Program Files/Help Workshop/hcrtf" -xn DEFS = -D_WIN32_IE=0x0300 -DWIN32 ifeq ($(JAWS),1) DEFS += -DJAWS endif WARN = -Wall -Wno-char-subscripts -Wno-parentheses ARCH = ifeq ($(USE_DEBUG),0) CFDEBUG = -DNDEBUG OPTS = -Os -frename-registers -funit-at-a-time -fstrict-aliasing -fstrength-reduce else CFDEBUG = -D_DEBUG -DDEBUG -g endif CF = -c $(WARN) -pipe $(CFDEBUG) $(DEFS) -I. -I.. CFLAGS = $(CF) $(ARCH) $(OPTS) $(CFCYG) LFLAGS = $(LFCYG) $(CFDEBUG) -fpic -s -mwindows -lwsock32 -lwinmm -lcomctl32 all: $(PROJ).exe clean: rm -f *~ $(PROJ).exe $(PROJ).err $(PROJ).rbj $(PROJ).RES $(PROJ).res\ *.sbr *.bsc *.o *.obj *.plg *.opt *.ncb *.debug *.bak *.gid *.GID\ *.map *.pdb *.tmp $(PROJ).ini # Update the help file if necessary $(PROJ).hlp : $(PROJ).rtf $(HC) $(PROJ).hpj && @cat $(PROJ).err && @mv $(PROJ).hlp tmp.hlp && @mv tmp.hlp $(PROJ).hlp || true # these moves to get the case right # Update the resource if necessary wbres.o: $(PROJ).rc $(PROJ).h resource.h config.h windres $(DEFS) --use-temp-file --include-dir .. $< -O coff -o $@ $(PROJ).exe: $(OBJS) $(PROJ).hlp $(CC) $(guiflags) $(OBJS) $(LFLAGS) -o $(PROJ).exe winboard.o: winboard.c config.h winboard.h ../common.h ../frontend.h ../backend.h \ ../moves.h defaults.h resource.h wclipbrd.h \ wsockerr.h woptions.h wsnap.h ../lists.h help.h ../args.h $(call compile, $<) backend.o: ../backend.c config.h ../common.h ../frontend.h ../backend.h \ ../parser.h ../moves.h ../zippy.h ../backendz.h ../gettext.h ../lists.h $(call compile, $<) parser.o: ../parser.c config.h ../common.h ../backend.h ../parser.h \ ../frontend.h ../moves.h ../lists.h $(call compile, $<) moves.o: ../moves.c config.h ../backend.h ../common.h ../parser.h \ ../moves.h ../lists.h $(call compile, $<) lists.o: ../lists.c config.h ../lists.h ../common.h $(call compile, $<) gamelist.o: ../gamelist.c config.h ../lists.h ../common.h ../frontend.h \ ../backend.h ../parser.h $(call compile, $<) wclipbrd.o: wclipbrd.c config.h ../common.h ../frontend.h ../backend.h \ winboard.h resource.h wclipbrd.h ../lists.h $(call compile, $<) wedittags.o: wedittags.c config.h ../common.h winboard.h resource.h ../frontend.h \ ../backend.h ../lists.h $(call compile, $<) wgamelist.o: wgamelist.c config.h ../common.h winboard.h resource.h ../frontend.h \ ../backend.h ../lists.h $(call compile, $<) woptions.o: woptions.c config.h ../common.h ../frontend.h ../backend.h ../lists.h \ defaults.h winboard.h resource.h $(call compile, $<) wengineoutput.o: wengineoutput.c ../engineoutput.h config.h ../common.h \ ../frontend.h ../backend.h ../lists.h winboard.h resource.h wsnap.h $(call compile, $<) engineoutput.o: ../engineoutput.c ../engineoutput.h config.h ../common.h \ ../frontend.h ../backend.h ../lists.h $(call compile, $<) whistory.o: whistory.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h winboard.h resource.h wsnap.h $(call compile, $<) history.o: ../history.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h $(call compile, $<) wevalgraph.o: wevalgraph.c ../evalgraph.h config.h ../common.h ../frontend.h \ ../backend.h ../lists.h winboard.h resource.h wsnap.h $(call compile, $<) evalgraph.o: ../evalgraph.c ../evalgraph.h config.h ../common.h ../frontend.h \ ../backend.h ../lists.h $(call compile, $<) wlayout.o: wlayout.c config.h ../common.h ../frontend.h winboard.h resource.h $(call compile, $<) wsockerr.o: wsockerr.c wsockerr.h $(call compile, $<) help.o: help.c help.h $(call compile, $<) wsnap.o: wsnap.c wsnap.h $(call compile, $<) pgntags.o: ../pgntags.c config.h ../common.h ../frontend.h ../backend.h \ ../parser.h ../lists.h $(call compile, $<) zippy.o: ../zippy.c config.h ../common.h ../zippy.h ../frontend.h \ ../backend.h ../backendz.h ../lists.h $(call compile, $<) book.o: ../book.c ../common.h ../backend.h ../lists.h $(call compile, $<) uci.o: ../uci.c ../common.h ../backend.h ../frontend.h ../lists.h $(call compile, $<) wsettings.o: wsettings.c ../common.h ../backend.h ../frontend.h ../lists.h $(call compile, $<) wchat.o: wchat.c winboard.h wsnap.h ../common.h ../backend.h ../frontend.h ../lists.h $(call compile, $<) %.o: %.c $(call compile, $<) xboard-4.8.0/winboard/wchat.c0000644000175000001440000003202012420374633012777 00000000000000/* * Chat window (PV) * * Author: H.G.Muller (August 2009) * * Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include #include #include #include "common.h" #include "frontend.h" #include "winboard.h" #include "backend.h" #include "wsnap.h" int chatCount; static int onTop; extern char chatPartner[MAX_CHAT][MSG_SIZ]; HANDLE chatHandle[MAX_CHAT]; static WNDPROC chatInputWindowProc; void SendToICS P((char *s)); void ChatPopUp P((char *s)); void ChatPopDown(); /* Imports from backend.c */ extern int opponentKibitzes; /* Imports from winboard.c */ VOID SaveInHistory(char *cmd); char *PrevInHistory(char *cmd); char *NextInHistory(); extern HWND ChatDialog; extern HINSTANCE hInst; extern HWND hwndConsole; extern char ics_handle[]; extern WindowPlacement wpChat[MAX_CHAT]; extern WindowPlacement wpConsole; extern BoardSize boardSize; /* Module variables */ #define H_MARGIN 5 #define V_MARGIN 5 // front end, although we might make GetWindowRect front end instead static int GetControlWidth( HWND hDlg, int id ) { RECT rc; GetWindowRect( GetDlgItem( hDlg, id ), &rc ); return rc.right - rc.left; } // front end? static int GetControlHeight( HWND hDlg, int id ) { RECT rc; GetWindowRect( GetDlgItem( hDlg, id ), &rc ); return rc.bottom - rc.top; } static void SetControlPos( HWND hDlg, int id, int x, int y, int width, int height ) { HWND hControl = GetDlgItem( hDlg, id ); SetWindowPos( hControl, HWND_TOP, x, y, width, height, SWP_NOZORDER ); } // Also here some of the size calculations should go to the back end, and their actual application to a front-end routine static void ResizeWindowControls( HWND hDlg ) { RECT rc; int clientWidth; int clientHeight; int maxControlWidth; int buttonWidth, buttonHeight; /* Initialize variables */ GetClientRect( hDlg, &rc ); clientWidth = rc.right - rc.left; clientHeight = rc.bottom - rc.top; maxControlWidth = clientWidth - 2*H_MARGIN; buttonWidth = GetControlWidth(hDlg, IDC_Send); buttonHeight = GetControlHeight(hDlg, IDC_Send); /* Resize controls */ SetControlPos( hDlg, IDC_Clear, maxControlWidth+H_MARGIN-2*buttonWidth-5, V_MARGIN, buttonWidth, buttonHeight ); SetControlPos( hDlg, IDC_Send, maxControlWidth+H_MARGIN-buttonWidth, V_MARGIN, buttonWidth, buttonHeight ); SetControlPos( hDlg, IDC_ChatMemo, H_MARGIN, 2*V_MARGIN+buttonHeight, maxControlWidth, clientHeight-3*V_MARGIN-2*buttonHeight ); SetControlPos( hDlg, OPT_ChatInput, H_MARGIN, clientHeight-V_MARGIN-buttonHeight, maxControlWidth, buttonHeight ); // InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo1), NULL, FALSE ); // InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo2), NULL, FALSE ); } // front end. Actual printing of PV lines into the output field static void InsertIntoMemo( HANDLE hDlg, char * text ) { HANDLE hMemo = GetDlgItem(hDlg, IDC_ChatMemo); SendMessage( hMemo, EM_SETSEL, 1000000, 1000000 ); SendMessage( hMemo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text ); SendMessage( hMemo, EM_SCROLLCARET, 0, 0); } LRESULT CALLBACK InterceptArrowKeys(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; char *p; CHARRANGE sel; switch (message) { case WM_KEYDOWN: // cloned from ConsoleInputSubClass() switch (wParam) { case VK_UP: GetWindowText(hwnd, buf, MSG_SIZ); p = PrevInHistory(buf); if (p != NULL) { SetWindowText(hwnd, p); sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); return 0; } break; case VK_DOWN: p = NextInHistory(); if (p != NULL) { SetWindowText(hwnd, p); sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); return 0; } break; } } return (*chatInputWindowProc)(hwnd, message, wParam, lParam); } // This seems pure front end LRESULT CALLBACK ChatProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; char buf[MSG_SIZ], mess[MSG_SIZ]; int partner = -1, i, x, y; static BOOL filterHasFocus[MAX_CHAT]; WORD wMask; HWND hMemo; for(i=0; ipartner), chatPartner[i]); } else EnableWindow( GetDlgItem(hDlg, IDC_Focus1+i-(i>partner)), 0 ); for(i=0; icode == EN_LINK) { ENLINK *pLink = (ENLINK*)lParam; if (pLink->msg == WM_LBUTTONUP) { TEXTRANGE tr; tr.chrg = pLink->chrg; tr.lpstrText = malloc(1+tr.chrg.cpMax-tr.chrg.cpMin); SendMessage( GetDlgItem(hDlg, IDC_ChatMemo), EM_GETTEXTRANGE, 0, (LPARAM)&tr); ShellExecute(NULL, "open", tr.lpstrText, NULL, NULL, SW_SHOW); free(tr.lpstrText); } } break; case WM_COMMAND: /* [AS] If is pressed while editing the filter, it's better to apply the filter rather than selecting the current game. */ if( LOWORD(wParam) == IDC_ChatPartner ) { switch( HIWORD(wParam) ) { case EN_SETFOCUS: filterHasFocus[partner] = TRUE; break; case EN_KILLFOCUS: filterHasFocus[partner] = FALSE; break; } } if( filterHasFocus[partner] && (LOWORD(wParam) == IDC_Send) ) { SetFocus(GetDlgItem(hDlg, OPT_ChatInput)); wParam = IDC_Change; } /* [AS] End command replacement */ switch (LOWORD(wParam)) { case IDCANCEL: /* let Esc key switch focus back to console */ SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleInput)); break; case IDC_Clear: SendMessage( GetDlgItem(hDlg, IDC_ChatMemo), WM_SETTEXT, 0, (LPARAM) "" ); break; case IDC_Change: GetDlgItemText(hDlg, IDC_ChatPartner, chatPartner[partner], MSG_SIZ); for(i=0; i %s\r\n", mess); // echo only tells to handle, not channel InsertIntoMemo(hDlg, buf); snprintf(buf, MSG_SIZ, "xtell %s %s\n", chatPartner[partner], mess); } else snprintf(buf, MSG_SIZ, "tell %s %s\n", chatPartner[partner], mess); } SendToICS(buf); break; case IDC_Focus1: case IDC_Focus2: case IDC_Focus3: case IDC_Focus4: i = LOWORD(wParam) - IDC_Focus1; if(i >= partner) i++; onTop = i; SetFocus(GetDlgItem(hDlg, IDC_Send)); if(chatHandle[i]) { int j; for(j=0; j # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 CFG=winboard - Win32 Jaws Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "winboard.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "winboard.mak" CFG="winboard - Win32 Jaws Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "winboard - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "winboard - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE "winboard - Win32 Jaws Debug" (based on "Win32 (x86) Application") !MESSAGE "winboard - Win32 Jaws Release" (based on "Win32 (x86) Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "winboard - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /Og /Os /Oy /Gf /I "." /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /D "YY_NO_UNISTD_H" /YX /Zl /FD /Gs /GA /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /i ".." /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrt.lib /nologo /subsystem:windows /pdb:none /machine:I386 !ELSEIF "$(CFG)" == "winboard - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /D "YY_NO_UNISTD_H" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /i ".." /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrtd.lib /nologo /subsystem:windows /map /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "winboard - Win32 Jaws Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "winboard___Win32_Jaws_Debug" # PROP BASE Intermediate_Dir "winboard___Win32_Jaws_Debug" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Jaws-Debug" # PROP Intermediate_Dir "Jaws-Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I ".." /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I ".." /D "_DEBUG" /D "JAWS" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /D "YY_NO_UNISTD_H" /YX /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /i ".." /d "_DEBUG" # ADD RSC /l 0x409 /i ".." /d "_DEBUG" /d "JAWS" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrtd.lib /nologo /subsystem:windows /map /debug /machine:I386 /pdbtype:sept # ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrtd.lib /nologo /subsystem:windows /map /debug /machine:I386 /pdbtype:sept !ELSEIF "$(CFG)" == "winboard - Win32 Jaws Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "winboard___Win32_Jaws_Release" # PROP BASE Intermediate_Dir "winboard___Win32_Jaws_Release" # PROP BASE Ignore_Export_Lib 0 # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Jaws-Release" # PROP Intermediate_Dir "Jaws-Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /Og /Os /Oy /Gf /I "." /I ".." /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /YX /Zl /FD /Gs /GA /c # ADD CPP /nologo /MD /W3 /GX /Og /Os /Oy /Gf /I "." /I ".." /D "NDEBUG" /D "JAWS" /D "WIN32" /D "_WINDOWS" /D _WIN32_IE=0x300 /D WINVER=0x400 /D _WIN32_WINDOWS=0x500 /D "YY_NO_UNISTD_H" /YX /Zl /FD /Gs /GA /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /i ".." /d "NDEBUG" # ADD RSC /l 0x409 /i ".." /d "NDEBUG" /d "JAWS" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrt.lib /nologo /subsystem:windows /pdb:none /machine:I386 # ADD LINK32 wsock32.lib comctl32.lib winmm.lib shell32.lib oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib msvcrt.lib /nologo /subsystem:windows /pdb:none /machine:I386 !ENDIF # Begin Target # Name "winboard - Win32 Release" # Name "winboard - Win32 Debug" # Name "winboard - Win32 Jaws Debug" # Name "winboard - Win32 Jaws Release" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=..\backend.c # End Source File # Begin Source File SOURCE=..\book.c # End Source File # Begin Source File SOURCE=..\engineoutput.c # End Source File # Begin Source File SOURCE=..\evalgraph.c # End Source File # Begin Source File SOURCE=..\gamelist.c # End Source File # Begin Source File SOURCE=.\help.c # End Source File # Begin Source File SOURCE=..\history.c # End Source File # Begin Source File SOURCE=..\lists.c # End Source File # Begin Source File SOURCE=..\moves.c # End Source File # Begin Source File SOURCE=..\parser.c # End Source File # Begin Source File SOURCE=..\pgntags.c # End Source File # Begin Source File SOURCE=..\uci.c # End Source File # Begin Source File SOURCE=.\wchat.c # End Source File # Begin Source File SOURCE=.\wclipbrd.c # End Source File # Begin Source File SOURCE=.\wedittags.c # End Source File # Begin Source File SOURCE=.\wengineoutput.c # End Source File # Begin Source File SOURCE=.\wevalgraph.c # End Source File # Begin Source File SOURCE=.\wgamelist.c # End Source File # Begin Source File SOURCE=.\whistory.c # End Source File # Begin Source File SOURCE=.\winboard.c !IF "$(CFG)" == "winboard - Win32 Release" !ELSEIF "$(CFG)" == "winboard - Win32 Debug" !ELSEIF "$(CFG)" == "winboard - Win32 Jaws Debug" # ADD CPP /D WINVER=0x500 # SUBTRACT CPP /D WINVER=0x400 !ELSEIF "$(CFG)" == "winboard - Win32 Jaws Release" # ADD CPP /D WINVER=0x500 # SUBTRACT CPP /D WINVER=0x400 !ENDIF # End Source File # Begin Source File SOURCE=.\winboard.rc # ADD BASE RSC /l 0x409 # ADD RSC /l 0x409 # End Source File # Begin Source File SOURCE=.\wlayout.c # End Source File # Begin Source File SOURCE=.\woptions.c # End Source File # Begin Source File SOURCE=.\wsettings.c # End Source File # Begin Source File SOURCE=.\wsnap.c # End Source File # Begin Source File SOURCE=.\wsockerr.c # End Source File # Begin Source File SOURCE=..\zippy.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project xboard-4.8.0/winboard/help.c0000644000175000001440000000540712420374633012632 00000000000000/* * help.h * * Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ /* Windows html help function to avoid having to link with the htmlhlp.lib */ #include #include #include "config.h" #include "help.h" FILE *debugFP; HWND WINAPI HtmlHelp( HWND hwnd, LPCSTR helpFile, UINT action, DWORD_PTR data ) { PROCESS_INFORMATION helpProcInfo; STARTUPINFO siStartInfo; char buf[100]; static int status = 0; FILE *f; if(status < 0) return NULL; if(!status) { f = fopen(helpFile, "r"); if(f == NULL) { status = -1; return NULL; } status = 1; fclose(f); } siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.lpReserved = NULL; siStartInfo.lpDesktop = NULL; siStartInfo.lpTitle = NULL; siStartInfo.dwFlags = STARTF_USESTDHANDLES; siStartInfo.cbReserved2 = 0; siStartInfo.lpReserved2 = NULL; siStartInfo.hStdInput = NULL; siStartInfo.hStdOutput = NULL; siStartInfo.hStdError = debugFP; snprintf(buf, sizeof(buf)/sizeof(buf[0]),"Hh.exe %s", helpFile); // ignore the other parameters; just start the viewer with the help file if( CreateProcess(NULL, buf, /* command line */ NULL, /* process security attributes */ NULL, /* primary thread security attrs */ FALSE, /* handles are inherited */ DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP, NULL, /* use parent's environment */ NULL, &siStartInfo, /* STARTUPINFO pointer */ &helpProcInfo) /* receives PROCESS_INFORMATION */ ) return hwnd; else return NULL; } //HWND WINAPI int MyHelp(HWND hwnd, LPSTR helpFile, UINT action, DWORD_PTR data) { static int status = 0; FILE *f; if(status < 0) return 0; if(!status) { f = fopen(helpFile, "r"); if(f == NULL) { status = -1; return 0; } status = 1; fclose(f); } return WinHelp(hwnd, helpFile, action, data); } xboard-4.8.0/winboard/makefile.ms0000644000175000001440000001413512420374633013652 00000000000000# Command line: nmake /f makefile.ms # Set VCVER=6 for MSVC 4.x through 7.0(aka 2002 aka .NET). # For MSVC 8 (aka 2005) set VCVER=8. Beyond that try 8 first. VCVER=6 # If using MSVC 6.0 or earlier, you will need the latest platform SDK supported. # Set SDK_INC to the include directory after you install it. # See: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm #SDK_INC="C:\Program Files\Microsoft SDK\include" PROJ = winboard OBJS=backend.obj book.obj gamelist.obj lists.obj moves.obj pgntags.obj uci.obj\ zippy.obj parser.obj wclipbrd.obj wedittags.obj wengineoutput.obj wevalgraph.obj\ wgamelist.obj whistory.obj history.obj winboard.obj wlayout.obj woptions.obj wsnap.obj\ wsockerr.obj help.obj wsettings.obj wchat.obj engineoutput.obj evalgraph.obj # Debugging? USE_DEBUG=0 # JAWS support? JAWS=0 CC = @cl RC = @rc LINK = link HC="c:\program files\help workshop\hcrtf.exe" -xn FLEX = "c:/mingw/mingw32/bin/flex.exe" DEFS = -D_WIN32_IE=0x300 -DWIN32 -DWINVER=0x0500 -D_WIN32_WINDOWS=0x500 -D YY_NO_UNISTD_H !if $(JAWS) == 1 DEFS = -DJAWS $(DEFS) !endif #WARN = -W3 ARCH = !if $(VCVER) >= 8 CLIB= libcmt LIBF= -MT DEPRECATE=-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_USE_32BIT_TIME_T !else VSO = -Gf -Og CLIB = msvcrt LIBF = -MD !endif !if $(USE_DEBUG) == 0 CFDEBUG = -DNDEBUG OPTS = -Os -Oy -Gs -GA -Zl $(VSO) $(LIBF) LFDEBUG = $(CLIB).lib !else CFDEBUG = -D_DEBUG -DDEBUG OPTS = -Od -Zi -Fd$(PROJ).pdb $(LIBF)d LFDEBUG = -DEBUG -PDB:$(PROJ).pdb -MAP:$(PROJ).map $(CLIB)d.lib !endif CF = $(CFDEBUG) $(DEFS) $(DEPRECATE) -I. -I.. !if DEFINED(SDK_INC) CF = $(CF) -I$(SDK_INC) !endif CFLAGS = -c -nologo $(WARN) $(CF) $(ARCH) $(OPTS) LFLAGS = -nologo $(LFDEBUG) all: $(PROJ).exe clean: -erase *~ $(PROJ).exe $(PROJ).err $(PROJ).rbj $(PROJ).res *.sbr *.bsc\ *.o *.obj *.plg *.opt *.ncb *.debug *.bak *.gid *.map *.pdb *.ini # Update the help file if necessary $(PROJ).hlp : $(PROJ).rtf $(HC) $(PROJ).hpj -@type $(PROJ).err -@rename $(PROJ).hlp $(PROJ).hlp.tmp -@rename $(PROJ).hlp.tmp $(PROJ).hlp # Update the resource if necessary $(PROJ).res: $(PROJ).rc $(PROJ).h resource.h config.h $(RC) $(CF) -r -fo $(PROJ).res $(PROJ).rc winboard.obj: winboard.c config.h winboard.h ../common.h ../frontend.h \ ../backend.h ../moves.h defaults.h resource.h wclipbrd.h \ wsockerr.h woptions.h wsnap.h ../lists.h help.h ../args.h $(CC) $(CFLAGS) winboard.c backend.obj: ../backend.c config.h ../common.h ../frontend.h ../backend.h \ ../parser.h ../moves.h ../zippy.h ../backendz.h ../gettext.h ../lists.h $(CC) $(CFLAGS) ../backend.c parser.obj: ../parser.c config.h ../common.h ../backend.h ../parser.h \ ../frontend.h ../moves.h ../lists.h $(CC) $(CFLAGS) ../parser.c book.obj: ../book.c ../common.h ../backend.h ../lists.h $(CC) $(CFLAGS) ../book.c gamelist.obj: ../gamelist.c config.h ../lists.h ../common.h ../frontend.h \ ../backend.h ../parser.h $(CC) $(CFLAGS) ../gamelist.c lists.obj: ../lists.c config.h ../lists.h ../common.h $(CC) $(CFLAGS) ../lists.c moves.obj: ../moves.c config.h ../backend.h ../common.h ../parser.h \ ../moves.h ../lists.h $(CC) $(CFLAGS) ../moves.c wclipbrd.obj: wclipbrd.c config.h ../common.h ../frontend.h ../backend.h \ winboard.h resource.h wclipbrd.h ../lists.h $(CC) $(CFLAGS) wclipbrd.c wedittags.obj: wedittags.c config.h ../common.h winboard.h resource.h ../frontend.h \ ../backend.h ../lists.h $(CC) $(CFLAGS) wedittags.c wgamelist.obj: wgamelist.c config.h ../common.h winboard.h resource.h ../frontend.h \ ../backend.h ../lists.h $(CC) $(CFLAGS) wgamelist.c woptions.obj: woptions.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h defaults.h winboard.h resource.h $(CC) $(CFLAGS) woptions.c wengineoutput.obj: wengineoutput.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h winboard.h resource.h wsnap.h $(CC) $(CFLAGS) wengineoutput.c engineoutput.obj: ../engineoutput.c ../engineoutput.h config.h ../common.h \ ../frontend.h ../backend.h ../lists.h $(CC) $(CFLAGS) ../engineoutput.c whistory.obj: whistory.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h winboard.h resource.h wsnap.h $(CC) $(CFLAGS) whistory.c history.obj: ../history.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h $(CC) $(CFLAGS) ../history.c wevalgraph.obj: wevalgraph.c config.h ../common.h ../frontend.h ../backend.h \ ../lists.h winboard.h resource.h wsnap.h $(CC) $(CFLAGS) wevalgraph.c evalgraph.obj: ../evalgraph.c ../evalgraph.h config.h ../common.h ../frontend.h \ ../backend.h ../lists.h $(CC) $(CFLAGS) ../evalgraph.c wlayout.obj: wlayout.c config.h ../common.h ../frontend.h winboard.h resource.h $(CC) $(CFLAGS) wlayout.c wsockerr.obj: wsockerr.c wsockerr.h $(CC) $(CFLAGS) wsockerr.c help.obj: help.c help.h $(CC) $(CFLAGS) help.c wsnap.obj: wsnap.c wsnap.h $(CC) $(CFLAGS) wsnap.c pgntags.obj: ../pgntags.c config.h ../common.h ../frontend.h ../backend.h \ ../parser.h ../lists.h $(CC) $(CFLAGS) ../pgntags.c zippy.obj: ../zippy.c config.h ../common.h ../zippy.h ../frontend.h \ ../backend.h ../backendz.h ../lists.h $(CC) $(CFLAGS) ../zippy.c uci.obj: ../uci.c ../common.h ../backend.h ../frontend.h ../lists.h $(CC) $(CFLAGS) ../uci.c wsettings.obj: wsettings.c ../common.h ../backend.h ../frontend.h ../lists.h $(CC) $(CFLAGS) wsettings.c wchat.obj: wchat.c winboard.h wsnap.h ../common.h ../backend.h ../frontend.h ../lists.h $(CC) $(CFLAGS) wchat.c $(PROJ).exe: $(OBJS) $(PROJ).res $(PROJ).hlp $(LINK) $(LFLAGS) $(OBJS) wsock32.lib comctl32.lib winmm.lib shell32.lib\ oldnames.lib kernel32.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib\ $(PROJ).res -out:$(PROJ).exe .c.obj: $(CC) $(CFLAGS) $< xboard-4.8.0/winboard/help.h0000644000175000001440000000045512420374633012635 00000000000000#ifdef VISTA #include "htmlhelp.h" #else #ifdef _MSC_VER #if _MSC_VER <= 1200 #define DWORD_PTR DWORD #endif #endif HWND WINAPI HtmlHelp( HWND hwnd, LPCSTR helpFile, UINT action, DWORD_PTR data ); #endif int MyHelp(HWND hwnd, LPSTR helpFile, UINT action, DWORD_PTR data); xboard-4.8.0/winboard/internationalize0000644000175000001440000000022512420374633015031 00000000000000ed $1 /* required for all Windows applications */ #include #include #include /* [AS] Requires NT 4.0 or Win95 */ #include #include "common.h" #include "frontend.h" #include "winboard.h" #include "backend.h" #include "woptions.h" #include "defaults.h" #include #if __GNUC__ #include #include #endif #define _(s) T_(s) #define N_(s) s /* Imports from winboard.c */ extern MyFont *font[NUM_SIZES][NUM_FONTS]; extern HINSTANCE hInst; /* current instance */ extern HWND hwndMain; /* root window*/ extern BOOLEAN alwaysOnTop; extern RECT boardRect; extern COLORREF lightSquareColor, darkSquareColor, whitePieceColor, blackPieceColor, highlightSquareColor, premoveHighlightColor; extern HPALETTE hPal; extern BoardSize boardSize; extern COLORREF consoleBackgroundColor; extern MyColorizeAttribs colorizeAttribs[]; /* do I need the size? */ extern MyTextAttribs textAttribs[]; extern MySound sounds[]; extern ColorClass currentColorClass; extern HWND hwndConsole; extern char *defaultTextAttribs[]; extern HWND commentDialog; extern HWND moveHistoryDialog; extern HWND engineOutputDialog; extern char installDir[]; extern HWND hCommPort; /* currently open comm port */ extern DCB dcb; extern BOOLEAN chessProgram; extern int startedFromPositionFile; /* [HGM] loadPos */ extern int searchTime; /* types */ typedef struct { char *label; unsigned value; } ComboData; typedef struct { char *label; char *name; } SoundComboData; /* module prototypes */ LRESULT CALLBACK GeneralOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK BoardOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK NewVariant(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK IcsOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK FontOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK CommPortOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK LoadOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK SaveOptions(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK TimeControl(HWND, UINT, WPARAM, LPARAM); VOID ChangeBoardSize(BoardSize newSize); VOID PaintSampleSquare( HWND hwnd, int ctrlid, COLORREF squareColor, COLORREF pieceColor, COLORREF squareOutlineColor, COLORREF pieceDetailColor, BOOL isWhitePiece, BOOL isMono, HBITMAP pieces[3] ); VOID PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color); VOID SetBoardOptionEnables(HWND hDlg); BoardSize BoardOptionsWhichRadio(HWND hDlg); BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font); VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca); LRESULT CALLBACK ColorizeTextDialog(HWND , UINT, WPARAM, LPARAM); VOID ColorizeTextPopup(HWND hwnd, ColorClass cc); VOID SetIcsOptionEnables(HWND hDlg); VOID SetSampleFontText(HWND hwnd, int id, const MyFont *mf); VOID CopyFont(MyFont *dest, const MyFont *src); void InitSoundComboData(SoundComboData *scd); void ResetSoundComboData(SoundComboData *scd); void InitSoundCombo(HWND hwndCombo, SoundComboData *scd); int SoundDialogWhichRadio(HWND hDlg); VOID SoundDialogSetEnables(HWND hDlg, int radio); char * SoundDialogGetName(HWND hDlg, int radio); void DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name); VOID ParseCommSettings(char *arg, DCB *dcb); VOID PrintCommSettings(FILE *f, char *name, DCB *dcb); void InitCombo(HANDLE hwndCombo, ComboData *cd); void SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value); VOID SetLoadOptionEnables(HWND hDlg); VOID SetSaveOptionEnables(HWND hDlg); VOID SetTimeControlEnables(HWND hDlg); char * InterpretFileName(char *buf, char *homeDir) { // [HGM] file name relative to homeDir. (Taken out of SafeOptionsDialog, because it is generally useful) char *result = NULL; if ((isalpha(buf[0]) && buf[1] == ':') || (buf[0] == '\\' && buf[1] == '\\')) { return strdup(buf); } else { char buf2[MSG_SIZ], buf3[MSG_SIZ]; char *dummy; GetCurrentDirectory(MSG_SIZ, buf3); SetCurrentDirectory(homeDir); if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) { result = strdup(buf2); } else { result = strdup(buf); } SetCurrentDirectory(buf3); } return result; } /*---------------------------------------------------------------------------*\ * * General Options Dialog functions * \*---------------------------------------------------------------------------*/ LRESULT CALLBACK GeneralOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static Boolean oldShowCoords; static Boolean oldBlindfold; static Boolean oldShowButtonBar; static Boolean oldAutoLogo; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ oldShowCoords = appData.showCoords; oldBlindfold = appData.blindfold; oldShowButtonBar = appData.showButtonBar; oldAutoLogo = appData.autoLogo; /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_GeneralOptions); /* Initialize the dialog items */ #define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y)) CHECK_BOX(OPT_AlwaysOnTop, alwaysOnTop); CHECK_BOX(OPT_AlwaysQueen, appData.alwaysPromoteToQueen); CHECK_BOX(OPT_AnimateDragging, appData.animateDragging); CHECK_BOX(OPT_AnimateMoving, appData.animate); CHECK_BOX(OPT_AutoFlag, appData.autoCallFlag); CHECK_BOX(OPT_AutoFlipView, appData.autoFlipView); CHECK_BOX(OPT_AutoRaiseBoard, appData.autoRaiseBoard); CHECK_BOX(OPT_Blindfold, appData.blindfold); CHECK_BOX(OPT_HighlightDragging, appData.highlightDragging); CHECK_BOX(OPT_HighlightLastMove, appData.highlightLastMove); CHECK_BOX(OPT_PeriodicUpdates, appData.periodicUpdates); CHECK_BOX(OPT_PonderNextMove, appData.ponderNextMove); CHECK_BOX(OPT_PopupExitMessage, appData.popupExitMessage); CHECK_BOX(OPT_PopupMoveErrors, appData.popupMoveErrors); CHECK_BOX(OPT_ShowButtonBar, appData.showButtonBar); CHECK_BOX(OPT_ShowCoordinates, appData.showCoords); CHECK_BOX(OPT_ShowThinking, appData.showThinking); CHECK_BOX(OPT_TestLegality, appData.testLegality); CHECK_BOX(OPT_HideThinkFromHuman, appData.hideThinkingFromHuman); CHECK_BOX(OPT_SaveExtPGN, appData.saveExtendedInfoInPGN); CHECK_BOX(OPT_ExtraInfoInMoveHistory, appData.showEvalInMoveHistory); CHECK_BOX(OPT_HighlightMoveArrow, appData.highlightMoveWithArrow); CHECK_BOX(OPT_AutoLogo, appData.autoLogo); // [HGM] logo CHECK_BOX(OPT_SmartMove, appData.oneClick); // [HGM] one-click CHECK_BOX(OPT_AutoTags, appData.autoDisplayTags); // [HGM] CHECK_BOX(OPT_AutoComment, appData.autoDisplayComment); // [HGM] CHECK_BOX(OPT_Headers, appData.headers); // [HGM] CHECK_BOX(OPT_Variations, appData.variations); // [HGM] CHECK_BOX(OPT_AutoExtend, appData.autoExtend); // [HGM] #undef CHECK_BOX EnableWindow(GetDlgItem(hDlg, OPT_AutoFlag), appData.icsActive || !appData.noChessProgram); EnableWindow(GetDlgItem(hDlg, OPT_AutoFlipView), appData.icsActive || !appData.noChessProgram); EnableWindow(GetDlgItem(hDlg, OPT_PonderNextMove), !appData.noChessProgram); EnableWindow(GetDlgItem(hDlg, OPT_PeriodicUpdates), !appData.noChessProgram && !appData.icsActive); EnableWindow(GetDlgItem(hDlg, OPT_ShowThinking), !appData.noChessProgram); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ #define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x)) alwaysOnTop = IS_CHECKED(OPT_AlwaysOnTop); appData.alwaysPromoteToQueen = IS_CHECKED(OPT_AlwaysQueen); appData.animateDragging = IS_CHECKED(OPT_AnimateDragging); appData.animate = IS_CHECKED(OPT_AnimateMoving); appData.autoCallFlag = IS_CHECKED(OPT_AutoFlag); appData.autoFlipView = IS_CHECKED(OPT_AutoFlipView); appData.autoRaiseBoard = IS_CHECKED(OPT_AutoRaiseBoard); appData.blindfold = IS_CHECKED(OPT_Blindfold); appData.highlightDragging = IS_CHECKED(OPT_HighlightDragging); appData.highlightLastMove = IS_CHECKED(OPT_HighlightLastMove); PeriodicUpdatesEvent( IS_CHECKED(OPT_PeriodicUpdates)); PonderNextMoveEvent( IS_CHECKED(OPT_PonderNextMove)); appData.popupExitMessage = IS_CHECKED(OPT_PopupExitMessage); appData.popupMoveErrors = IS_CHECKED(OPT_PopupMoveErrors); appData.showButtonBar = IS_CHECKED(OPT_ShowButtonBar); appData.showCoords = IS_CHECKED(OPT_ShowCoordinates); // [HGM] thinking: next three moved up appData.saveExtendedInfoInPGN= IS_CHECKED(OPT_SaveExtPGN); appData.hideThinkingFromHuman= IS_CHECKED(OPT_HideThinkFromHuman); appData.showEvalInMoveHistory= IS_CHECKED(OPT_ExtraInfoInMoveHistory); appData.showThinking = IS_CHECKED(OPT_ShowThinking); ShowThinkingEvent(); // [HGM] thinking: tests four options appData.testLegality = IS_CHECKED(OPT_TestLegality); appData.highlightMoveWithArrow=IS_CHECKED(OPT_HighlightMoveArrow); appData.autoLogo =IS_CHECKED(OPT_AutoLogo); // [HGM] logo appData.oneClick =IS_CHECKED(OPT_SmartMove); // [HGM] one-click appData.autoDisplayTags =IS_CHECKED(OPT_AutoTags); // [HGM] appData.autoDisplayComment =IS_CHECKED(OPT_AutoComment); // [HGM] appData.headers =IS_CHECKED(OPT_Headers); // [HGM] appData.variations =IS_CHECKED(OPT_Variations); // [HGM] appData.autoExtend =IS_CHECKED(OPT_AutoExtend); // [HGM] #undef IS_CHECKED SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); #if AOT_CONSOLE if (hwndConsole) { SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } #endif if (!appData.highlightLastMove) { ClearHighlights(); DrawPosition(FALSE, NULL); } /* * for some reason the redraw seems smoother when we invalidate * the board rect after the call to EndDialog() */ EndDialog(hDlg, TRUE); if (oldAutoLogo != appData.autoLogo) { // [HGM] logo: remove any logos when we switch autologo off if(oldAutoLogo) first.programLogo = second.programLogo = NULL; InitDrawingSizes(boardSize, 0); } else if (oldShowButtonBar != appData.showButtonBar) { InitDrawingSizes(boardSize, 0); } else if ((oldShowCoords != appData.showCoords) || (oldBlindfold != appData.blindfold)) { InvalidateRect(hwndMain, &boardRect, FALSE); } return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; } break; } return FALSE; } VOID GeneralOptionsPopup(HWND hwnd) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)GeneralOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_GeneralOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Board Options Dialog functions * \*---------------------------------------------------------------------------*/ const int SAMPLE_SQ_SIZE = 54; VOID ChangeBoardSize(BoardSize newSize) { if (newSize != boardSize) { boardSize = newSize; InitDrawingSizes(boardSize, 0); } } VOID PaintSampleSquare( HWND hwnd, int ctrlid, COLORREF squareColor, COLORREF pieceColor, COLORREF squareOutlineColor, COLORREF pieceDetailColor, BOOL isWhitePiece, BOOL isMono, HBITMAP pieces[3] ) { HBRUSH brushSquare; HBRUSH brushSquareOutline; HBRUSH brushPiece; HBRUSH brushPieceDetail; HBRUSH oldBrushPiece = NULL; HBRUSH oldBrushSquare; HBITMAP oldBitmapMem; HBITMAP oldBitmapTemp; HBITMAP bufferBitmap; RECT rect; HDC hdcScreen, hdcMem, hdcTemp; HPEN pen, oldPen; HWND hCtrl = GetDlgItem(hwnd, ctrlid); int x, y; const int SOLID = 0; const int WHITE = 1; const int OUTLINE = 2; const int BORDER = 4; InvalidateRect(hCtrl, NULL, TRUE); UpdateWindow(hCtrl); GetClientRect(hCtrl, &rect); x = rect.left + (BORDER / 2); y = rect.top + (BORDER / 2); hdcScreen = GetDC(hCtrl); hdcMem = CreateCompatibleDC(hdcScreen); hdcTemp = CreateCompatibleDC(hdcScreen); bufferBitmap = CreateCompatibleBitmap(hdcScreen, rect.right-rect.left+1, rect.bottom-rect.top+1); oldBitmapMem = SelectObject(hdcMem, bufferBitmap); if (!isMono) { SelectPalette(hdcMem, hPal, FALSE); } brushSquare = CreateSolidBrush(squareColor); brushSquareOutline = CreateSolidBrush(squareOutlineColor); brushPiece = CreateSolidBrush(pieceColor); brushPieceDetail = CreateSolidBrush(pieceDetailColor); /* * first draw the rectangle */ pen = CreatePen(PS_SOLID, BORDER, squareOutlineColor); oldPen = (HPEN) SelectObject(hdcMem, pen); oldBrushSquare = (HBRUSH)SelectObject(hdcMem, brushSquare); Rectangle(hdcMem, rect.left, rect.top, rect.right, rect.bottom); /* * now draw the piece */ if (isMono) { oldBitmapTemp = SelectObject(hdcTemp, pieces[OUTLINE]); BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0, isWhitePiece ? SRCCOPY : NOTSRCCOPY); SelectObject(hdcTemp, oldBitmapTemp); } else { if (isWhitePiece) { oldBitmapTemp = SelectObject(hdcTemp, pieces[WHITE]); oldBrushPiece = SelectObject(hdcMem, brushPiece); BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0, 0x00B8074A); /* Use black for outline of white pieces */ SelectObject(hdcTemp, pieces[OUTLINE]); BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0, SRCAND); } else { /* Use square color for details of black pieces */ oldBitmapTemp = SelectObject(hdcTemp, pieces[SOLID]); oldBrushPiece = SelectObject(hdcMem, brushPiece); BitBlt(hdcMem, x, y, SAMPLE_SQ_SIZE, SAMPLE_SQ_SIZE, hdcTemp, 0, 0, 0x00B8074A); } SelectObject(hdcMem, oldBrushPiece); SelectObject(hdcTemp, oldBitmapTemp); } /* * copy the memory dc to the screen */ SelectObject(hdcMem, bufferBitmap); BitBlt(hdcScreen, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hdcMem, rect.left, rect.top, SRCCOPY); SelectObject(hdcMem, oldBitmapMem); /* * clean up */ SelectObject(hdcMem, oldBrushSquare); SelectObject(hdcMem, oldPen); DeleteObject(brushPiece); DeleteObject(brushPieceDetail); DeleteObject(brushSquare); DeleteObject(brushSquareOutline); DeleteObject(pen); DeleteDC(hdcTemp); DeleteDC(hdcMem); ReleaseDC(hCtrl, hdcScreen); } VOID PaintColorBlock(HWND hwnd, int ctrlid, COLORREF color) { HDC hdc; HBRUSH brush, oldBrush; RECT rect; HWND hCtrl = GetDlgItem(hwnd, ctrlid); hdc = GetDC(hCtrl); InvalidateRect(hCtrl, NULL, TRUE); UpdateWindow(hCtrl); GetClientRect(hCtrl, &rect); brush = CreateSolidBrush(color); oldBrush = (HBRUSH)SelectObject(hdc, brush); Rectangle(hdc, rect.left, rect.top, rect.right, rect.bottom); SelectObject(hdc, oldBrush); DeleteObject(brush); ReleaseDC(hCtrl, hdc); } VOID SetBoardOptionEnables(HWND hDlg) { if (IsDlgButtonChecked(hDlg, OPT_Monochrome)) { ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_HIDE); ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_HIDE); ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_HIDE); ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_HIDE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), FALSE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), FALSE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), FALSE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), FALSE); } else { ShowWindow(GetDlgItem(hDlg, OPT_LightSquareColor), SW_SHOW); ShowWindow(GetDlgItem(hDlg, OPT_DarkSquareColor), SW_SHOW); ShowWindow(GetDlgItem(hDlg, OPT_WhitePieceColor), SW_SHOW); ShowWindow(GetDlgItem(hDlg, OPT_BlackPieceColor), SW_SHOW); EnableWindow(GetDlgItem(hDlg, OPT_ChooseLightSquareColor), TRUE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseDarkSquareColor), TRUE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseWhitePieceColor), TRUE); EnableWindow(GetDlgItem(hDlg, OPT_ChooseBlackPieceColor), TRUE); } } BoardSize BoardOptionsWhichRadio(HWND hDlg) { return (IsDlgButtonChecked(hDlg, OPT_SizeTiny) ? SizeTiny : (IsDlgButtonChecked(hDlg, OPT_SizeTeeny) ? SizeTeeny : (IsDlgButtonChecked(hDlg, OPT_SizeDinky) ? SizeDinky : (IsDlgButtonChecked(hDlg, OPT_SizePetite) ? SizePetite : (IsDlgButtonChecked(hDlg, OPT_SizeSlim) ? SizeSlim : (IsDlgButtonChecked(hDlg, OPT_SizeSmall) ? SizeSmall : (IsDlgButtonChecked(hDlg, OPT_SizeMediocre) ? SizeMediocre : (IsDlgButtonChecked(hDlg, OPT_SizeMiddling) ? SizeMiddling : (IsDlgButtonChecked(hDlg, OPT_SizeAverage) ? SizeAverage : (IsDlgButtonChecked(hDlg, OPT_SizeModerate) ? SizeModerate : (IsDlgButtonChecked(hDlg, OPT_SizeMedium) ? SizeMedium : (IsDlgButtonChecked(hDlg, OPT_SizeBulky) ? SizeBulky : (IsDlgButtonChecked(hDlg, OPT_SizeLarge) ? SizeLarge : (IsDlgButtonChecked(hDlg, OPT_SizeBig) ? SizeBig : (IsDlgButtonChecked(hDlg, OPT_SizeHuge) ? SizeHuge : (IsDlgButtonChecked(hDlg, OPT_SizeGiant) ? SizeGiant : (IsDlgButtonChecked(hDlg, OPT_SizeColossal) ? SizeColossal : SizeTitanic ))))))))))))))))); } LRESULT CALLBACK BoardOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static Boolean mono, white, flip, fonts, bitmaps, grid; static BoardSize size; static COLORREF lsc, dsc, wpc, bpc, hsc, phc; static HBITMAP pieces[3]; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_BoardOptions); /* Initialize the dialog items */ switch (boardSize) { case SizeTiny: CheckDlgButton(hDlg, OPT_SizeTiny, TRUE); break; case SizeTeeny: CheckDlgButton(hDlg, OPT_SizeTeeny, TRUE); break; case SizeDinky: CheckDlgButton(hDlg, OPT_SizeDinky, TRUE); break; case SizePetite: CheckDlgButton(hDlg, OPT_SizePetite, TRUE); break; case SizeSlim: CheckDlgButton(hDlg, OPT_SizeSlim, TRUE); break; case SizeSmall: CheckDlgButton(hDlg, OPT_SizeSmall, TRUE); break; case SizeMediocre: CheckDlgButton(hDlg, OPT_SizeMediocre, TRUE); break; case SizeMiddling: CheckDlgButton(hDlg, OPT_SizeMiddling, TRUE); break; case SizeAverage: CheckDlgButton(hDlg, OPT_SizeAverage, TRUE); break; case SizeModerate: CheckDlgButton(hDlg, OPT_SizeModerate, TRUE); break; case SizeMedium: CheckDlgButton(hDlg, OPT_SizeMedium, TRUE); break; case SizeBulky: CheckDlgButton(hDlg, OPT_SizeBulky, TRUE); break; case SizeLarge: CheckDlgButton(hDlg, OPT_SizeLarge, TRUE); break; case SizeBig: CheckDlgButton(hDlg, OPT_SizeBig, TRUE); break; case SizeHuge: CheckDlgButton(hDlg, OPT_SizeHuge, TRUE); break; case SizeGiant: CheckDlgButton(hDlg, OPT_SizeGiant, TRUE); break; case SizeColossal: CheckDlgButton(hDlg, OPT_SizeColossal, TRUE); break; case SizeTitanic: CheckDlgButton(hDlg, OPT_SizeTitanic, TRUE); default: ; // should not happen, but suppresses warning on pedantic compilers } if (appData.monoMode) CheckDlgButton(hDlg, OPT_Monochrome, TRUE); if (appData.allWhite) CheckDlgButton(hDlg, OPT_AllWhite, TRUE); if (appData.upsideDown) CheckDlgButton(hDlg, OPT_UpsideDown, TRUE); if (appData.useBitmaps) CheckDlgButton(hDlg, OPT_Bitmaps, TRUE); if (appData.useFont) CheckDlgButton(hDlg, OPT_PieceFont, TRUE); if (appData.overrideLineGap >= 0) CheckDlgButton(hDlg, OPT_Grid, TRUE); pieces[0] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "s"); pieces[1] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "w"); pieces[2] = DoLoadBitmap(hInst, "n", SAMPLE_SQ_SIZE, "o"); lsc = lightSquareColor; dsc = darkSquareColor; fonts = appData.useFont; wpc = fonts ? appData.fontBackColorWhite : whitePieceColor; bpc = fonts ? appData.fontForeColorBlack : blackPieceColor; hsc = highlightSquareColor; phc = premoveHighlightColor; mono = appData.monoMode; white= appData.allWhite; flip = appData.upsideDown; size = boardSize; bitmaps = appData.useBitmaps; grid = appData.overrideLineGap >= 0; SetBoardOptionEnables(hDlg); return TRUE; case WM_PAINT: PaintColorBlock(hDlg, OPT_LightSquareColor, lsc); PaintColorBlock(hDlg, OPT_DarkSquareColor, dsc); PaintColorBlock(hDlg, OPT_WhitePieceColor, wpc); PaintColorBlock(hDlg, OPT_BlackPieceColor, bpc); PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc); PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc); PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc, TRUE, mono, pieces); PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc, FALSE, mono, pieces); return FALSE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* * if we call EndDialog() after the call to ChangeBoardSize(), * then ChangeBoardSize() does not take effect, although the new * boardSize is saved. Go figure... */ EndDialog(hDlg, TRUE); size = BoardOptionsWhichRadio(hDlg); /* * did any settings change? */ if (size != boardSize) { ChangeBoardSize(size); } if (bitmaps && !appData.useBitmaps) InitTextures(); if ((mono != appData.monoMode) || (lsc != lightSquareColor) || (dsc != darkSquareColor) || (wpc != fonts ? appData.fontBackColorWhite : whitePieceColor) || (bpc != fonts ? appData.fontForeColorBlack : blackPieceColor) || (hsc != highlightSquareColor) || (flip != appData.upsideDown) || (white != appData.allWhite) || (fonts != appData.useFont) || (bitmaps != appData.useBitmaps) || (grid != appData.overrideLineGap >= 0) || (phc != premoveHighlightColor)) { lightSquareColor = lsc; darkSquareColor = dsc; if(fonts) { appData.fontBackColorWhite = wpc; appData.fontForeColorBlack = bpc; } else { whitePieceColor = wpc; blackPieceColor = bpc; } highlightSquareColor = hsc; premoveHighlightColor = phc; appData.monoMode = mono; appData.allWhite = white; appData.upsideDown = flip; appData.useFont = fonts; appData.useBitmaps = bitmaps; if(grid != appData.overrideLineGap >= 0) appData.overrideLineGap = grid - 1; InitDrawingColors(); InitDrawingSizes(boardSize, 0); InvalidateRect(hwndMain, &boardRect, FALSE); } DeleteObject(pieces[0]); DeleteObject(pieces[1]); DeleteObject(pieces[2]); return TRUE; case IDCANCEL: DeleteObject(pieces[0]); DeleteObject(pieces[1]); DeleteObject(pieces[2]); EndDialog(hDlg, FALSE); return TRUE; case OPT_ChooseLightSquareColor: if (ChangeColor(hDlg, &lsc)) PaintColorBlock(hDlg, OPT_LightSquareColor, lsc); PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc, TRUE, mono, pieces); break; case OPT_ChooseDarkSquareColor: if (ChangeColor(hDlg, &dsc)) PaintColorBlock(hDlg, OPT_DarkSquareColor, dsc); PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc, FALSE, mono, pieces); break; case OPT_ChooseWhitePieceColor: if (ChangeColor(hDlg, &wpc)) PaintColorBlock(hDlg, OPT_WhitePieceColor, wpc); PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc, TRUE, mono, pieces); break; case OPT_ChooseBlackPieceColor: if (ChangeColor(hDlg, &bpc)) PaintColorBlock(hDlg, OPT_BlackPieceColor, bpc); PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc, FALSE, mono, pieces); break; case OPT_ChooseHighlightSquareColor: if (ChangeColor(hDlg, &hsc)) PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc); PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc, TRUE, mono, pieces); break; case OPT_ChoosePremoveHighlightColor: if (ChangeColor(hDlg, &phc)) PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc); PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc, FALSE, mono, pieces); break; case OPT_DefaultBoardColors: lsc = ParseColorName(LIGHT_SQUARE_COLOR); dsc = ParseColorName(DARK_SQUARE_COLOR); wpc = ParseColorName(WHITE_PIECE_COLOR); bpc = ParseColorName(BLACK_PIECE_COLOR); hsc = ParseColorName(HIGHLIGHT_SQUARE_COLOR); phc = ParseColorName(PREMOVE_HIGHLIGHT_COLOR); mono = FALSE; white= FALSE; flip = FALSE; CheckDlgButton(hDlg, OPT_Monochrome, FALSE); CheckDlgButton(hDlg, OPT_AllWhite, FALSE); CheckDlgButton(hDlg, OPT_UpsideDown, FALSE); PaintColorBlock(hDlg, OPT_LightSquareColor, lsc); PaintColorBlock(hDlg, OPT_DarkSquareColor, dsc); PaintColorBlock(hDlg, OPT_WhitePieceColor, wpc); PaintColorBlock(hDlg, OPT_BlackPieceColor, bpc); PaintColorBlock(hDlg, OPT_HighlightSquareColor, hsc); PaintColorBlock(hDlg, OPT_PremoveHighlightColor, phc); SetBoardOptionEnables(hDlg); PaintSampleSquare(hDlg, OPT_SampleLightSquare, lsc, wpc, hsc, bpc, TRUE, mono, pieces); PaintSampleSquare(hDlg, OPT_SampleDarkSquare, dsc, bpc, phc, wpc, FALSE, mono, pieces); break; case OPT_Monochrome: mono = !mono; SetBoardOptionEnables(hDlg); break; case OPT_AllWhite: white = !white; break; case OPT_UpsideDown: flip = !flip; break; case OPT_Bitmaps: bitmaps = !bitmaps; break; case OPT_PieceFont: fonts = !fonts; break; case OPT_Grid: grid = !grid; break; } break; } return FALSE; } VOID BoardOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)BoardOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_BoardOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } int radioButton[] = { OPT_VariantNormal, -1, // Loadable OPT_VariantWildcastle, OPT_VariantNocastle, OPT_VariantFRC, OPT_VariantBughouse, OPT_VariantCrazyhouse, OPT_VariantLosers, OPT_VariantSuicide, OPT_VariantGiveaway, OPT_VariantTwoKings, -1, //Kriegspiel OPT_VariantAtomic, OPT_Variant3Check, OPT_VariantShatranj, -1, -1, -1, -1, -1, -1, -1, -1, OPT_VariantShogi, -1, // Chu OPT_VariantCourier, OPT_VariantGothic, OPT_VariantCapablanca, OPT_VariantKnightmate, OPT_VariantFairy, OPT_VariantCylinder, OPT_VariantFalcon, OPT_VariantCRC, OPT_VariantBerolina, OPT_VariantJanus, OPT_VariantSuper, OPT_VariantGreat, -1, // Twilight, OPT_VariantMakruk, OPT_VariantSChess, OPT_VariantGrand, OPT_VariantSpartan, // Spartan OPT_VariantXiangqi, OPT_VariantASEAN, OPT_VariantLion, -2 // sentinel }; VariantClass VariantWhichRadio(HWND hDlg) { int i=0, j; *engineVariant = NULLCHAR; while((j = radioButton[i++]) != -2) { if(j == -1) continue; // no menu button if(IsDlgButtonChecked(hDlg, j) && (appData.noChessProgram || strstr(first.variants, VariantName(i-1)))) return (VariantClass) i-1; } for(i=0; i<9; i++) { // check for engine-defined variants if(IsDlgButtonChecked(hDlg, OPT_EngineVariant+i) ) { GetDlgItemText(hDlg, OPT_EngineVariant+i, engineVariant, MSG_SIZ); // remember name, so we can resolve it later return VariantUnknown; } } return gameInfo.variant; // If no button checked, keep old } void VariantShowRadio(HWND hDlg) { char c = *engineVariant; int i=0, j; CheckDlgButton(hDlg, radioButton[gameInfo.variant], TRUE); *engineVariant = NULLCHAR; // [HGM] kludge to prevent VariantName will always return engineVariant while((j = radioButton[i++]) != -2) { if(j == -1) continue; // no menu button EnableWindow(GetDlgItem(hDlg, j), appData.noChessProgram || strstr(first.variants, VariantName(i-1))); } *engineVariant = c; for(i=0; i<9; i++) { // initialize engine-defined variants char *v = EngineDefinedVariant(&first, i); // get name of #i if(v) { // there is such a variant EnableWindow(GetDlgItem(hDlg, OPT_EngineVariant+i), TRUE); // and enable the button SetDlgItemText(hDlg, OPT_EngineVariant+i, v); // put its name on button } else EnableWindow(GetDlgItem(hDlg, OPT_EngineVariant+i), FALSE); // no such variant; disable button } } LRESULT CALLBACK NewVariantDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static VariantClass v; static int n1_ok, n2_ok, n3_ok; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_NewVariant); /* Initialize the dialog items */ VariantShowRadio(hDlg); SetDlgItemInt( hDlg, IDC_Files, -1, TRUE ); SendDlgItemMessage( hDlg, IDC_Files, EM_SETSEL, 0, -1 ); SetDlgItemInt( hDlg, IDC_Ranks, -1, TRUE ); SendDlgItemMessage( hDlg, IDC_Ranks, EM_SETSEL, 0, -1 ); SetDlgItemInt( hDlg, IDC_Holdings, -1, TRUE ); SendDlgItemMessage( hDlg, IDC_Ranks, EM_SETSEL, 0, -1 ); n1_ok = n2_ok = n3_ok = FALSE; return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* * if we call EndDialog() after the call to ChangeBoardSize(), * then ChangeBoardSize() does not take effect, although the new * boardSize is saved. Go figure... */ EndDialog(hDlg, TRUE); v = VariantWhichRadio(hDlg); if(!appData.noChessProgram) { char *name = VariantName(v), buf[MSG_SIZ]; if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) { /* [HGM] in protocol 2 we check if variant is suported by engine */ snprintf(buf, MSG_SIZ, _("Variant %s not supported by %s"), name, first.tidy); DisplayError(buf, 0); return TRUE; /* treat as _("Cancel") if first engine does not support it */ } else if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) { snprintf(buf, MSG_SIZ, _("Warning: second engine (%s) does not support this!"), second.tidy); DisplayError(buf, 0); /* use of second engine is optional; only warn user */ } } gameInfo.variant = v; appData.variant = VariantName(v); appData.NrFiles = (int) GetDlgItemInt(hDlg, IDC_Files, NULL, FALSE ); appData.NrRanks = (int) GetDlgItemInt(hDlg, IDC_Ranks, NULL, FALSE ); appData.holdingsSize = (int) GetDlgItemInt(hDlg, IDC_Holdings, NULL, FALSE ); if(!n1_ok) appData.NrFiles = -1; if(!n2_ok) appData.NrRanks = -1; if(!n3_ok) appData.holdingsSize = -1; shuffleOpenings = FALSE; /* [HGM] shuffle: possible shuffle reset when we switch */ startedFromPositionFile = FALSE; /* [HGM] loadPos: no longer valid in new variant */ appData.pieceToCharTable = NULL; Reset(TRUE, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case IDC_Ranks: case IDC_Files: case IDC_Holdings: if( HIWORD(wParam) == EN_CHANGE ) { GetDlgItemInt(hDlg, IDC_Files, &n1_ok, FALSE ); GetDlgItemInt(hDlg, IDC_Ranks, &n2_ok, FALSE ); GetDlgItemInt(hDlg, IDC_Holdings, &n3_ok, FALSE ); /*EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok && n3_ok ? TRUE : FALSE );*/ } return TRUE; } break; } return FALSE; } VOID NewVariantPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)NewVariantDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_NewVariant), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * ICS Options Dialog functions * \*---------------------------------------------------------------------------*/ BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font) { CHOOSEFONT cf; HFONT hf; /* Initialize members of the CHOOSEFONT structure. */ cf.lStructSize = sizeof(CHOOSEFONT); cf.hwndOwner = hwnd; cf.hDC = (HDC)NULL; cf.lpLogFont = &font->lf; cf.iPointSize = 0; cf.Flags = CF_SCREENFONTS|/*CF_ANSIONLY|*/CF_INITTOLOGFONTSTRUCT; cf.rgbColors = RGB(0,0,0); cf.lCustData = 0L; cf.lpfnHook = (LPCFHOOKPROC)NULL; cf.lpTemplateName = (LPSTR)NULL; cf.hInstance = (HINSTANCE) NULL; cf.lpszStyle = (LPSTR)NULL; cf.nFontType = SCREEN_FONTTYPE; cf.nSizeMin = 0; cf.nSizeMax = 0; /* Display the CHOOSEFONT common-dialog box. */ if (!ChooseFont(&cf)) { return FALSE; } /* Create a logical font based on the user's */ /* selection and return a handle identifying */ /* that font. */ hf = CreateFontIndirect(cf.lpLogFont); if (hf == NULL) { return FALSE; } font->hf = hf; font->mfp.pointSize = (float) (cf.iPointSize / 10.0); font->mfp.bold = (font->lf.lfWeight >= FW_BOLD); font->mfp.italic = font->lf.lfItalic; font->mfp.underline = font->lf.lfUnderline; font->mfp.strikeout = font->lf.lfStrikeOut; font->mfp.charset = font->lf.lfCharSet; safeStrCpy(font->mfp.faceName, font->lf.lfFaceName, sizeof(font->mfp.faceName)/sizeof(font->mfp.faceName[0]) ); return TRUE; } VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca) { CHARFORMAT cf; cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR|CFM_CHARSET|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT|CFM_FACE|CFM_SIZE; cf.crTextColor = mca->color; cf.dwEffects = mca->effects; safeStrCpy(cf.szFaceName, font[boardSize][CONSOLE_FONT]->mfp.faceName, sizeof(cf.szFaceName)/sizeof(cf.szFaceName[0]) ); /* * The 20.0 below is in fact documented. yHeight is expressed in twips. * A twip is 1/20 of a font's point size. See documentation of CHARFORMAT. * --msw */ cf.yHeight = (int)(font[boardSize][CONSOLE_FONT]->mfp.pointSize * 20.0 + 0.5); cf.bCharSet = DEFAULT_CHARSET; /* should be ignored anyway */ cf.bPitchAndFamily = DEFAULT_PITCH|FF_DONTCARE; SendDlgItemMessage(hDlg, id, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf); } LRESULT CALLBACK ColorizeTextDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static MyColorizeAttribs mca; static ColorClass cc; COLORREF background = (COLORREF)0; switch (message) { case WM_INITDIALOG: cc = (ColorClass)lParam; mca = colorizeAttribs[cc]; /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_Colorize); /* Initialize the dialog items */ CheckDlgButton(hDlg, OPT_Bold, (mca.effects & CFE_BOLD) != 0); CheckDlgButton(hDlg, OPT_Italic, (mca.effects & CFE_ITALIC) != 0); CheckDlgButton(hDlg, OPT_Underline, (mca.effects & CFE_UNDERLINE) != 0); CheckDlgButton(hDlg, OPT_Strikeout, (mca.effects & CFE_STRIKEOUT) != 0); /* get the current background color from the parent window */ SendMessage(GetWindow(hDlg, GW_OWNER),WM_COMMAND, (WPARAM)WM_USER_GetConsoleBackground, (LPARAM)&background); /* set the background color */ SendDlgItemMessage(hDlg, OPT_Sample, EM_SETBKGNDCOLOR, FALSE, background); SetDlgItemText(hDlg, OPT_Sample, T_(mca.name)); UpdateSampleText(hDlg, OPT_Sample, &mca); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ colorizeAttribs[cc] = mca; textAttribs[cc].color = mca.color; textAttribs[cc].effects = mca.effects; Colorize(currentColorClass, TRUE); if (cc == ColorNormal) { CHARFORMAT cf; cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR; cf.crTextColor = mca.color; SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf); } EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case OPT_ChooseColor: ChangeColor(hDlg, &mca.color); UpdateSampleText(hDlg, OPT_Sample, &mca); return TRUE; default: mca.effects = (IsDlgButtonChecked(hDlg, OPT_Bold) ? CFE_BOLD : 0) | (IsDlgButtonChecked(hDlg, OPT_Italic) ? CFE_ITALIC : 0) | (IsDlgButtonChecked(hDlg, OPT_Underline) ? CFE_UNDERLINE : 0) | (IsDlgButtonChecked(hDlg, OPT_Strikeout) ? CFE_STRIKEOUT : 0); UpdateSampleText(hDlg, OPT_Sample, &mca); break; } break; } return FALSE; } VOID ColorizeTextPopup(HWND hwnd, ColorClass cc) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)ColorizeTextDialog, hInst); DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_Colorize), hwnd, (DLGPROC)lpProc, (LPARAM) cc); FreeProcInstance(lpProc); } VOID SetIcsOptionEnables(HWND hDlg) { #define ENABLE_DLG_ITEM(x,y) EnableWindow(GetDlgItem(hDlg,(x)), (y)) UINT state = IsDlgButtonChecked(hDlg, OPT_Premove); ENABLE_DLG_ITEM(OPT_PremoveWhite, state); ENABLE_DLG_ITEM(OPT_PremoveWhiteText, state); ENABLE_DLG_ITEM(OPT_PremoveBlack, state); ENABLE_DLG_ITEM(OPT_PremoveBlackText, state); ENABLE_DLG_ITEM(OPT_IcsAlarmTime, IsDlgButtonChecked(hDlg, OPT_IcsAlarm)); #undef ENABLE_DLG_ITEM } LRESULT CALLBACK IcsOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; int number; int i; static COLORREF cbc; static MyColorizeAttribs *mca; COLORREF *colorref; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ mca = colorizeAttribs; for (i=0; i < NColorClasses - 1; i++) { mca[i].color = textAttribs[i].color; mca[i].effects = textAttribs[i].effects; } cbc = consoleBackgroundColor; /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_IcsOptions); /* Initialize the dialog items */ #define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y)) CHECK_BOX(OPT_AutoKibitz, appData.autoKibitz); CHECK_BOX(OPT_AutoComment, appData.autoComment); CHECK_BOX(OPT_AutoObserve, appData.autoObserve); CHECK_BOX(OPT_AutoCreate, appData.autoCreateLogon); CHECK_BOX(OPT_GetMoveList, appData.getMoveList); CHECK_BOX(OPT_LocalLineEditing, appData.localLineEditing); CHECK_BOX(OPT_QuietPlay, appData.quietPlay); CHECK_BOX(OPT_SeekGraph, appData.seekGraph); CHECK_BOX(OPT_AutoRefresh, appData.autoRefresh); CHECK_BOX(OPT_BgObserve, appData.bgObserve); CHECK_BOX(OPT_DualBoard, appData.dualBoard); CHECK_BOX(OPT_SmartMove, appData.oneClick); CHECK_BOX(OPT_Premove, appData.premove); CHECK_BOX(OPT_PremoveWhite, appData.premoveWhite); CHECK_BOX(OPT_PremoveBlack, appData.premoveBlack); CHECK_BOX(OPT_IcsAlarm, appData.icsAlarm); CHECK_BOX(OPT_DontColorize, !appData.colorize); #undef CHECK_BOX snprintf(buf, MSG_SIZ, "%d", appData.icsAlarmTime / 1000); SetDlgItemText(hDlg, OPT_IcsAlarmTime, buf); SetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText); SetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText); SetDlgItemText(hDlg, OPT_StartupChatBoxes, appData.chatBoxes); SendDlgItemMessage(hDlg, OPT_SampleShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel1, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleKibitz, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleTell, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleRequest, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSeek, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleNormal, EM_SETBKGNDCOLOR, 0, cbc); SetDlgItemText(hDlg, OPT_SampleShout, T_(mca[ColorShout].name)); SetDlgItemText(hDlg, OPT_SampleSShout, T_(mca[ColorSShout].name)); SetDlgItemText(hDlg, OPT_SampleChannel1, T_(mca[ColorChannel1].name)); SetDlgItemText(hDlg, OPT_SampleChannel, T_(mca[ColorChannel].name)); SetDlgItemText(hDlg, OPT_SampleKibitz, T_(mca[ColorKibitz].name)); SetDlgItemText(hDlg, OPT_SampleTell, T_(mca[ColorTell].name)); SetDlgItemText(hDlg, OPT_SampleChallenge, T_(mca[ColorChallenge].name)); SetDlgItemText(hDlg, OPT_SampleRequest, T_(mca[ColorRequest].name)); SetDlgItemText(hDlg, OPT_SampleSeek, T_(mca[ColorSeek].name)); SetDlgItemText(hDlg, OPT_SampleNormal, T_(mca[ColorNormal].name)); UpdateSampleText(hDlg, OPT_SampleShout, &mca[ColorShout]); UpdateSampleText(hDlg, OPT_SampleSShout, &mca[ColorSShout]); UpdateSampleText(hDlg, OPT_SampleChannel1, &mca[ColorChannel1]); UpdateSampleText(hDlg, OPT_SampleChannel, &mca[ColorChannel]); UpdateSampleText(hDlg, OPT_SampleKibitz, &mca[ColorKibitz]); UpdateSampleText(hDlg, OPT_SampleTell, &mca[ColorTell]); UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]); UpdateSampleText(hDlg, OPT_SampleRequest, &mca[ColorRequest]); UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]); UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]); SetIcsOptionEnables(hDlg); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case WM_USER_GetConsoleBackground: /* the ColorizeTextDialog needs the current background color */ colorref = (COLORREF *)lParam; *colorref = cbc; return FALSE; case IDOK: /* Read changed options from the dialog box */ GetDlgItemText(hDlg, OPT_IcsAlarmTime, buf, MSG_SIZ); if (sscanf(buf, "%d", &number) != 1 || (number < 0)){ MessageBox(hDlg, _("Invalid ICS Alarm Time"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } #define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x)) appData.icsAlarm = IS_CHECKED(OPT_IcsAlarm); appData.premove = IS_CHECKED(OPT_Premove); appData.premoveWhite = IS_CHECKED(OPT_PremoveWhite); appData.premoveBlack = IS_CHECKED(OPT_PremoveBlack); appData.autoKibitz = IS_CHECKED(OPT_AutoKibitz); appData.autoComment = IS_CHECKED(OPT_AutoComment); appData.autoObserve = IS_CHECKED(OPT_AutoObserve); appData.autoCreateLogon = IS_CHECKED(OPT_AutoCreate); appData.getMoveList = IS_CHECKED(OPT_GetMoveList); appData.localLineEditing = IS_CHECKED(OPT_LocalLineEditing); appData.quietPlay = IS_CHECKED(OPT_QuietPlay); appData.seekGraph = IS_CHECKED(OPT_SeekGraph); appData.autoRefresh = IS_CHECKED(OPT_AutoRefresh); appData.bgObserve = IS_CHECKED(OPT_BgObserve); appData.dualBoard = IS_CHECKED(OPT_DualBoard); appData.oneClick = IS_CHECKED(OPT_SmartMove); #undef IS_CHECKED appData.icsAlarmTime = number * 1000; GetDlgItemText(hDlg, OPT_PremoveWhiteText, appData.premoveWhiteText, 5); GetDlgItemText(hDlg, OPT_PremoveBlackText, appData.premoveBlackText, 5); GetDlgItemText(hDlg, OPT_StartupChatBoxes, buf, sizeof(buf)); buf[sizeof(buf)-1] = NULLCHAR; appData.chatBoxes = StrSave(buf); // memory leak if (appData.localLineEditing) { DontEcho(); EchoOn(); } else { DoEcho(); EchoOff(); } appData.colorize = (Boolean)!IsDlgButtonChecked(hDlg, OPT_DontColorize); ChangedConsoleFont(); if (!appData.colorize) { CHARFORMAT cf; COLORREF background = ParseColorName(COLOR_BKGD); /* SetDefaultTextAttribs(); Colorize(currentColorClass); */ cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR; cf.crTextColor = ParseColorName(COLOR_NORMAL); SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf); SendDlgItemMessage(hwndConsole, OPT_ConsoleText, EM_SETBKGNDCOLOR, FALSE, background); SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, EM_SETBKGNDCOLOR, FALSE, background); } if (cbc != consoleBackgroundColor) { consoleBackgroundColor = cbc; if (appData.colorize) { SendDlgItemMessage(hwndConsole, OPT_ConsoleText, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor); SendDlgItemMessage(hwndConsole, OPT_ConsoleInput, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor); } } for (i=0; i < NColorClasses - 1; i++) { textAttribs[i].color = mca[i].color; textAttribs[i].effects = mca[i].effects; } EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case OPT_ChooseShoutColor: ColorizeTextPopup(hDlg, ColorShout); UpdateSampleText(hDlg, OPT_SampleShout, &mca[ColorShout]); break; case OPT_ChooseSShoutColor: ColorizeTextPopup(hDlg, ColorSShout); UpdateSampleText(hDlg, OPT_SampleSShout, &mca[ColorSShout]); break; case OPT_ChooseChannel1Color: ColorizeTextPopup(hDlg, ColorChannel1); UpdateSampleText(hDlg, OPT_SampleChannel1, &colorizeAttribs[ColorChannel1]); break; case OPT_ChooseChannelColor: ColorizeTextPopup(hDlg, ColorChannel); UpdateSampleText(hDlg, OPT_SampleChannel, &mca[ColorChannel]); break; case OPT_ChooseKibitzColor: ColorizeTextPopup(hDlg, ColorKibitz); UpdateSampleText(hDlg, OPT_SampleKibitz, &mca[ColorKibitz]); break; case OPT_ChooseTellColor: ColorizeTextPopup(hDlg, ColorTell); UpdateSampleText(hDlg, OPT_SampleTell, &mca[ColorTell]); break; case OPT_ChooseChallengeColor: ColorizeTextPopup(hDlg, ColorChallenge); UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]); break; case OPT_ChooseRequestColor: ColorizeTextPopup(hDlg, ColorRequest); UpdateSampleText(hDlg, OPT_SampleRequest, &mca[ColorRequest]); break; case OPT_ChooseSeekColor: ColorizeTextPopup(hDlg, ColorSeek); UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]); break; case OPT_ChooseNormalColor: ColorizeTextPopup(hDlg, ColorNormal); UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]); break; case OPT_ChooseBackgroundColor: if (ChangeColor(hDlg, &cbc)) { SendDlgItemMessage(hDlg, OPT_SampleShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel1, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleKibitz, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleTell, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleRequest, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSeek, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleNormal, EM_SETBKGNDCOLOR, 0, cbc); } break; case OPT_DefaultColors: for (i=0; i < NColorClasses - 1; i++) ParseAttribs(&mca[i].color, &mca[i].effects, defaultTextAttribs[i]); cbc = ParseColorName(COLOR_BKGD); SendDlgItemMessage(hDlg, OPT_SampleShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSShout, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel1, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChannel, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleKibitz, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleTell, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleChallenge, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleRequest, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleSeek, EM_SETBKGNDCOLOR, 0, cbc); SendDlgItemMessage(hDlg, OPT_SampleNormal, EM_SETBKGNDCOLOR, 0, cbc); UpdateSampleText(hDlg, OPT_SampleShout, &mca[ColorShout]); UpdateSampleText(hDlg, OPT_SampleSShout, &mca[ColorSShout]); UpdateSampleText(hDlg, OPT_SampleChannel1, &mca[ColorChannel1]); UpdateSampleText(hDlg, OPT_SampleChannel, &mca[ColorChannel]); UpdateSampleText(hDlg, OPT_SampleKibitz, &mca[ColorKibitz]); UpdateSampleText(hDlg, OPT_SampleTell, &mca[ColorTell]); UpdateSampleText(hDlg, OPT_SampleChallenge, &mca[ColorChallenge]); UpdateSampleText(hDlg, OPT_SampleRequest, &mca[ColorRequest]); UpdateSampleText(hDlg, OPT_SampleSeek, &mca[ColorSeek]); UpdateSampleText(hDlg, OPT_SampleNormal, &mca[ColorNormal]); break; default: SetIcsOptionEnables(hDlg); break; } break; } return FALSE; } VOID IcsOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)IcsOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_IcsOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Fonts Dialog functions * \*---------------------------------------------------------------------------*/ char *string; // sorry VOID SetSampleFontText(HWND hwnd, int id, const MyFont *mf) { char buf[MSG_SIZ]; HWND hControl; HDC hdc; CHARFORMAT cf; SIZE size; RECT rectClient, rectFormat; HFONT oldFont; POINT center; int len; len = snprintf(buf, MSG_SIZ, "%.0f pt. %s%s%s\n", mf->mfp.pointSize, mf->mfp.faceName, mf->mfp.bold ? " bold" : "", mf->mfp.italic ? " italic" : ""); if(id != OPT_SamplePieceFont) SetDlgItemText(hwnd, id, buf); else SetDlgItemText(hwnd, id, string); hControl = GetDlgItem(hwnd, id); hdc = GetDC(hControl); SetMapMode(hdc, MM_TEXT); /* 1 pixel == 1 logical unit */ oldFont = SelectObject(hdc, mf->hf); /* get number of logical units necessary to display font name */ GetTextExtentPoint32(hdc, buf, len, &size); /* calculate formatting rectangle in the rich edit control. * May be larger or smaller than the actual control. */ GetClientRect(hControl, &rectClient); center.x = (rectClient.left + rectClient.right) / 2; center.y = (rectClient.top + rectClient.bottom) / 2; rectFormat.top = center.y - (size.cy / 2) - 1; rectFormat.bottom = center.y + (size.cy / 2) + 1; rectFormat.left = center.x - (size.cx / 2) - 1; rectFormat.right = center.x + (size.cx / 2) + 1; cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_FACE|CFM_SIZE|CFM_CHARSET|CFM_BOLD|CFM_ITALIC; cf.dwEffects = 0; if (mf->lf.lfWeight == FW_BOLD) cf.dwEffects |= CFE_BOLD; if (mf->lf.lfItalic) cf.dwEffects |= CFE_ITALIC; safeStrCpy(cf.szFaceName, mf->mfp.faceName, sizeof(cf.szFaceName)/sizeof(cf.szFaceName[0]) ); /* * yHeight is expressed in twips. A twip is 1/20 of a font's point * size. See documentation of CHARFORMAT. --msw */ cf.yHeight = (int)(mf->mfp.pointSize * 20.0 + 0.5); cf.bCharSet = mf->lf.lfCharSet; cf.bPitchAndFamily = mf->lf.lfPitchAndFamily; /* format the text in the rich edit control */ SendMessage(hControl, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cf); if(id != OPT_SamplePieceFont) SendMessage(hControl, EM_SETRECT, (WPARAM)0, (LPARAM) &rectFormat); /* clean up */ SelectObject(hdc, oldFont); ReleaseDC(hControl, hdc); } VOID CopyFont(MyFont *dest, const MyFont *src) { dest->mfp.pointSize = src->mfp.pointSize; dest->mfp.bold = src->mfp.bold; dest->mfp.italic = src->mfp.italic; dest->mfp.underline = src->mfp.underline; dest->mfp.strikeout = src->mfp.strikeout; dest->mfp.charset = src->mfp.charset; safeStrCpy(dest->mfp.faceName, src->mfp.faceName, sizeof(dest->mfp.faceName)/sizeof(dest->mfp.faceName[0]) ); CreateFontInMF(dest); } LRESULT CALLBACK FontOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static MyFont workFont[NUM_FONTS+1]; static BOOL firstPaint; static char pieceText[] = "ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz"; int i; RECT rect; switch (message) { case WM_INITDIALOG: /* copy the current font settings into a working copy */ for (i=0; i < NUM_FONTS; i++) CopyFont(&workFont[i], font[boardSize][i]); strncpy(workFont[NUM_FONTS].mfp.faceName, appData.renderPiecesWithFont, sizeof(workFont[NUM_FONTS].mfp.faceName)); workFont[NUM_FONTS].mfp.pointSize = 16.; workFont[NUM_FONTS].mfp.charset = DEFAULT_CHARSET; Translate(hDlg, DLG_Fonts); if (!appData.icsActive) EnableWindow(GetDlgItem(hDlg, OPT_ChooseConsoleFont), FALSE); firstPaint = TRUE; /* see rant below */ /* If I don't call SetFocus(), the dialog won't respond to the keyboard * when first drawn. Why is this the only dialog that behaves this way? Is * is the WM_PAINT stuff below?? Sigh... */ SetFocus(GetDlgItem(hDlg, IDOK)); break; case WM_PAINT: /* This should not be necessary. However, if SetSampleFontText() is called * in response to WM_INITDIALOG, the strings are not properly centered in * the controls when the dialog first appears. I can't figure out why, so * this is the workaround. --msw */ if (firstPaint) { SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]); SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]); SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]); SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]); SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]); SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]); SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]); SetSampleFontText(hDlg, OPT_SampleGameListFont, &workFont[GAMELIST_FONT]); string = appData.fontToPieceTable; SetSampleFontText(hDlg, OPT_SamplePieceFont, &workFont[NUM_FONTS]); firstPaint = FALSE; } break; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* again, it seems to avoid redraw problems if we call EndDialog first */ EndDialog(hDlg, FALSE); /* copy modified settings back to the fonts array */ for (i=0; i < NUM_FONTS; i++) CopyFont(font[boardSize][i], &workFont[i]); { // Make new piece-to-char table char buf[MSG_SIZ]; GetDlgItemText(hDlg, OPT_SamplePieceFont, buf, MSG_SIZ); ASSIGN(appData.fontToPieceTable, buf); } ASSIGN(appData.renderPiecesWithFont, workFont[NUM_FONTS].mfp.faceName); // piece font /* a sad necessity due to the original design of having a separate * console font, tags font, and comment font for each board size. IMHO * these fonts should not be dependent on the current board size. I'm * running out of time, so I am doing this hack rather than redesign the * data structure. Besides, I think if I redesigned the data structure, I * might break backwards compatibility with old winboard.ini files. * --msw */ for (i=0; i < NUM_SIZES; i++) { CopyFont(font[i][EDITTAGS_FONT], &workFont[EDITTAGS_FONT]); CopyFont(font[i][CONSOLE_FONT], &workFont[CONSOLE_FONT]); CopyFont(font[i][COMMENT_FONT], &workFont[COMMENT_FONT]); CopyFont(font[i][MOVEHISTORY_FONT], &workFont[MOVEHISTORY_FONT]); CopyFont(font[i][GAMELIST_FONT], &workFont[GAMELIST_FONT]); } /* end sad necessity */ InitDrawingSizes(boardSize, 0); InvalidateRect(hwndMain, NULL, TRUE); if (commentDialog) { SendDlgItemMessage(commentDialog, OPT_CommentText, WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf, MAKELPARAM(TRUE, 0)); GetClientRect(GetDlgItem(commentDialog, OPT_CommentText), &rect); InvalidateRect(commentDialog, &rect, TRUE); } if (editTagsDialog) { SendDlgItemMessage(editTagsDialog, OPT_TagsText, WM_SETFONT, (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, MAKELPARAM(TRUE, 0)); GetClientRect(GetDlgItem(editTagsDialog, OPT_TagsText), &rect); InvalidateRect(editTagsDialog, &rect, TRUE); } if( moveHistoryDialog != NULL ) { SendDlgItemMessage(moveHistoryDialog, IDC_MoveHistory, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0)); SendMessage( moveHistoryDialog, WM_INITDIALOG, 0, 0 ); // InvalidateRect(editTagsDialog, NULL, TRUE); // [HGM] this ws improperly cloned? } if( engineOutputDialog != NULL ) { SendDlgItemMessage(engineOutputDialog, IDC_EngineMemo1, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0)); SendDlgItemMessage(engineOutputDialog, IDC_EngineMemo2, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0)); } if (hwndConsole) { ChangedConsoleFont(); } for (i=0; idef, &workFont[i].mfp); CreateFontInMF(&workFont[i]); } SetSampleFontText(hDlg, OPT_SampleClockFont, &workFont[CLOCK_FONT]); SetSampleFontText(hDlg, OPT_SampleMessageFont, &workFont[MESSAGE_FONT]); SetSampleFontText(hDlg, OPT_SampleCoordFont, &workFont[COORD_FONT]); SetSampleFontText(hDlg, OPT_SampleTagFont, &workFont[EDITTAGS_FONT]); SetSampleFontText(hDlg, OPT_SampleCommentsFont, &workFont[COMMENT_FONT]); SetSampleFontText(hDlg, OPT_SampleConsoleFont, &workFont[CONSOLE_FONT]); SetSampleFontText(hDlg, OPT_SampleMoveHistoryFont, &workFont[MOVEHISTORY_FONT]); SetSampleFontText(hDlg, OPT_SampleGameListFont, &workFont[GAMELIST_FONT]); break; } } return FALSE; } VOID FontsOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)FontOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_Fonts), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Sounds Dialog functions * \*---------------------------------------------------------------------------*/ SoundComboData soundComboData[] = { {N_("Move"), NULL}, {N_("Bell"), NULL}, {N_("Roar"), NULL}, {N_("ICS Alarm"), NULL}, {N_("ICS Win"), NULL}, {N_("ICS Loss"), NULL}, {N_("ICS Draw"), NULL}, {N_("ICS Unfinished"), NULL}, {N_("Shout"), NULL}, {N_("SShout/CShout"), NULL}, {N_("Channel 1"), NULL}, {N_("Channel"), NULL}, {N_("Kibitz"), NULL}, {N_("Tell"), NULL}, {N_("Challenge"), NULL}, {N_("Request"), NULL}, {N_("Seek"), NULL}, {NULL, NULL}, }; void InitSoundComboData(SoundComboData *scd) { SoundClass sc; ColorClass cc; int index; /* copy current sound settings to combo array */ for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) { scd[sc].name = strdup(sounds[sc].name); } for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) { index = (int)cc + (int)NSoundClasses; scd[index].name = strdup(textAttribs[cc].sound.name); } } void ResetSoundComboData(SoundComboData *scd) { while (scd->label) { if (scd->name != NULL) { free (scd->name); scd->name = NULL; } scd++; } } void InitSoundCombo(HWND hwndCombo, SoundComboData *scd) { char buf[255]; DWORD err; DWORD cnt = 0; SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0); /* send the labels to the combo box */ while (scd->label) { err = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) T_(scd->label)); if (err != cnt++) { snprintf(buf, MSG_SIZ, "InitSoundCombo(): err '%d', cnt '%d'\n", (int)err, (int)cnt); MessageBox(NULL, buf, NULL, MB_OK); } scd++; } SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) 0, (LPARAM) 0); } int SoundDialogWhichRadio(HWND hDlg) { if (IsDlgButtonChecked(hDlg, OPT_NoSound)) return OPT_NoSound; if (IsDlgButtonChecked(hDlg, OPT_DefaultBeep)) return OPT_DefaultBeep; if (IsDlgButtonChecked(hDlg, OPT_BuiltInSound)) return OPT_BuiltInSound; if (IsDlgButtonChecked(hDlg, OPT_WavFile)) return OPT_WavFile; return -1; } VOID SoundDialogSetEnables(HWND hDlg, int radio) { EnableWindow(GetDlgItem(hDlg, OPT_BuiltInSoundName), radio == OPT_BuiltInSound); EnableWindow(GetDlgItem(hDlg, OPT_WavFileName), radio == OPT_WavFile); EnableWindow(GetDlgItem(hDlg, OPT_BrowseSound), radio == OPT_WavFile); } char * SoundDialogGetName(HWND hDlg, int radio) { static char buf[MSG_SIZ], buf2[MSG_SIZ], buf3[MSG_SIZ]; char *dummy, *ret; switch (radio) { case OPT_NoSound: default: return ""; case OPT_DefaultBeep: return "$"; case OPT_BuiltInSound: buf[0] = '!'; GetDlgItemText(hDlg, OPT_BuiltInSoundName, buf + 1, sizeof(buf) - 1); return buf; case OPT_WavFile: GetDlgItemText(hDlg, OPT_WavFileName, buf, sizeof(buf)); GetCurrentDirectory(MSG_SIZ, buf3); SetCurrentDirectory(installDir); if (GetFullPathName(buf, MSG_SIZ, buf2, &dummy)) { ret = buf2; } else { ret = buf; } SetCurrentDirectory(buf3); return ret; } } void DisplaySelectedSound(HWND hDlg, HWND hCombo, const char *name) { int radio; /* * I think it's best to clear the combo and edit boxes. It looks stupid * to have a value from another sound event sitting there grayed out. */ SetDlgItemText(hDlg, OPT_WavFileName, ""); SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); if (appData.debugMode) fprintf(debugFP, "DisplaySelectedSound(,,'%s'):\n", name); switch (name[0]) { case NULLCHAR: radio = OPT_NoSound; break; case '$': if (name[1] == NULLCHAR) { radio = OPT_DefaultBeep; } else { radio = OPT_WavFile; SetDlgItemText(hDlg, OPT_WavFileName, name); } break; case '!': if (name[1] == NULLCHAR) { radio = OPT_NoSound; } else { radio = OPT_BuiltInSound; if (SendMessage(hCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) (name + 1)) == CB_ERR) { SendMessage(hCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); SendMessage(hCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) (name + 1)); } } break; default: radio = OPT_WavFile; SetDlgItemText(hDlg, OPT_WavFileName, name); break; } SoundDialogSetEnables(hDlg, radio); CheckRadioButton(hDlg, OPT_NoSound, OPT_WavFile, radio); } char *builtInSoundNames[] = BUILT_IN_SOUND_NAMES; LRESULT CALLBACK SoundOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hSoundCombo; static DWORD index; static HWND hBISN; int radio; MySound tmp; FILE *f; char buf[MSG_SIZ]; char *newName; SoundClass sc; ColorClass cc; SoundComboData *scd; int oldMute; switch (message) { case WM_INITDIALOG: /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_Sound); /* Initialize the built-in sounds combo */ hBISN = GetDlgItem(hDlg, OPT_BuiltInSoundName); InitComboStrings(hBISN, builtInSoundNames); /* Initialize the sound events combo */ index = 0; InitSoundComboData(soundComboData); hSoundCombo = GetDlgItem(hDlg, CBO_Sounds); InitSoundCombo(hSoundCombo, soundComboData); /* update the dialog */ DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name); return TRUE; case WM_COMMAND: /* message: received a command */ if (((HWND)lParam == hSoundCombo) && (HIWORD(wParam) == CBN_SELCHANGE)) { /* * the user has selected a new sound event. We must store the name for * the previously selected event, then retrieve the name for the * newly selected event and update the dialog. */ radio = SoundDialogWhichRadio(hDlg); newName = strdup(SoundDialogGetName(hDlg, radio)); if (strcmp(newName, soundComboData[index].name) != 0) { free(soundComboData[index].name); soundComboData[index].name = newName; } else { free(newName); newName = NULL; } /* now get the settings for the newly selected event */ index = SendMessage(hSoundCombo, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name); return TRUE; } switch (LOWORD(wParam)) { case IDOK: /* * save the name for the currently selected sound event */ radio = SoundDialogWhichRadio(hDlg); newName = strdup(SoundDialogGetName(hDlg, radio)); if (strcmp(soundComboData[index].name, newName) != 0) { free(soundComboData[index].name); soundComboData[index].name = newName; } else { free(newName); newName = NULL; } /* save all the sound names that changed and load the sounds */ for ( sc = (SoundClass)0; sc < NSoundClasses; sc++) { if (strcmp(soundComboData[sc].name, sounds[sc].name) != 0) { free(sounds[sc].name); sounds[sc].name = strdup(soundComboData[sc].name); MyLoadSound(&sounds[sc]); } } for ( cc = (ColorClass)0; cc < NColorClasses - 2; cc++) { index = (int)cc + (int)NSoundClasses; if (strcmp(soundComboData[index].name, textAttribs[cc].sound.name) != 0) { free(textAttribs[cc].sound.name); textAttribs[cc].sound.name = strdup(soundComboData[index].name); MyLoadSound(&textAttribs[cc].sound); } } mute = FALSE; // [HGM] mute: switch sounds automatically on if we select one CheckMenuItem(GetMenu(hwndMain),IDM_MuteSounds,MF_BYCOMMAND|MF_UNCHECKED); ResetSoundComboData(soundComboData); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: ResetSoundComboData(soundComboData); EndDialog(hDlg, FALSE); return TRUE; case OPT_DefaultSounds: /* can't use SetDefaultSounds() because we need to be able to "undo" if * user selects "Cancel" later on. So we do it the hard way here. */ scd = &soundComboData[0]; while (scd->label != NULL) { if (scd->name != NULL) free(scd->name); scd->name = strdup(""); scd++; } free(soundComboData[(int)SoundBell].name); soundComboData[(int)SoundBell].name = strdup(SOUND_BELL); DisplaySelectedSound(hDlg, hBISN, soundComboData[index].name); break; case OPT_PlaySound: radio = SoundDialogWhichRadio(hDlg); tmp.name = strdup(SoundDialogGetName(hDlg, radio)); tmp.data = NULL; MyLoadSound(&tmp); oldMute = mute; mute = FALSE; // [HGM] mute: always sound when user presses play, ignorig mute setting MyPlaySound(&tmp); mute = oldMute; if (tmp.data != NULL) FreeResource(tmp.data); // technically obsolete fn, but tmp.data is NOT malloc'd mem if (tmp.name != NULL) free(tmp.name); return TRUE; case OPT_BrowseSound: f = OpenFileDialog(hDlg, "rb", NULL, "wav", SOUND_FILT, _("Browse for Sound File"), NULL, NULL, buf); if (f != NULL) { fclose(f); SetDlgItemText(hDlg, OPT_WavFileName, buf); } return TRUE; default: radio = SoundDialogWhichRadio(hDlg); SoundDialogSetEnables(hDlg, radio); break; } break; } return FALSE; } VOID SoundOptionsPopup(HWND hwnd) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)SoundOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_Sound), hwnd, (DLGPROC)lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Comm Port dialog functions * \*---------------------------------------------------------------------------*/ #define FLOW_NONE 0 #define FLOW_XOFF 1 #define FLOW_CTS 2 #define FLOW_DSR 3 #define PORT_NONE ComboData cdPort[] = { {"None", PORT_NONE}, {"COM1", 1}, {"COM2", 2}, {"COM3", 3}, {"COM4", 4}, {NULL, 0} }; ComboData cdDataRate[] = { {"110", 110}, {"300", 300}, {"600", 600}, {"1200", 1200}, {"2400", 2400}, {"4800", 4800}, {"9600", 9600}, {"19200", 19200}, {"38400", 38400}, {NULL, 0} }; ComboData cdDataBits[] = { {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {NULL, 0} }; ComboData cdParity[] = { {"None", NOPARITY}, {"Odd", ODDPARITY}, {"Even", EVENPARITY}, {"Mark", MARKPARITY}, {"Space", SPACEPARITY}, {NULL, 0} }; ComboData cdStopBits[] = { {"1", ONESTOPBIT}, {"1.5", ONE5STOPBITS}, {"2", TWOSTOPBITS}, {NULL, 0} }; ComboData cdFlow[] = { {"None", FLOW_NONE}, {"Xoff/Xon", FLOW_XOFF}, {"CTS", FLOW_CTS}, {"DSR", FLOW_DSR}, {NULL, 0} }; VOID ParseCommSettings(char *arg, DCB *dcb) { int dataRate, count; char bits[MSG_SIZ], parity[MSG_SIZ], stopBits[MSG_SIZ], flow[MSG_SIZ]; ComboData *cd; count = sscanf(arg, "%d%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]%*[, ]%[^, ]", &dataRate, bits, parity, stopBits, flow); if (count != 5) goto cant_parse; dcb->BaudRate = dataRate; cd = cdDataBits; while (cd->label != NULL) { if (StrCaseCmp(cd->label, bits) == 0) { dcb->ByteSize = cd->value; break; } cd++; } if (cd->label == NULL) goto cant_parse; cd = cdParity; while (cd->label != NULL) { if (StrCaseCmp(cd->label, parity) == 0) { dcb->Parity = cd->value; break; } cd++; } if (cd->label == NULL) goto cant_parse; cd = cdStopBits; while (cd->label != NULL) { if (StrCaseCmp(cd->label, stopBits) == 0) { dcb->StopBits = cd->value; break; } cd++; } cd = cdFlow; if (cd->label == NULL) goto cant_parse; while (cd->label != NULL) { if (StrCaseCmp(cd->label, flow) == 0) { switch (cd->value) { case FLOW_NONE: dcb->fOutX = FALSE; dcb->fOutxCtsFlow = FALSE; dcb->fOutxDsrFlow = FALSE; break; case FLOW_CTS: dcb->fOutX = FALSE; dcb->fOutxCtsFlow = TRUE; dcb->fOutxDsrFlow = FALSE; break; case FLOW_DSR: dcb->fOutX = FALSE; dcb->fOutxCtsFlow = FALSE; dcb->fOutxDsrFlow = TRUE; break; case FLOW_XOFF: dcb->fOutX = TRUE; dcb->fOutxCtsFlow = FALSE; dcb->fOutxDsrFlow = FALSE; break; } break; } cd++; } if (cd->label == NULL) goto cant_parse; return; cant_parse: ExitArgError(_("Can't parse com port settings"), arg, TRUE); } VOID PrintCommSettings(FILE *f, char *name, DCB *dcb) { char *flow = "??", *parity = "??", *stopBits = "??"; ComboData *cd; cd = cdParity; while (cd->label != NULL) { if (dcb->Parity == cd->value) { parity = cd->label; break; } cd++; } cd = cdStopBits; while (cd->label != NULL) { if (dcb->StopBits == cd->value) { stopBits = cd->label; break; } cd++; } if (dcb->fOutX) { flow = cdFlow[FLOW_XOFF].label; } else if (dcb->fOutxCtsFlow) { flow = cdFlow[FLOW_CTS].label; } else if (dcb->fOutxDsrFlow) { flow = cdFlow[FLOW_DSR].label; } else { flow = cdFlow[FLOW_NONE].label; } fprintf(f, "/%s=%d,%d,%s,%s,%s\n", name, (int)dcb->BaudRate, dcb->ByteSize, parity, stopBits, flow); } void InitCombo(HANDLE hwndCombo, ComboData *cd) { SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0); while (cd->label != NULL) { SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) cd->label); cd++; } } void SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value) { int i; i = 0; while (cd->label != NULL) { if (cd->value == value) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) i, (LPARAM) 0); return; } cd++; i++; } } LRESULT CALLBACK CommPortOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; HANDLE hwndCombo; char *p; LRESULT index; unsigned value; int err; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow(hDlg, GW_OWNER)); Translate(hDlg, DLG_CommPort); /* Initialize the dialog items */ /* !! There should probably be some synchronization in accessing hCommPort and dcb. Or does modal nature of this dialog box do it for us? */ hwndCombo = GetDlgItem(hDlg, OPT_Port); InitCombo(hwndCombo, cdPort); p = strrchr(appData.icsCommPort, '\\'); if (p++ == NULL) p = appData.icsCommPort; if ((*p == '\0') || (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) p) == CB_ERR)) { SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) "None"); } EnableWindow(hwndCombo, hCommPort == NULL); /*!! don't allow change for now*/ hwndCombo = GetDlgItem(hDlg, OPT_DataRate); InitCombo(hwndCombo, cdDataRate); snprintf(buf, MSG_SIZ, "%u", (int)dcb.BaudRate); if (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) buf) == CB_ERR) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf); } hwndCombo = GetDlgItem(hDlg, OPT_Bits); InitCombo(hwndCombo, cdDataBits); SelectComboValue(hwndCombo, cdDataBits, dcb.ByteSize); hwndCombo = GetDlgItem(hDlg, OPT_Parity); InitCombo(hwndCombo, cdParity); SelectComboValue(hwndCombo, cdParity, dcb.Parity); hwndCombo = GetDlgItem(hDlg, OPT_StopBits); InitCombo(hwndCombo, cdStopBits); SelectComboValue(hwndCombo, cdStopBits, dcb.StopBits); hwndCombo = GetDlgItem(hDlg, OPT_Flow); InitCombo(hwndCombo, cdFlow); if (dcb.fOutX) { SelectComboValue(hwndCombo, cdFlow, FLOW_XOFF); } else if (dcb.fOutxCtsFlow) { SelectComboValue(hwndCombo, cdFlow, FLOW_CTS); } else if (dcb.fOutxDsrFlow) { SelectComboValue(hwndCombo, cdFlow, FLOW_DSR); } else { SelectComboValue(hwndCombo, cdFlow, FLOW_NONE); } return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ #ifdef NOTDEF /* !! Currently we can't change comm ports in midstream */ hwndCombo = GetDlgItem(hDlg, OPT_Port); index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); if (index == PORT_NONE) { appData.icsCommPort = ""; if (hCommPort != NULL) { CloseHandle(hCommPort); hCommPort = NULL; } EndDialog(hDlg, TRUE); return TRUE; } SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf); appData.icsCommPort = strdup(buf); if (hCommPort != NULL) { CloseHandle(hCommPort); hCommPort = NULL; } /* now what?? can't really do this; have to fix up the ChildProc and InputSource records for the comm port that we gave to the back end. */ #endif /*NOTDEF*/ hwndCombo = GetDlgItem(hDlg, OPT_DataRate); SendMessage(hwndCombo, WM_GETTEXT, (WPARAM) MSG_SIZ, (LPARAM) buf); if (sscanf(buf, "%u", &value) != 1) { MessageBox(hDlg, _("Invalid data rate"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return TRUE; } dcb.BaudRate = value; hwndCombo = GetDlgItem(hDlg, OPT_Bits); index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); dcb.ByteSize = cdDataBits[index].value; hwndCombo = GetDlgItem(hDlg, OPT_Parity); index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); dcb.Parity = cdParity[index].value; hwndCombo = GetDlgItem(hDlg, OPT_StopBits); index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); dcb.StopBits = cdStopBits[index].value; hwndCombo = GetDlgItem(hDlg, OPT_Flow); index = SendMessage(hwndCombo, CB_GETCURSEL, (WPARAM) 0, (LPARAM) 0); switch (cdFlow[index].value) { case FLOW_NONE: dcb.fOutX = FALSE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; break; case FLOW_CTS: dcb.fOutX = FALSE; dcb.fOutxCtsFlow = TRUE; dcb.fOutxDsrFlow = FALSE; break; case FLOW_DSR: dcb.fOutX = FALSE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = TRUE; break; case FLOW_XOFF: dcb.fOutX = TRUE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; break; } if (!SetCommState(hCommPort, (LPDCB) &dcb)) { err = GetLastError(); switch(MessageBox(hDlg, "Failed to set comm port state;\r\ninvalid options?", _("Option Error"), MB_ABORTRETRYIGNORE|MB_ICONQUESTION)) { case IDABORT: DisplayFatalError(_("Failed to set comm port state"), err, 1); exit(1); /*is it ok to do this from here?*/ case IDRETRY: return TRUE; case IDIGNORE: EndDialog(hDlg, TRUE); return TRUE; } } EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; } return FALSE; } VOID CommPortOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)CommPortOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_CommPort), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Load Options dialog functions * \*---------------------------------------------------------------------------*/ int LoadOptionsWhichRadio(HWND hDlg) { return (IsDlgButtonChecked(hDlg, OPT_Exact) ? 1 : (IsDlgButtonChecked(hDlg, OPT_Subset) ? 2 : (IsDlgButtonChecked(hDlg, OPT_Struct) ? 3 : (IsDlgButtonChecked(hDlg, OPT_Material) ? 4 : (IsDlgButtonChecked(hDlg, OPT_Range) ? 5 : (IsDlgButtonChecked(hDlg, OPT_Difference) ? 6 : -1)))))); } VOID SetLoadOptionEnables(HWND hDlg) { UINT state; state = IsDlgButtonChecked(hDlg, OPT_Autostep); EnableWindow(GetDlgItem(hDlg, OPT_ASTimeDelay), state); EnableWindow(GetDlgItem(hDlg, OPT_AStext1), state); } LRESULT CALLBACK LoadOptions(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; float fnumber; int ok; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_LoadOptions); /* Initialize the dialog items */ if (appData.timeDelay >= 0.0) { CheckDlgButton(hDlg, OPT_Autostep, TRUE); snprintf(buf, MSG_SIZ, "%.2g", appData.timeDelay); SetDlgItemText(hDlg, OPT_ASTimeDelay, buf); } else { CheckDlgButton(hDlg, OPT_Autostep, FALSE); } SetLoadOptionEnables(hDlg); SetDlgItemInt(hDlg, OPT_elo1, appData.eloThreshold1, FALSE); SetDlgItemInt(hDlg, OPT_elo2, appData.eloThreshold2, FALSE); SetDlgItemInt(hDlg, OPT_date, appData.dateThreshold, FALSE); SetDlgItemInt(hDlg, OPT_Stretch, appData.stretch, FALSE); CheckDlgButton(hDlg, OPT_Reversed, appData.ignoreColors); CheckDlgButton(hDlg, OPT_Mirror, appData.findMirror); SetDlgItemText(hDlg, OPT_Counts, ""); switch (appData.searchMode) { case 1: CheckDlgButton(hDlg, OPT_Exact, TRUE); break; case 2: CheckDlgButton(hDlg, OPT_Subset, TRUE); break; case 3: CheckDlgButton(hDlg, OPT_Struct, TRUE); break; case 4: CheckDlgButton(hDlg, OPT_Material, TRUE); break; case 5: CheckDlgButton(hDlg, OPT_Range, TRUE); break; case 6: CheckDlgButton(hDlg, OPT_Difference, TRUE); break; } return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ if (IsDlgButtonChecked(hDlg, OPT_Autostep)) { GetDlgItemText(hDlg, OPT_ASTimeDelay, buf, MSG_SIZ); if (sscanf(buf, "%f", &fnumber) != 1) { MessageBox(hDlg, _("Invalid load game step rate"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } appData.timeDelay = fnumber; } else { appData.timeDelay = (float) -1.0; } appData.eloThreshold1 = GetDlgItemInt(hDlg, OPT_elo1, &ok, FALSE); appData.eloThreshold2 = GetDlgItemInt(hDlg, OPT_elo2, &ok, FALSE); appData.dateThreshold = GetDlgItemInt(hDlg, OPT_date, &ok, FALSE); appData.stretch = GetDlgItemInt(hDlg, OPT_Stretch, &ok, FALSE); appData.searchMode = LoadOptionsWhichRadio(hDlg); appData.ignoreColors = IsDlgButtonChecked(hDlg, OPT_Reversed); appData.findMirror = IsDlgButtonChecked(hDlg, OPT_Mirror); GetDlgItemText(hDlg, OPT_Counts, buf, MSG_SIZ); appData.minPieces = appData.maxPieces = 0; sscanf(buf, "%d-%d", &appData.minPieces, &appData.maxPieces); if(appData.maxPieces < appData.minPieces) appData.maxPieces = appData.minPieces; EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: SetLoadOptionEnables(hDlg); break; } break; } return FALSE; } VOID LoadOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)LoadOptions, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_LoadOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Save Options dialog functions * \*---------------------------------------------------------------------------*/ VOID SetSaveOptionEnables(HWND hDlg) { UINT state; state = IsDlgButtonChecked(hDlg, OPT_Autosave); EnableWindow(GetDlgItem(hDlg, OPT_AVPrompt), state); EnableWindow(GetDlgItem(hDlg, OPT_AVToFile), state); if (state && !IsDlgButtonChecked(hDlg, OPT_AVPrompt) && !IsDlgButtonChecked(hDlg, OPT_AVToFile)) { CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt); } state = state && IsDlgButtonChecked(hDlg, OPT_AVToFile); EnableWindow(GetDlgItem(hDlg, OPT_AVFilename), state); EnableWindow(GetDlgItem(hDlg, OPT_AVBrowse), state); } LRESULT CALLBACK SaveOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; FILE *f; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_SaveOptions); /* Initialize the dialog items */ if (*appData.saveGameFile != NULLCHAR) { CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE); CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVToFile); SetDlgItemText(hDlg, OPT_AVFilename, appData.saveGameFile); } else if (appData.autoSaveGames) { CheckDlgButton(hDlg, OPT_Autosave, (UINT) TRUE); CheckRadioButton(hDlg, OPT_AVPrompt, OPT_AVToFile, OPT_AVPrompt); } else { CheckDlgButton(hDlg, OPT_Autosave, (UINT) FALSE); } if (appData.oldSaveStyle) { CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_Old); } else { CheckRadioButton(hDlg, OPT_PGN, OPT_Old, OPT_PGN); } CheckDlgButton( hDlg, OPT_OutOfBookInfo, appData.saveOutOfBookInfo ); SetSaveOptionEnables(hDlg); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ if (IsDlgButtonChecked(hDlg, OPT_Autosave)) { appData.autoSaveGames = TRUE; if (IsDlgButtonChecked(hDlg, OPT_AVPrompt)) { ASSIGN(appData.saveGameFile, ""); // [HGM] make sure value is ALWAYS in allocated memory } else /*if (IsDlgButtonChecked(hDlg, OPT_AVToFile))*/ { GetDlgItemText(hDlg, OPT_AVFilename, buf, MSG_SIZ); if (*buf == NULLCHAR) { MessageBox(hDlg, _("Invalid save game file name"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } FREE(appData.saveGameFile); appData.saveGameFile = InterpretFileName(buf, homeDir); } } else { appData.autoSaveGames = FALSE; ASSIGN(appData.saveGameFile, ""); } appData.oldSaveStyle = IsDlgButtonChecked(hDlg, OPT_Old); appData.saveOutOfBookInfo = IsDlgButtonChecked( hDlg, OPT_OutOfBookInfo ); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case OPT_AVBrowse: f = OpenFileDialog(hDlg, "a", NULL, appData.oldSaveStyle ? "gam" : "pgn", GAME_FILT, _("Browse for Auto Save File"), NULL, NULL, buf); if (f != NULL) { fclose(f); SetDlgItemText(hDlg, OPT_AVFilename, buf); } break; default: SetSaveOptionEnables(hDlg); break; } break; } return FALSE; } VOID SaveOptionsPopup(HWND hwnd) { FARPROC lpProc = MakeProcInstance((FARPROC)SaveOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_SaveOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Time Control Options dialog functions * \*---------------------------------------------------------------------------*/ VOID SetTimeControlEnables(HWND hDlg) { UINT state; state = IsDlgButtonChecked(hDlg, OPT_TCUseMoves) + 2*IsDlgButtonChecked(hDlg, OPT_TCUseFixed); EnableWindow(GetDlgItem(hDlg, OPT_TCTime), state == 1); EnableWindow(GetDlgItem(hDlg, OPT_TCMoves), state == 1); EnableWindow(GetDlgItem(hDlg, OPT_TCtext1), state == 1); EnableWindow(GetDlgItem(hDlg, OPT_TCtext2), state == 1); EnableWindow(GetDlgItem(hDlg, OPT_TCTime2), !state); EnableWindow(GetDlgItem(hDlg, OPT_TCInc), !state); EnableWindow(GetDlgItem(hDlg, OPT_TCitext1), !state); EnableWindow(GetDlgItem(hDlg, OPT_TCitext2), !state); EnableWindow(GetDlgItem(hDlg, OPT_TCitext3), !state); EnableWindow(GetDlgItem(hDlg, OPT_TCFixed), state == 2); EnableWindow(GetDlgItem(hDlg, OPT_TCftext), state == 2); } LRESULT CALLBACK TimeControl(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ], *tc; int mps, odds1, odds2, st; float increment; BOOL ok, ok2; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_TimeControl); /* Initialize the dialog items */ if (/*appData.clockMode &&*/ !appData.icsActive) { // [HGM] even if !clockMode, we could want to set it in tournament dialog if (searchTime) { CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseFixed, OPT_TCUseFixed); SetDlgItemInt(hDlg, OPT_TCFixed, searchTime, FALSE); } else if (appData.timeIncrement == -1) { CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseFixed, OPT_TCUseMoves); SetDlgItemText(hDlg, OPT_TCTime, appData.timeControl); SetDlgItemInt(hDlg, OPT_TCMoves, appData.movesPerSession, FALSE); SetDlgItemText(hDlg, OPT_TCTime2, ""); SetDlgItemText(hDlg, OPT_TCInc, ""); } else { int i = appData.timeIncrement; if(i == appData.timeIncrement) snprintf(buf, MSG_SIZ, "%d", i); else snprintf(buf, MSG_SIZ, "%4.2f", appData.timeIncrement); CheckRadioButton(hDlg, OPT_TCUseMoves, OPT_TCUseFixed, OPT_TCUseInc); SetDlgItemText(hDlg, OPT_TCTime, ""); SetDlgItemText(hDlg, OPT_TCMoves, ""); SetDlgItemText(hDlg, OPT_TCTime2, appData.timeControl); SetDlgItemText(hDlg, OPT_TCInc, buf); } SetDlgItemInt(hDlg, OPT_TCOdds1, 1, FALSE); SetDlgItemInt(hDlg, OPT_TCOdds2, 1, FALSE); SetTimeControlEnables(hDlg); } return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: mps = appData.movesPerSession; increment = appData.timeIncrement; tc = appData.timeControl; st = 0; /* Read changed options from the dialog box */ if (IsDlgButtonChecked(hDlg, OPT_TCUseFixed)) { st = GetDlgItemInt(hDlg, OPT_TCFixed, &ok, FALSE); if (!ok || st <= 0) { MessageBox(hDlg, _("Invalid max time per move"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } } else if (IsDlgButtonChecked(hDlg, OPT_TCUseMoves)) { increment = -1; mps = GetDlgItemInt(hDlg, OPT_TCMoves, &ok, FALSE); if (!ok || mps <= 0) { MessageBox(hDlg, _("Invalid moves per time control"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } GetDlgItemText(hDlg, OPT_TCTime, buf, MSG_SIZ); if (!ParseTimeControl(buf, increment, mps)) { MessageBox(hDlg, _("Invalid minutes per time control"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } tc = buf; } else { GetDlgItemText(hDlg, OPT_TCInc, buf, MSG_SIZ); ok = (sscanf(buf, "%f%c", &increment, buf) == 1); if (!ok || increment < 0) { MessageBox(hDlg, _("Invalid increment"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } GetDlgItemText(hDlg, OPT_TCTime2, buf, MSG_SIZ); if (!ParseTimeControl(buf, increment, mps)) { MessageBox(hDlg, _("Invalid initial time"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } tc = buf; } odds1 = GetDlgItemInt(hDlg, OPT_TCOdds1, &ok, FALSE); odds2 = GetDlgItemInt(hDlg, OPT_TCOdds2, &ok2, FALSE); if (!ok || !ok2 || odds1 <= 0 || odds2 <= 0) { MessageBox(hDlg, _("Invalid time-odds factor"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return FALSE; } searchTime = st; appData.timeControl = strdup(tc); appData.movesPerSession = mps; appData.timeIncrement = increment; appData.firstTimeOdds = first.timeOdds = odds1; appData.secondTimeOdds = second.timeOdds = odds2; Reset(TRUE, TRUE); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: SetTimeControlEnables(hDlg); break; } break; } return FALSE; } VOID TimeControlOptionsPopup(HWND hwnd) { if (gameMode != BeginningOfGame) { DisplayError(_("Changing time control during a game is not implemented"), 0); } else { FARPROC lpProc = MakeProcInstance((FARPROC)TimeControl, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_TimeControl), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } } /*---------------------------------------------------------------------------*\ * * Engine Options Dialog functions * \*---------------------------------------------------------------------------*/ #define CHECK_BOX(x,y) CheckDlgButton(hDlg, (x), (BOOL)(y)) #define IS_CHECKED(x) (Boolean)IsDlgButtonChecked(hDlg, (x)) #define INT_ABS( n ) ((n) >= 0 ? (n) : -(n)) LRESULT CALLBACK EnginePlayOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_EnginePlayOptions); /* Initialize the dialog items */ CHECK_BOX(IDC_EpPeriodicUpdates, appData.periodicUpdates); CHECK_BOX(IDC_EpPonder, appData.ponderNextMove); CHECK_BOX(IDC_EpShowThinking, appData.showThinking); CHECK_BOX(IDC_EpHideThinkingHuman, appData.hideThinkingFromHuman); CHECK_BOX(IDC_TestClaims, appData.testClaims); CHECK_BOX(IDC_DetectMates, appData.checkMates); CHECK_BOX(IDC_MaterialDraws, appData.materialDraws); CHECK_BOX(IDC_TrivialDraws, appData.trivialDraws); CHECK_BOX(IDC_ScoreAbs1, appData.firstScoreIsAbsolute); CHECK_BOX(IDC_ScoreAbs2, appData.secondScoreIsAbsolute); SetDlgItemInt( hDlg, IDC_EpDrawMoveCount, appData.adjudicateDrawMoves, TRUE ); SendDlgItemMessage( hDlg, IDC_EpDrawMoveCount, EM_SETSEL, 0, -1 ); SetDlgItemInt( hDlg, IDC_EpAdjudicationThreshold, INT_ABS(appData.adjudicateLossThreshold), TRUE ); SendDlgItemMessage( hDlg, IDC_EpAdjudicationThreshold, EM_SETSEL, 0, -1 ); SetDlgItemInt( hDlg, IDC_RuleMoves, appData.ruleMoves, TRUE ); SendDlgItemMessage( hDlg, IDC_RuleMoves, EM_SETSEL, 0, -1 ); SetDlgItemInt( hDlg, IDC_DrawRepeats, INT_ABS(appData.drawRepeats), TRUE ); SendDlgItemMessage( hDlg, IDC_DrawRepeats, EM_SETSEL, 0, -1 ); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: /* Read changed options from the dialog box */ PeriodicUpdatesEvent( IS_CHECKED(IDC_EpPeriodicUpdates)); PonderNextMoveEvent( IS_CHECKED(IDC_EpPonder)); appData.hideThinkingFromHuman= IS_CHECKED(IDC_EpHideThinkingHuman); // [HGM] thinking: moved up appData.showThinking = IS_CHECKED(IDC_EpShowThinking); ShowThinkingEvent(); // [HGM] thinking: tests all options that need thinking output appData.testClaims = IS_CHECKED(IDC_TestClaims); appData.checkMates = IS_CHECKED(IDC_DetectMates); appData.materialDraws = IS_CHECKED(IDC_MaterialDraws); appData.trivialDraws = IS_CHECKED(IDC_TrivialDraws); appData.adjudicateDrawMoves = GetDlgItemInt(hDlg, IDC_EpDrawMoveCount, NULL, FALSE ); appData.adjudicateLossThreshold = - (int) GetDlgItemInt(hDlg, IDC_EpAdjudicationThreshold, NULL, FALSE ); appData.ruleMoves = GetDlgItemInt(hDlg, IDC_RuleMoves, NULL, FALSE ); appData.drawRepeats = (int) GetDlgItemInt(hDlg, IDC_DrawRepeats, NULL, FALSE ); first.scoreIsAbsolute = appData.firstScoreIsAbsolute = IS_CHECKED(IDC_ScoreAbs1); second.scoreIsAbsolute = appData.secondScoreIsAbsolute = IS_CHECKED(IDC_ScoreAbs2); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case IDC_EpDrawMoveCount: case IDC_EpAdjudicationThreshold: case IDC_DrawRepeats: case IDC_RuleMoves: if( HIWORD(wParam) == EN_CHANGE ) { int n1_ok; int n2_ok; int n3_ok; int n4_ok; GetDlgItemInt(hDlg, IDC_EpDrawMoveCount, &n1_ok, FALSE ); GetDlgItemInt(hDlg, IDC_EpAdjudicationThreshold, &n2_ok, FALSE ); GetDlgItemInt(hDlg, IDC_RuleMoves, &n3_ok, FALSE ); GetDlgItemInt(hDlg, IDC_DrawRepeats, &n4_ok, FALSE ); EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok && n3_ok && n4_ok ? TRUE : FALSE ); } return TRUE; } break; } return FALSE; } VOID EnginePlayOptionsPopup(HWND hwnd) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)EnginePlayOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_EnginePlayOptions), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * UCI Options Dialog functions * \*---------------------------------------------------------------------------*/ INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) { switch(uMsg) { case BFFM_INITIALIZED: SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData); break; } return 0; } BOOL BrowseForFolder( const char * title, char * path ) { BOOL result = FALSE; BROWSEINFO bi; LPITEMIDLIST pidl; ZeroMemory( &bi, sizeof(bi) ); bi.lpszTitle = title == 0 ? _("Choose Folder") : title; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM) path; pidl = SHBrowseForFolder( &bi ); if( pidl != 0 ) { IMalloc * imalloc = 0; if( SHGetPathFromIDList( pidl, path ) ) { result = TRUE; } if( SUCCEEDED( SHGetMalloc ( &imalloc ) ) ) { imalloc->lpVtbl->Free(imalloc,pidl); imalloc->lpVtbl->Release(imalloc); } } return result; } int IsMultiFormat(char *s) { char *p = strchr(s, ':'); return p && p != s+1; } LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MAX_PATH]; int oldCores; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, DLG_OptionsUCI); /* Initialize the dialog items */ SetDlgItemText( hDlg, IDC_PolyglotDir, appData.polyglotDir ); SetDlgItemInt( hDlg, IDC_HashSize, appData.defaultHashSize, TRUE ); if(appData.defaultPathEGTB[0]) SetDlgItemText( hDlg, IDC_PathToEGTB, appData.defaultPathEGTB ); else SetDlgItemText( hDlg, IDC_PathToEGTB, appData.egtFormats ); SetDlgItemInt( hDlg, IDC_SizeOfEGTB, appData.defaultCacheSizeEGTB, TRUE ); CheckDlgButton( hDlg, IDC_UseBook, (BOOL) appData.usePolyglotBook ); SetDlgItemText( hDlg, IDC_BookFile, appData.polyglotBook ); // [HGM] smp: input field for nr of cores: SetDlgItemInt( hDlg, IDC_Cores, appData.smpCores, TRUE ); // [HGM] book: tick boxes for own book use CheckDlgButton( hDlg, IDC_OwnBook1, (BOOL) appData.firstHasOwnBookUCI ); CheckDlgButton( hDlg, IDC_OwnBook2, (BOOL) appData.secondHasOwnBookUCI ); SetDlgItemInt( hDlg, IDC_BookDep, appData.bookDepth, TRUE ); SetDlgItemInt( hDlg, IDC_BookStr, appData.bookStrength, TRUE ); SetDlgItemInt( hDlg, IDC_Games, appData.defaultMatchGames, TRUE ); SendDlgItemMessage( hDlg, IDC_PolyglotDir, EM_SETSEL, 0, -1 ); // [HGM] Yet another ponder duplicate CheckDlgButton( hDlg, OPT_PonderNextMove, (BOOL) appData.ponderNextMove ); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: GetDlgItemText( hDlg, IDC_PolyglotDir, buf, sizeof(buf) ); appData.polyglotDir = strdup(buf); appData.defaultHashSize = GetDlgItemInt(hDlg, IDC_HashSize, NULL, FALSE ); appData.defaultCacheSizeEGTB = GetDlgItemInt(hDlg, IDC_SizeOfEGTB, NULL, FALSE ); GetDlgItemText( hDlg, IDC_PathToEGTB, buf, sizeof(buf) ); if(IsMultiFormat(buf)) { ASSIGN(appData.egtFormats, buf); } else { ASSIGN(appData.defaultPathEGTB, buf); } GetDlgItemText( hDlg, IDC_BookFile, buf, sizeof(buf) ); appData.polyglotBook = strdup(buf); appData.usePolyglotBook = (Boolean) IsDlgButtonChecked( hDlg, IDC_UseBook ); // [HGM] smp: get nr of cores and ponder: oldCores = appData.smpCores; appData.smpCores = GetDlgItemInt(hDlg, IDC_Cores, NULL, FALSE ); if(appData.smpCores != oldCores) NewSettingEvent(FALSE, &(first.maxCores), "cores", appData.smpCores); PonderNextMoveEvent((Boolean) IsDlgButtonChecked( hDlg, OPT_PonderNextMove )); // [HGM] book: read tick boxes for own book use appData.firstHasOwnBookUCI = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook1 ); appData.secondHasOwnBookUCI = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook2 ); appData.bookDepth = GetDlgItemInt(hDlg, IDC_BookDep, NULL, FALSE ); appData.bookStrength = GetDlgItemInt(hDlg, IDC_BookStr, NULL, FALSE ); appData.defaultMatchGames = GetDlgItemInt(hDlg, IDC_Games, NULL, FALSE ); if(gameMode == BeginningOfGame) Reset(TRUE, TRUE); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; case IDC_BrowseForBook: { char filter[] = { 'A','l','l',' ','F','i','l','e','s', 0, '*','.','*', 0, 'B','I','N',' ','F','i','l','e','s', 0, '*','.','b','i','n', 0, 0 }; OPENFILENAME ofn; safeStrCpy( buf, "" , sizeof( buf)/sizeof( buf[0]) ); ZeroMemory( &ofn, sizeof(ofn) ); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hDlg; ofn.hInstance = hInst; ofn.lpstrFilter = filter; ofn.lpstrFile = buf; ofn.nMaxFile = sizeof(buf); ofn.lpstrTitle = _("Choose Book"); ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_HIDEREADONLY; if( GetOpenFileName( &ofn ) ) { SetDlgItemText( hDlg, IDC_BookFile, buf ); } } return TRUE; case IDC_BrowseForPolyglotDir: if( BrowseForFolder( _("Choose Polyglot Directory"), buf ) ) { SetDlgItemText( hDlg, IDC_PolyglotDir, buf ); strcat( buf, "\\polyglot.exe" ); if( GetFileAttributes(buf) == 0xFFFFFFFF ) { MessageBox( hDlg, _("Polyglot was not found in the specified folder!"), "Warning", MB_OK | MB_ICONWARNING ); } } return TRUE; case IDC_BrowseForEGTB: if( BrowseForFolder( _("Choose EGTB Directory:"), buf ) ) { SetDlgItemText( hDlg, IDC_PathToEGTB, buf ); } return TRUE; case IDC_HashSize: case IDC_SizeOfEGTB: if( HIWORD(wParam) == EN_CHANGE ) { int n1_ok; int n2_ok; GetDlgItemInt(hDlg, IDC_HashSize, &n1_ok, FALSE ); GetDlgItemInt(hDlg, IDC_SizeOfEGTB, &n2_ok, FALSE ); EnableWindow( GetDlgItem(hDlg, IDOK), n1_ok && n2_ok ? TRUE : FALSE ); } return TRUE; } break; } return FALSE; } VOID UciOptionsPopup(HWND hwnd) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)UciOptionsDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_OptionsUCI), hwnd, (DLGPROC) lpProc); FreeProcInstance(lpProc); } xboard-4.8.0/winboard/Winboard.dev0000644000175000001440000000777012420374633014010 00000000000000[Project] FileName=Winboard.dev Name=Winboard UnitCount=27 Type=0 Ver=1 ObjFiles= Includes= Libs= PrivateResource=Winboard_private.rc ResourceIncludes=.. MakeIncludes= Compiler=-I.._@@_-I._@@_-DNDEBUG_@@_ CppCompiler= Linker=-fpic_@@_-s_@@_-mwindows_@@_-lwsock32_@@_-lwinmm_@@_-lcomctl32_@@_ IsCpp=0 Icon= ExeOutput= ObjectOutput=./objs OverrideOutput=0 OverrideOutputName=Winboard.exe HostApplication= Folders= CommandLine= UseCustomMakefile=0 CustomMakefile=makefile.gcc IncludeVersionInfo=0 SupportXPThemes=0 CompilerSet=0 CompilerSettings=0000000000001000000100 [Unit1] FileName=wsockerr.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit2] FileName=..\parser.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit3] FileName=wclipbrd.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit4] FileName=wedittags.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit5] FileName=wevalgraph.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit6] FileName=wgamelist.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit7] FileName=whistory.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit8] FileName=winboard.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit9] FileName=wlayout.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit10] FileName=woptions.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit11] FileName=wsnap.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit12] FileName=..\uci.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit13] FileName=..\backend.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit14] FileName=..\book.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit15] FileName=..\gamelist.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit16] FileName=..\lists.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit17] FileName=..\moves.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit18] FileName=..\pgntags.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit19] FileName=winboard.rc CompileCpp=0 Folder=Winboard Compile=1 Link=0 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit20] FileName=..\zippy.c Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= CompileCpp=0 [Unit21] FileName=help.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit22] FileName=wsettings.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit23] FileName=wchat.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit24] FileName=wengineoutput.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit25] FileName=..\evalgraph.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit26] FileName=..\engineoutput.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit27] FileName=..\history.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= xboard-4.8.0/winboard/winboard.hpj0000644000175000001440000000056112420374633014042 00000000000000; This file is maintained by HCW. Do not modify this file directly. ; This help project requires hc 3.1 [OPTIONS] ERRORLOG=winboard.err LCID=0x409 0x0 0x0 ; English (United States) REPORT=Yes TITLE=WinBoard Help BMROOT=bitmaps HLP=.\winboard.hlp [FILES] winboard.rtf [WINDOWS] main="WinBoard Help",,60676,,(r12632256),f2 [CONFIG] BrowseButtons() xboard-4.8.0/winboard/wedittags.c0000644000175000001440000001753412421746530013701 00000000000000/* * wedittags.c -- EditTags window for WinBoard * * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #define _(s) T_(s) /* Module globals */ static char *editTagsText, **resPtr; static HWND memo; BOOL editTagsUp = FALSE; BOOL canEditTags = FALSE; /* Imports from winboard.c */ extern HINSTANCE hInst; extern HWND hwndMain; extern BoardSize boardSize; LRESULT CALLBACK EditTagsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HANDLE hwndText; static int sizeX, sizeY; int len, newSizeX, newSizeY; char *str; RECT rect; MINMAXINFO *mmi; int err; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Initialize the dialog items */ Translate(hDlg, DLG_EditTags); hwndText = memo = GetDlgItem(hDlg, OPT_TagsText); SendMessage(hwndText, WM_SETFONT, (WPARAM)font[boardSize][EDITTAGS_FONT]->hf, MAKELPARAM(FALSE, 0)); SetDlgItemText(hDlg, OPT_TagsText, editTagsText); EnableWindow(GetDlgItem(hDlg, OPT_TagsCancel), canEditTags); EnableWindow(GetDlgItem(hDlg, OPT_EditTags), !canEditTags || bookUp); SendMessage(hwndText, EM_SETREADONLY, !canEditTags, 0); if (bookUp) { SetDlgItemText(hDlg, OPT_EditTags, _("&Play Move")); SetWindowText(hDlg, _("Edit Book")); SetFocus(hwndText); } else if (canEditTags) { SetWindowText(hDlg, _("Edit Tags")); SetFocus(hwndText); } else { SetWindowText(hDlg, _("Tags")); SetFocus(GetDlgItem(hDlg, IDOK)); } if (!editTagsDialog) { editTagsDialog = hDlg; GetClientRect(hDlg, &rect); sizeX = rect.right; sizeY = rect.bottom; SendDlgItemMessage( hDlg, OPT_TagsText, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); if (wpTags.x != CW_USEDEFAULT && wpTags.y != CW_USEDEFAULT && wpTags.width != CW_USEDEFAULT && wpTags.height != CW_USEDEFAULT) { WINDOWPLACEMENT wp; EnsureOnScreen(&wpTags.x, &wpTags.y, 0, 0); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = SW_SHOW; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpTags.x; wp.rcNormalPosition.right = wpTags.x + wpTags.width; wp.rcNormalPosition.top = wpTags.y; wp.rcNormalPosition.bottom = wpTags.y + wpTags.height; SetWindowPlacement(hDlg, &wp); GetClientRect(hDlg, &rect); newSizeX = rect.right; newSizeY = rect.bottom; ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; } } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case OPT_TagsSave: if (canEditTags) { char *p, *q; /* Read changed options from the dialog box */ len = GetWindowTextLength(hwndText); str = (char *) malloc(len + 1); GetWindowText(hwndText, str, len + 1); p = q = str; while (*q) { if (*q == '\r') q++; else *p++ = *q++; } *p = NULLCHAR; err = 0; if(resPtr) *resPtr = strdup(str); else if(bookUp) SaveToBook(str), DisplayBook(currentMove); else err = ReplaceTags(str, &gameInfo); if (err) DisplayError(_("Error replacing tags."), err); free(str); } if(LOWORD(wParam) == IDOK) TagsPopDown(); return TRUE; case IDCANCEL: case OPT_TagsCancel: TagsPopDown(); return TRUE; case OPT_EditTags: if(bookUp) addToBookFlag = !addToBookFlag; else EditTagsEvent(); return TRUE; default: break; } break; case WM_NOTIFY: // [HGM] vari: cloned from whistory.c if( wParam == OPT_TagsText ) { MSGFILTER * lpMF = (MSGFILTER *) lParam; if( lpMF->msg == WM_RBUTTONDOWN ) { POINTL pt; LRESULT index; pt.x = LOWORD( lpMF->lParam ); pt.y = HIWORD( lpMF->lParam ); index = SendDlgItemMessage( hDlg, OPT_TagsText, EM_CHARFROMPOS, 0, (LPARAM) &pt ); hwndText = GetDlgItem(hDlg, OPT_TagsText); // cloned from above len = GetWindowTextLength(hwndText); str = (char *) malloc(len + 1); GetWindowText(hwndText, str, len + 1); if(bookUp) PlayBookMove(str, index); free(str); /* Zap the message for good: apparently, returning non-zero is not enough */ lpMF->msg = WM_USER; return TRUE; } } break; case WM_SIZE: newSizeX = LOWORD(lParam); newSizeY = HIWORD(lParam); ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; break; case WM_GETMINMAXINFO: /* Prevent resizing window too small */ mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; break; } return FALSE; } VOID AddBookMove(char *text) { SendMessage( memo, EM_SETSEL, 999999, 999999 ); // [HGM] multivar: choose insertion point SendMessage( memo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text ); } VOID TagsPopDown(void) { if (editTagsDialog) ShowWindow(editTagsDialog, SW_HIDE); CheckMenuItem(GetMenu(hwndMain), IDM_Tags, MF_UNCHECKED); editTagsUp = bookUp = addToBookFlag = FALSE; } VOID EitherTagsPopUp(char *tags, char *msg, BOOLEAN edit) { FARPROC lpProc; char *p, *q; if (msg == NULL) msg = ""; p = (char *) malloc(2 * (strlen(tags) + strlen(msg)) + 2); q = p; while (*tags) { if (*tags == '\n') *q++ = '\r'; *q++ = *tags++; } if (*msg != NULLCHAR) { *q++ = '\r'; *q++ = '\n'; while (*msg) { if (*msg == '\n') *q++ = '\r'; *q++ = *msg++; } } *q = NULLCHAR; if (editTagsText != NULL) free(editTagsText); editTagsText = p; canEditTags = edit; CheckMenuItem(GetMenu(hwndMain), IDM_Tags, MF_CHECKED); if (editTagsDialog) { SendMessage(editTagsDialog, WM_INITDIALOG, 0, 0); ShowWindow(editTagsDialog, SW_SHOW); if(bookUp) SetFocus(hwndMain); } else { lpProc = MakeProcInstance((FARPROC)EditTagsDialog, hInst); CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditTags), hwndMain, (DLGPROC)lpProc); FreeProcInstance(lpProc); } editTagsUp = TRUE; } VOID TagsPopUp(char *tags, char *msg) { HWND hwnd = GetActiveWindow(); EitherTagsPopUp(tags, msg, FALSE); SetActiveWindow(hwnd); } VOID EditTagsPopUp(char *tags, char **dest) { resPtr = dest; EitherTagsPopUp(tags, "", TRUE); } VOID EditTagsProc() { if (editTagsUp && !bookUp) { TagsPopDown(); } else { EditTagsEvent(); } } xboard-4.8.0/winboard/wsettings.c0000644000175000001440000012154612422466071013734 00000000000000/* * woptions.h -- Options dialog box routines for WinBoard * * Copyright 2003, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ /* * Engine-settings dialog. The complexity come from an attempt to present the engine-defined options * in a nicey formatted layout. To this end we first run a back-end pre-formatter, which will distribute * the controls over two columns (the minimum required, as some are double width). It also takes care of * grouping options that start with the same word (mainly for "Polyglot ..." options). It assigns relative * suitability to break points between lines, and in the end decides if and where to break up the list * for display in multiple (2*N) columns. * The thus obtained list representing the topology of the layout is then passed to a front-end routine * that generates the actual dialog box from it. */ #include "config.h" #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "backendz.h" #define _(s) T_(s) #define N_(s) s int layoutList[2*MAX_OPTIONS]; int checkList[2*MAX_OPTIONS]; int comboList[2*MAX_OPTIONS]; int buttonList[2*MAX_OPTIONS]; int boxList[2*MAX_OPTIONS]; int groupNameList[2*MAX_OPTIONS]; int breaks[MAX_OPTIONS]; int checks, combos, buttons, layout, groups; char title[MSG_SIZ]; char *engineName, *engineDir, *engineChoice, *engineLine, *nickName, *params; Boolean isUCI, hasBook, storeVariant, v1, addToList, useNick, isUCCI; extern Option installOptions[], matchOptions[]; char *engineList[MAXENGINES] = {""}, *engineMnemonic[MAXENGINES] = {""}; void (*okFunc)(); ChessProgramState *activeCps; Option *activeList; int InstallOK P((void)); typedef int ButtonCallback(HWND h); ButtonCallback *comboCallback; void PrintOpt(int i, int right, Option *optionList) { if(i<0) { if(!right) fprintf(debugFP, "%30s", ""); } else { Option opt = optionList[i]; switch(opt.type) { case Slider: case Spin: fprintf(debugFP, "%20.20s [ +/-]", opt.name); break; case TextBox: case FileName: case PathName: fprintf(debugFP, "%20.20s [______________________________________]", opt.name); break; case Label: fprintf(debugFP, "%41.41s", opt.name); break; case CheckBox: fprintf(debugFP, "[x] %-26.25s", opt.name); break; case ComboBox: fprintf(debugFP, "%20.20s [ COMBO ]", opt.name); break; case Button: case SaveButton: case ResetButton: fprintf(debugFP, "[ %26.26s ]", opt.name); case Message: default: break; } } fprintf(debugFP, right ? "\n" : " "); } void CreateOptionDialogTest(int *list, int nr, Option *optionList) { int line; for(line = 0; line < nr; line+=2) { PrintOpt(list[line+1], 0, optionList); PrintOpt(list[line], 1, optionList); } } void LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionList) { int i, b = strlen(groupName), stop, prefix, right, nextOption, firstButton = buttons; Control lastType, nextType=Label; nextOption = firstOption; while(nextOption < endOption) { checks = combos = 0; stop = 0; lastType = Button; // kludge to make sure leading Spin will not be prefixed // first separate out buttons for later treatment, and collect consecutive checks and combos while(nextOption < endOption && !stop) { switch(nextType = optionList[nextOption].type) { case CheckBox: checkList[checks++] = nextOption; lastType = CheckBox; break; case ComboBox: comboList[combos++] = nextOption; lastType = ComboBox; break; case ResetButton: case SaveButton: case Button: buttonList[buttons++] = nextOption; lastType = Button; break; case TextBox: case ListBox: case FileName: case PathName: case Slider: case Label: case Spin: stop++; default: case Message: ; // cannot happen } nextOption++; } // We now must be at the end, or looking at a spin or textbox (in nextType) if(!stop) nextType = Button; // kudge to flush remaining checks and combos undistorted // Take a new line if a spin follows combos or checks, or when we encounter a textbox if((combos+checks || nextType == TextBox || nextType == ListBox || nextType == FileName || nextType == PathName || nextType == Label) && layout&1) { layoutList[layout++] = -1; } // The last check or combo before a spin will be put on the same line as that spin (prefix) // and will thus not be grouped with other checks and combos prefix = -1; if(nextType == Spin && lastType != Button) { if(lastType == CheckBox) prefix = checkList[--checks]; else if(lastType == ComboBox) prefix = comboList[--combos]; } // if a combo is followed by a textbox, it must stay at the end of the combo/checks list to appear // immediately above the textbox, so treat it as check. (A check would automatically be and remain there.) if((nextType == TextBox || nextType == ListBox || nextType == FileName || nextType == PathName) && lastType == ComboBox) checkList[checks++] = comboList[--combos]; // Now append the checks behind the (remaining) combos to treat them as one group for(i=0; i< checks; i++) comboList[combos++] = checkList[i]; // emit the consecutive checks and combos in two columns right = combos/2; // rounded down if odd! for(i=0; i0; i--) { // extra high text edit breaks[layout/2] = -1; layoutList[layout++] = -1; layoutList[layout++] = -1; } } else if(nextType == TextBox || nextType == FileName || nextType == PathName || nextType == Label) { // A textBox is double width, so must be left-adjusted, and the right column remains empty breaks[layout/2] = lastType == Button ? 0 : 100; layoutList[layout++] = -1; layoutList[layout++] = nextOption - 1; if(optionList[nextOption-1].min) { // extra high text edit: goes right of existing listbox layout -= 2; // remove layoutList[layout-2*optionList[nextOption-1].min-2] = nextOption - 1; } } else if(nextType == Spin) { // A spin will go in the next available position (right to left!). If it had to be prefixed with // a check or combo, this next position must be to the right, and the prefix goes left to it. layoutList[layout++] = nextOption - 1; if(prefix >= 0) layoutList[layout++] = prefix; } } // take a new line if needed if(layout&1) layoutList[layout++] = -1; // emit the buttons belonging in this group; loose buttons are saved for last, to appear at bottom of dialog if(b) { while(buttons > firstButton) layoutList[layout++] = buttonList[--buttons]; if(layout&1) layoutList[layout++] = -1; } } char * EndMatch(char *s1, char *s2) { char *p, *q; p = s1; while(*p) p++; q = s2; while(*q) q++; while(p > s1 && q > s2 && *p == *q) { p--; q--; } if(p[1] == 0) return NULL; return p+1; } void DesignOptionDialog(int nrOpt, Option *optionList) { int k=0, n=0; char buf[MSG_SIZ]; layout = 0; buttons = groups = 0; while(k < nrOpt) { // k steps through 'solitary' options // look if we hit a group of options having names that start with the same word int groupSize = 1, groupNameLength = 50; sscanf(optionList[k].name, "%s", buf); // get first word of option name while(k + groupSize < nrOpt && strstr(optionList[k+groupSize].name, buf) == optionList[k+groupSize].name) { int j; for(j=0; j 3) { // We found a group to terminates the current section LayoutOptions(n, k, "", optionList); // flush all solitary options appearing before the group groupNameList[groups] = groupNameLength; boxList[groups++] = layout; // group start in even entries LayoutOptions(k, k+groupSize, buf, optionList); // flush the group boxList[groups++] = layout; // group end in odd entries k = n = k + groupSize; } else k += groupSize; // small groups are grouped with the solitary options } if(n != k) LayoutOptions(n, k, "", optionList); // flush remaining solitary options // decide if and where we break into two column pairs // Emit buttons and add OK and cancel // for(k=0; k extern HINSTANCE hInst; typedef struct { DLGITEMTEMPLATE item; WORD code; WORD controlType; wchar_t d1, data; WORD creationData; } Item; struct { DLGTEMPLATE header; WORD menu; WORD winClass; wchar_t title[20]; WORD pointSize; wchar_t fontName[14]; Item control[MAX_OPTIONS]; } template = { { DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT, 0, 0, 0, 0, 295, 300 }, 0x0000, 0x0000, L"Engine #1 Settings ", 8, L"MS Sans Serif" }; char * AddCR(char *s) { char *p=s, *q; int n=0; while(p = strchr(p, '\n')) p++, n++; // count linefeeds p = q = malloc(strlen(s) + n + 1); while(*p++ = *s++) if(p[-1] == '\n') p[-1] = '\r', *p++ = '\n'; return q; } void SetOptionValues(HWND hDlg, ChessProgramState *cps, Option *optionList) // Put all current option values in controls, and write option names next to them { HANDLE hwndCombo; int i, k; char **choices, *name; for(i=0; i optionList[j].max) new = optionList[j].max; if(!cps) { *(int*)optionList[j].target = new; break; } changed = 2*(optionList[j].value != new); optionList[j].value = new; break; case TextBox: case FileName: case PathName: if(cps) len = MSG_SIZ - strlen(optionList[j].name) - 9, text = newText; else len = GetWindowTextLength(GetDlgItem(hDlg, 2001+2*i)) + 1, text = (char*) malloc(len); success = GetDlgItemText( hDlg, 2001+2*i, text, len ); if(!success) text[0] = NULLCHAR; // empty string can be valid input if(!cps) { char *p; p = (optionList[j].type != FileName ? strdup(text) : InterpretFileName(text, homeDir)); // all files relative to homeDir! FREE(*(char**)optionList[j].target); *(char**)optionList[j].target = p; free(text); text = p; while(*p++ = *text++) if(p[-1] == '\r') p--; // crush CR break; } changed = strcmp(optionList[j].textValue, newText) != 0; safeStrCpy(optionList[j].textValue, newText, MSG_SIZ - (optionList[j].textValue - optionList[j].name) ); break; case CheckBox: new = IsDlgButtonChecked( hDlg, 2000+2*i ); if(!cps) { *(Boolean*)optionList[j].target = new; break; } changed = 2*(optionList[j].value != new); optionList[j].value = new; break; case ComboBox: choices = (char**) optionList[j].textValue; success = GetDlgItemText( hDlg, 2001+2*i, newText, MSG_SIZ ); if(!success) break; new = -1; for(k=0; k 0) { if(*(char**)optionList[j].target) free(*(char**)optionList[j].target); *(char**)optionList[j].target = strdup(optionList[j].choice[new]); break; } changed = new >= 0 && (optionList[j].value != new); if(changed) optionList[j].value = new; break; case ListBox: if(optionList[j].textValue) *(int*) optionList[j].textValue = SendDlgItemMessage(hDlg, 2001+2*i, LB_GETCURSEL, 0, 0); case Button: default: break; // are treated instantly, so they have been sent already } if(changed == 2) snprintf(buf, MSG_SIZ, "option %s=%d\n", optionList[j].name, new); else if(changed == 1) snprintf(buf, MSG_SIZ, "option %s=%s\n", optionList[j].name, newText); if(changed) SendToProgram(buf, cps); } if(!cps && okFunc) return ((ButtonCallback*) okFunc)(0); return 1; } char *defaultExt[] = { NULL, "pgn", "fen", "exe", "trn", "bin", "log", "ini" }; LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; int i, j, ext; switch( message ) { case WM_INITDIALOG: // CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER)); SetOptionValues(hDlg, activeCps, activeList); SetFocus(GetDlgItem(hDlg, IDCANCEL)); break; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDOK: if(!GetOptionValues(hDlg, activeCps, activeList)) return FALSE; EndDialog( hDlg, 0 ); comboCallback = NULL; activeCps = NULL; return TRUE; case IDCANCEL: EndDialog( hDlg, 1 ); comboCallback = NULL; activeCps = NULL; return TRUE; default: // program-defined push buttons i = LOWORD(wParam); if( i>=2000 && i < 2000+2*(layout+buttons)) { j = layoutList[(i - 2000)/2]; if(j == -2) { char filter[] = "All files\0*.*\0Game files\0*.pgn;*.gam\0Position files\0*.fen;*.epd;*.pos\0" "EXE files\0*.exe;*.jar\0Tournament files (*.trn)\0*.trn\0" "BIN Files\0*.bin\0LOG Files\0*.log\0INI Files\0*.ini\0" "Image files\0*.bmp\0\0"; OPENFILENAME ofn; GetDlgItemText( hDlg, i+3, buf, MSG_SIZ ); ZeroMemory( &ofn, sizeof(ofn) ); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hDlg; ofn.hInstance = hInst; ofn.lpstrFilter = filter; ofn.nFilterIndex = 1L + (ext = activeCps ? 0 : activeList[layoutList[(i-2000)/2+1]].max & 31); ofn.lpstrDefExt = defaultExt[ext]; ofn.lpstrFile = buf; ofn.nMaxFile = sizeof(buf); ofn.lpstrTitle = _("Choose File"); ofn.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_HIDEREADONLY; if( activeList[layoutList[(i-2000)/2+1]].max & 32 ? GetOpenFileName( &ofn ) : GetSaveFileName( &ofn ) ) { SetDlgItemText( hDlg, i+3, buf ); } } else if(j == -3) { GetDlgItemText( hDlg, i+3, buf, MSG_SIZ ); if( BrowseForFolder( _("Choose Folder:"), buf ) ) { SetDlgItemText( hDlg, i+3, buf ); } } if(j < 0) break; if(comboCallback && activeList[j].type == ComboBox && HIWORD(wParam) == CBN_SELCHANGE) { if(j > 5) break; // Yegh! Must solve problem with more than one combobox in dialog (*comboCallback)(hDlg); break; } else if(activeList[j].type == ListBox && HIWORD(wParam) == /*LBN_SELCHANGE*/ LBN_DBLCLK) { ((ButtonCallback *) activeList[j].target)(hDlg); break; } else if( activeList[j].type == SaveButton) GetOptionValues(hDlg, activeCps, activeList); else if( activeList[j].type != Button) break; else if( !activeCps ) { (*(ButtonCallback*) activeList[j].target)(hDlg); break; } snprintf(buf, MSG_SIZ, "option %s\n", activeList[j].name); SendToProgram(buf, activeCps); } break; } break; } return FALSE; } void AddControl(int x, int y, int w, int h, int type, int style, int n) { int i; i = template.header.cdit++; template.control[i].item.style = style; template.control[i].item.dwExtendedStyle = 0; template.control[i].item.x = x; template.control[i].item.y = y; template.control[i].item.cx = w; template.control[i].item.cy = h; template.control[i].item.id = 2000 + n; template.control[i].code = 0xFFFF; template.control[i].controlType = type; template.control[i].d1 = ' '; template.control[i].data = 0; template.control[i].creationData = 0; } void AddOption(int x, int y, Control type, int i) { int extra, num = ES_NUMBER; switch(type) { case Spin+100: num = 0; // needs text control for accepting negative numbers case Slider: case Spin: AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i); AddControl(x+95, y, 50, 11, 0x0081, ES_AUTOHSCROLL | num | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1); break; case TextBox: extra = 13*activeList[layoutList[i/2]].min; // when extra high, left-align and put description text above it AddControl(x+(extra?50:0), y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i); AddControl(x+(extra?50:95), y+(extra?13:0), extra?105:200, 11+(extra?extra-13:0), 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP | (extra ? ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL :0), i+1); break; case ListBox: AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i); extra = 13*activeList[layoutList[i/2]].min; AddControl(x, y+13, 105, 11+extra-13, 0x0083, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_BORDER | LBS_NOTIFY | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1); break; case Label: extra = activeList[layoutList[i/2]].value; AddControl(x+extra, y+1, 290-extra, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i); break; case FileName: case PathName: AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i); AddControl(x+95, y, 180, 11, 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1); AddControl(x+275, y, 20, 12, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i-2); layoutList[i/2-1] = -2 - (type == PathName); break; case CheckBox: AddControl(x, y, 145, 11, 0x0080, BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i); break; case ComboBox: AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i); AddControl(x+95, y-1, !activeCps && x<10 ? 120 : 50, 500, 0x0085, CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_VSCROLL, i+1); break; case Button: case ResetButton: case SaveButton: AddControl(x-2, y, 65, 13, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i); case Message: default: break; } } void CreateDialogTemplate(int *layoutList, int nr, Option *optionList) { int i, ii, j, x=1, y=0, maxY=0, buttonRows, breakPoint = 1000, k=0; template.header.cdit = 0; template.header.cx = 307; buttonRows = (buttons + 1 + 3)/4; // 4 per row, rounded up if(nr > 50) { breakPoint = (nr+2*buttonRows+1)/2 & ~1; template.header.cx = 625; } for(ii=0; ii>1)-2, 301, 13*(boxList[k+1]-boxList[k]>>1)+8, 0x0082, WS_VISIBLE | WS_CHILD | SS_BLACKFRAME, 2400); AddControl(x+60, y+13*(i>>1)-6, 10*groupNameList[k]/3, 10, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, 2*(ii+MAX_OPTIONS)); } j = layoutList[i]; if(j >= 0) { int neg = (optionList[j].type == Spin && optionList[j].min < 0 ? 100 : 0); // flags spin with negative range AddOption(x+155-150*(i&1), y+13*(i>>1)+5, optionList[j].type + neg, 2*i); // listboxes have the special power to adjust the width of the column they are in if(optionList[j].type == ListBox) x -= optionList[j].value, template.header.cx -= optionList[j].value; } if(k < groups && ii+1 == boxList[k+1]) { k += 2; y += 4; } if(ii+1 >= breakPoint && breaks[ii+1>>1] >= 0) { x += 318; maxY = y+13*(ii+1>>1)+5; y = -13*(ii+1>>1); breakPoint = 1000; } } // add butons at the bottom of dialog window y += 13*(nr>>1)+5; for(i=0; ioption; snprintf(title, MSG_SIZ, _("%s Engine Settings (%s)"), T_(cps->which), cps->tidy); DesignOptionDialog(cps->nrOptions, cps->option); CreateDialogTemplate(layoutList, layout, cps->option); DialogBoxIndirect( hInst, &template.header, hwnd, (DLGPROC)lpProc ); FreeProcInstance(lpProc); return; } int EnterGroup P((HWND hDlg)); static int engineNr, selected; int InstallOK() { if(selected >= 0) { ASSIGN(engineLine, engineList[selected]); } if(engineLine[0] == '#') { DisplayError(_("Select single engine from the group"), 0); return 0; } if(isUCCI) isUCI = 2; if(!engineNr) Load(&first, 0); else Load(&second, 1); return 1; } Option installOptions[] = { // { 0, 0, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, { 195, 14, 0, NULL, (void*) &EnterGroup, (char*) &selected, engineMnemonic, ListBox, N_("Select engine from list:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") }, { 0, 0, 0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Nickname (optional):") }, { 0, 0, 0, NULL, (void*) &useNick, NULL, NULL, CheckBox, N_("Use nickname in PGN tag") }, { 0, 0, 32+3, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine (.exe or .jar):") }, { 0, 0, 0, NULL, (void*) ¶ms, NULL, NULL, TextBox, N_("command-line parameters:") }, { 0, 0, 0, NULL, (void*) &wbOptions, NULL, NULL, TextBox, N_("Special WinBoard options:") }, { 0, 0, 0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("directory:") }, { 95, 0, 0, NULL, NULL, NULL, NULL, Label, N_("(Directory will be derived from engine path when left empty)") }, { 0, 0, 0, NULL, (void*) &addToList, NULL, NULL, CheckBox, N_("Add this engine to the list") }, { 0, 0, 0, NULL, (void*) &hasBook, NULL, NULL, CheckBox, N_("Must not use GUI book") }, { 0, 0, 0, NULL, (void*) &storeVariant, NULL, NULL, CheckBox, N_("Force current variant with this engine") }, { 0, 0, 0, NULL, (void*) &isUCI, NULL, NULL, CheckBox, N_("UCI") }, { 0, 0, 0, NULL, (void*) &v1, NULL, NULL, CheckBox, N_("WB protocol v1 (skip waiting for features)") }, { 0, 0, 0, NULL, (void*) &isUCCI, NULL, NULL, CheckBox, N_("UCCI / USI (uses specified /uxiAdapter)") }, { 0, 1, 0, NULL, (void*) &InstallOK, "", NULL, EndMark , "" } }; void GenericPopup(HWND hwnd, Option *optionList) { FARPROC lpProc = MakeProcInstance( (FARPROC) SettingsProc, hInst ); int n=0; while(optionList[n].type != EndMark) n++; activeCps = NULL; activeList = optionList; DesignOptionDialog(n, optionList); CreateDialogTemplate(layoutList, layout, optionList); DialogBoxIndirect( hInst, &template.header, hwnd, (DLGPROC)lpProc ); FreeProcInstance(lpProc); return; } int EnterGroup(HWND hDlg) { char buf[MSG_SIZ]; HANDLE hwndCombo = GetDlgItem(hDlg, 2001+2*1); int i = SendDlgItemMessage(hDlg, 2001+2*1, LB_GETCURSEL, 0, 0); if(i == 0) buf[0] = NULLCHAR; // back to top level else if(engineList[i][0] == '#') safeStrCpy(buf, engineList[i], MSG_SIZ); // group header, open group else { ASSIGN(engineLine, engineList[i]); if(isUCCI) isUCI = 2; if(!engineNr) Load(&first, 0); else Load(&second, 1); EndDialog( hDlg, 0 ); return 0; // normal line, select engine } installOptions[0].max = NamesToList(firstChessProgramNames, engineList, engineMnemonic, buf); // replace list by only the group contents SendMessage(hwndCombo, LB_RESETCONTENT, 0, 0); SendMessage(hwndCombo, LB_ADDSTRING, 0, (LPARAM) buf); for(i=1; i= 0) { ASSIGN(engineLine, engineList[selected]); } if(engineLine[0] == '#') { DisplayError(_("Select single theme from the group"), 0); return 0; } LoadTheme(); return 1; } Option themeOptions[] = { { 195, 14, 0, NULL, (void*) &PickTheme, (char*) &selected, engineMnemonic, ListBox, N_("Select theme from list:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("or specify new theme below:") }, { 0, 0, 0, NULL, (void*) &nickName, NULL, NULL, TextBox, N_("Theme name:") }, { 0, 0, 0, NULL, (void*) &appData.useBitmaps, NULL, NULL, CheckBox, N_("Use board textures") }, { 0, 0, 32+0, NULL, (void*) &appData.liteBackTextureFile, NULL, NULL, FileName, N_("Light-square texture:") }, { 0, 0, 32+0, NULL, (void*) &appData.darkBackTextureFile, NULL, NULL, FileName, N_("Dark-square texture:") }, { 0, 0, 3, NULL, (void*) &appData.darkBackTextureMode, "", NULL, Spin, N_("Dark reorientation mode:") }, { 0, 0, 3, NULL, (void*) &appData.liteBackTextureMode, "", NULL, Spin, N_("Light reorientation mode:") }, { 0, 0, 0, NULL, (void*) &appData.useBorder, NULL, NULL, CheckBox, N_("Draw border around board") }, { 0, 0, 32+0, NULL, (void*) &appData.border, NULL, NULL, FileName, N_("Optional border bitmap:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_(" Beware: a specified piece font will prevail over piece bitmaps") }, { 0, 0, 0, NULL, (void*) &appData.pieceDirectory, NULL, NULL, PathName, N_("Directory with piece bitmaps:") }, { 0, 0, 0, NULL, (void*) &appData.useFont, NULL, NULL, CheckBox, N_("Use piece font") }, { 0, 50, 150, NULL, (void*) &appData.fontPieceSize, "", NULL, Spin, N_("Font size (%):") }, { 0, 0, 0, NULL, (void*) &appData.renderPiecesWithFont, NULL, NULL, TextBox, N_("Font name:") }, { 0, 0, 0, NULL, (void*) &appData.fontToPieceTable, NULL, NULL, TextBox, N_("Font piece to char:") }, // { 0, 0, 0, NULL, (void*) &DeleteTheme, NULL, NULL, Button, N_("Up") }, // { 0, 0, 0, NULL, (void*) &DeleteTheme, NULL, NULL, Button, N_("Down") }, { 0, 0, 0, NULL, (void*) &DeleteTheme, NULL, NULL, Button, N_("Delete Theme") }, { 0, 1, 0, NULL, (void*) &ThemeOK, "", NULL, EndMark , "" } }; void DeleteTheme (HWND hDlg) { char *p, *q; int i, selected = SendDlgItemMessage(hDlg, 2001+2*1, LB_GETCURSEL, 0, 0); HANDLE hwndCombo = GetDlgItem(hDlg, 2001+2*1); if(selected < 0) return; if(p = strstr(appData.themeNames, engineList[selected])) { if(q = strchr(p, '\n')) strcpy(p, q+1); } themeOptions[0].max = NamesToList(appData.themeNames, engineList, engineMnemonic, ""); // replace list by only the group contents SendMessage(hwndCombo, LB_RESETCONTENT, 0, 0); SendMessage(hwndCombo, LB_ADDSTRING, 0, (LPARAM) ""); for(i=1; i(::?ϙ1c~@~x@~x@~@`??<???xboard-4.8.0/winboard/shogibitmaps/sb58o.bmp0000644000175000001440000000101612420374633015657 00000000000000BM>(::<|o~{y|s'OO?0??ϟ??xboard-4.8.0/winboard/shogibitmaps/sa58o.bmp0000644000175000001440000000101612420374633015656 00000000000000BM>(::????~?y9ߘy?ϟO Cq??????????xboard-4.8.0/winboard/shogibitmaps/README0000644000175000001440000000012712420374633015101 00000000000000These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE coming with xboard. xboard-4.8.0/winboard/shogibitmaps/largeking.bmp0000644000175000001440000042746212420374633016703 00000000000000BM2/6(.xboard-4.8.0/winboard/shogibitmaps/sl58w.bmp0000644000175000001440000000101612420374633015701 00000000000000BM>(::??????xboard-4.8.0/winboard/shogibitmaps/sn58w.bmp0000644000175000001440000000101612420374633015703 00000000000000BM>(::??????xboard-4.8.0/winboard/shogibitmaps/sf58o.bmp0000644000175000001440000000101612420374633015663 00000000000000BM>(::?|D|  `Fbqx|Ic1{x{8ss'qs7''3Hs?>???xboard-4.8.0/winboard/shogibitmaps/sp58o.bmp0000644000175000001440000000101612420374633015675 00000000000000BM>(::??????p|?x?38?9>~??xboard-4.8.0/winboard/shogibitmaps/sp58w.bmp0000644000175000001440000000101612420374633015705 00000000000000BM>(::???????xboard-4.8.0/winboard/shogibitmaps/sc58o.bmp0000644000175000001440000000101612420374633015660 00000000000000BM>(::??x?~~>G>c~|}|0 |<|<8?(::??<~???88qǏ?????xboard-4.8.0/winboard/shogibitmaps/sr58o.bmp0000644000175000001440000000101612420374633015677 00000000000000BM>(::|oggc??9a<f{fGf3&3dć????xboard-4.8.0/winboard/shogibitmaps/sk58w.bmp0000644000175000001440000000101612420374633015700 00000000000000BM>(::?????????xboard-4.8.0/winboard/shogibitmaps/sg58o.bmp0000644000175000001440000000101612420374633015664 00000000000000BM>(::?988??xboard-4.8.0/winboard/shogibitmaps/sw58o.bmp0000644000175000001440000000101612420374633015704 00000000000000BM>(::?qlj! 9998>߸~~}1 @`<|0#Ǐ?????xboard-4.8.0/winboard/shogibitmaps/sw58w.bmp0000644000175000001440000000101612420374633015714 00000000000000BM>(::??????xboard-4.8.0/winboard/shogibitmaps/king.bmp0000644000175000001440000000624612420374633015661 00000000000000BM 6(--pxdWHm1:7TgooodccZZZ@@A877/*.##$                                                 xboard-4.8.0/winboard/shogibitmaps/su58o.bmp0000644000175000001440000000101612420374633015702 00000000000000BM>(::???xboard-4.8.0/winboard/shogibitmaps/ss58o.bmp0000644000175000001440000000101612420374633015700 00000000000000BM>(::?{9??9<1@c??????xboard-4.8.0/winboard/shogibitmaps/sr58w.bmp0000644000175000001440000000101612420374633015707 00000000000000BM>(::?????????xboard-4.8.0/winboard/shogibitmaps/sk58o.bmp0000644000175000001440000000101612420374633015670 00000000000000BM>(::x0$<<<~|gC?I?Lb?fcs{ߎpx?????xboard-4.8.0/winboard/shogibitmaps/sl58o.bmp0000644000175000001440000000101612420374633015671 00000000000000BM>(::}''33?@@9Crx|xs??xboard-4.8.0/winboard/wsockerr.c0000644000175000001440000000714112420374633013536 00000000000000/* * wsockerr.c * * Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ /* Windows sockets error map */ /* These messages ought to be in the Windows message catalog! */ #include #include #include "wsockerr.h" ErrorMap errmap[] = { {WSAEINTR, "Interrupted system call"}, {WSAEBADF, "Bad file number"}, {WSAEACCES, "Permission denied"}, {WSAEFAULT, "Bad address"}, {WSAEINVAL, "Invalid argument"}, {WSAEMFILE, "Too many open files"}, {WSAEWOULDBLOCK, "Operation would block"}, {WSAEINPROGRESS, "Operation now in progress"}, {WSAEALREADY, "Operation already in progress"}, {WSAENOTSOCK, "Socket operation on non-socket"}, {WSAEMSGSIZE, "Message too long"}, {WSAEPROTOTYPE, "Protocol wrong type for socket"}, {WSAENOPROTOOPT, "Protocol not available"}, {WSAEPROTONOSUPPORT, "Protocol not supported"}, {WSAESOCKTNOSUPPORT, "Socket type not supported"}, {WSAEOPNOTSUPP, "Operation not supported on socket"}, {WSAEPFNOSUPPORT, "Protocol family not supported"}, {WSAEAFNOSUPPORT, "Address family not supported by protocol family"}, {WSAEADDRINUSE, "Address already in use"}, {WSAEADDRNOTAVAIL, "Can't assign requested address"}, {WSAENETDOWN, "Network is down"}, {WSAENETUNREACH, "Network is unreachable"}, {WSAENETRESET, "Network dropped connection on reset"}, {WSAECONNABORTED, "Software caused connection abort"}, {WSAECONNRESET, "Connection reset by peer"}, {WSAENOBUFS, "No buffer space available"}, {WSAEISCONN, "Socket is already connected"}, {WSAENOTCONN, "Socket is not connected"}, {WSAESHUTDOWN, "Can't send after socket shutdown"}, {WSAETOOMANYREFS, "Too many references: can't splice"}, {WSAETIMEDOUT, "Connection timed out"}, {WSAECONNREFUSED, "Connection refused"}, {WSAELOOP, "Too many levels of symbolic links"}, {WSAENAMETOOLONG, "File name too long"}, {WSAEHOSTDOWN, "Host is down"}, {WSAEHOSTUNREACH, "No route to host"}, {WSAENOTEMPTY, "Directory not empty"}, {WSAEPROCLIM, "Too many processes"}, {WSAEUSERS, "Too many users"}, {WSAEDQUOT, "Disc quota exceeded"}, {WSAESTALE, "Stale NFS file handle"}, {WSAEREMOTE, "Too many levels of remote in path"}, {WSAEDISCON, "Undocumented Winsock error code WSAEDISCON"}, {WSASYSNOTREADY, "Winsock subsystem unusable"}, {WSAVERNOTSUPPORTED, "Required Winsock version is not supported"}, {WSANOTINITIALISED, "Winsock not initialized"}, {WSAHOST_NOT_FOUND, "Host name not found by name server (authoritative)"}, {WSATRY_AGAIN, "Host name not found by name server (nonauthoritative), or name server failure"}, {WSANO_RECOVERY, "Nonrecoverable name server error"}, {WSANO_DATA, "Host name has no address data of required type"}, {0, NULL} }; xboard-4.8.0/winboard/jaws.c0000644000175000001440000013261412420374633012647 00000000000000/* * JAWS.c -- Code for Windows front end to XBoard to use it with JAWS * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * XBoard borrows its colors and the bitmaps.xchess bitmap set from XChess, * which was written and is copyrighted by Wayne Christopher. * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ // This file collects all patches for the JAWS version, so they can all be included in winboard.c // in one big swoop. At the bottom of this file you can read instructions for how to patch // WinBoard to work with JAWS with the aid of this file. Note that the code in this file // is for WinBoard 4.3 and later; for older WB versions you would have to throw out the // piece names for all pieces from Guard to Unicorn, #define ONE as '1', AAA as 'a', // BOARD_LEFT as 0, BOARD_RGHT and BOARD_HEIGHT as 8, and set holdingssizes to 0. // You will need to build with jaws.rc in stead of winboard.rc. // from resource.h #define IDM_PossibleAttackMove 1800 #define IDM_PossibleAttacked 1801 #define IDM_SayMachineMove 1802 #define IDM_ReadRow 1803 #define IDM_ReadColumn 1804 #define IDM_SayCurrentPos 1805 #define IDM_SayAllBoard 1806 #define IDM_SayUpperDiagnols 1807 #define IDM_SayLowerDiagnols 1808 #define IDM_SayClockTime 1810 #define IDM_SayWhosTurn 1811 #define IDM_SayKnightMoves 1812 #define ID_SHITTY_HI 1813 #define IDM_SayWhitePieces 1816 #define IDM_SayBlackPieces 1817 // from common.h, but 'extern' added to it, so the actual declaraton can remain in backend.c extern long whiteTimeRemaining, blackTimeRemaining, timeControl, timeIncrement; // from moves.c, added WinBoard_F piece types and ranks / files char *squareToChar[] = { "ay", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l" }; char *squareToNum[] = {"naught", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; char *ordinals[] = {"zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "nineth"}; char *pieceToName[] = { "White Pawn", "White Knight", "White Bishop", "White Rook", "White Queen", "White Guard", "White Elephant", "White Arch Bishop", "White Chancellor", "White General", "White Man", "White Cannon", "White Night Rider", "White Crowned Bishop", "White Crowned Rook", "White Grass Hopper", "White Veteran", "White Falcon", "White Amazon", "White Snake", "White Unicorn", "White King", "Black Pawn", "Black Knight", "Black Bishop", "Black Rook", "Black Queen", "Black Guard", "Black Elephant", "Black Arch Bishop", "Black Chancellor", "Black General", "Black Man", "Black Cannon", "Black Night Rider", "Black Crowned Bishop", "Black Crowned Rook", "Black Grass Hopper", "Black Veteran", "Black Falcon", "Black Amazon", "Black Snake", "Black Unicorn", "Black King", "Empty" }; char *pieceTypeName[] = { "Pawn", "Knight", "Bishop", "Rook", "Queen", "Guard", "Elephant", "Arch Bishop", "Chancellor", "General", "Man", "Cannon", "Night Rider", "Crowned Bishop", "Crowned Rook", "Grass Hopper", "Veteran", "Falcon", "Amazon", "Snake", "Unicorn", "King", "Pawn", "Knight", "Bishop", "Rook", "Queen", "Guard", "Elephant", "Arch Bishop", "Chancellor", "General", "Man", "Cannon", "Night Rider", "Crowned Bishop", "Crowned Rook", "Grass Hopper", "Veteran", "Falcon", "Amazon", "Snake", "Unicorn", "King", "Empty" }; int CoordToNum(c) char c; { if(isdigit(c)) return c - ONE; if(c >= 'a') return c - AAA; return 0; } char* PieceToName(p, i) ChessSquare p; int i; { if(i) return pieceToName[(int) p]; return pieceTypeName[(int) p]; } char* SquareToChar(x) int x; { return squareToChar[x - BOARD_LEFT]; } char* SquareToNum(y) int y; { return squareToNum[y + (gameInfo.boardHeight < 10)]; } // from winboard.c: all new routines #define JFWAPI __declspec(dllimport) JFWAPI BOOL WINAPI JFWSayString (LPCTSTR lpszStrinToSpeak, BOOL bInterrupt); typedef JFWAPI BOOL (WINAPI *PSAYSTRING)(LPCTSTR lpszStrinToSpeak, BOOL bInterrupt); PSAYSTRING RealSayString; VOID SayString(char *mess, BOOL flag) { // for debug file static char buf[8000], *p; int l = strlen(buf); if(appData.debugMode) fprintf(debugFP, "SAY '%s'\n", mess); if(l) buf[l++] = ' '; // separate by space from previous safeStrCpy(buf+l, _(mess), 8000-1-l); // buffer if(!flag) return; // wait for flush if(p = StrCaseStr(buf, "Xboard adjudication:")) { int i; for(i=19; i>1; i--) p[i] = p[i-1]; p[1] = ' '; } RealSayString(buf, !strcmp(mess, " ")); // kludge to indicate flushing of interruptable speach if(appData.debugMode) fprintf(debugFP, "SPEAK '%s'\n", buf); buf[0] = NULLCHAR; } //static int fromX = 0, fromY = 0; static int oldFromX, oldFromY; static int timeflag; static int suppressClocks = 0; static int suppressOneKey = 0; static HANDLE hAccelJAWS; typedef struct { char *name; int code; } MenuItemDesc; MenuItemDesc menuItemJAWS[] = { {"Say Clock &Time\tAlt+T", IDM_SayClockTime }, {"-", 0 }, {"Say Last &Move\tAlt+M", IDM_SayMachineMove }, {"Say W&ho's Turn\tAlt+X", IDM_SayWhosTurn }, {"-", 0 }, {"Say Complete &Position\tAlt+P",IDM_SayAllBoard }, {"Say &White Pieces\tAlt+W", IDM_SayWhitePieces }, {"Say &Black Pieces\tAlt+B", IDM_SayBlackPieces }, {"Say Board &Rank\tAlt+R", IDM_ReadRow }, {"Say Board &File\tAlt+F", IDM_ReadColumn }, {"-", 0 }, {"Say &Upper Diagonals\tAlt+U", IDM_SayUpperDiagnols }, {"Say &Lower Diagonals\tAlt+L", IDM_SayLowerDiagnols }, {"Say K&night Moves\tAlt+N", IDM_SayKnightMoves }, {"Say Current &Square\tAlt+S", IDM_SayCurrentPos }, {"Say &Attacks\tAlt+A", IDM_PossibleAttackMove }, {"Say Attacke&d\tAlt+D", IDM_PossibleAttacked }, {NULL, 0} }; ACCEL acceleratorsJAWS[] = { {FVIRTKEY|FALT, 'T', IDM_SayClockTime }, {FVIRTKEY|FALT, 'M', IDM_SayMachineMove }, {FVIRTKEY|FALT, 'X', IDM_SayWhosTurn }, {FVIRTKEY|FALT, 'P', IDM_SayAllBoard }, {FVIRTKEY|FALT, 'W', IDM_SayWhitePieces }, {FVIRTKEY|FALT, 'B', IDM_SayBlackPieces }, {FVIRTKEY|FALT, 'R', IDM_ReadRow }, {FVIRTKEY|FALT, 'F', IDM_ReadColumn }, {FVIRTKEY|FALT, 'U', IDM_SayUpperDiagnols }, {FVIRTKEY|FALT, 'L', IDM_SayLowerDiagnols }, {FVIRTKEY|FALT, 'N', IDM_SayKnightMoves }, {FVIRTKEY|FALT, 'S', IDM_SayCurrentPos }, {FVIRTKEY|FALT, 'A', IDM_PossibleAttackMove }, {FVIRTKEY|FALT, 'D', IDM_PossibleAttacked } }; void AdaptMenu() { HMENU menuMain, menuJAWS; MENUBARINFO helpMenuInfo; int i; helpMenuInfo.cbSize = sizeof(helpMenuInfo); menuMain = GetMenu(hwndMain); menuJAWS = CreatePopupMenu(); for(i=0; menuItemJAWS[i].name; i++) { if(menuItemJAWS[i].name[0] == '-') AppendMenu(menuJAWS, MF_SEPARATOR, (UINT_PTR) 0, NULL); else AppendMenu(menuJAWS, MF_ENABLED|MF_STRING, (UINT_PTR) menuItemJAWS[i].code, (LPCTSTR) _(menuItemJAWS[i].name)); } InsertMenu(menuMain, 7, MF_BYPOSITION|MF_POPUP|MF_ENABLED|MF_STRING, (UINT_PTR) menuJAWS, "&JAWS"); oldMenuItemState[8] = oldMenuItemState[7]; DrawMenuBar(hwndMain); } BOOL InitJAWS() { // to be called at beginning of WinMain, after InitApplication and InitInstance HINSTANCE hApi = LoadLibrary("jfwapi32.dll"); if(!hApi) { DisplayInformation("Missing jfwapi32.dll"); return (FALSE); } RealSayString = (PSAYSTRING)GetProcAddress(hApi, "JFWSayString"); if(!RealSayString) { DisplayInformation("SayString returned a null pointer"); return (FALSE); } { // [HGM] kludge to reduce need for modification of winboard.c: make tinyLayout menu identical // to standard layout, so that code for switching between them does not have to be deleted int i; AdaptMenu(); menuBarText[0][8] = menuBarText[0][7]; menuBarText[0][7] = "&JAWS"; for(i=0; i<9; i++) menuBarText[1][i] = menuBarText[0][i]; } hAccelJAWS = CreateAcceleratorTable(acceleratorsJAWS, 14); /* initialize cursor position */ fromX = fromY = 0; SetHighlights(fromX, fromY, -1, -1); DrawPosition(FALSE, NULL); oldFromX = oldFromY = -1; if(hwndConsole) SetFocus(hwndConsole); return TRUE; } int beeps[] = { 1, 0, 0, 0, 0 }; int beepCodes[] = { 0, MB_OK, MB_ICONERROR, MB_ICONQUESTION, MB_ICONEXCLAMATION, MB_ICONASTERISK }; static int dropX = -1, dropY = -1; VOID KeyboardEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { ChessSquare currentPiece; char *piece, *xchar, *ynum ; int n, beepType = 1; // empty beep if(fromX == -1 || fromY == -1) { // if we just dropped piece, stay at that square fromX = dropX; fromY = dropY; dropX = dropY = -1; // but only once } if(fromX == -1 || fromY == -1) { fromX = BOARD_LEFT; fromY = 0; } switch(wParam) { case VK_LEFT: if(fromX == BOARD_RGHT+1) fromX -= 2; else if(fromX == BOARD_LEFT) { if(fromY >= BOARD_HEIGHT - gameInfo.holdingsSize) fromX -= 2; else beepType = 0; } else if(fromX > BOARD_LEFT) fromX--; else beepType = 0; // off-board beep break; case VK_RIGHT: if(fromX == BOARD_LEFT-2) fromX += 2; else if(fromX == BOARD_RGHT-1) { if(fromY < gameInfo.holdingsSize) fromX += 2; else beepType = 0; } else if(fromX < BOARD_RGHT-1) fromX++; else beepType = 0; break; case VK_UP: if(fromX == BOARD_RGHT+1) { if(fromY < gameInfo.holdingsSize - 1) fromY++; else beepType = 0; } else if(fromY < BOARD_HEIGHT-1) fromY++; else beepType = 0; break; case VK_DOWN: if(fromX == BOARD_LEFT-2) { if(fromY > BOARD_HEIGHT - gameInfo.holdingsSize) fromY--; else beepType = 0; } else if(fromY > 0) fromY--; else beepType = 0; break; } SetHighlights(fromX, fromY, -1, -1); DrawPosition(FALSE, NULL); currentPiece = boards[currentMove][fromY][fromX]; piece = PieceToName(currentPiece,1); if(beepType == 1 && currentPiece != EmptySquare) beepType = currentPiece < (int) BlackPawn ? 2 : 3; // white or black beep if(beeps[beepType] == beeps[1] && (fromX == BOARD_RGHT+1 || fromX == BOARD_LEFT-2)) beepType = 4; // holdings beep beepType = beeps[beepType]%6; if(beepType) MessageBeep(beepCodes[beepType]); if(fromX == BOARD_LEFT - 2) { SayString("black holdings", FALSE); if(currentPiece != EmptySquare) { char buf[MSG_SIZ]; n = boards[currentMove][fromY][1]; snprintf(buf, MSG_SIZ, "%d %s%s", n, PieceToName(currentPiece,0), n == 1 ? "" : "s"); SayString(buf, FALSE); } SayString(" ", TRUE); } else if(fromX == BOARD_RGHT + 1) { SayString("white holdings", FALSE); if(currentPiece != EmptySquare) { char buf[MSG_SIZ]; n = boards[currentMove][fromY][BOARD_WIDTH-2]; snprintf(buf, MSG_SIZ,"%d %s%s", n, PieceToName(currentPiece,0), n == 1 ? "" : "s"); SayString(buf, FALSE); } SayString(" ", TRUE); } else if(fromX >= BOARD_LEFT && fromX < BOARD_RGHT) { char buf[MSG_SIZ]; xchar = SquareToChar(fromX); ynum = SquareToNum(fromY); if(currentPiece != EmptySquare) { snprintf(buf, MSG_SIZ, "%s %s %s", xchar, ynum, piece); } else snprintf(buf, MSG_SIZ, "%s %s", xchar, ynum); SayString(buf, FALSE); SayString(" ", TRUE); } return; } int PosFlags(int nr); typedef struct { int rf, ff, rt, ft; int onlyCaptures; int count; } ReadClosure; extern void ReadCallback P((Board board, int flags, ChessMove kind, int rf, int ff, int rt, int ft, VOIDSTAR closure)); void ReadCallback(board, flags, kind, rf, ff, rt, ft, closure) Board board; int flags; ChessMove kind; int rf, ff, rt, ft; VOIDSTAR closure; { register ReadClosure *cl = (ReadClosure *) closure; ChessSquare possiblepiece; char *piece, *xchar, *ynum ; //if(appData.debugMode) fprintf(debugFP, "%c%c%c%c\n", ff+AAA, rf+ONE, ft+AAA, rt+ONE); if(cl->ff == ff && cl->rf == rf) { possiblepiece = board[rt][ft]; if(possiblepiece != EmptySquare) { piece = PieceToName(possiblepiece,1); xchar = SquareToChar(ft); ynum = SquareToNum(rt); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); cl->count++; } } if(cl->ft == ft && cl->rt == rt) { possiblepiece = board[rf][ff]; piece = PieceToName(possiblepiece,1); xchar = SquareToChar(ff); ynum = SquareToNum(rf); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); cl->count++; } } VOID PossibleAttackMove() { ReadClosure cl; ChessSquare piece, victim; int removedSelectedPiece = 0, swapColor; //if(appData.debugMode) fprintf(debugFP, "PossibleAttackMove %d %d %d %d\n", fromX, fromY, oldFromX, oldFromY); if(fromY < 0 || fromY >= BOARD_HEIGHT) return; if(fromX < BOARD_LEFT || fromX >= BOARD_RGHT) { SayString("holdings",TRUE); return; } piece = boards[currentMove][fromY][fromX]; if(piece == EmptySquare) { // if square is empty, try to substitute selected piece if(oldFromX >= 0 && oldFromY >= 0) { piece = boards[currentMove][oldFromY][oldFromX]; boards[currentMove][oldFromY][oldFromX] = EmptySquare; removedSelectedPiece = 1; SayString("Your", FALSE); SayString(PieceToName(piece, 0), FALSE); SayString("would have", FALSE); } else { SayString("You must select a piece first", TRUE); return; } } victim = boards[currentMove][fromY][fromX]; boards[currentMove][fromY][fromX] = piece; // make sure piece is actally there SayString("possible captures from here are", FALSE); swapColor = piece < (int)BlackPawn && !WhiteOnMove(currentMove) || piece >= (int)BlackPawn && WhiteOnMove(currentMove); cl.count = 0; cl.rf = fromY; cl.ff = fromX; cl.rt = cl.ft = -1; GenLegal(boards[currentMove], PosFlags(currentMove + swapColor), ReadCallback, (VOIDSTAR) &cl); if(cl.count == 0) SayString("None", FALSE); SayString("", TRUE); // flush boards[currentMove][fromY][fromX] = victim; // repair if( removedSelectedPiece ) boards[currentMove][oldFromY][oldFromX] = piece; } VOID PossibleAttacked() { ReadClosure cl; ChessSquare piece = EmptySquare, victim; if(fromY < 0 || fromY >= BOARD_HEIGHT) return; if(fromX < BOARD_LEFT || fromX >= BOARD_RGHT) { SayString("holdings",TRUE); return; } if(oldFromX >= 0 && oldFromY >= 0) { // if piece is selected, remove it piece = boards[currentMove][oldFromY][oldFromX]; boards[currentMove][oldFromY][oldFromX] = EmptySquare; } SayString("Pieces that can capture you are", FALSE); victim = boards[currentMove][fromY][fromX]; // put dummy piece on target square, to activate Pawn captures boards[currentMove][fromY][fromX] = WhiteOnMove(currentMove) ? WhiteQueen : BlackQueen; cl.count = 0; cl.rt = fromY; cl.ft = fromX; cl.rf = cl.ff = -1; GenLegal(boards[currentMove], PosFlags(currentMove+1), ReadCallback, (VOIDSTAR) &cl); if(cl.count == 0) SayString("None", FALSE); SayString("You are defended by", FALSE); boards[currentMove][fromY][fromX] = WhiteOnMove(currentMove) ? BlackQueen : WhiteQueen; cl.count = 0; cl.rt = fromY; cl.ft = fromX; cl.rf = cl.ff = -1; GenLegal(boards[currentMove], PosFlags(currentMove), ReadCallback, (VOIDSTAR) &cl); if(cl.count == 0) SayString("None", FALSE); SayString("", TRUE); // flush boards[currentMove][fromY][fromX] = victim; // put back original occupant if(oldFromX >= 0 && oldFromY >= 0) { // put back possibl selected piece boards[currentMove][oldFromY][oldFromX] = piece; } } VOID ReadRow() { ChessSquare currentpiece; char *piece, *xchar, *ynum ; int xPos, count=0; ynum = SquareToNum(fromY); if(fromY < 0) return; for (xPos=BOARD_LEFT; xPos BOARD_LEFT && fromY < BOARD_HEIGHT-1) { SayString("The diagnol squares to your upper left contain", FALSE); yPos = fromY+1; xPos = fromX-1; while(yPos=BOARD_LEFT) { currentpiece = boards[currentMove][yPos][xPos]; piece = PieceToName(currentpiece,1); xchar = SquareToChar(xPos); ynum = SquareToNum(yPos); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); yPos++; xPos--; } } else SayString("There is no squares to your upper left", FALSE); SayString("", TRUE); // flush } VOID SayLowerDiagnols() { ChessSquare currentpiece; char *piece, *xchar, *ynum ; int yPos, xPos; if(fromX < 0 || fromY < 0) return; if(fromX < BOARD_RGHT-1 && fromY > 0) { SayString("The diagnol squares to your lower right contain", FALSE); yPos = fromY-1; xPos = fromX+1; while(yPos>=0 && xPos BOARD_LEFT && fromY > 0) { SayString("The diagnol squares to your lower left contain", FALSE); yPos = fromY-1; xPos = fromX-1; while(yPos>=0 && xPos>=BOARD_LEFT) { currentpiece = boards[currentMove][yPos][xPos]; piece = PieceToName(currentpiece,1); xchar = SquareToChar(xPos); ynum = SquareToNum(yPos); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); yPos--; xPos--; } } else SayString("There is no squares to your lower left", FALSE); SayString("", TRUE); // flush } VOID SayKnightMoves() { ChessSquare currentpiece, oldpiece; char *piece, *xchar, *ynum ; oldpiece = boards[currentMove][fromY][fromX]; if(oldpiece == WhiteKnight || oldpiece == BlackKnight) SayString("The possible squares a Knight could move to are", FALSE); else SayString("The squares a Knight could possibly attack from are", FALSE); if (fromY+2 < BOARD_HEIGHT && fromX-1 >= BOARD_LEFT) { currentpiece = boards[currentMove][fromY+2][fromX-1]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX-1); ynum = SquareToNum(fromY+2); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY+2 < BOARD_HEIGHT && fromX+1 < BOARD_RGHT) { currentpiece = boards[currentMove][fromY+2][fromX+1]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX+1); ynum = SquareToNum(fromY+2); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY+1 < BOARD_HEIGHT && fromX+2 < BOARD_RGHT) { currentpiece = boards[currentMove][fromY+1][fromX+2]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX+2); ynum = SquareToNum(fromY+1); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY-1 >= 0 && fromX+2 < BOARD_RGHT) { currentpiece = boards[currentMove][fromY-1][fromX+2]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX+2); ynum = SquareToNum(fromY-1); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY-2 >= 0 && fromX+1 < BOARD_RGHT) { currentpiece = boards[currentMove][fromY-2][fromX+1]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX+1); ynum = SquareToNum(fromY-2); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY-2 >= 0 && fromX-1 >= BOARD_LEFT) { currentpiece = boards[currentMove][fromY-2][fromX-1]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX-1); ynum = SquareToNum(fromY-2); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY-1 >= 0 && fromX-2 >= BOARD_LEFT) { currentpiece = boards[currentMove][fromY-1][fromX-2]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX-2); ynum = SquareToNum(fromY-1); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } if (fromY+1 < BOARD_HEIGHT && fromX-2 >= BOARD_LEFT) { currentpiece = boards[currentMove][fromY+1][fromX-2]; if(((oldpiece == WhiteKnight) && (currentpiece > WhiteKing)) || ((oldpiece == BlackKnight) && (currentpiece < BlackPawn || currentpiece == EmptySquare)) || (oldpiece == EmptySquare) && (currentpiece == WhiteKnight || currentpiece == BlackKnight)) { piece = PieceToName(currentpiece,1); xchar = SquareToChar(fromX-2); ynum = SquareToNum(fromY+1); SayString(xchar , FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); } } SayString("", TRUE); // flush } VOID SayPieces(ChessSquare p) { ChessSquare currentpiece; char *piece, *xchar, *ynum ; int yPos, xPos, count = 0; char buf[50]; if(p == WhitePlay) SayString("White pieces", FALSE); else if(p == BlackPlay) SayString("Black pieces", FALSE); else if(p == EmptySquare) SayString("Pieces", FALSE); else { snprintf(buf, sizeof(buf)/sizeof(buf[0]),"%ss", PieceToName(p,1)); SayString(buf, FALSE); } SayString("are located", FALSE); for(yPos=0; yPos= BlackPawn && currentpiece <= BlackKing || p == WhitePlay && currentpiece >= WhitePawn && currentpiece <= WhiteKing ) piece = PieceToName(currentpiece,0); else if(p == EmptySquare && currentpiece != EmptySquare) piece = PieceToName(currentpiece,1); else if(p == currentpiece) piece = NULL; else continue; if(count == 0) SayString("at", FALSE); xchar = SquareToChar(xPos); ynum = SquareToNum(yPos); SayString(xchar , FALSE); SayString(ynum, FALSE); if(piece) SayString(piece, FALSE); count++; } } if(count == 0) SayString("nowhere", FALSE); SayString("", TRUE); // flush } VOID SayCurrentPos() { ChessSquare currentpiece; char *piece, *xchar, *ynum ; if(fromX < BOARD_LEFT) { SayString("You strayed into the white holdings", FALSE); return; } if(fromX >= BOARD_RGHT) { SayString("You strayed into the black holdings", FALSE); return; } currentpiece = boards[currentMove][fromY][fromX]; piece = PieceToName(currentpiece,1); ynum = SquareToNum(fromY); xchar = SquareToChar(fromX); SayString("Your current position is", FALSE); SayString(xchar, FALSE); SayString(ynum, FALSE); SayString(piece, FALSE); if(((fromX-BOARD_LEFT) ^ fromY)&1) SayString("on a light square",FALSE); else SayString("on a dark square",FALSE); PossibleAttacked(); SayString("", TRUE); // flush } VOID SayAllBoard() { int Xpos, Ypos; ChessSquare currentpiece; char *piece, *ynum ; if(gameInfo.holdingsWidth) { int first = 0; for(Ypos=0; Ypos=BOARD_HEIGHT - gameInfo.holdingsSize; Ypos--) { int n = boards[currentMove][Ypos][1]; if(n) { char buf[MSG_SIZ]; if(!first++) SayString("black holds", FALSE); currentpiece = boards[currentMove][Ypos][0]; piece = PieceToName(currentpiece,0); snprintf(buf, MSG_SIZ, "%d %s%s", n, piece, (n==1 ? "" : "s") ); SayString(buf, FALSE); } } } for(Ypos=BOARD_HEIGHT-1; Ypos>=0; Ypos--) { ynum = ordinals[Ypos + (gameInfo.boardHeight < 10)]; SayString(ynum, FALSE); SayString("rank", FALSE); for(Xpos=BOARD_LEFT; Xpos 1) snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%d %ss", count, piece); else snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%s", piece); Xpos--; SayString(buf, FALSE); } else { int count = 0, oldX = Xpos; while(Xpos < BOARD_RGHT && boards[currentMove][Ypos][Xpos] == EmptySquare) Xpos++, count++; if(Xpos == BOARD_RGHT && oldX == BOARD_LEFT) SayString("all", FALSE); else{ if(count > 1) { char buf[10]; snprintf(buf, sizeof(buf)/sizeof(buf[0]),"%d", count); SayString(buf, FALSE); } Xpos--; } SayString("empty", FALSE); } } } SayString("", TRUE); // flush } VOID SayWhosTurn() { if(gameMode == MachinePlaysBlack || gameMode == IcsPlayingWhite) { if(WhiteOnMove(currentMove)) SayString("It is your turn", FALSE); else SayString("It is your opponents turn", FALSE); } else if(gameMode == MachinePlaysWhite || gameMode == IcsPlayingBlack) { if(WhiteOnMove(currentMove)) SayString("It is your opponents turn", FALSE); else SayString("It is your turn", FALSE); } else { if(WhiteOnMove(currentMove)) SayString("White is on move here", FALSE); else SayString("Black is on move here", FALSE); } SayString("", TRUE); // flush } extern char *commentList[]; VOID SayMachineMove(int evenIfDuplicate) { int len, xPos, yPos, moveNr, secondSpace = 0, castle = 0, n; ChessSquare currentpiece; char *piece, *xchar, *ynum, *p, checkMark = 0; char c, buf[MSG_SIZ], comment[MSG_SIZ]; static char disambiguation[2]; static int previousMove = 0; if(appData.debugMode) fprintf(debugFP, "Message = '%s'\n", messageText); if(gameMode == BeginningOfGame) return; if(messageText[0] == '[') return; comment[0]= 0; if(isdigit(messageText[0])) { // message is move, possibly with thinking output int dotCount = 0, spaceCount = 0; sscanf(messageText, "%d", &moveNr); len = 0; // [HGM] show: better extraction of move while (messageText[len] != NULLCHAR) { if(messageText[len] == '.' && spaceCount == 0) dotCount++; if(messageText[len] == ' ') { if(++spaceCount == 2) secondSpace = len; } if(messageText[len] == '{') { // we detected a comment if(isalpha(messageText[len+1]) ) sscanf(messageText+len, "{%[^}]}", comment); break; } if(messageText[len] == '[') { // we detected thinking output int depth; float score=0; char c, lastMover = (dotCount == 3 ? 'B' : 'W'); if(sscanf(messageText+len+1, "%d]%c%f", &depth, &c, &score) > 1) { if(c == ' ') { // if not explicitly specified, figure out source of thinking output switch(gameMode) { case MachinePlaysWhite: case IcsPlayingWhite: c = 'W'; break; case IcsPlayingBlack: case MachinePlaysBlack: c = 'B'; default: break; } } if(c != lastMover && !evenIfDuplicate) return; // line is thinking output of future move, ignore. if(2*moveNr - (dotCount < 2) == previousMove) return; // do not repeat same move; likely ponder output snprintf(buf, MSG_SIZ, "score %s %d at %d ply", score > 0 ? "plus" : score < 0 ? "minus" : "", (int) (fabs(score)*100+0.5), depth ); SayString(buf, FALSE); // move + thinking output describing it; say it. } while(messageText[len-1] == ' ') len--; // position just behind move; break; } if(messageText[len] == '(') { // ICS time printed behind move while(messageText[len+1] && messageText[len] != ')') len++; // skip it } len++; } if(secondSpace) len = secondSpace; // position behind move if(messageText[len-1] == '+' || messageText[len-1] == '#') { /* you are in checkmate */ len--; // strip off check or mate indicator checkMark = messageText[len]; // make sure still seen after we stip off promo piece } if(messageText[len-2] == '=') { /* promotion */ len-=2; // strip off promotion piece SayString("promotion", FALSE); } n = 2*moveNr - (dotCount < 2); if(previousMove != 2*moveNr + (dotCount > 1) || evenIfDuplicate) { char number[20]; previousMove = 2*moveNr + (dotCount > 1); // remember move nr of move last spoken snprintf(number, sizeof(number)/sizeof(number[0]),"%d", moveNr); yPos = CoordToNum(messageText[len-1]); /* turn char coords to ints */ xPos = CoordToNum(messageText[len-2]); if(xPos < 0 || xPos > 11) return; // prevent crashes if no coord string available to speak if(yPos < 0 || yPos > 9) return; currentpiece = boards[n][yPos][xPos]; piece = PieceToName(currentpiece,0); ynum = SquareToNum(yPos); xchar = SquareToChar(xPos); c = messageText[len-3]; if(c == 'x') c = messageText[len-4]; if(!isdigit(c) && c < 'a' && c != '@') c = 0; disambiguation[0] = c; SayString(WhiteOnMove(n) ? "Black" : "White", FALSE); SayString("move", FALSE); SayString(number, FALSE); // if(c==0 || c=='@') SayString("a", FALSE); // intercept castling moves p = StrStr(messageText, "O-O-O"); if(p && p-messageText < len) { SayString("queen side castling",FALSE); castle = 1; } else { p = StrStr(messageText, "O-O"); if(p && p-messageText < len) { SayString("king side castling",FALSE); castle = 1; } } if(!castle) { SayString(piece, FALSE); if(c == '@') SayString("dropped on", FALSE); else if(c) SayString(disambiguation, FALSE); SayString("to", FALSE); SayString(xchar, FALSE); SayString(ynum, FALSE); if(messageText[len-3] == 'x') { currentpiece = boards[n-1][yPos][xPos]; if(currentpiece != EmptySquare) { piece = PieceToName(currentpiece,0); SayString("Capturing a",FALSE); SayString(piece, FALSE); } else SayString("Capturing onn passann",FALSE); } } if(checkMark == '+') SayString("check", FALSE); else if(checkMark == '#') { SayString("finishing off", FALSE); SayString(WhiteOnMove(n) ? "White" : "Black", FALSE); } } /* say comment after move, possibly with result */ p = NULL; if(StrStr(messageText, " 1-0")) p = "white wins"; else if(StrStr(messageText, " 0-1")) p = "black wins"; else if(StrStr(messageText, " 1/2-1/2")) p = "game ends in a draw"; if(comment[0]) { if(p) { if(!StrCaseStr(comment, "draw") && !StrCaseStr(comment, "white") && !StrCaseStr(comment, "black") ) { SayString(p, FALSE); SayString("due to", FALSE); } } SayString(comment, FALSE); // alphabetic comment (usually game end) } else if(p) SayString(p, FALSE); if(commentDialog && commentList[currentMove]) SetFocus(commentDialog); } else { /* starts not with digit */ if(StrCaseStr(messageText, "illegal")) PlayIcsUnfinishedSound(); SayString(messageText, FALSE); } SayString("", TRUE); // flush } VOID SayClockTime() { char buf1[50], buf2[50]; char *str1, *str2; static long int lastWhiteTime, lastBlackTime; suppressClocks = 1; // if user is using alt+T command, no reason to display them if(abs(lastWhiteTime - whiteTimeRemaining) < 1000 && abs(lastBlackTime - blackTimeRemaining) < 1000) suppressClocks = 0; // back on after two requests in rapid succession snprintf(buf1, sizeof(buf1)/sizeof(buf1[0]),"%s", TimeString(whiteTimeRemaining)); str1 = buf1; SayString("White clock", FALSE); SayString(str1, FALSE); snprintf(buf2, sizeof(buf2)/sizeof(buf2[0]), "%s", TimeString(blackTimeRemaining)); str2 = buf2; SayString("Black clock", FALSE); SayString(str2, FALSE); lastWhiteTime = whiteTimeRemaining; lastBlackTime = blackTimeRemaining; SayString("", TRUE); // flush } VOID Toggle(Boolean *b, char *mess) { *b = !*b; SayString(mess, FALSE); SayString("is now", FALSE); SayString(*b ? "on" : "off", FALSE); SayString("", TRUE); // flush } /* handles keyboard moves in a click-click fashion */ VOID KeyboardMove(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { ChessSquare currentpiece; char *piece; static BOOLEAN sameAgain = FALSE; switch (message) { case WM_KEYDOWN: sameAgain = FALSE; if(oldFromX == fromX && oldFromY == fromY) { sameAgain = TRUE; /* click on same square */ break; } else if(oldFromX != -1) { ChessSquare pdown, pup; pdown = boards[currentMove][oldFromY][oldFromX]; pup = boards[currentMove][fromY][fromX]; if (gameMode == EditPosition || !((WhitePawn <= pdown && pdown <= WhiteKing && WhitePawn <= pup && pup <= WhiteKing) || (BlackPawn <= pdown && pdown <= BlackKing && BlackPawn <= pup && pup <= BlackKing))) { /* EditPosition, empty square, or different color piece; click-click move is possible */ char promoChoice = NULLCHAR; if (HasPromotionChoice(oldFromX, oldFromY, fromX, fromY, &promoChoice)) { if (appData.alwaysPromoteToQueen) { UserMoveEvent(oldFromX, oldFromY, fromX, fromY, 'q'); } else { toX = fromX; toY = fromY; fromX = oldFromX; fromY = oldFromY; PromotionPopup(hwnd); fromX = toX; fromY = toY; } } else { UserMoveEvent(oldFromX, oldFromY, fromX, fromY, promoChoice); } oldFromX = oldFromY = -1; break; } } /* First downclick, or restart on a square with same color piece */ if (OKToStartUserMove(fromX, fromY)) { oldFromX = fromX; oldFromY = fromY; currentpiece = boards[currentMove][fromY][fromX]; piece = PieceToName(currentpiece,1); SayString(piece, FALSE); SayString("selected", TRUE); } else { oldFromX = oldFromY = -1; } break; case WM_KEYUP: if (oldFromX == fromX && oldFromY == fromY) { /* Upclick on same square */ if (sameAgain) { /* Clicked same square twice: abort click-click move */ oldFromX = oldFromY = -1; currentpiece = boards[currentMove][fromY][fromX]; piece = PieceToName(currentpiece,0); SayString(piece, FALSE); SayString("unselected", TRUE); } } } } int NiceTime(int x) { // return TRUE for times we want to announce if(x<0) return 0; x = (x+50)/100; // tenth of seconds if(x <= 100) return (x%10 == 0); if(x <= 600) return (x%100 == 0); if(x <= 6000) return (x%600 == 0); return (x%3000 == 0); } #define JAWS_ARGS \ { "beepOffBoard", ArgInt, (LPVOID) beeps, TRUE, (ArgIniType) 1 },\ { "beepEmpty", ArgInt, (LPVOID) (beeps+1), TRUE, (ArgIniType) 0 },\ { "beepWhite", ArgInt, (LPVOID) (beeps+2), TRUE, (ArgIniType) 0 },\ { "beepBlack", ArgInt, (LPVOID) (beeps+3), TRUE, (ArgIniType) 0 },\ { "beepHoldings", ArgInt, (LPVOID) (beeps+4), TRUE, (ArgIniType) 0 },\ #define JAWS_ALT_INTERCEPT \ if(suppressOneKey) {\ suppressOneKey = 0;\ if(GetKeyState(VK_MENU) < 0 && GetKeyState(VK_CONTROL) < 0) break;\ }\ if ((char)wParam == 022 && gameMode == EditPosition) { /* . Pop up piece menu */\ POINT pt; int x, y;\ SquareToPos(fromY, fromX, &x, &y);\ dropX = fromX; dropY = fromY;\ pt.x = x; pt.y = y;\ if(gameInfo.variant != VariantShogi)\ MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1);\ else\ MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1);\ break;\ }\ #define JAWS_REPLAY \ case '\020': /* ctrl P */\ { char buf[MSG_SIZ];\ if(GetWindowText(hwnd, buf, MSG_SIZ-1))\ SayString(buf, TRUE);\ }\ return 0;\ #define JAWS_KBDOWN_NAVIGATION \ \ \ if(GetKeyState(VK_MENU) < 0 && GetKeyState(VK_CONTROL) < 0) {\ /* Control + Alt + letter used for speaking piece positions */\ static int lastTime; static char lastChar;\ int mine = 0, time = GetTickCount(); char c;\ \ if((char)wParam == lastChar && time-lastTime < 250) mine = 1;\ lastChar = wParam; lastTime = time;\ c = wParam;\ \ if(gameMode == IcsPlayingWhite || gameMode == MachinePlaysBlack) mine = !mine;\ \ if(ToLower(c) == 'x') {\ SayPieces(mine ? WhitePlay : BlackPlay);\ suppressOneKey = 1;\ break;\ } else\ if(CharToPiece(c) != EmptySquare) {\ SayPieces(CharToPiece(mine ? ToUpper(c) : ToLower(c)));\ suppressOneKey = 1;\ break;\ }\ }\ \ switch (wParam) {\ case VK_LEFT:\ case VK_RIGHT:\ case VK_UP:\ case VK_DOWN:\ KeyboardEvent(hwnd, message, wParam, lParam);\ break;\ case VK_SPACE:\ shiftKey = GetKeyState(VK_SHIFT) < 0;\ KeyboardMove(hwnd, message, wParam, lParam);\ break;\ }\ #define JAWS_KBUP_NAVIGATION \ switch (wParam) {\ case VK_SPACE:\ KeyboardMove(hwnd, message, wParam, lParam);\ break;\ }\ #define JAWS_MENU_ITEMS \ case IDM_PossibleAttackMove: /*What can I possible attack from here */\ PossibleAttackMove();\ break;\ \ case IDM_PossibleAttacked: /*what can possible attack this square*/\ PossibleAttacked();\ break;\ \ case IDM_ReadRow: /* Read the current row of pieces */\ ReadRow();\ break;\ \ case IDM_ReadColumn: /* Read the current column of pieces */\ ReadColumn();\ break;\ \ case IDM_SayCurrentPos: /* Say current position including color */\ SayCurrentPos();\ break;\ \ case IDM_SayAllBoard: /* Say the whole board from bottom to top */\ SayAllBoard();\ break;\ \ case IDM_SayMachineMove: /* Say the last move made */\ timeflag = 1;\ SayMachineMove(1);\ break;\ \ case IDM_SayUpperDiagnols: /* Says the diagnol positions above you */\ SayUpperDiagnols();\ break;\ \ case IDM_SayLowerDiagnols: /* Say the diagnol positions below you */\ SayLowerDiagnols();\ break;\ \ case IDM_SayBlackPieces: /*Say the opponents pieces */\ SayPieces(BlackPlay);\ break;\ \ case IDM_SayWhitePieces: /*Say the opponents pieces */\ SayPieces(WhitePlay);\ break;\ \ case IDM_SayClockTime: /*Say the clock time */\ SayClockTime();\ break;\ \ case IDM_SayWhosTurn: /* Say whos turn it its */\ SayWhosTurn();\ break;\ \ case IDM_SayKnightMoves: /* Say Knights (L-shaped) move */\ SayKnightMoves();\ break;\ \ case OPT_PonderNextMove: /* Toggle option setting */\ Toggle(&appData.ponderNextMove, "ponder");\ break;\ \ case OPT_AnimateMoving: /* Toggle option setting */\ Toggle(&appData.animate, "animate moving");\ break;\ \ case OPT_AutoFlag: /* Toggle option setting */\ Toggle(&appData.autoCallFlag, "auto flag");\ break;\ \ case OPT_AlwaysQueen: /* Toggle option setting */\ Toggle(&appData.alwaysPromoteToQueen, "always promote to queen");\ break;\ \ case OPT_TestLegality: /* Toggle option setting */\ Toggle(&appData.testLegality, "legality testing");\ break;\ \ case OPT_HideThinkFromHuman: /* Toggle option setting */\ Toggle(&appData.hideThinkingFromHuman, "hide thinking");\ ShowThinkingEvent();\ break;\ \ case OPT_SaveExtPGN: /* Toggle option setting */\ Toggle(&appData.saveExtendedInfoInPGN, "extended P G N info");\ break;\ \ case OPT_ExtraInfoInMoveHistory: /* Toggle option setting */\ Toggle(&appData.showEvalInMoveHistory, "extra info in move histoty");\ break;\ \ #define JAWS_ACCEL \ !(!frozen && TranslateAccelerator(hwndMain, hAccelJAWS, &msg)) && #define JAWS_INIT if (!InitJAWS()) return (FALSE); #define JAWS_DELETE(X) #define JAWS_SILENCE if(suppressClocks) return; #define JAWS_COPYRIGHT \ SetDlgItemText(hDlg, OPT_MESS, "Auditory/Keyboard Enhancements By: Ed Rodriguez (sort of)"); #define SAY(S) SayString((S), TRUE) #define SAYMACHINEMOVE() SayMachineMove(0) // After inclusion of this file somewhere early in winboard.c, the remaining part of the patch // is scattered over winboard.c for actually calling the routines. xboard-4.8.0/winboard/resource.h0000644000175000001440000006711012421746612013536 00000000000000//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by winboard.rc // #define MANIFEST_RESOURCE_ID 1 #define IDM_NewGame 100 #define IDM_LoadGame 101 #define IDM_SaveGame 102 #define IDM_Exit 103 #define IDM_LoadPosition 104 #define IDM_SavePosition 105 #define IDM_EditPosition 106 #define IDM_FlipView 107 #define IDM_MachineWhite 108 #define IDM_MachineBlack 109 #define IDM_TwoMachines 110 #define IDM_EditGame 111 #define IDM_Forward 112 #define IDM_Backward 113 #define IDM_ToEnd 114 #define IDM_ToStart 115 #define IDM_Pause 116 #define IDM_CallFlag 117 #define IDM_Draw 118 #define IDM_SaveDiagram 119 #define IDM_Abort 120 #define IDM_Adjourn 122 #define IDM_Resign 124 #define IDM_Hint 125 #define IDM_IcsClient 126 #define IDM_TimeControl 131 #define IDM_LoadOptions 132 #define IDM_SaveOptions 133 #define IDM_EditGame2 134 #define IDM_EditPosition2 135 #define IDM_CommPort 147 #define IDM_EditComment 148 #define IDM_LoadNextGame 149 #define IDM_LoadPrevGame 150 #define IDM_ReloadGame 151 #define IDM_Accept 153 #define IDM_Decline 154 #define IDM_StopObserving 155 #define IDM_StopExamining 156 #define IDM_Revert 157 #define IDM_TruncateGame 158 #define IDM_MoveNow 159 #define IDM_RetractMove 160 #define IDM_Upload 161 #define IDM_MailMove 164 #define IDM_ReloadCMailMsg 165 #define IDM_Book 166 #define IDM_AboutGame 167 #define IDM_EditServers 169 #define IDM_ShowGameList 170 #define IDM_EditTags 171 #define IDM_Tags 172 #define IDM_Comment 173 #define IDM_Debug 174 #define IDM_EditProgs1 175 #define IDM_LoadProg1 176 #define IDM_AnalysisMode 177 #define IDM_AnalyzeFile 178 #define IDM_Annotate 179 #define IDM_CopyGame 180 #define IDM_PasteGame 181 #define IDM_CopyPosition 182 #define IDM_PastePosition 183 #define IDM_NewVariant 184 #define IDM_TypeInName 185 #define IDM_MachineBoth 186 #define IDM_MuteSounds 187 #define IDM_Match 188 #define IDM_CreateBook 189 #define OPT_TCtext1 202 #define OPT_TCTime 203 #define OPT_TCtext2 204 #define OPT_Autosave 206 #define OPT_AVPrompt 208 #define OPT_AVToFile 209 #define OPT_AVFilename 210 #define OPT_Autostep 214 #define OPT_ASTimeDelay 215 #define OPT_AStext1 216 #define OPT_TCMoves 217 #define IDM_HELPCONTENTS 300 #define IDM_HELPSEARCH 301 #define IDM_HELPHELP 302 #define IDM_ABOUT 303 #define IDM_CommandX 310 #define IDM_CommandXLast 399 #define DLG_TimeControl 400 #define ABOUTBOX_Version 401 #define OPT_TCUseMoves 402 #define OPT_TCUseInc 403 #define OPT_TCitext1 405 #define OPT_TCitext2 406 #define OPT_TCInc 407 #define OPT_TCitext3 408 #define OPT_TCTime2 409 #define OPT_TCOdds1 410 #define OPT_TCOdds2 411 #define OPT_TCUseFixed 412 #define OPT_TCFixed 413 #define OPT_TCftext 414 #define DLG_PremoveOptions 450 #define DLG_GeneralOptions 453 #define DLG_IcsOptions 454 #define DLG_BoardOptions 455 #define DLG_Fonts 456 #define DLG_NewGameFRC 457 #define DLG_GameListOptions 458 #define DLG_MoveHistory 459 #define IDM_ThemeOptions 460 #define DLG_EvalGraph 461 #define DLG_EngineOutput 463 #define DLG_EnginePlayOptions 464 #define IDI_WHITE_14 466 #define IDI_BLACK_14 467 #define DLG_OptionsUCI 467 #define IDI_PONDER_14 468 #define IDI_TRANS_14 469 #define IDI_CLOCK_14 470 #define IDI_UNKNOWN_14 471 #define IDI_BALOON_14 472 #define IDI_ANALYZE_14 473 #define IDI_ANALYZE2_14 474 #define DLG_Promotion 500 #define PB_Queen 502 #define PB_Rook 503 #define PB_Bishop 504 #define PB_Knight 505 #define PB_Chancellor 506 /* [HGM] Capablanca pieces */ #define PB_Archbishop 507 #define IDC_Yes 520 #define IDC_No 521 #define IDC_Centaur 522 #define EP_White 600 #define EP_WhitePawn 601 #define EP_WhiteKnight 602 #define EP_WhiteBishop 603 #define EP_WhiteRook 604 #define EP_WhiteQueen 605 #define EP_Black 606 #define EP_BlackPawn 607 #define EP_BlackKnight 608 #define EP_BlackBishop 609 #define EP_BlackRook 610 #define EP_BlackQueen 611 #define EP_EmptySquare 612 #define EP_ClearBoard 613 #define EP_WhiteKing 614 #define EP_BlackKing 615 #define DP_Pawn 616 #define DP_Knight 617 #define DP_Bishop 618 #define DP_Rook 619 #define DP_Queen 620 #define EP_WhiteCardinal 630 #define EP_WhiteMarshall 631 #define EP_WhiteAlfil 632 #define EP_WhiteCannon 633 #define EP_WhiteFerz 634 #define EP_WhiteWazir 635 #define EP_BlackCardinal 640 #define EP_BlackMarshall 641 #define EP_BlackAlfil 642 #define EP_BlackCannon 643 #define EP_BlackFerz 644 #define EP_BlackWazir 645 #define EP_Promote 650 #define EP_Demote 651 #define DLG_LoadOptions 700 #define DLG_SaveOptions 800 #define OPT_PGN 802 #define OPT_Old 803 #define DLG_CommPort 900 #define OPT_Port 901 #define OPT_DataRate 902 #define OPT_Bits 903 #define OPT_Parity 904 #define OPT_StopBits 905 #define OPT_Flow 910 #define OPT_SerialHelp 911 #define DLG_BoardSize 1000 #define OPT_Small 1001 #define OPT_SizeSmall 1001 #define OPT_Medium 1002 #define OPT_SizeBulky 1002 #define OPT_Large 1003 #define DLG_EditComment 1004 #define OPT_ClearComment 1005 #define OPT_EditComment 1006 #define OPT_CommentText 1007 #define DLG_ViewComment 1008 #define DLG_GameList 1009 #define OPT_GameListPrev 1010 #define OPT_GameListText 1011 #define OPT_GameListLoad 1012 #define OPT_GameListNarrow 1010 #define OPT_GameListNext 1013 #define OPT_GameListClose 1014 #define DLG_EditTags 1015 #define OPT_TagsText 1016 #define DLG_Analysis 1017 #define OPT_AnalysisText 1018 #define DLG_Error 1019 #define OPT_ErrorIcon 1020 #define IDD_DIALOG1 1021 #define DLG_ConsoleRich 1022 #define IDC_EDIT1 1023 #define OPT_DarkSquareColor 1023 #define IDC_GameListFilter 1023 #define IDC_NFG_Edit 1023 #define IDC_EpDrawMoveCount 1023 #define IDC_PolyglotDir 1023 #define OPT_TagsSave 1023 #define OPT_ConsoleText 1024 #define OPT_LightSquareColor 1024 #define OPT_CommandInput 1025 #define OPT_WhitePieceColor 1025 #define OPT_QuestionInput 1026 #define OPT_BlackPieceColor 1026 #define OPT_ChessEngineName 1027 #define OPT_HighlightSquareColor 1027 #define OPT_WavFileName 1028 #define OPT_PremoveHighlightColor 1028 #define OPT_IndexNumber 1029 #define OPT_SampleLightSquare 1029 #define OPT_Move 1030 #define OPT_SampleDarkSquare 1030 #define OPT_PremoveWhiteText 1031 #define IDC_EDIT2 1032 #define IDC_EpAdjudicationThreshold 1032 #define IDC_HashSize 1032 #define OPT_ConsoleInput 1033 #define OPT_AdditionalOptions 1034 #define OPT_PremoveBlackText 1035 #define OPT_ErrorText 1036 #define OPT_IcsAlarmTime 1037 #define OPT_Name 1038 #define DLG_Console 1100 #define DLG_PromotionKing 1102 #define DLG_Colorize 1106 #define DLG_Command 1122 #define DLG_Question 1123 #define DLG_Startup 1124 #define DLG_Sound 1127 #define DLG_IndexNumber 1149 #define DLG_TypeInMove 1151 #define DLG_TypeInName 1152 #define OPT_IndexNumberOld 1155 #define IDM_Rematch 1203 #define IDA_PAGEUP 1216 #define IDA_PAGEDOWN 1217 #define IDA_CTRLHOME 1218 #define IDA_CTRLEND 1219 #define IDA_TAB 1221 #define IDM_SaveSettings 1223 #define IDM_Iconize 1224 #define IDM_DirectCommand1 1226 #define IDM_DirectCommand2 1227 #define IDM_Copy 1229 #define IDM_Paste 1230 #define IDM_MatchX 1231 #define IDM_ObserveX 1232 #define IDM_FingerX 1233 #define IDM_TellX 1234 #define IDM_QuickPaste 1235 #define IDM_MessageX 1237 #define IDM_VarsX 1238 #define IDM_Cut 1240 #define IDM_Undo 1242 #define IDM_SelectAll 1243 #define IDM_SaveSettingsOnExit 1280 #define IDM_LoadNextPosition 1286 #define IDM_ReloadPosition 1287 #define IDM_LoadPrevPosition 1288 #define IDM_TypeInMove 1291 #define IDM_PopupExitMessage 1292 #define IDM_Training 1293 #define IDM_GeneralOptions 1299 #define IDM_BoardOptions 1300 #define IDM_Fonts 1301 #define IDM_UserAdjudication_White 1302 #define IDM_UserAdjudication_Black 1303 #define IDM_UserAdjudication_Draw 1304 #define IDM_NewGameFRC 1305 #define IDM_GameListOptions 1306 #define PB_King 1307 #define IDM_ShowMoveHistory 1307 #define IDM_PasteAny 1309 #define IDM_ShowEvalGraph 1310 #define IDM_CopyGameListToClipboard 1311 #define OPT_Bold 1312 #define IDM_ShowEngineOutput 1312 #define OPT_Italic 1313 #define IDM_EnginePlayOptions 1313 #define OPT_Underline 1314 #define IDM_OptionsUCI 1314 #define OPT_Strikeout 1315 #define OPT_ChooseColor 1316 #define OPT_Sample 1318 #define OPT_SampleSShout 1319 #define OPT_CancelComment 1320 #define OPT_SampleChannel1 1320 #define OPT_SampleChannel 1321 #define OPT_SampleKibitz 1322 #define OPT_SampleTell 1324 #define OPT_EditTags 1325 #define OPT_SampleChallenge 1325 #define OPT_TagsCancel 1326 #define OPT_SampleRequest 1326 #define OPT_CommandText 1327 #define OPT_QuestionText 1327 #define OPT_SampleSeek 1327 #define OPT_ChessEngine 1328 #define OPT_SampleNormal 1328 #define OPT_ChessServer 1329 #define OPT_View 1330 #define OPT_ChessServerName 1331 #define OPT_NoSound 1333 #define OPT_DefaultBeep 1334 #define OPT_SystemSound 1335 #define OPT_BuiltInSound 1336 #define OPT_WavFile 1337 #define OPT_BuiltInSoundName 1339 #define OPT_SystemSoundName 1340 #define OPT_BrowseSound 1341 #define OPT_PlaySound 1342 #define OPT_AVBrowse 1343 #define OPT_SecondChessEngineName 1344 #define OPT_AnyAdditional 1345 #define OPT_Premove 1346 #define OPT_PremoveWhite 1347 #define OPT_PremoveBlack 1348 #define OPT_IcsAlarm 1349 #define CBO_Sounds 1350 #define OPT_DefaultSounds 1351 #define OPT_AlwaysOnTop 1352 #define OPT_AutoCreate 1352 #define OPT_AutoFlag 1353 #define OPT_AlwaysQueen 1354 #define OPT_AutoComment 1458 #define OPT_AnimateDragging 1355 #define OPT_AutoObserve 1355 #define OPT_AnimateMoving 1356 #define OPT_GetMoveList 1356 #define OPT_AutoFlipView 1357 #define OPT_LocalLineEditing 1357 #define OPT_HighlightDragging 1358 #define OPT_QuietPlay 1358 #define OPT_HighlightLastMove 1359 #define OPT_PeriodicUpdates 1360 #define OPT_ChooseLightSquareColor 1360 #define OPT_PonderNextMove 1361 #define OPT_ChooseDarkSquareColor 1361 #define OPT_PopupExitMessage 1362 #define OPT_ChooseWhitePieceColor 1362 #define OPT_PopupMoveErrors 1363 #define OPT_ChooseBlackPieceColor 1363 #define OPT_ShowCoordinates 1364 #define OPT_ChooseHighlightSquareColor 1364 #define OPT_ShowThinking 1365 #define OPT_ChoosePremoveHighlightColor 1365 #define OPT_TestLegality 1366 #define OPT_Blindfold 1367 #define OPT_SizeTiny 1368 #define OPT_SizeTeeny 1369 #define OPT_SizeDinky 1370 #define OPT_SizePetite 1371 #define OPT_SizeSlim 1372 #define OPT_SizeMediocre 1374 #define OPT_SizeMiddling 1375 #define OPT_SizeAverage 1376 #define OPT_SizeModerate 1377 #define OPT_SizeMedium 1378 #define OPT_SizeLarge 1379 #define OPT_SizeBig 1380 #define OPT_SizeHuge 1381 #define OPT_SizeGiant 1382 #define OPT_SizeColossal 1383 #define OPT_SizeTitanic 1384 #define OPT_Monochrome 1385 #define OPT_DefaultBoardColors 1386 #define OPT_ChooseShoutColor 1387 #define OPT_ChooseSShoutColor 1388 #define OPT_ChooseChannel1Color 1389 #define OPT_ChooseChannelColor 1390 #define OPT_ChooseKibitzColor 1391 #define OPT_ChooseBackgroundColor 1392 #define OPT_ChooseTellColor 1393 #define OPT_ChooseChallengeColor 1394 #define OPT_ChooseRequestColor 1395 #define OPT_ChooseSeekColor 1396 #define OPT_ChooseNormalColor 1397 #define OPT_DefaultColors 1398 #define IDM_Minimize 1400 #define OPT_SampleShout 1400 #define IDM_Sounds 1401 #define OPT_SampleClockFont 1401 #define IDM_IcsOptions 1402 #define OPT_SampleCoordFont 1402 #define OPT_DontColorize 1403 #define OPT_SampleMessageFont 1403 #define OPT_SampleTagFont 1404 #define OPT_SampleCommentsFont 1405 #define OPT_SampleConsoleFont 1406 #define OPT_MessageFont 1407 #define OPT_ClockFont 1408 #define OPT_CoordFont 1409 #define OPT_EditTagsFont 1410 #define OPT_CommentsFont 1411 #define OPT_MessageFont5 1412 #define OPT_ChooseClockFont 1413 #define OPT_ChooseMessageFont 1414 #define OPT_ChooseCoordFont 1415 #define OPT_ChooseTagFont 1416 #define OPT_ChooseCommentsFont 1417 #define OPT_ChooseConsoleFont 1418 #define OPT_DefaultFonts 1419 #define OPT_ChooseMoveHistoryFont 1420 #define OPT_AutoRaiseBoard 1421 #define OPT_SampleMoveHistoryFont 1421 #define OPT_ShowButtonBar 1422 #define OPT_MessageFont6 1422 #define OPT_SaveExtPGN 1423 #define OPT_HideThinkFromHuman 1424 #define IDC_GameListDoFilter 1425 #define IDC_NFG_Random 1426 #define IDC_NFG_Label 1427 #define IDC_GameListTags 1428 #define IDC_GLT 1429 #define IDC_GLT_Up 1430 #define IDC_GLT_Down 1431 #define IDC_GLT_Restore 1432 #define IDC_GLT_Default 1433 #define IDC_GLT_RestoreTo 1434 #define IDC_MoveHistory 1435 #define OPT_OutOfBookInfo 1436 #define OPT_ExtraInfoInMoveHistory 1437 #define OPT_HighlightMoveArrow 1438 #define OPT_AutoLogo 1439 #define OPT_AutoTags 1440 #define OPT_Headers 1441 #define OPT_Variations 1442 #define OPT_AutoExtend 1443 #define IDC_BUTTON1 1440 #define IDC_BrowseForPolyglotDir 1440 #define IDC_BrowseForEGTB 1441 #define IDC_BrowseForBook 1442 #define IDC_EngineMemo1 1443 #define IDC_EngineMemo2 1444 #define IDC_EngineLabel1 1445 #define IDC_EngineLabel2 1446 #define IDC_EpShowThinking 1447 #define IDC_EpHideThinkingHuman 1448 #define IDC_EpPonder 1449 #define IDC_EpPeriodicUpdates 1450 #define IDC_Engine1_NPS 1451 #define IDC_Engine2_NPS 1452 #define IDC_Color1 1459 #define IDC_Color2 1460 #define IDC_StateIcon1 1461 #define IDC_StateData1 1462 #define IDC_StateData2 1463 #define IDC_StateIcon2 1464 #define IDC_PathToEGTB 1466 #define IDC_SizeOfEGTB 1467 #define IDC_BookFile 1469 #define IDC_UseBook 1470 #define IDC_OwnBook1 1471 #define IDC_OwnBook2 1472 #define IDC_Cores 1473 #define IDC_BookDep 1474 #define IDC_BookStr 1475 #define IDC_Games 1476 #define DLG_NewVariant 1500 #define OPT_VariantGothic 1501 #define OPT_VariantCrazyhouse 1502 #define OPT_VariantBughouse 1503 #define OPT_VariantCourier 1504 #define OPT_VariantShatranj 1505 #define OPT_VariantShogi 1506 #define OPT_VariantXiangqi 1507 #define OPT_VariantCapablanca 1508 #define OPT_VariantTwoKings 1509 #define OPT_VariantKnightmate 1510 #define OPT_VariantLosers 1511 #define OPT_VariantSuicide 1512 #define OPT_VariantAtomic 1513 #define OPT_VariantNormal 1514 #define OPT_VariantFairy 1515 #define OPT_VariantFRC 1516 #define OPT_VariantCylinder 1517 #define OPT_VariantFalcon 1518 #define OPT_VariantCRC 1519 #define OPT_VariantBerolina 1520 #define OPT_VariantSuper 1521 #define OPT_VariantJanus 1522 #define OPT_VariantWildcastle 1523 #define OPT_VariantNocastle 1524 #define OPT_VariantGiveaway 1525 #define OPT_Variant3Check 1526 #define OPT_VariantGreat 1527 #define OPT_VariantTwilight 1528 #define OPT_VariantMakruk 1529 #define OPT_VariantSChess 1530 #define OPT_VariantSpartan 1531 #define OPT_VariantASEAN 1532 #define OPT_VariantGrand 1534 #define OPT_VariantLion 1535 #define OPT_EngineVariant 1560 #define IDC_Files 1550 #define IDC_Ranks 1551 #define IDC_Holdings 1552 #define IDC_TestClaims 1600 #define IDC_DetectMates 1601 #define IDC_MaterialDraws 1602 #define IDC_TrivialDraws 1603 #define IDC_RuleMoves 1604 #define IDC_DrawRepeats 1605 #define IDC_ScoreAbs1 1606 #define IDC_ScoreAbs2 1607 #define IDM_FlipClock 1700 #define OPT_AllWhite 1701 #define OPT_UpsideDown 1702 #define DLG_Chat 1720 #define IDC_Change 1721 #define IDC_ChatPartner 1722 #define IDC_ChatMemo 1723 #define OPT_ChatInput 1724 #define IDC_Clear 1725 #define IDC_Send 1726 #define IDM_NewChat 1727 #define IDC_Focus1 1730 #define IDC_Focus2 1731 #define IDC_Focus3 1732 #define IDC_Focus4 1733 #define OPT_SeekGraph 1750 #define OPT_AutoRefresh 1751 #define OPT_BgObserve 1752 #define OPT_DualBoard 1753 #define OPT_SmartMove 1754 #define OPT_StartupChatBoxes 1755 #define OPT_AutoKibitz 1756 #define IDC_SPECIFY_ENG_STATIC 1814 #define IDC_SPECIFY_SERVER_STATIC 1815 #define OPT_MESS 1818 #define IDM_Engine1Options 1890 #define IDM_Engine2Options 1891 #define IDM_EditBook 1892 #define IDM_Tourney 1894 #define IDC_STATIC -1 // static strings that were made dynamic to allow run-time translation #define IDC_Babble 1900 #define GPB_Factors 1901 #define IDC_Factor1 1902 #define IDC_Factor2 1903 #define IDC_Directories 1904 #define IDC_IndexNr 1905 #define IDC_Port 1906 #define IDC_Rate 1907 #define IDC_Bits 1908 #define IDC_Parity 1909 #define IDC_Stop 1910 #define IDC_Flow 1911 #define IDC_ChessBoard 1912 #define IDC_Welcome 1913 #define IDC_Index 1914 #define IDC_Event 1915 #define IDC_Sec 1916 #define IDC_Boxes 1917 #define GPB_Premove 1918 #define GPB_General 1919 #define GPB_Colors 1920 #define GPB_Alarm 1921 #define IDC_Light 1922 #define IDC_Dark 1923 #define IDC_White 1924 #define IDC_Black 1925 #define IDC_High 1926 #define IDC_PreHigh 1927 #define GPB_Size 1928 #define IDC_Height 1929 #define IDC_Width 1930 #define IDC_Hand 1931 #define IDC_Pieces 1932 #define IDC_Def 1933 #define GPB_Board 1934 #define GPB_Current 1935 #define GPB_All 1936 #define IDC_Partner 1937 #define IDC_Draw 1938 #define IDC_Threshold 1939 #define IDC_Moves 1940 #define IDC_Centi 1941 #define IDC_Rule 1942 #define IDC_Repeats 1943 #define GPB_Adjudications 1944 #define GPB_Apply 1945 #define IDC_PolyDir 1946 #define IDC_Hash 1947 #define IDC_Path 1948 #define IDC_Cache 1949 #define IDC_CPU 1950 #define IDC_Depth 1951 #define IDC_Variation 1952 #define IDC_DefGames 1953 #define GPB_Variant 1954 #define OPT_MessageFont7 1955 #define OPT_SampleGameListFont 1956 #define OPT_ChooseGameListFont 1957 #define OPT_elo1 1958 #define OPT_elo2 1959 #define OPT_date 1960 #define OPT_elo1t 1961 #define OPT_elo2t 1962 #define OPT_datet 1963 #define OPT_thresholds 1964 #define OPT_Exact 1965 #define OPT_Subset 1966 #define OPT_Struct 1967 #define OPT_Material 1968 #define OPT_Range 1969 #define OPT_Difference 1970 #define OPT_Stretch 1971 #define OPT_Stretcht 1972 #define OPT_Reversed 1973 #define OPT_SearchMode 1974 #define OPT_Mirror 1975 #define OPT_Bitmaps 1976 #define OPT_PieceFont 1977 #define OPT_MessageFont8 1978 #define OPT_SamplePieceFont 1979 #define OPT_ChoosePieceFont 1980 #define OPT_GameListFind 1981 #define OPT_Grid 1983 #define IDM_LoadProg2 1984 #define OPT_Counts 1985 #define OPT_Ranget 1986 #define IDM_SaveSelected 1987 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 468 #define _APS_NEXT_COMMAND_VALUE 1315 #define _APS_NEXT_CONTROL_VALUE 1471 #define _APS_NEXT_SYMED_VALUE 1404 #endif #endif xboard-4.8.0/winboard/language/0000755000175000001440000000000012420374633013373 500000000000000xboard-4.8.0/winboard/language/romanian.lng0000644000175000001440000013404112420374633015624 00000000000000## WinBoard language file ## ## LANGUAGE NAME IN ENGLISH / TRANSLATED ## v1.0 beta 1 ## ## Translation by NAME (DATE) ## SAME AS ABOVE, TRANSLATED ## WEB ADDRESS OF TRANSLATOR ## ## If you revise this, please insert your date, name and description. ## TRANSLATION OF MESSAGE ABOVE ## TRANSLATION BY 11-oct-2011. Dl Silvian Rucsandescu din Iasi. ## Of duplicats, only the first occurrence will be used, even if it was in ## a different dialog! For this reason you will only see an 'OK' in the ## About Box. After you translated it there, this translation will be used ## for all other dialogs as well. ## o Use ## for comments, to make iteasy to find them scattered throughout the translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. ## preferably it should be unique in the applicable menu, so it depends on translation of other items! winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "&New Game\tCtrl-N" === "Partida Noua" "New Sh&uffle Game..." === "Partida Noua Shuffle" "New &Variant...\tAlt+Shift+V" === "Varianta Noua" "&Load Game...\tCtrl-O" === "Incarca Partida" "&Save Game...\tCtrl-S" === "Salveaza Partida" "L&oad Position...\tCtrl+Shift+O" === "Incarca Pozitia" "S&ave Position...\tCtrl+Shift+S" === "Salveaza Pozitia" "Save as &Diagram..." === "Salveaza ca Diagrama" "&Quit" === "Inchide" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === "Incarca Partida Urmatoare" "Load &Previous Game\tAlt+PgUp" === "Incarca Partida Precedenta" "&Reload Same Game" === "Reincarca Aceeasi Partida" "Load N&ext Position\tAlt+Shift+PgDn" === "Incarca Urmatoarea Pozitie" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Incarca Precedenta Pozitie" "Reload Sa&me Position" === "Reincarca Aceeasi Pozitie" "&Copy Game To Clipboard\tCtrl+C" === "Copie Partida pe Clipboard" "C&opy Position To Clipboard\tCtrl+Shift+C" === "Copie Pozitia pe Clipboard" "Copy Game List to Clipboard" === "Copie Lista Partidelor pe Clipboard" "&Paste Game From Clipboard\tCtrl+V" === "Copie Partida din Clipboard" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Copie Pozitia din Clipboard" "&Edit Game\tCtrl+E" === "Editeaza Partida" "E&dit Position\tCtrl+Shift+E" === "Editeaza Pozitia" "Edit Ta&gs..." === "Editeaza Eticheta" "Edit Co&mment..." === "Editeaza Comentariul" "Enter &Username..." === "Introdu Nume Utilizator" "&Revert\tHome" === "Revenire" "&Annotate" === "Adnotare" "&Truncate Game\tEnd" === "Scurteaza Partida" "&Backward\tAlt+Left" === "Inapoi" "&Forward\tAlt+Right" === "Inainte" "Back to &Start\tAlt+Home" === "Inapoi la Start" "For&ward to End\tAlt+End" === "Inainte la Sfarsit" "Flip &View\tF2" === "Vizualizare Inversa" "&Swap Clocks" === "Schimba Ceasurile" "Engine &Output\tAlt+Shift+O" === "Calculatia Motorului" "Move &History\tAlt+Shift+H" === "Istoricul Mutarilor" "Evaluation &Graph\tAlt+Shift+E" === "Graficul Evaluarii" "Game &List\tAlt+Shift+G" === "Lista Partidelor" "Open &New Chat Window" === "Deschide Fereastra Noua de Chat" "Type In &Move...\tAlt+I" === "Introdu Mutari" "&Tags" === "Eticheta" "&Comments" === "Comentarii" "&Game List Tags..." === "Eticheta Partidei" "&Board..." === "Tabla" "&Fonts..." === "Fonturi" "Machine &White\tCtrl+W" === "Motorul la Alb" "Machine &Black\tCtrl+B" === "Motorul la Negru" "&Two Machines\tCtrl+T" === "Doua Motoare" "Machine Both" === "Ambele Motoare" "&Analysis Mode\tCtrl+A" === "Modul de Analiza" "Analyze &File\tCtrl+F" === "Fisierul de Analizat" "&Edit Game\tCtrl+E" === "Editeaza Partida" "E&dit Position\tCtrl+Shift+E" === "Editeaza Pozitia" "Trai&ning" === "Antrenament" "&ICS Client" === "ICS Client" "&Machine Match" === "Partida Intre Motoare" "&Pause\tPause" === "Pauza" "&Accept\tF3" === "Accept" "D&ecline\tF4" === "Refuz" "Re&match\tF12" === "Rejucare" "Call &Flag\tF5" === "Caderea Steagului" "&Draw\tF6" === "Remiza" "Ad&journ\tF7" === "Intrerupere" "A&bort\tF8" === "Renunt" "&Resign\tF9" === "Cedez" "Stop &Observing\tF10" === "Opreste Observarea" "Stop E&xamining\tF11" === "Opreste Examinarea" "&Upload to Examine" === "Incarca spre Examinare" "Adjudicate to &White" === "Adjudecat la Alb" "Adjudicate to &Black" === "Adjudecat la Negru" "Adjudicate &Draw" === "Adjudecat Remiza" "Install 1st..." === "Instaleaza motorul 1" "Install 2nd..." === "Instaleaza motorul 2" "Engine #&1 Settings..." === "Setare Motorul nr 1" "Engine #&2 Settings..." === "Setare Motorul nr 2" "&Hint..." === "Sugestie" "&Book..." === "Carte de Deschideri" "&Move Now\tCtrl+M" === "Muta Acum" "&Retract Move\tCtrl+X" === "Retrage Mutarea" "&Mute all Sounds" === "Fara Sunet" "&General..." === "Optiuni Generale" "&Time Control...\tAlt+Shift+T" === "Controlul Timpului" "Common &Engine...\tAlt+Shift+U" === "Setari Comune Enginelor UCI" "Ad&judications...\tAlt+Shift+J" === "Adjudecarea" "&Load Game...\tAlt+Shift+L" === "Incarca Partida" "&Save Game...\tAlt+Shift+S" === "Salveaza Partida" "G&ame List..." === "Optiunile Listei de Partide" "Soun&ds..." === "Sunetul" "&ICS..." === "ICS" "Add ICS..." === "Adauga ICS" "Comm&unications..." === "Comunicatii" "Save Settings &Now" === "Salveaza Setarile Acum" "Save Settings on E&xit" === "Salveaza Setarile la Iesire" "Help &Contents\tF1" === "Continutul Ajutorului" "Help &Index" === "Indexul Ajutorului" "How to &Use Help" === "Cum se Foloseste Ajutorul" "&About WinBoard" === "Despre WinBoard" "White" === "Albul" "Promote" === "Transforma" "Pawn" === "Pion" "Knight" === "Cal" "Bishop" === "Nebun" "Rook" === "Tura" "Queen" === "Dama" "King" === "Rege" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "Arhiepiscop" "Chancellor" === "Cancelar" ## Next 2 Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === "Elefant" "Cannon" === "Tun" "Empty Square" === "Camp Liber" "Black" === "Negru" "Demote" === "Degradeaza" "Clear Board " === "Curata Tabla" ## Next 3: Shogi pieces. "Gold" === "Aur" "Silver" === "Argint" "Lance" === "Lancie" "Drop" === "Cadere" "Cop&y and Paste" === "Copie si Scrie" "&Copy" === "Copie" "&Paste" === "Scrie" "&Undo" === "Revenire" "Cu&t" === "Taie" "&Copy" === "Copie" "&Paste" === "Scrie" "Select &All" === "Selecteaza Totul" DIALOGS: ABOUTBOX ## Pehaps copyright notices best left untranslated? "About WinBoard" === "Despre Winboard" "OK" === "OK" "Chessboard for Windows" === "WinBoard GUI pentru Windows" "Copyright 1991 Digital Equipment Corporation" === "" "Enhancements Copyright 1992-2014 Free Software Foundation" === "" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccin por scar Toledo G.". "Tradus de Dl Silvian Rucsandescu Iasi" === "Tradus de Dl Silvian Rucsandescu Iasi " "WinBoard 0.0.0" === "WinBoard 4.5.3" ABOUTBOX2 ## Weird, it is needed? [Normally not. It is a built-in 'Easter Egg' joke.] "galactic" === "galactic" TIME CONTROL DIALOG "Time Control" === "Controlul Timpului" "Conventional chess clock" === "Ceas Conventional" "Incremental clock" === "Ceas cu Incrementare" "Cancel" === "Anuleaza" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Foloseste sagetile pentru a specifica setarile ceasului, apoi apsai butonul pentru a modifica valorile." "Fixed time per move" === "Timp fix pe mutare" "Number of moves:" === "Numarul de mutari" "Within number of minutes:" === "In numarul de minute " "Initial number of minutes:" === "Numarul initial de minute" "Plus number of seconds per move:" === "Plus numarul de secunde pe mutare" "Maximum seconds per move:" === "Maximul de secunde pe mutare" "Time-Odds Factors:" === "Timpi Diferiti" "Engine #1:" === "Motorul nr 1" "Engine #2:" === "Motorul nr 2" LOAD OPTIONS "Load Game Options" === "Incarca Optiunile Partidei" "Load games with &automatic stepping" === "Incarca partidele cu rulare automata" "&seconds per move" === "secunde pe mutare" "when filtering game list on position, use thresholds:" === "cand se filtreaza lista de partide dupa pozitie , foloseste limitele" "Search Mode: " === "Modul de Cautare" "Match exact &position" === "Cauta pozitia exacta" "Match if position is s&ubset" === "Cauta daca pozitia este continuta" "Match material with e&xact pawn structure" === "Cauta pozitii cu aceeasi structura de pioni" "Match &material" === "Cauta material" "Material &range (upper board-half is optional)" === "Gama de material (jumtatea de sus a tablei este opionala)" "Material &difference (optional material balanced)" === "Diferenta materiala (material optional echilibrat)" "Also match reversed &colors" === "Cauta de asemenea culorile inversate" "Also match &left-right mirror image" === "Cauta de asemenea imaginea in oglinda stanga-dreapta" "minimum Elo for &best player" === "ELO minim pentru cel mai bun jucator" "minimum Elo for &weakest players" === "ELO minim pentru cel mai slab jucator" "or later &year" === "sau mai tarziu anul" "co&nsecutive positions" === "pozitii consecutive" SAVE OPTIONS DIALOG "Save Game Options" === "Salveaza Optiunile Partidei" "Save As: " === "Salveaza ca" "Save games automatically" === "Salveaza partidele automat" "Prompt for filename" === "Prompter pentru numele fisierului" "To file:" === "Spre fisierul" "PGN" === "PGN" "Old" === "Vechi" "Browse..." === "Cauta" "Save out of book info in PGN" === "Salveaza iesirea din cartea de deschideri in PGN" 1536 ## This dialog is only used in some older Windows versions, so you might not be ableto test it. "Open" === "Deschide" "File &Name:" === "Denumirea Fisierului" "&Directories:" === "Directorul" "List Files of &Type:" === "Listeaza Fisierele de Tipul" "Dri&ves:" === "Partitia" "&Help" === "Ajutor" "&Index number:" === "Numarul de index" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === "Setarile Portului de Comunicare" "Net&work..." === "Reteaua" "&Port:" === "Port" "Data &Rate:" === "Rata de Transfer a Datelor" "Data &Bits:" === "Numarul de Biti ai datelor" "P&arity:" === "Paritatea" "&Stop Bits:" === "Stop Biti" "F&low:" === "Functionare" EDIT COMMENT "Edit Comment" === "Editeaza Comentariul" "&Clear" === "Sterge" "&Edit" === "Editeaza" PROMOTION POPUP "Promote to:" === "Transforma in" ## next used in Shogi as promotion-popup header "Promote?" === "Transformi?" "Promotion" === "Transformare" "&Queen" === "Regina" "&Rook" === "Turn" "&Bishop" === "Nebun" "K&night" === "Cal" "&King" === "Rege" "&Cancel" === "Anuleaza" "Chance&llor" === "Cancelar" "&Archbishop" === "Arhiepiscop" "YES" === "DA" "NO" === "NU" "C&entaur" === "Centaur" GAME LIST "Game List" === "Lista Partidelor" "&Load" === "Incarca" "&Prev" === "Precedenta" "&Next" === "Urmatoarea" "&Close" === "Inchide" "Filter" === "Filtreaza" EDIT TAGS "Edit Tags" === "Editeaza Eticheta" ERROR "ICS Interaction" === "Interactiune ICS" "Dialog" === "Dialog" "Error" === "Eroare" ## I don't think the next will really appear ever. "Sorry Charlie" === "Imi pare rau Charlie" COLORIZE "I C S Interaction Colors" === "Interactiunea culorilor I C S" "Interaction Colors" === "Interactiunea Culorilor" "Premove" === "Mutare Anticipata" "Alarm" === "Alarma" "Colors" === "Culori" "&Choose Color..." === "Alege Culoarea" "&Bold" === "" "&Italic" === "" "&Underline" === "Subliniaza" "&Strikeout" === "Barat" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === "Abracadabra" "Question" === "Intrebare" "Enter" === "Introdu" STARTUP DIALOG "WinBoard Startup" === "Pornire WinBoard" "What would you like to do?" === "Ce ai dori s facei ?" "&Play against a chess engine or match two engines" === "Joaca contra unui motor de sah sau meci inte doua motoare" "&Use an Internet Chess Server" === "Foloseste un Server de Sah pe Internet" "Just &view or edit game files" === "Vizualizeaza sau editeaza fisierele partidelor" "Specify Chess &Engines:" === "Specifica Motoarele de Sah" "Specify Chess &Server:" === "Specifica Serverul de Sah" "&Additional options" === "Optiuni Suplimentare" INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === "Numarul de index" MOVE TYPE-IN "Type in a move" === "Introdu o mutare" USER-NAME TYPE-IN "Type in your name" === "Scriei numele Dvs" SOUND DIALOG "Sounds" === "Sunetul" "&Event:" === "Evenimentul" "&No sound" === "Fara sunet" "&Default beep" === "Bip default" "&Built-in sound:" === "Sunetul continut de program " "&WAV file:" === "Fisier WAV" "B&rowse..." === "Cauta" "&Play" === "Joaca" "&Defaults" === "Defaults" GENERAL OPTIONS DIALOG ## pleace keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === "Optiuni Generale" "Always on &Top" === "Intotdeauna Deasupra" "Always &Queen Ctrl+Shift+Q" === "Intotdeauna Dama" "Animate &Dragging" === "Tragere Animata" "&Animate Moving Ctrl+Shift+A" === "Mutare Animata" "Auto &Flag Ctrl+Shift+F" === "Steag Automat" "Auto Flip &View" === "Intoarce Tabla Automat" "Auto &Raise Board" === "Fereastra Deasupra" "&Blindfold" === "Sah Orb" "Highlight Dra&gging" === "Marcheaza campurile de plecare - sosire" "Highlight Last &Move" === "Marcheaza ultima mutare" "Periodic &Updates" === "Updateuri periodice" "Ponder &Next Move Ctrl+Shift+P" === "Motorul permanent" "&Popup Exit Message" === "Afiseaza un mesaj inainte de iesire" "Popup Move &Errors" === "Afiseaza un mesaj la mutarile gresite" "Show Butt&on Bar" === "Afiseaza bara cu butoanele de comanda" "Show &Coordinates" === "Afiseaza coordonatele" "&Show Thinking" === "Arata calculatia motorului" "Test &Legality Ctrl+Shift+L" === "Testeaza legalitatea mutarii" "&Hide Thinking Ctrl+Shift+H" === "Ascunde calculatia motorului" "&Info in Move History Ctrl+Shift+I" === "Informatii in lista de mutari" "&Send Engine Think" === "Transmite calculatia motorului" "E&xtended PGN Info Ctrl+Shift+X" === "Informatii PGN extinse" "Highlight with Arro&w" === "Marcheaza cu sageata" "Displa&y Logos" === "Afiseaza logourile motoarelor" "One-Click Move" === "Mutare printr-un click" ICS OPTIONS "ICS Options" === "Optiunile ICS" "&Auto Comment" === "Comentariu Automat" "Auto &Observe" === "Observatie Automata" "&Get Move List" === "Primeste Lista de Mutari" "&Local Line Editing" === "Editarea Liniei Locale" "&Quiet Play" === "Joc Tacut" "&Premove" === "Mutare Anticipata" "&White first move" === "Albul are prima mutare" "&Black first move" === "Negrul are prima mutare" "&Sound alarm at" === "Suna alarma la" "seconds" === "secunde" "Choose..." === "Alege" "Do ¬ colorize messages" === "Nu colora mesajele" "&Auto Kibitz" === "Auto Kibitz" "Auto Kibit&z" === "Auto Kibitz" "See&k Graph" === "Cerceteaza Graficul" "auto-&Refresh" === "Auto-Refresh" "Bckgnd Obser&ve" === "Observare din background" "&Dual Board" === "Tabla duala" "One-Click &Move" === "Mutare printr-un click" "Background..." === "In spate" "&Defaults..." === "Implicite" "Startup &Chat Boxes:" === "Porneste Boxele de Conversatie" "General" === "General" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === "Optiunile Tablei" "Defaults" === "Implicite" "Light Squares" === "Campuri deschise" "Dark Squares" === "Campuri inchise" "White Pieces" === "Piesele Albe" "Black Pieces" === "Piesele Negre" "Square Highlights" === "Marcheaza Campul" "Premove Highlights" === "Marcheaza Anticipata" "Monochrome" === "Monocrom" "All White" === "Totul Alb" "Flip Black" === "Intoarce Negrele" "Size" === "Marimea" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "Foarte Mica" "T&eeny" === "Mititica" "&Dinky" === "Micuta" "&Petite" === "Mica 1" "Sl&im" === "Mica 2" "&Small" === "Mica" "Medi&ocre" === "Nu chiar mica" "&Middling" === "Mijlocie" "&Average" === "Normala" "Mode&rate" === "Moderata" "Medi&um" === "Medie" "Bul&ky" === "Groasa" "&Large" === "Larga" "&Big" === "Mare" "&Huge" === "Enorma" "&Giant" === "Giganta" "&Colossal" === "Colosala" "Tita&nic" === "Titanica" FONTS "Fonts" === "Fonturi" "Current Board Size" === "Marimea curenta a Tablei" "All Board Sizes" === "Toate marimile Tablei" "&Revert to Defaults" === "Revenire la Implicite" "Clocks" === "Ceasurile" "Messages" === "Mesajele" "Coordinates" === "Coordonatele" "Tags" === "Etichetele" "Comments" === "Comentariile" "I C S Interaction" === "Interactiune I C S" "&Color..." === "Culoarea..." "Move History, Engine Output" === "Lista Mutarilor,Calculatia Motorului" ADJUDICATIONS DIALOG "Adjudications" === "Adjudecarea" "Ponder Next Move" === "Calculeaza Urmatoarea Mutare" "Enable and Show Thinking (recommended)" === "Comuteaza si Arata Calculatia (recomandat)" "Hide Thinking when Playing against Human" === "Ascunde Calculatia la Jocul contra Oamenilor " "Periodic Updates (for Analysis Mode)" === "Updateuri Periodice (pentru Modul de Analiza)" "Adjudications in non-ICS games" === "Adjudecarea in partidele non-ICS" "Adjudicate draw after:" === "Adjudeca remiza dupa" "moves" === "mutari" "Win/loss adjudication threshold:" === "limita de adjudecare castig/pierdere" "centipawns" === "centipioni" "&Verify Engine Claims" === "Verifica Solicitarile Motorului" "Detect &Mates" === "Detecteaza Maturile" "Draw if &Insufficient Material" === "Remiza daca Materialul este Insuficient" "Adjudicate &Trivial Draws" === "Adjudeca Remizele Clare" "Apply" === "Aplica" ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === "-regula celor 50" "-fold repeats" === "-a repetare" "Engine #1 Score is Absolute" === "Motorul 1 Scorul este Absolut" "Engine #2 Score is Absolute" === "Motorul 2 Scorul este Absolut" COMMON ENGINE DIALOG "Common Engine Settings" === "Setari Comune Enginelor UCI" "Polyglot Directory:" === "Directorul pt. Polyglot" "Hash Size (MB):" === "Marimea Hashului (MB)" "EGTB Path:" === "Adresa bazelor de final" "EGTB Size (MB):" === "Hashul bazelor de final (MB)" "Use Book:" === "Utilizeaza Cartea" "Max nr of CPUs:" === "Nr. max. de CPUs" "First has Own Book" === "Albul are cartea sa" "Second has Own Book" === "Negrul are cartea sa" "Book Depth:" === "Profunzimea Cartii" "Book Variation:" === "Variatia Cartii" "Default Match Games:" === "Meciuri Implicite" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "Variantele de Sah" "Variant" === "Varianta" "Board size:" === "Marimea tablei" "ranks" === "randuri" "files" === "coloane" "Holdings with room for:" === "Pegatiti-va pentru" "pieces" === "piese" "('-1' means defaults for selected variant)" === "('-1' inseamna "implicit" pentru varianta selectata)" VARIANT NAMES: "&normal" === "" "&FRC" === "" "&wildcastle" === "" "&nocastle" === "" "&losers" === "" "&giveaway" === "" "s&uicide" === "" "&3Check" === "" "&twokings" === "" "&atomic" === "" "cra&zyhouse" === "" "&bughouse" === "" "&Twilight" === "" "Sp&artan" === "" "&shogi" === "" "su&per" === "" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "" "&fairy" === "" "&makruk" === "" "&gothic" === "" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "&xiangqi" === "" NEW SHUFFLE GAME "New Shuffle Game" === "Partida Noua Shuffle" "&Start Position Number:" === "Pozitia de Start Numarul" "Random" === "La Intamplare" GAME-LIST OPTIONS DIALOG "Game List Options" === "Optiunile Listei Partidei" "PGN &Tags:" === "PGN si Etichete" "&Up" === "Sus" "&Down" === "Jos" "Default" === "Implicit" "Factory" === "Fabrica" "Restore to:" === "Restaureaza" MOVE HISTORY WINDOW "Move History" === "Istoricul Mutarilor" EVALUATION GRAPH "Evaluation Graph" === "Graficul de Evaluare" ENGINE OUTPUT WINDOW "Engine output" === "Calculatia Motorului" "Engine #1" === "Motorul nr. 1" "NPS" === "NPS" "Engine #2" === "Motorul nr. 2" CHAT BOXES "Chat Window" === "Fereastra de Conversatie" "Chat partner:" === "Partenerul de Conversatie" "Clear" === "Sterge" "Send" === "Trimite" winboard.c "&File" === "Fisier" "&Edit" === "Editeaza" "&View" === "Vizualizare" "&Mode" === "Mod" "&Action" === "Actiune " "&Step" === "Pas" "E&ngine" === "Motor" "&Options" === "Optiuni" "&Help" === "Ajutor" "You can only start a match from the initial position." === "Puteti incepe o partida doar din pozitia initiala" "Font name too long:" === "Denumirea fontului prea lunga" "Font point size missing:" === "Lipseste marimea fontului" "Can't parse color name %s" === "Nu poate analiza numele culorii %s" "Unrecognized board size value" === "Marimea tablei necunoscuta" "Unrecognized argument" === "Argument necunoscut" "No value provided for argument" === "Nici o valoare alocata argumentului" "Incomplete \\ escape in value for" === "Incomplet \\ pierdere in valoare pentru" "Failed to open indirection file" === "Ratata deschiderea fisierului incorect " "Unrecognized boolean argument value" === "Valoarea argumentului boolean necunoscuta" "Unrecognized argument" === "Argument necunoscut" "Too many colors" === "Prea multe culori" "&Minimize\tCtrl+F4" === "Micsoreaza" "White: %s" === "Albul: %s" "We only care about the height here" === "Avem grija doar de inaltime aici" "Cannot build game list" === "Nu se poate construi lista de partide" "Load Game from File" === "Incarca Partida din Fisierul" "Load Position from File" === "Incarca Pozitia din Fisierul" "Save Game to File" === "Salveaza Partida in Fisierul" "Save Diagram to File" === "Salveaza Diagrama in Fisierul" "Save Position to File" === "Salveaza Pozitia in Fisierul" "%s does not support analysis" === "%s nu suporta analiza" "Analyze Game from File" === "Analizeaza Partida din Fisierul" "Unable to activate help" === "Imposibil sa activeze ajutorul" "Send to chess program:" === "Trimite programului de sah" "Send to second chess program:" === "Trimite programului de sah nr 2" "Direct Command" === "Comanda Directa" "Error loading sound %s" === "Eroare la incarcarea sunetului %s" "Error playing sound %s" === "Eroare la rularea sunetului %s" "File open failed" === "Deschiderea fisierului ratata" "Internal error in file dialog box" === "Eroare interna in casuta de dialog a fisierului" "Option Error" === "Optiunea Eroare" "Choose an option, or cancel to exit" === "Alege o optiune, ori anuleaza pentru iesire" "Unable to activate help" === "Imposibil de activat ajutorul" "Displayed move is not current" === "Mutarea afisata nu este cea curenta" "Could not parse move" === "Nu s-a putut interpreta mutarea" "%s:\nError code %d" === "%s:\nEroare de cod %d" "Error" === "Eroare" "Fatal Error" === "Eroare Fatala" "Exiting" === "Iesind" "%s:\nError code %d" === "%s:\nEroare de cod %d" "Note" === "Nota" "Error writing to chess program" === "Eroare de scris catre programul de sah" "User" === "Utilizator" "Unknown" === "Necunoscut" "White" === "Albul" "Black" === "Negrul" "Save Game to File" === "Salveaza Partida in Fisierul" "Not implemented" === "Neimplementat" "Shout Text" === "Text de Iesire" "SShout/CShout" === "" "Channel 1 Text" === "Text Canal 1" "Channel Text" === "Text Canal" "Kibitz Text" === "Text Kibitz" "Tell Text" === "Spune Textul" "Challenge Text" === "Textul pentru Intrecere" "Request Text" === "Cerere" "Seek Text" === "Textul de Cautare" "Normal Text" === "Text Normal" "None" === "Nimic" "Pawn" === "Pion" "Knight" === "Cal" "Bishop" === "Nebun" "Rook" === "Turn" "Queen" === "Dama" "Information" === "Informatie" wclipbrd.c "Unable to convert position to FEN." === "Imposibil sa transform pozitia in FEN" "Unable to copy FEN to clipboard." === "Imposibil sa copii FEN-ul spre clipboard " "Cannot create temporary file name." === "Nu pot creia un nume de fisier temporar " "Cannot open temporary file." === "Nu pot deschide un fisier temporar" "Cannot write to temporary file." === "Nu pot scrie catre un fisier temporar" "Cannot reopen temporary file." === "Nu pot redeschide fisierul temporar" "Cannot determine size of file." === "Nu pot determina marimea fisierului" "Cannot allocate clipboard buffer." === "Nu pot aloca buferul clipboardului" "Cannot read from temporary file." === "Nu pot citi din fisierul temporar" "Error reading from temporary file." === "Eroare de citire din fisierul temporar" "Cannot copy text to clipboard" === "Nu pot copia textul pe clipboard" "Unable to allocate memory for clipboard." === "Incapabil sa aloc memorie pentru clipboard" "Unable to lock clipboard memory." === "Imposibil sa blochez memoria clipboardului" "Cannot unlock clipboard memory." === "Imposibil sa deblochez memoria clipboardului" "Cannot open clipboard." === "Nu pot deschide clipboardul" "Cannot empty clipboard." === "Nu pot sterge clipboardul" "Cannot copy text to clipboard." === "Nu pot copia textul pe clipboard" "Cannot close clipboard." === "Nu pot inchide clipboardul" "Unable to paste FEN from clipboard." === "Imposibil sa copii FENul din clipboard" "Unable to create temporary file." === "Imposibil sa creiez un fisier temporar" "Error writing to temporary file." === "Eroare de scris in fisierul temporar" "Unable to open clipboard." === "Imposibil sa deschid clipboardul" "No text in clipboard." === "Nici un text in clipboard" "Unable to lock clipboard memory." === "Imposibil sa blochez memoria clipboardului" "Unable to allocate memory for text string." === "Imposibil sa aloc memorie pentru stringul urmator" "Unable to unlock clipboard memory." === "Imposibil sa deblochez memoria clipboardului" "Unable to close clipboard." === "Imposibil sa inchid clipboardul" woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === "Cauta Fisierul de Sunet" "Can't parse com port settings" === "Nu se pot analiza setarile portului de comunicare" "Option Error" === "Optiunea Eroare" "Invalid data rate" === "Rata de date invalida" "Option Error" === "Optiunea Eroare" "Failed to set comm port state;\r\ninvalid options?" === "Esuat in setarea portului de comunicatii;\r\ninvalid options?" "Failed to set comm port state" === "Esuat in setarea portului de comunicatii" "Invalid load game step rate" === "Rata de derulare a incarcarii partidei invalida" "Invalid save game file name" === "Numele fisierului de salvare a partidei invalid" "Browse for Auto Save File" === "Cauta Auto Salvarea Fisierului" "Invalid moves per time control" === "Mutari pe timpul de control invalide" "Invalid minutes per time control" === "Minute pe timpul de control invalide" "Invalid increment" === "Increment invalid" "Invalid initial time" === "Timp initial invalid" "Changing time control during a game is not implemented" === "Schimbarea timpului de control in timpul partidei nu este implementata" "Variant %s not supported by %s" === "Varianta %s nu este suportata de %s" "Warning: second engine (%s) does not support this!" === "Atentie: al doielea motor (%s) nu suporta aceasta" "Invalid ICS Alarm Time" === "Timp de Alarma ICS Invalid" "Invalid max time per move" === "Timp maxim pe mutare invalid" "Invalid time-odds factor" === "Factorul de diferenta de timp invalid" "Choose Folder" === "Alege Folderul" "Choose Book" === "Alege Cartea de Deschideri" "Choose Polyglot Directory" === "Alege Directorul pentru Polyglot" "Choose EGTB Directory:" === "Alege Directorul pentru EGTB" "Polyglot was not found in the specified folder!" === "Polyglot nu a fost gasit in directorul specificat!" wgamelist.c "No game selected" === "Nici o partida selectata" "Can't go forward any further" === "Nu poate merge mai departe" "Can't back up any further" === "Nu se poate inapoi mai mult" "No game list" === "Fara lista de partide" "Game List" === "Lista de Partide" "Game list not loaded or empty" === "Lista de partide neincarcata sau goala" "%s - %d/%d games" === "%d (%d,%d-%d,%d) partide" wedittags.c "Edit Tags" === "Editeaza Eticheta" "Tags" === "Eticheta" "Error replacing tags." === "Eroare la inlocuirea etichetei" wsettings.c "%s Engine Settings (%s)" === "%s Setarile Motorului (%s)" "OK" === "OK" "Cancel" === "Inchide" wchat.c "Chat Window %s" === "Fereastra de Conversatie %s" backend.c "bad timeControl option %s" === "optiune incorecta de timp %s" "bad searchTime option %s" === "optiune incotecta de timp de cautare %s " ## following to will appear in combinationslike "first engine" "first" === "primul" "second" === "al doielea" "protocol version %d not supported" === "versiunea de protocol %d nu este suportata" "Variant %s supported only in ICS mode" === "Varianta %s suportata doar in modul ICS" "Unknown variant name %s" === "Numele variantei necunoscut %s" "Starting chess program" === "Porneste programul de sah" "Could not open comm port %s" === "Nu se poate deschide portul de comunicatii %s" "Could not connect to host %s, port %s" === "Nu se poate conecta la gazda %s, portul %s" "Unknown initialMode %s" === "Modul initial necunoscut %s" "Can't have a match with no chess programs" === "Nu putem avea un meci fara programe de sah" "Bad game file" === "Fisierul partidei incorect" "Bad position file" === "Fisierul pozitiei incorect" "AnalyzeFile mode requires a game file" === "Modul AnalizaFisierului cere un fisier de partida" "Analysis mode requires a chess engine" === "Modul de analiza cere un motor de sah " "Analysis mode does not work with ICS mode" === "Analiza nu lucreaza cu modul ICS" "MachineWhite mode requires a chess engine" === "Modul MasinaAlba cere un motor de sah" "MachineWhite mode does not work with ICS mode" === "Modul MasinaAlba nu merge cu modul ICS" "MachineBlack mode requires a chess engine" === "Modul MasinaNeagra cere un motor de sah" "MachineBlack mode does not work with ICS mode" === "Modul MasinaNeagra nu merge cu modul ICS" "TwoMachines mode does not work with ICS mode" === "Modul DouaMasini nu merge cu modul ICS" "TwoMachines mode requires a chess engine" === "Modul DouaMasini cere un motor de sah" "Training mode requires a game file" === "Modul de antrenamernt cere un fisier de partide" "Error writing to ICS" === "Eroare de scris catre ICS" "Error reading from keyboard" === "Eroare de citit din claviatura" "Got end of file from keyboard" === "Scoate textul din claviatura" "Error writing to ICS" === "Eroare de scris catre ICS" "Error writing to display" === "Eroare de scris catre afisaj" "Error gathering move list: two headers" === "Eroare de colectare la lista mutarilor: doua anteturi" "Error gathering move list: nested" === "Eroare de colectare la lista mutarilor: imbricate" "Connection closed by ICS" === "Conexiune inchisa de ICS" "Error reading from ICS" === "Eroare de citire de la ICS" "Failed to parse board string:\n\"%s\"" === "Esuat in analiza stringului tablei:\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "Partida prea lunga: mareste MAX_MOVES si recompileaza" "Error gathering move list: extra board" === "Eroare colectare lista mutari: extra board" "Illegal move \"%s\" from ICS" === "Mutare ilegala \"%s\" de la ICS " "Couldn't parse move \"%s\" from ICS" === "Nu se poate analiza mutarea \"%s\" de la ICS" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "Eroare interna :tip de mutare gresit %d (%d,%d-%d,%d)" "You are playing Black" === "Tu joci cu Negrul" "You are playing White" === "Tu joci cu Albul" "It is White's turn" === "Este randul Albului" "It is Black's turn" === "Este randul Negrului" "Displayed position is not current" === "Pozitia afisata nu este cea curenta" "Illegal move" === "Mutare ilegala" "End of game" === "Sfarsitul partidei" "Incorrect move" === "Mutare incorecta" ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === "Mutare ilegala \"%s\" de la primul calculator" "Illegal move \"%s\" (rejected by %s chess program)" === "Mutare ilegala \"%s\" (respinsa de de catre primul program de sah)" "Failed to start %s chess program %s on %s: %s\n" === "Esuat in pornirea %s primului program de sah pe %s: %s\n" "Error writing to %s chess program" === "Eroare de scris catre primul program de sah" "Error: %s chess program (%s) exited unexpectedly" === "Eroare primul program de sah a iesit neasteptat" "Error reading from %s chess program (%s)" === "Eroare de citire de la primul program de sah" "Forfeit due to illegal move" === "Forfait datorat unei mutari ilegale" "%s does not support analysis" === "%s nu suporta analiza" "Hint: %s" === "Ajutor: %s" "Machine accepts your draw offer" === "Computerul accepta oferta Dvs de remiza" "Machine offers a draw\nSelect Action / Draw to agree" === "Computerul ofera o remiza\nSelecteaza Actiunea / Agreati remiza " "%s (only move)" === "%s (doar mutarea)" "Ambiguous move in ICS output: \"%s\"" === "Mutare ICS ambigua: \"%s\"" "Illegal move in ICS output: \"%s\"" === "Mutare ICS ilegala: \"%s\"" "Gap in move list" === "Decalaj in lista de mutari" "Game too long; increase MAX_MOVES and recompile" === "Partida prea lunga; mariti MAX_MOVES si recompilati" "Variant %s not supported by %s" === "Varianta %s nu este suportata de catre %s" "Startup failure on '%s'" === "Start esuat pentru'%s'" "Waiting for first chess program" === "Asteptam primul program de sah" "Waiting for second chess program" === "Asteptam al doilea program de sah" "Match %s vs. %s: final score %d-%d-%d" === "Partida %s vs. %s: scorul final %d-%d-%d" "Stalemate" === "Remiza" "Illegal move: %d.%s%s" === "Mutare ilegala: %d.%s%s" "Ambiguous move: %d.%s%s" === "Mutare ambigua: %d.%s%s" "Can't open \"%s\"" === "Nu pot deschide \"%s\"" "Cannot build game list" === "Nu pot construi lista de partide" "No more games in this message" === "Nici o partida in acest mesaj" "No game has been loaded yet" === "Nici o partida nu a fost inca incarcata" "Can't back up any further" === "Fara revenire la mutari mai departe" "Game number out of range" === "Numarul partidei in afara seriei" "Can't seek on game file" === "Nu se poate cauta in fisierul partidei" "Game not found in file" === "Partida negasita in fisier" "Bad FEN position in file" === "FEN incorect in fisier" "No moves in game" === "Nu mai sunt mutari in partida" "No position has been loaded yet" === "Nici o pozitie nu a fost inca incarcata" "Can't back up any further" === "Fara revenire la mutari mai departe" "Can't open \"%s\"" === "Nu pot deschide \"%s\"" "Can't seek on position file" === "Nu se poate cauta in fisierul pozitiei" "Position not found in file" === "Pozitie negasita in fisier" "Bad FEN position in file" === "FEN incorect in fisier" "Black to play" === "Negrul la mutare" "White to play" === "Albul la mutare" "Can't open \"%s\"" === "Can't open \"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === "Ai editat istoria partidei.\nFoloseste Reincarca Aceeasi Partida si fa mutarea ta din nou." "You have entered too many moves.\nBack up to the correct position and try again." === "Ai introdus prea multe mutari.\nRevino la pozitia corecta si incearca din nou." "Displayed position is not current.\nStep forward to the correct position and try again." === "Pozitia afisata nu este curenta.\nMergi inainte spre pozitia corecta si incearca din nou." "You have not made a move yet" === "Nu ai facut inca o mutare" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "Mesajul de CMail nu este incarcat.\nFoloseste Reincarca Mesajul de CMail si fa mutarea din nou." "No unfinished games" === "Nu exista partide neterminate" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "Ai trimis deja o mutare.\nAsteapta pana o mutare soseste de la oponent.\nPentru a retrimite mutarea, tipareste\n\"cmail -remail -partida %s\"\nu linia de comanda." "Failed to invoke cmail" === "Esuat in invocarea cmail" "Waiting for reply from opponent\n" === "Asteptand replica de la oponent\n" "Still need to make move for game\n" === "Inca trebuie facuta mutarea pentru partida\n" "Still need to make moves for both games\n" === "Inca trebuiesc facute mutarile pentru ambele partide\n" "Still need to make moves for all %d games\n" === "Inca trebuiesc facute mutari pentru toate %d partidele\n" "Still need to make a move for game %s\n" === "Inca trebuie facuta o mutare pentru partida %s\n" "No unfinished games\n" === "Nu exista partide neterminate\n" "Ready to send mail\n" === "Gata sa trimit mailul\n" "Still need to make moves for games %s\n" === "Inca trebuiesc facute mutari pentru partidele %s\n" "Edit comment" === "Editeaza comentariul" "Edit comment on %d.%s%s" === "Editeaza comentariul pentru %d.%s%s" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "Declansata analiza...\nDaca acest mesaj ramane, programul Dvs de sah nu suporta analiza." "It is not White's turn" === "Nu este randul Albului" "It is not Black's turn" === "Nu este randul Negrului" "Wait until your turn,\nor select Move Now" === "Asteapta pana este randul tau,\sau selecteaza Muta Acum" "Starting second chess program" === "Porneste al doilea program de sah" "Training mode off" === "Inchide Modul de antrenament" "Training mode on" === "Deschide Modul de antrenament" "Already at end of game" === "Deja la finalul partidei" "Warning: You are still playing a game" === "Atentie: inca joci o partida" "Warning: You are still observing a game" === "Atentie: inca observi o partida" "Warning: You are still examining a game" === "Atentie: inca examinezi o partida" "It is Black's turn" === "Este randul Negrului" "It is White's turn" === "Este randul Albului" "That square is occupied" === "Acel camp este ocupat" "There is no pending offer on this move" === "Nu exist nici o ofert n curs pe aceast mutare" "Your opponent is not out of time" === "Adversarul tau nu a depasit timpul" "Black offers a draw" === "Negrul ofera o remiza" "White offers a draw" === "Albul ofera o remiza" "You must make your move before offering a draw" === "Trebuie sa faci o mutare inainte de a oferi o remiza" "You are not examining a game" === "Nu examinezi o partida" "You can't revert while pausing" === "Nu putei reveni n timp ce asteptati" "Wait until your turn,\nor select Move Now" === "Asteapta pana iti vine randul,\sau selecteaza Muta Acum" "It is your turn" === "Este randul tau" "Wait until your turn" === "Asteapta pana este randul tau" "No hint available" === "Nici un ajutor disponibil" "Analysis (%s)" === "Analiza (%s)" "Comment" === "Comentariu" "Comment on %d.%s%s" === "Conentariu despre %d.%s%s" "Both flags fell" === "Cad ambele steaguri" "White's flag fell" === "Cade steagul albului" "Black's flag fell" === "Cade steagul negrului" "Bad FEN position in clipboard" === "Positie FEN incorecta in clipboard" "No response from ICS" === "Niciun raspuns de la ICS" "You cannot do this while you are playing or observing" === "Nu poti face asta cand joci sau observi" "Click in holdings to choose piece" === "Faceti click pentru a alege piesa" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === "Partida esuata" "White wins on time" === "Albul castiga la timp" "Black wins on time" === "Negrul castiga la timp" "Both players ran out of time" === "Ambii jucatori au depasit timpul" "White resigns" === "Albul cedeaza" "Black resigns" === "Negrul cedeaza" "White mates" === "Albul da mat" "Black mates" === "Negrul da mat" "Draw" === "Remiza" "Draw agreed" === "Remiza prin intelegere" "Xboard adjudication: King destroyed" === "Adjudecare Xboard: Regele distrus" "Xboard adjudication: Bare king" === "Rege singur" "Xboard adjudication: 3rd check" === "Adjudecare Xboard: al treilea sah" "Xboard adjudication: Stalemate" === "Adjudecare Xboard: Pat" "Xboard adjudication: Checkmate" === "Adjudecare Xboard: Mat" "Xboard adjudication: Insufficient mating material" === "Adjudecare Xboard: material insuficient" "Xboard adjudication: Trivial draw" === "Adjudecare Xboard: Remiza banala" "XBoard adjudication: repetition draw" === "Adjudecare Xboard: remiza prin repetitie" "Xboard adjudication: perpetual checking" === "Adjudecare Xboard: sah etern" "Xboard adjudication: perpetual chasing" === "Adjudecare Xboard: alungare continua" "%Xboard adjudication: perpetual chasing of" === "Adjudecare Xboard: alungare continua" "Xboard adjudication: 50-move rule" === "Adjudecare Xboard: regula celor 50 de mutari" "Draw claim: 50-move rule" === "Cerere de remiza: regula celor 50 de mutari" "Draw claim: 3-fold repetition" === "Cerere de remiza: a treia repetitie" "Draw claim: insufficient mating material" === "Cerere de remiza: material insuficient pentru mat" "Xboard adjudication: long game" === "Adjudecare Xboard: partida lunga" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "Xboard: Forfait datorat unei mutari ilegale: %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "Xboard: Forfait datoratunei mutari ilegale: %s (%c%c%c%c)%c" "Xboard adjudication" === "Adjudecare Xboard" "User adjudication" === "Adjudecare utilizator" "False win claim: '%s'" === "Cerere de castig falsa: '%s'" "False draw claim: '%s'" === "Cerere de remiza falsa: '%s'" "xboard exit" === "Iesire Xboard" # NEW STRINGS FOR EXPERIMENTAL TM VERSION: # MENU "Edit Boo&k..." === "Editeaza Cartea" "Edit Engine List..." === "Editeaza Lista Motoarelor" "Load Engine..." === "Incarca Motorul" "Tournament..." === "Turneu" # LOAD ENGINE DIALOG "First" === "Primul" "Second" === "Al doilea" "Choose File" === "Alege Fisierul" "Choose Folder:" === "Alege Folderul" "Select engine from list:" === "Alege motorul din lista" "or specify one below:" === "sau specifica unul mai jos" "Nickname (optional):" === "Pseudonim (optional)" "Use nickname in PGN tag" === "Foloseste pseudonimul in eticheta PGN" "Engine (*.exe):" === "Motor (*.exe)" "command-line parameters:" === "parametrii liniei de comanda" "directory:" === "directorul" "(Directory will be derived from engine path when left empty)" === "(Directorul va deriva din adresa motorului cand nu se completeaza)" "Add this engine to the list" === "Adauga aceasta engina in lista" "Must not use GUI book" === "Trebuie sa nu foloseasca cartea GUIului" "UCI" === "UCI" "WB protocol v1 (skip waiting for features)" === "WB protocol v1 (sari peste asteptarea caracteristicilor)" "UCCI / USI (uses specified /uxiAdapter)" === "UCCI / USI (foloseste specificatele /uxiAdapter)" "Force current variant with this engine" === "Forteaza varianta curenta cu acest motor" "Load mentioned engine as" === "Incarca Motorul mentionat ca" "Load Engine" === "Incarca Motorul" # TOURNAMENT OPTIONS DIALOG "Tournament file:" === "Fisierul de turneu" "If you specify an existing file, the rest of this dialog will be ignored." === "Daca specificati un fisier existent, restul acestui dialog va fi ignorat." "Otherwise, the file will be created, with the settings you specify below:" === "Altfel, fisierul va fi creat, cu setarile pe care le specificati mai jos" "Select Engine:" === "Alege Motorul" "Use Swiss pairing engine (cycles = rounds)" === "Utilizai motorul de asociere elveian (cicluri = runde)" "Tourney type (0=RR, 1=gauntlet):" === "Tipul Turneului (0=RR, 1=gauntlet)" "Sync after cycle" === "Sincronizare dupa ciclu" "Number of tourney cycles:" === "Numarul de cicluri" "Sync after round" === "Sincronizare dupa runda" "Games per Match / Pairing:" === "Partide pe Meci/Pereche" "File for saving tourney games:" === "Fisier de salvat partidele turneului" "Game File with Opening Lines:" === "Fisierul de Partide cu Liniile de Deschidere" "Game Number:" === "Partida Numarul" "File with Start Positions:" === "Fisier cu Pozitiile de Start" "Position Number:" === "Pozitia Numarul" "Step through lines/positions in file" === "Mergi printre linii/pozitii in fisier" "Rewind after (0 = never):" === "Deruleaza dupa (0 = niciodata)" "Use each line/position twice" === "Foloseste fiecare linie/pozitie de doua ori" "Pause between Games (ms):" === "Pauza intre Partide (ms)" "Tournament and Match Options" === "Optiunile pentru Turneu si Meci" "Tourney participants:" === "Participantii la turneu" "Replace Engine" === "Inlocuieste Motorul" "Upgrade Engine" === "Upgradeaza Motorul" "Time Control..." === "Timpul de control" "Common Engine..." === "Motor comun" "Clone Tourney" === "Turneu de Clone" xboard-4.8.0/winboard/language/chinese(trad).lng0000644000175000001440000007641312420374633016442 00000000000000winboard.rc " " === "Translation by Morning Yellow && Liuzy" MENUS "&New Game\tCtrl-N" === "}sѧ(&N)\tCtrl-N" "New Sh&uffle Game..." === "~PC(&u)..." "New &Variant...\tAlt+Shift+V" === "sܺ(&V)...\tAlt+Shift+V" "&Load Game...\tCtrl-O" === "Jѧ(&L)...\tCtrl-O" "Load &Next Game\tAlt+PgDn" === "JU@ѧ(&N)\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "JW@ѧ(&P)\tAlt+PgUp" "&Reload Same Game" === "sJP@ѧ(&R)" "&Save Game...\tCtrl-S" === "xsѧ(&S)...\tCtrl-S" "&Copy Game To Clipboard\tCtrl+C" === "ƻsѧŶKï(&C)\tCtrl+C" "&Paste Game From Clipboard\tCtrl+V" === "KWѧ۰ŶKï(&P)\tCtrl+V" "Copy Game List to Clipboard" === "ƻsCCŶKï" "L&oad Position...\tCtrl+Shift+O" === "J(&O)...\tCtrl+Shift+O" "Load N&ext Position\tAlt+Shift+PgDn" === "JU@(&E)\tAlt+Shift+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "JW@(&V)\tAlt+Shift+PgUp" "Reload Sa&me Position" === "sJP@(&M)" "S&ave Position...\tCtrl+Shift+S" === "xs(&A)...\tCtrl+Shift+S" "Save as &Diagram..." === "xsϪ...(&D)" "C&opy Position To Clipboard\tCtrl+Shift+C" === "ƻsŶKï(&Y)\tCtrl+Shift+C" "P&aste Position From Clipboard\tCtrl+Shift+V" === "qŶKïKW(&T)\tCtrl+Shift+V" "E&xit" === "}(&X)" "&Quit" === "}(&Q)" "&Edit Game\tCtrl+E" === "sѧ(&E)\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "s觽(&d)\tCtrl+Shift+E" "&Tags" === "s(&T)" "&Comments" === "s(&C)..." "&Game List Tags..." === "CC..." "Machine &White\tCtrl+W" === "q(&W)\tCtrl+W" "Machine &Black\tCtrl+B" === "q(&B)\tCtrl+B" "Two &Machines\tCtrl+T" === "q(&M)\tCtrl+T" "Machine Both" === "qM" "&Machine Match" === "q(&M)" "&Analysis Mode\tCtrl+A" === "RҦ(&A)\tCtrl+A" "Analyze &File\tCtrl+F" === "Rɮ(&F)\tCtrl+F" "&ICS Client" === "&ICSȤ" "Edit &Game\tCtrl+E" === "sѧ(&G)\tCtrl+E" "&Edit Position\tShift+Ctrl+E" === "s觽(&E)\tShift+Ctrl+E" "Trai&ning" === "Vm(&N)" "Engine &Output\tAlt+Shift+O" === "ܤX\tAlt+Shift+O" "Evaluation &Graph\tAlt+Shift+E" === "ܵ\tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "ܴѧC(&L)\tAlt+Shift+G" "Move &History\tAlt+Shift+H" === "ܾv۪k\tAlt+Shift+H" "Open &New Chat Window" === "}ѵ" "Edit Ta&gs..." === "s(&T)" "Edit Co&mment..." === "s(&C)..." "Enter &Username..." === "JΤW(&U)" "&Pause\tPause" === "Ȱ(&P)\tPause" "&Accept\tF3" === "(&A)\tF3" "D&ecline\tF4" === "ڵ(&C)\tF4" "Re&match\tF12" === "(&M)\tF12" "Call &Flag\tF5" === "WɧPt(&F)\tF5" "&Draw\tF6" === "M(&D)\tF6" "Ad&journ\tF7" === "ʽL(&J)\tF7" "A&bort\tF8" === "(&B)\tF8" "&Resign\tF9" === "{(&R)\tF9" "Stop &Observing\tF10" === "[(&O)\tF10" "Stop E&xamining\tF11" === "s(&X)\tF11" "&Upload to Examine" === "Wˬd(&U)" "Adjudicate to &White" === "MĹ (&W)" "Adjudicate to &Black" === "MĹ (&B)" "Adjudicate &Draw" === "Х(&D)" "Type In &Move...\tAlt+I" === "J۪k(&Y)...\tAlt+I" "&Backward\tAlt+Left" === "U@(&B)\tAlt+Left" "&Forward\tAlt+Right" === "W@(&F)\tAlt+Right" "Back to &Start\tAlt+Home" === "_l(&S)\tAlt+Home" "For&ward to End\tAlt+End" === "̫᧽(&E)\tAlt+End" "&Revert\tHome" === "_(&V)" "&Annotate" === "(&A)" "&Truncate Game\tEnd" === "I_۪᭱k(&T)" "&Move Now\tCtrl+M" === "ߧY(&M)\tCtrl+M" "&Retract Move\tCtrl+X" === "(&R)\tCtrl+X" "Flip &View\tF2" === "½ѽL(&V)\tF2" "&Swap Clocks" === "洫(&C)" "&Mute all Sounds" === "ҦnR(&M)" "&General..." === "@ﶵ(&G)..." "&Board..." === "ѽLﶵ(&B)..." "Ad&judications...\tAlt+Shift+J" === "PM(&j)...\tAlt+Shift+J" "Common &Engine...\tAlt+Shift+U" === "qΤ]w(&E)...\tAlt+Shift+U" "Engine #&1 Settings..." === " #1 ]w" "Engine #&2 Settings..." === " #2 ]w" "&ICS..." === "&ICSﶵ..." "&Fonts..." === "rﶵ(&F)..." "Soun&ds..." === "nﶵ(&D)..." "G&ame List..." === "CC..." "Comm&unications..." === "qT]w(&U)..." "&Load Game...\tAlt+Shift+L" === "Jѧﶵ(&L)...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "xsѧﶵ(&S)...\tAlt+Shift+S" "&Time Control...\tAlt+Shift+T" === "ɶ]w(&T)...\tAlt+Shift+T" "Save Settings &Now" === "ߧYxs]w(&N)" "Save Settings on E&xit" === "}xs]w(&X)" "Help &Contents\tF1" === "DD(&C)\tF1" "Help &Index" === "(&I)" "How to &Use Help" === "pϥλ(&U)" "&Hint..." === "(&H)..." "&Book..." === "}w(&B)..." "&About WinBoard" === "WinBoard(&A)" "White" === "" "Promote" === "" "Pawn" === "L" "Knight" === "" "Bishop" === "H" "Rook" === "" "Queen" === "Z" "King" === "" "Archbishop" === "v" "Chancellor" === "_" "Elephant" === "H" "Cannon" === "" "Empty Square" === "MŮl" "Black" === "¤" "Demote" === "" "Clear Board " === "MŴѽL" "Drop" === "" "Cop&y and Paste" === "ƻsöKW(&Y)" "&Copy" === "ƻs(&C)" "&Paste" === "KW(&P)" "&Undo" === "_(&U)" "Cu&t" === "ŤU(&T)" "&Copy" === "ƻs(&C)" "&Paste" === "KW(&P)" "Select &All" === "(&A)" DIALOGS "&Animate Moving Ctrl+Shift+A" === "ʵe(&A) Ctrl+Shift+A" "&Auto Comment" === "۰ʵ(&A)" "&Average" === "54" "&Big" === "87" "&Bishop" === "H(&B)" "&Black first move" === "¤(&B)" "&Blindfold" === "(&B)" "&Bold" === "[(&B)" "&Cancel" === "(&C)" "&Choose Background Color..." === "ܭIC(&C)..." "&Choose Color..." === "C(&C)..." "&Clear" === "M(&C)" "&Close" === "(&C)" "&Colossal" === "116" "&Default ICS Colors" === "w]ICSC(&D)" "&Dinky" === "29" "&Directories:" === "Ƨ(&D)" "&Edit" === "s(&E)" "&Edit" === "s(&E)" "&Get Move List" === "o۪kC(&G)" "&Giant" === "108" "&Help" === "(&H)" "Highlight Dra&gging" === "즲ش(&H)" "&Huge" === "95" "&Index number:" === "Ǹ(&I)" "&Italic" === "(&I)" "&King" === "(&K)" "&Large" === "80" "&Load" === "J(&L)" "&Local Line Editing" === "aݽs(&L)" "&Middling" === "49" "&Next" === "U@(&N)" "&Petite" === "33" "&Popup Exit Message" === "}ɴ(&P)" "&Port:" === "s(&P)" "&Premove" === "w(&P)" "&Prev" === "W@(&P)" "&Queen" === "Z(&Q)" "&Quiet Play" === "lLn(&Q)" "&Revert to Defaults" === "_w](&R)" "&Rook" === "(&R)" "&Show Thinking" === "ܫҲӸ`(&S)" "&Small" === "40" "&Sound alarm at" === "nĵi(&S)" "&Stop Bits:" === "줸(&S)" "&Strikeout" === "Ru(&S)" "&Tiny" === "21" "&Underline" === "u(&U)" "&White first move" === "(&W)" "&Additional options" === "[ﶵ(&A)" "Always &Queen Ctrl+Shift+Q" === "`OܬӦZ(&Q) Ctrl+Shift+Q" "Always on &Top" === "`b̫e(&T)" "Animate &Dragging" === "ʵe즲(&D)" "Auto &Flag Ctrl+Shift+F" === "۰ʶWɧPt(&F) Ctrl+Shift+F" "Auto &Observe" === "۰[(&O)" "Auto &Raise Board" === "۰ʧܴѽLjp(&R)" "Auto Flip &View" === "۰½ѽL(&V)" "Black Pieces" === "¤l" "Browse..." === "s..." "Built-in sound:" === "n" "Bul&ky" === "72" "Cancel" === "" "Chessboard for Windows" === "WindowsUqlڶHѴѽL" "Choose..." === "..." "Clocks" === "" "Comments" === "" "Conventional chess clock" === "ɬq" "Coordinates" === "" "Copyright 1991 Digital Equipment Corporation" === "Copyright 1991 Digital Equipment Corporation" "Dark Squares" === "®" "Data &Bits:" === "Ʀ줸(&B)" "Data &Rate:" === "ǿv(&R)" "Default beep" === "w]n" "Defaults" === "w]" "Do ¬ colorize messages" === "nTۦ(&N)" "Dri&ves:" === "Ϻо(&V)" "Enter" === "J" "Event:" === "ƥ" "F&low:" === "(&L)" "File &Name:" === "ɮצW(&N)" "Help" === "" "Highlight Last &Move" === "аOW@۪k(&M)" "ICS Interaction" === "ICS" "Incremental clock" === "[ɨ" "Inde&x number:" === "Ǹ(&X)" "Just &view or edit game files" === "u[ݩνsѧ(&v)" "K&night" === "(&N)" "Light Squares" === "ծ" "List Files of &Type:" === "ɮ(&T)" "Load games with automatic stepping" === "Jѧ۰ʨ" "Medi&ocre" === "45" "Medi&um" === "64" "Messages" === "T" "Mode&rate" === "58" "Monochrome" === "¥" "Net&work..." === "(&W)..." "No sound" === "Ln" "OK" === "Tw" "Old" === "®榡" "P&arity:" === "(&A)" "PGN" === "PGN榡" "Periodic &Updates" === "ws(&U)" "Play" === "" "Ponder &Next Move Ctrl+Shift+P" === "PB(&N) Ctrl+Shift+P" "Popup Move &Errors" === "ܿ~۪k(&E)" "Premove Highlights" === "wѼаO" "Promote pawn to:" === "Lܬ" "Prompt for filename" === "ɮצW" "Save As: " === "xs" "Save games automatically" === "۰xsѧ" "Show &Coordinates" === "ܧ(&C)" "Show Butt&on Bar" === "ܫs(&O)" "Sl&im" === "37" "Sorry Charlie" === "藍_AդU" "Square Highlights" === "lаO" "T&eeny" === "25" "Tags" === "" "Test &Legality Ctrl+Shift+L" === "ˬd۪kXz(&L) Cl+Sh+L" "Tita&nic" === "129" "To file:" === "ɮ" "Use an Internet Chess Server" === "nWڶHѪAȾ" "WAV file:" === "WAVɮ" "White Pieces" === "l" "WinBoard 0.0.0" === "WinBoard 0.0.0" "galactic" === "galactic" "minutes initially," === "_lɶ" "minutes" === "" "moves in" === "B" "plus" === "" "seconds per move" === "C@B[" "seconds per move" === "@B" "seconds" === "" "Save As:" === "xs" "What would you like to do?" === "pϥΡH" "Interaction Colors" === "ʲ" "Premove" === "w" "Alarm" === "" "Colors" === "C" "Size" === "jp" "Current Board Size" === "eѽLjp" "All Board Sizes" === "ҦѽLjp" "Number of moves:" === "B" "Within number of minutes:" === "" "Initial number of minutes:" === "_lɶ" "Plus number of seconds per move:" === "C@B[" "Ponder Next Move" === "PB(&N)" "Enable and Show Thinking (recommended)" === "ܫҲӸ`" "Periodic Updates (for Analysis Mode)" === "ws(RҦ)" "Game List Options" === "ѧCﶵ" "PGN &Tags:" === "PGN(&T)" "Default" === "w]" "Sounds" === "n" "&Event:" === "ƥ(&E)" "&No sound" === "Ln(&N)" "&Default beep" === "w]n(&D)" "&Built-in sound:" === "n(&B)" "&WAV file:" === "&WAVɮ" "B&rowse..." === "s...(&B)" "&Play" === "(&P)" "&Defaults" === "w](&D)" "I C S Interaction" === "I C S 椬" "About WinBoard" === "WinBoard" "Time Control" === "ɶ]w" "Load Game Options" === "Jѧﶵ" "Save Game Options" === "xsѧﶵ" "Open" === "}" "Communication Port Settings" === "qTs]w" "Edit Comment" === "s" "Promotion" === "" "Game List" === "ѧC" "Edit Tags" === "s" "ICS Interaction" === "ICS椬" "Dialog" === "" "Error" === "~" "ICS Interaction Colors" === "ICS椬C" "Question" === "" "WinBoard Startup" === "WinBoardҰ" "Type in a move" === "J۪k" "General Options" === "@ﶵ" "ICS Options" === "ICS]w" "Board Options" === "ѽLﶵ" "Fonts" === "r" NEW "&Up" === "VW" "&Down" === "VU" "Filter" === "Lo" "All White" === "" "Flip Black" === "¦" "Specify Chess &Engines:" === "w(&E)" "Specify Chess &Server:" === "wAȾ(&S)" "New Shuffle Game..." === "~PC..." "New Variant...\tAlt+Shift+V" === "sܺ...\tAlt+Shift+V" "Copy Game List to Clipboard" === "ƻsCCŶKï" "Save &Diagram..." === "xsϪ...(&D)" "Machine Both" === "M" "Machine Matc&h" === "(&h)" "Show Engine &Output\tAlt+Shift+O" === "ܤX\tAlt+Shift+O" "Show Evaluation Graph\tAlt+Shift+E" === "ܵ\tAlt+Shift+E" "Show Move History\tAlt+Shift+H" === "۪ܵk\tAlt+Shift+H" "Open Chat Window" === "}ѵ" "Enter &Username..." === "JΤW(&U)" "&Upload to Examine" === "Wˬd(&U)" "Adjudicate to &White" === "MĹ (&W)" "Adjudicate to &Black" === "MĹ (&B)" "Adjudicate &Draw" === "Х(&D)" "&Annotate" === "(&A)" "&Truncate Game" === "I_(&T)" "Swap &Clocks" === "洫(&C)" "&Mute all Sounds" === "ҦnR(&M)" "Adjudications...\tAlt+Shift+J" === "PM...\tAlt+Shift+J" "Common Engine...\tAlt+Shift+U" === "qΤ]w...\tAlt+Shift+U" "Engine #1 Settings..." === " #1 ]w" "Engine #2 Settings..." === " #2 ]w" "Game List..." === "CC..." "Promote" === "" "Archbishop" === "v" "Chancellor" === "_" "Elephant" === "H" "Cannon" === "" "Demote" === "" "Lance" === "" "Silver" === "ȱN" "Gold" === "N" "Fixed time per move" === "TwB" "Maximum seconds per move:" === "̤jB()" "Time-Odds Factors:" === "ɶ" "Engine #1:" === " #1" "Engine #2:" === " #2" "Save out of book info in PGN" === "bPGNxswT" "&Send Engine Think" === "oe(&S)" "E&xtended PGN Info Ctrl+Shift+X" === "XiPGNT Ctrl+Shift+X" "&Hide Thinking Ctrl+Shift+H" === "ä Ctrl+Shift+H" "&Info in Move History Ctrl+Shift+I" === "۪kCܰT Cl+Sh+I" "Highlight with Arro&w" === "νbYX" "Displa&y Logos" === "ܤлx(&y)" "&Auto Kibitz" === "۰\"kibitz\"(&A)" "See&k Graph" === "iϪ(&k)" "auto-&Refresh" === "۰ʨsϪ(&R)" "Bckgnd Obser&ve" === "I[(&v)" "&Dual Board" === "ѽL(&D)" "One-Click &Move" === "(&M)" "Background..." === "I..." "&Defaults..." === "w](&D)" "Startup &Chat Boxes:" === "ҰʲѮ(&C)" "General" === "@" " YES" === "O" " NO" === "_" "Move History, Engine Output" === "vk,X" "New Shuffle Game" === "~PC" "&Start Position Number:" === "ҰʦmX(&S)" "Random" === "H" "Move History" === "vk" "Evaluation Graph" === "f" "Engine output" === "X" "Engine #1" === " #1" "NPS" === "NPS" "Engine #2" === " #2" "Chat Window" === "ѵ" "Chat partner:" === "ѹ٦" "Clear" === "M" "Send" === "oe" "Adjudications" === "PM" "Hide Thinking when Playing against Human" === "PHٮëҲӸ`" "Adjudications in non-ICS games" === "PMDICSC" "Adjudicate draw after:" === "X۫PM" "moves" === "۪k" "Win/loss adjudication threshold:" === "/ĹPMe" "centipawns" === "ʤ@L" "&Verify Engine Claims" === "Ҥn(&V)" "Detect &Mates" === "˴N(&M)" "Draw if &Insufficient Material" === "lOɧPM(&I)" "Adjudicate &Trivial Draws" === "²MѧPM(&T)" "Apply" === "M" "-move rule" === "kWh" "-fold repeats" === "" "Engine #1 Score is Absolute" === " #1 O" "Engine #2 Score is Absolute" === " #2 O" "Common Engine Settings" === "qΤ]w" "Polyglot Directory:" === " Polyglot Ƨ" "Hash Size (MB):" === "jp(MB)" "EGTB Path:" === "EGTB |" "EGTB Size (MB):" === "EGTB jp(MB)" "Use Book:" === "ϥήw" "Max nr of CPUs:" === "̤jCPU" "First has Own Book" === "1ۥήw" "Second has Own Book" === "2ۥήw" "Book Depth:" === "w۪k`" "Book Variation:" === "wܨ" "Default Match Games:" === "w]ɹ什" "Variants" === "ܺ" "Variant" === "ܺ" "Board size:" === "ѽLjp" "ranks" === "" "files" === "C" "Holdings with room for:" === "i֦Ѥlƥ" "('-1' means defaults for selected variant)" === "-1ܹw]" "Type In Your Name" === "Je Naam, Sufferd!" "&Play against a chess engine or match two engines" === "H٩ιq(&P)" "&Use an Internet Chess Server" === "nWڶHѪAȾ(&U)" winboard.c "&File" === "ɮ(&F)" "&Mode" === "Ҧ(&M)" "&Action" === "欰(&A)" "&Step" === "۪k(&S)" "&Options" === "ﶵ(&O)" "&Help" === "(&H)" "Font name too long:" === "rW٤Ӫ" "Font point size missing:" === "Srjp" "Can't parse color name %s" === "LkѧOCW %s" "Unrecognized board size value" === "LkѧOѽLjp" "Unrecognized argument" === "LkѧOѼ" "No value provided for argument" === "SȴѵѼ" "Incomplete \\ escape in value for" === "Τ_" "Failed to open indirection file" === "Lk}ɮ" "Unrecognized boolean argument value" === "LkѧO޿Ѽƭ" "Unrecognized argument" === "LkѧOѼ" "Too many colors" === "CӦh" "&Minimize\tCtrl+F4" === "̤p(&M)\tCtrl+F4" "White: %s" === " %s" "We only care about the height here" === "o̧ڭ̥u`" "Cannot build game list" === "LkإߴѧC" "Load Game from File" === "qɮ׸Jѧ" "Load Position from File" === "qɮ׸JL" "Save Game to File" === "xsѧɮ" "Save Position to File" === "xsLɮ" "%s does not support analysis" === "%s R\" "Analyze Game from File" === "qɮפRѧ" "Unable to activate help" === "Lk}" "Send to chess program:" === "oeĤ@ӰڶHѵ{" "Send to second chess program:" === "oeĤGӰڶHѵ{" "Direct Command" === "JRO" "Error loading sound %s" === "Jn %s ~" "Error playing sound %s" === "n %s ~" "File open failed" === "Lk}ɮ" "Internal error in file dialog box" === "ɮ׹ܮت~" "Option Error" === "ﶵ~" "Choose an option, or cancel to exit" === "ܤ@ӿﶵAΪ̫s}" "Unable to activate help" === "Lk}" "Displayed move is not current" === "ܪ۪kOe۪k" "Could not parse move" === "LkѪR۪k" "%s:\nError code %d" === "%s:\n~ %d" "Error" === "~" "Fatal Error" === "Y~" "Exiting" === "}" "%s:\nError code %d" === "%s:\n~ %d" "ܰT" === "ܰT" "Note" === "" "Error writing to chess program" === "oeTڶHѵ{ɥX" "User" === "Τ" "Unknown" === "" "White" === "" "Black" === "¤" "Save Game to File" === "xsѧɮ" "Not implemented" === "\|@" "Shout Text" === "qsr" "SShout/CShout" === "jnqsr" "Channel 1 Text" === "WDIr" "Channel Text" === "WDr" "Kibitz Text" === "Lr" "Tell Text" === "Dr" "Challenge Text" === "DԤr" "Request Text" === "ܽФr" "Seek Text" === "jMr" "Normal Text" === "`r" "None" === "L" "Pawn" === "L" "Knight" === "" "Bishop" === "H" "Rook" === "" "Queen" === "Z" "Information" === "T" wclipbrd.c "Unable to convert position to FEN." === "LkLƬFEN" "Unable to copy FEN to clipboard." === "LkƻsFENŶKï" "Cannot create temporary file name." === "Lkإ{ɮ" "Cannot open temporary file." === "Lk}{ɮ" "Cannot write to temporary file." === "LkgJ{ɮ" "Cannot reopen temporary file." === "LkA}{ɮ" "Cannot determine size of file." === "LkTwɮפjp" "Cannot determine size of file." === "LkTwɮפjp" "Cannot allocate clipboard buffer." === "LktŶKïwİ" "Cannot read from temporary file." === "LkŪX{ɮ" "Error reading from temporary file." === "ŪX{ɮ׮ɥX" "Cannot copy text to clipboard" === "LkƻsrŶKï" "Unable to allocate memory for clipboard." === "LkŶKïtxsŶ" "Unable to lock clipboard memory." === "LkwŶKïxsŶ" "Cannot unlock clipboard memory." === "LkŶKïxsŶ" "Cannot open clipboard." === "Lk}ŶKï" "Cannot empty clipboard." === "LkMŰŶKï" "Cannot copy text to clipboard." === "LkƻsrŶKï" "Cannot close clipboard." === "LkŶKï" "Unable to paste FEN from clipboard." === "LkqŶKïKWFEN" "Unable to create temporary file." === "Lkإ{ɮ" "Error writing to temporary file." === "gJ{ɮ׮ɥX" "Unable to open clipboard." === "Lk}ŶKï" "No text in clipboard." === "ŶKïSr" "Unable to lock clipboard memory." === "LkwŶKïxsŶ" "Unable to allocate memory for text string." === "LkrtxsŶ" "Unable to unlock clipboard memory." === "LkŶKïxsŶ" "Unable to close clipboard." === "LkŶKï" woptions.c "Variant %s not supported by %s" === " %s Q %s Ҥ" "Warning: second engine (%s) does not support this!" === "ĵi: ĤGӤ(%s) !" "Invalid ICS Alarm Time" === "ICSDk" "Invalid max time per move" === "Xk̤jB" "Invalid time-odds factor" === "Xkɶ" "Choose Folder" === "ܸƧ" "Choose Book" === "ܥήw" "Choose Polyglot Directory" === " Polyglot Ƨ" "Choose EGTB Directory:" === " EGTB Ƨ" "Polyglot was not found in the specified folder!" === "wƧo{ Polyglot " wgamelist.c "No game selected" === "S襤ѧ" "Can't go forward any further" === "LkAeiF" "Can't back up any further" === "LkAhF" "No game list" === "SѧC" "Game List" === "ѧC" "Game list not loaded or empty" === "ѧCJΪť" "%s - %d/%d games" === "%s - %d/%d ѧ" "Game list not loaded or empty" === "ѧCJΪť" wedittags.c "Edit Tags" === "s" "Tags" === "" "Error replacing tags." === "ҿ~" wsettings.c "%s Engine Settings (%s)" === "%s ]w (%s)" "OK" === "Tw" "Cancel" === "" backend.c "bad timeControl option %s" === "Dk\"timeControl\"(ɶ)ﶵ %s" "bad searchTime option %s" === "Dk\"searchTime\"(jMɶ)ﶵ %s" "first" === "Ĥ@" "second" === "ĤG" "protocol version %d not supported" === "qTw %d Q" "Variant %s supported only in ICS mode" === " %s ubICSҦU" "Unknown variant name %s" === "W %s" "Starting chess program" === "ҰʰڶHѵ{" "Could not open comm port %s" === "Lk}qTs %s" "Could not connect to host %s, port %s" === "LksD %s s %s" "Unknown initialMode %s" === "\"initialMode\"(lҦ)ﶵ %s" "Can't have a match with no chess programs" === "SHѵ{ɵLki" "Bad game file" === "ѧɮ׿~" "Bad position file" === "Lɮ׿~" "AnalyzeFile mode requires a game file" === "\"AnalyzeFile\"(Rɮ)Ҧw@Ӵѧɮ" "Analysis mode requires a chess engine" === "\"Analysis\"(R)ҦҰʰڶHѤ" "Analysis mode does not work with ICS mode" === "\"Analysis\"(R)ҦLkbICSҦUu@" "MachineWhite mode requires a chess engine" === "\"MachineWhite\"(q)ҦҰʰڶHѤ" "MachineWhite mode does not work with ICS mode" === "\"MachineWhite\"(q)ҦLkbICSҦUB" "MachineBlack mode requires a chess engine" === "\"MachineBlack\"(q)ҦҰʰڶHѤ" "MachineBlack mode does not work with ICS mode" === "\"MachineBlack\"(q)ҦLkbICSҦUB" "TwoMachines mode does not work with ICS mode" === "\"TwoMachines\"(q)ҦLkbICSҦUB" "TwoMachines mode requires a chess engine" === "\"TwoMachines\"(R)ҦҰʰڶHѤ" "Training mode requires a game file" === "\"Training\"(Vm)Ҧw@Ӵѧɮ" "Error writing to ICS" === "oeTICSɥX" "Error reading from keyboard" === "ŪLɥX" "Got end of file from keyboard" === "ŪLɹJɮק" "Error writing to ICS" === "oeTICSɥX" "Error writing to display" === "oeTܾɥX" "Error gathering move list: two headers" === "Ū۪kɥXAX{Ӷ}Y" "Error gathering move list: nested" === "Ū۪kɥXA_~" "Connection closed by ICS" === "sQICS" "Error reading from ICS" === "ŪICSTɥX" "Failed to parse board string:\n\"%s\"" === "LkѪRѽLr\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "ѧӪAݭnW[\"MAX_MOVES\"íssĶ" "Error gathering move list: extra board" === "Ū۪kɥXAWXѽL" "Illegal move \"%s\" from ICS" === "qICSŪ줣Xk۪k\"%s\"" "Couldn't parse move \"%s\" from ICS" === "LkѪRqICSŪ쪺۪k\"%s\"" "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "say ~ADk\"moveType\"(۪k) %d (%d,%d-%d,%d)" "You are playing Black" === "Ab" "You are playing White" === "Ab" "It is White's turn" === "訫" "It is Black's turn" === "¤訫" "Displayed position is not current" === "ܪLOeL" "Illegal move" === "۪k~" "End of game" === "ѧ" "Incorrect move" === "۪k~" "Illegal move \"%s\" from %s machine" === "q%sŪ줣Xk۪k\"%s\"" "Forfeit due to illegal move" === "]Xz۪kӥdzW" "%s does not support analysis" === "%s R\" "Illegal move \"%s\" (rejected by %s chess program)" === "Xk۪k\"%s\" (%sڶHѵ{ڵӵ۪k)" "Failed to start %s chess program %s on %s: %s\n" === "LkҰ%sڶHѵ{ %s(bD %s W)A%s\n" "Hint: %s" === " %s" "White resigns" === "{" "Black resigns" === "¤{" "White mates" === "谵" "Black mates" === "¤谵" "Draw" === "M" "Draw agreed" === "өM" "Machine accepts your draw offer" === "qPNM" "Machine offers a draw\nSelect Action / Draw to agree" === "qM\nܬO_M" "%s (only move)" === "%s (ߤ@۪k)" "Ambiguous move in ICS output: \"%s\"" === "ICSXT۪k\"%s\"" "Illegal move in ICS output: \"%s\"" === "ICSXT۪k\"%s\"" "Gap in move list" === "۪k_}" "Game too long; increase MAX_MOVES and recompile" === "ѧӪAݭnW[\"MAX_MOVES\"íssĶ" "Variant %s not supported by %s" === " %s Q %s " "Startup failure on '%s'" === "LkҰ'%s'" "Waiting for first chess program" === "ݲĤ@ӰڶHѵ{" "Waiting for second chess program" === "ݲĤGӰڶHѵ{" "Match %s vs. %s: final score %d-%d-%d" === " %s vs. %s: ̲פ %d-%d-%d" "Stalemate" === "x" "Illegal move: %d.%s%s" === "Xk۪k %d.%s%s" "Ambiguous move: %d.%s%s" === "T۪k %d.%s%s" "Can't open \"%s\"" === "Lk}\"%s\"" "Cannot build game list" === "LkإߴѧC" "No more games in this message" === "oT]thѧ" "No game has been loaded yet" === "|ѧJ" "Can't back up any further" === "LkAhF" "Game number out of range" === "ѧƶqWXd" "Can't seek on game file" === "LkjMѧɮ" "Game not found in file" === "ɮפSѧ" "Bad FEN position in file" === "ɮפFENL~" "No moves in game" === "ѧS۪k" "No position has been loaded yet" === "|LJ" "Can't back up any further" === "LkAhF" "Can't open \"%s\"" === "Lk}\"%s\"" "Can't seek on position file" === "LkjMLɮ" "Position not found in file" === "ɮפSL" "Bad FEN position in file" === "ɮפFENL~" "Black to play" === "¤訫" "White to play" === "訫" "Can't open \"%s\"" === "Lk}\"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === "ѧwgsLF\n\"sJP@ѧ\"~ਫ" "You have entered too many moves.\nBack up to the correct position and try again." === "AJFLh۪k\nh^쥿TLAդ@" "Displayed position is not current.\nStep forward to the correct position and try again." === "ܪLOeL\neieLAդ@" "You have not made a move yet" === "A|" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "|JcmailT.\nsJCMailTís." "No unfinished games" === "sbѧ" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "AwHeX@ӵ۪k\nе۪kǰeܹ\nYsHe۪k, bROCJ\n\"cmail -remail -game %s\"\n" "Failed to invoke cmail" === "Iscmail" "Waiting for reply from opponent\n" === "ݹ^\n" "Still need to make move for game\n" === "ѧݨ\n" "Still need to make moves for both games\n" === "ѧҤݨ\n" "Still need to make moves for all %d games\n" === "Ҧ %d ѧҤݨ\n" "Still need to make a move for game %s\n" === "ѧ %s ݨ\n" "No unfinished games\n" === "sbѧ\n" "Ready to send mail\n" === "dzưeHN\n" "Still need to make moves for games %s\n" === "ѧ %s ݨ\n" "Edit comment" === "s" "Edit comment on %d.%s%s" === "s %d.%s%s" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "ҰʤRҦ...\npGoT@dۡANAڶHѵ{RC" "It is not White's turn" === "S訫" "It is not Black's turn" === "S¤訫" "Wait until your turn,\nor select Move Now" === "ݦܽA\nΪ̿\"ߧY\"" "Starting second chess program" === "ҰʲĤGӰڶHѵ{" "Training mode off" === "VmҦw" "Training mode on" === "VmҦw}" "Already at end of game" === "ѧwg" "Warning: You are still playing a game" === "`NGAbiѧ" "Warning: You are still observing a game" === "`NGAb[Ѵѧ" "Warning: You are still examining a game" === "`NGAbsѧ" "It is Black's turn" === "¤訫" "It is White's turn" === "訫" "That square is occupied" === "lwѤl" "Draw agreed" === "өM" "There is no pending offer on this move" === "ӵ۪kSݩwij" "Both players ran out of time" === "賣WɤF" "Black wins on time" === "WɧPt" "Your opponent is not out of time" === "SW" "Both players ran out of time" === "賣WɤF" "White wins on time" === "¤WɧPt" "Your opponent is not out of time" === "SW" "Draw agreed" === "өM"1,$g/=== ""/d "Black offers a draw" === "¤责M" "White offers a draw" === "责M" "You must make your move before offering a draw" === "Ѥ~ണM" "Draw agreed" === "өM" "Game aborted" === "ѧ_" "You are not examining a game" === "SRѧ" "You can't revert while pausing" === "Ȱɤ_ѧ" "Wait until your turn,\nor select Move Now" === "ݹ⨫\nΪ̿\"ߧYl\"" "It is your turn" === "A" "Wait until your turn" === "ݹ⨫" "No hint available" === "SiΪ" "Error writing to %s chess program" === "oeT%sڶHѵ{ɥX" "Error: %s chess program (%s) exited unexpectedly" === "~G%sڶHѵ{(%s)`פ" "Error reading from %s chess program (%s)" === "q%sڶHѵ{(%s)TɥX" "Analysis (%s)" === "R(%s)" "Comment" === "" "Comment on %d.%s%s" === " %d.%s%s" "Both flags fell" === "賣WɤF" "White's flag fell" === "W" "Black wins on time" === "WɧPt" "Black's flag fell" === "¤W" "White wins on time" === "¤WɧPt" "Bad FEN position in clipboard" === "ŶKïFENL~" "No response from ICS" === "ICS T" "You cannot do this while you are playing or observing" === "Uѩ[Ѯɤi榹ާ@" "Click in holdings to choose piece" === "IܤѤl" END-OF-GAME MESSAGES (should they be translated? You can translate it as "ѧGT") "Xboard adjudication: King destroyed" === "Xboard PMGQ" "Xboard adjudication: Bare king" === "Xboard PMGN" "Xboard adjudication: 3rd check" === "Xboard PMG3Nx" "Xboard adjudication: Stalemate" === "Xboard PMGx" "Xboard adjudication: Checkmate" === "Xboard PMGN" "Xboard adjudication: Insufficient mating material" === "Xboard PMGlO" "Xboard adjudication: Trivial draw" === "Xboard PMG@M" "XBoard adjudication: repetition draw" === "Xboard PMG`M" "Xboard adjudication: perpetual checking" === "Xboard PMGN" "Xboard adjudication: perpetual chasing" === "Xboard PMG" "%Xboard adjudication: perpetual chasing of" === "Xboard PMG" "Xboard adjudication: 50-move rule" === "Xboard PMG50^XPMWh" "Draw claim: 50-move rule" === "MnG50^XPMWh" "Draw claim: 3-fold repetition" === "MnG3`" "Draw claim: insufficient mating material" === "MnGlO" "Xboard adjudication: long game" === "Xboard PMG什L" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "XboardGѧOѨBdzW %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "XboardGDkѨBdzW %s (%c%c%c%c)%c" "Xboard adjudication" === "Xboard PM" "User adjudication" === "ΤPM" "False win claim: '%s'" === "Ĺn" "False draw claim: '%s'" === "Mn" "xboard exit" === "xboard }" xboard-4.8.0/winboard/language/deutsch.lng0000644000175000001440000010563612420374633015467 00000000000000## WinBoard 4.5.0 language file ## German/Deutsch v1.0 beta 1 ## Translation by Oliver Uwira ## ## If you revise this, please insert your date, name and description. ## Falls Sie diese Datei berarbeiten, tragen Sie bitte Ihren Namen, ## das Datum und eine kurze Beschreibung hier ein. ## ## 07. November 2010 Oliver Uwira ## Ersterstellung ## Anmerkungen fr bersetzer: (empfohlen auch fr lang450.txt) ## o Benutzen Sie ## Kommentare fr erklrungsbedrftige Eintrge. ## o Beachten Sie, dass wortwrtliche bersetzungen in der Zielsprache ungewhnlich klingen knnen, z.B. "Knigin" anstatt dem richtigen "Dame". ## o Versuchen Sie, kurze bersetzungen zu finden. Mehr Text fhrt nicht automatisch zu besserem Verstndnis. ## o berprfen Sie Ihre bersetzung. Gibt sie die Bedeutung des Ursprungstext klar wieder? ## o Testen Sie Ihre bersetzung. ## o Vergeben Sie Shortcuts (ber das Zeichen &). " " === "bersetzung: Oliver Uwira" winboard.rc MENUS: "&New Game\tCtrl-N" === "&Neue Partie\tCtrl+N" "New Sh&uffle Game..." === "Neue Partie - Shuffleschach..." "New &Variant...\tAlt+Shift+V" === "Neue Partie - Variante...\tAlt+Umschalt+V" "&Load Game...\tCtrl-O" === "Partie &laden...\tCtrl+O" "Load &Next Game\tAlt+PgDn" === "Nchste Partie laden\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "Vorherige Partie laden\tAlt+PgUp" "&Reload Same Game" === "Partie erneut laden" "&Save Game...\tCtrl-S" === "Partie &speichern...\tCtrl+S" "&Copy Game To Clipboard\tCtrl+C" === "Partie &kopieren\tCtrl+C" "&Paste Game From Clipboard\tCtrl+V" === "Partie &einfgen\tCtrl+V" "Copy Game List to Clipboard" === "Partieliste kopieren" "L&oad Position...\tCtrl+Shift+O" === "Stellung laden...\tCtrl+Umschalt+O" "Load N&ext Position\tAlt+Shift+PgDn" === "Nchste Stellung laden\tAlt+Umschalt+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Vorherige Stellung laden\tAlt+Umschalt+PgUp" "Reload Sa&me Position" === "Stellung erneut laden" "S&ave Position...\tCtrl+Shift+S" === "Stellung speichern...\tCtrl+Umschalt+S" "Save as &Diagram..." === "Diagramm speichern..." "C&opy Position To Clipboard\tCtrl+Shift+C" === "Stellung kopieren\tAlt+Umschalt+C" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Stellung einfgen\tAlt+Umschalt+V" "&Quit" === "Beenden" "Machine &White\tCtrl+W" === "Engine Wei\tCtrl+W" "Machine &Black\tCtrl+B" === "Engine Schwarz\tCtrl+B" "&Two Machines\tCtrl+T" === "Zwei Engines\tCtrl+T" "Machine Both" === "Engine gegen sich selbst" "&Machine Match" === "Turnier" "&Analysis Mode\tCtrl+A" === "Analysemodus\tCtrl+A" "Analyze &File\tCtrl+F" === "Datei analysieren\tCtrl+F" "&ICS Client" === "Mit ICS verbinden" "&Edit Game\tCtrl+E" === "Partie bearbeiten\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "Stellung bearbeiten\tCtrl+Umschalt+E" "Trai&ning" === "Trai&ning" "Engine &Output\tAlt+Shift+O" === "Engineausgabe anzeigen\tAlt+Umschalt+O" "Evaluation &Graph\tAlt+Shift+E" === "Bewertungsgraph anzeigen\tAlt+Umschalt+E" "Game &List\tAlt+Shift+G" === "Partieliste anzeigen\tAlt+Umschalt+G" "Move &History\tAlt+Shift+H" === "Notation anzeigen\tAlt+Umschalt+H" "Open &New Chat Window" === "Chatfenster ffnen" "Edit Ta&gs..." === "&Tags bearbeiten" "Edit Co&mment..." === "&Kommentar bearbeiten" "&Tags" === "&Tags" "&Comments" === "&Kommentar" "Enter &Username..." === "Ben&utzernamen eingeben" "&Pause\tPause" === "&Pause\tPausa" "&Accept\tF3" === "&Annehmen\tF3" "D&ecline\tF4" === "Abl&ehnen\tF4" "Re&match\tF12" === "Rcks&piel\tF12" "Call &Flag\tF5" === "Zeit &reklamieren\tF5" "&Draw\tF6" === "&Remis\tF6" "Ad&journ\tF7" === "Vertagen\tF7" "A&bort\tF8" === "Abbrechen\tF8" "&Resign\tF9" === "Auf&geben\tF9" "Stop &Observing\tF10" === "Zuschauen beenden\tF10" "Stop E&xamining\tF11" === "Analyse beenden\tF11" "&Upload to Examine" === "Z&ur Analyse hochladen" "Adjudicate to &White" === "Abschtzung - Wei gewinnt" "Adjudicate to &Black" === "Abschtzung - Schwarz gewinnt" "Adjudicate &Draw" === "Abschtzung - Remis" "Type In &Move...\tAlt+I" === "&Zug eingeben...\tAlt+I" "&Backward\tAlt+Left" === "Zurck\tAlt+Links" "&Forward\tAlt+Right" === "&Vorwrts\tAlt+Rechts" "Back to &Start\tAlt+Home" === "Zum &Anfang\tAlt+Anfang" "Forward to &End\tAlt+End" === "Zum &Ende\tAlt+Ende" "&Revert\tHome" === "Rckgngig\tAnfang" "&Annotate" === "Kommentieren" "&Truncate Game\tEnd" === "Res&tliche Zge lschen\tEnde" "&Move Now\tCtrl+M" === "Ziehe &jetzt\tCtrl+M" "&Retract Move\tCtrl+X" === "Zurck&nehmen\tCtrl+X" "Flip &View\tF2" === "&Brett drehen\tF2" "&Swap Clocks" === "Uhren taus&chen" "&Mute all Sounds" === "Lautlos" "&General..." === "&Allgemein" "&Board..." === "Brett..." "Ad&judications...\tAlt+Shift+J" === "Abschtzungen...\tAlt+Umschalt+J" "Common &Engine...\tAlt+Shift+U" === "Standardengine...\tAlt+Umschalt+U" "Engine #&1 Settings..." === "Engine #1 konfigurieren..." "Engine #&2 Settings..." === "Engine #2 konfigurieren..." "Install 1st..." === "Installieren in Engineliste 1..." "Install 2nd..." === "Installieren in Engineliste 2..." "&ICS..." === "&ICS..." "Add ICS..." === "Neue ICS..." "&Fonts..." === "&Schriftarten..." "Soun&ds..." === "&Klnge..." "G&ame List..." === "Partieliste..." "&Game List Tags..." === "Partieliste Tags..." "Comm&unications..." === "Porteinstellungen..." "&Load Game...\tAlt+Shift+L" === "Partie &laden...\tAlt+Umschalt+L" "&Save Game...\tAlt+Shift+S" === "Partie &speichern...\tAlt+Umschalt+S" "&Time Control...\tAlt+Shift+T" === "&Zeitkontrolle..." "Save Settings &Now" === "Einstellungen sofort speichern" "Save Settings on E&xit" === "Einstellungen nach Beenden speichern" "Help &Contents\tF1" === "In&halt\tF1" "Help &Index" === "&Index" "How to &Use Help" === "Wie benutzt man die Hilfe" "&Hint..." === "&Tipp..." "&Book..." === "&Erffnungsbuch..." "&About WinBoard" === "ber WinBoard" "White" === "Wei" "Promote" === "Schwarz" "Pawn" === "Bauer" "Knight" === "Springer" "Bishop" === "Lufer" "Rook" === "Turm" "Queen" === "Dame" "King" === "Knig" "Archbishop" === "Erzbischof" "Chancellor" === "Kanzler" "Elephant" === "Elefant" "Cannon" === "Kanone" "Empty Square" === "Leeres Feld" "Black" === "Schwarz" "Demote" === "Degradieren" "Clear Board " === "Brett leeren " "Gold" === "Gold" "Silver" === "Silber" "Lance" === "Lanze" "Drop" === "Einsetzen" "Cop&y and Paste" === "Kopieren &und einfgen" "&Copy" === "&Kopieren" "&Paste" === "&Einfgen" "&Undo" === "&Rckgngig" "Cu&t" === "A&usschneiden" "&Copy" === "&Kopieren" "&Paste" === "&Einfgen" "Select &All" === "&Alles auswhlen" DIALOGS: ABOUTBOX "About WinBoard" === "ber WinBoard" "OK" === "OK" "Chessboard for Windows" === "Schachbrett fr Windows" "Copyright 1991 Digital Equipment Corporation" === "Copyright (c) Digital Equipment Corporation 1991" "Enhancements Copyright 1992-2014 Free Software Foundation" === "Weiter Copyright (c) Free Software Fundation 1992-2014" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "Weiter Copyright (c) \r\nAlessandro Scotti 2005" "WinBoard 0.0.0" === "WinBoard 0.0.0" ABOUTBOX2 "galactic" === "galaktisch" TIME CONTROL DIALOG "Time Control" === "Zeitkontrolle" "Conventional chess clock" === "Normale Schachuhr" "Incremental clock" === "Schachuhr mit Inkrement" "Cancel" === "Abbrechen" "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Benutzen Sie die Pfeiltasten zur Auswahlt des Uhrentyps und verwenden Sie anschlieend die Tabulatortaste, um die Uhr zu stellen." "Fixed time per move" === "Feste Zeit pro Zug" "Number of moves:" === "Anzahl Zge:" "Within number of minutes:" === "in Anzahl Minuten:" "Initial number of minutes:" === "Initiale Anzahl Minuten:" "Plus number of seconds per move:" === "Plus Anzahl Sekunden pro Zug:" "Maximum seconds per move:" === "Maximale Anzahl Sekunden pro Zug" "Time-Odds Factors:" === "Zeitvorgabe:" "Engine #1:" === "Engine #1:" "Engine #2:" === "Engine #2:" LOAD OPTIONS DIALOG "Load Game Options" === "Partieeinstellungen laden" "Load games with automatic stepping" === "Partien mit automatischen Schritten laden" ## Make it wider. It could say "segundos por jugada" "seconds per move" === "Sekunden pro Zug" SAVE OPTIONS DIALOG "Save Game Options" === "Partieeinstellungen speichern" "Save As: " === "Stil speichern" "Save games automatically" === "Partien automatisch speichern" "Prompt for filename" === "Dateinamen eingeben" "To file:" === "Datei:" "PGN" === "PGN" "Old" === "Alt" "Browse..." === "Durchsuchen..." "Save out of book info in PGN" === "Verlassen des Erffnungsbuchs in PGN markieren" 1536 "Open" === "ffnen" "File &Name:" === "Datei&name:" "&Directories:" === "&Verzeichnisse:" "List Files of &Type:" === "Datei&typ:" "Dri&ves:" === "&Partitionen:" "&Help" === "&Hilfe" "&Index number:" === "&Zugnummer:" COMMPORT "Communication Port Settings" === "Porteinstellungen" "Net&work..." === "&Netzwerk" "&Port:" === "&Port:" "Data &Rate:" === "&bertragungsrate:" "Data &Bits:" === "&Bits:" "P&arity:" === "P&aritt:" "&Stop Bits:" === "&Stop Bits:" "F&low:" === "Datenf&luss:" EDIT COMMENT "Edit comment" === "Kommentar bearbeiten" "&Clear" === "&Leeren" "&Edit" === "&Bearbeiten" PROMOTION POPUP "Promotion" === "Umwandlung" "&Queen" === "&Dame" "&Rook" === "&Turm" "&Bishop" === "&Lufer" "K&night" === "&Springer" "&King" === "&Knig" "&Cancel" === "&Abbrechen" ## This text doesn't appear in WB (remove comment and string if deleted from lang450.txt) "Promote pawn to:" === "Bauern umwandeln in:" ## This text appears and it is not in lang450.txt (remove comment if added to lang450.txt) "Promote to:" === "Umwandeln in:" "Chance&llor" === "Kanz&ler" "&Archbishop" === "Er&zbischof" " YES" === " JA" " NO" === " NEIN" "C&entaur" === "Z&entaurus" GAME LIST "Game List" === "Partieliste" "&Load" === "&Laden" "&Prev" === "&Vorschau" "&Next" === "&Weiter" "&Close" === "&Schlieen" "Filter" === "Filter" EDIT TAGS "Edit Tags" === "Tags bearbeiten" ERROR "ICS Interaction" === "ICS Interaktion" "Dialog" === "Dialog" "Error" === "Fehler" "Sorry Charlie" === "Pech gehabt" COLORIZE "I C S Interaction Colors" === "Interaktionsfarben I C S" "Interaction Colors" === "Interaktionsfarben" "Premove" === "Zugeingabe vorab" "Alarm" === "Alarm" "Colors" === "Farben" "&Choose Color..." === "&Farbe auswhlen..." "&Bold" === "&Fett" "&Italic" === "&Kursiv" "&Underline" === "&Unterstrichen" "&Strikeout" === "&Durchgestrichen" QUESTION ## Really appears this? weird "Enter a chess engine command or just type something stupid that will completely screw things up." === "Geben Sie ein Kommand fr die Schachengine ein oder geben Sie etwas Unsinniges ein, das das Programm abstrzen lsst." "Question" === "Frage" "Enter" === "Eingabe" STARTUP DIALOG "WinBoard Startup" === "WinBoard starten" "What would you like to do?" === "Was mchten Sie tun?" "&Play against a chess engine or match two engines" === "Gegen ein &Schachprogramm spielen oder ein Match zwischen zwei Schachprogrammen starten" "&Use an Internet Chess Server" === "Mit einem &Internetschachserver (ICS) verbinden" "Just &view or edit game files" === "Nur &Partien nachspielen oder bearbeiten" "Specify Chess &Engines:" === "&Schachprogramme auswhlen:" "Specify Chess &Server:" === "&Internetschachserver auswhlen:" "&Additional options" === "&Erweiterte Einstellungen" INDEX "Type in a move" === "Geben Sie einen Zug ein" "Inde&x number:" === "Zugnummer" SOUND DIALOG "Sounds" === "Klnge" "&Event:" === "&Ereignis:" "&No sound" === "&Lautlos" ## Make it wider, it could say "Bip por defecto" "&Default beep" === "&Standardton" "&Built-in sound:" === "&Mitgelieferte Klnge" ## Make it wider, it could say "Archivo WAV:" "&WAV file:" === "&WAV-Datei:" "B&rowse..." === "&Durchsuchen..." "&Play" === "&Abspielen" "&Defaults" === "&Standardton" GENERAL OPTIONS DIALOG ## In this dialog, buttons OK/Cancel are not aligned at the right ## Note: finely tuned spaces to align keys at right (add this comment to lang450.txt for commodity) "General Options" === "Allgemeine Einstellungen" "Always on &Top" === "Immer im Vordergrund" "Always &Queen Ctrl+Shift+Q" === "Immer &Dame Ctrl+Umschalt+Q" "Animate &Dragging" === "&Animiertes Ziehen" "&Animate Moving Ctrl+Shift+A" === "Animierte &Zge Ctrl+Umschalt+A" "Auto &Flag Ctrl+Shift+F" === "Autom. &Zeitreklamation Ctrl+Umschalt+F" "Auto Flip &View" === "&Brett automatisch drehen" "Auto &Raise Board" === "&Brett im Vordergrund halten" "&Blindfold" === "Blindspiel" "Highlight Dra&gging" === "&Ziehen hervorheben" "Highlight Last &Move" === "&Letzten Zug hervorhaben" "Periodic &Updates" === "&Regelmig aktualisieren" ## Was wrong in lang450.txt (remove comment if corrected in lang450.txt) "Ponder &Next Move Ctrl+Shift+P" === "Auf &Gegnerzeit rechnen Ctrl+Umschalt+P" "&Popup Exit Message" === "&Rckfrage vor Beenden" "Popup Move &Errors" === "&Inkorrekten Zug anzeigen" "Show Butt&on Bar" === "&Schalterleiste anzeigen" "Show &Coordinates" === "&Koordinaten anzeigen" "&Show Thinking" === "&Computerausgabe anzeigen" "Test &Legality Ctrl+Shift+L" === "&Legalitt berprfen Ctrl+Umschalt+L" "&Hide Thinking Ctrl+Shift+H" === "C&omp. ausgabe ausblenden Ctrl+Ums+H" "&Info in Move History Ctrl+Shift+I" === "&Informationen in Notation Ctrl+Umschalt+I" "&Send Engine Think" === "Computerausgabe &bertragen" "E&xtended PGN Info Ctrl+Shift+X" === "&Erweiterte Inf. in PGN Ctrl+Umschalt+X" "Highlight with Arro&w" === "Mit &Pfeil hervorheben" "Displa&y Logos" === "&Logos anzeigen" "One-Click Move" === "Ein-Klick-Eingabe" ICS OPTIONS "ICS Options" === "ICS Optionen" "&Auto Comment" === "&Autom. Kommentare" "Auto &Observe" === "Automatisches &Zuschauen" "&Get Move List" === "&Zugliste" "&Local Line Editing" === "&Lokale Zeile bearbeiten" "&Quiet Play" === "&Stilles Spiel" "&Premove" === "&Zugeingabe vorab" "&White first move" === "1. Zug &Wei" "&Black first move" === "1. Zug &Schwarz" "&Sound alarm at" === "&Alarm bei" "seconds" === "Sekunden" "Choose..." === "Auswhlen..." "Do ¬ colorize messages" === "Keine &Nachrichtenfarben" "&Auto Kibitz" === "&Autom. Kibitzen" "See&k Graph" === "&Suchgraph" "auto-&Refresh" === "&Autom. aktualisieren" "Bckgnd Obser&ve" === "&Im Hintergrund zuschauen" "&Dual Board" === "&Doppeltes Brett" "One-Click &Move" === "&Ein-Klick-Eingabe" "Background..." === "Hintergrund..." "&Defaults..." === "&Standard..." "Startup &Chat Boxes:" === "ffne Chatfenster:" "General" === "Allgemein" BOARD OPTIONS (NOTE: AllWhite uses the white pieces for both sides FlipBlack plots the blck pieces upside down) "Board Options" === "Brettoptionen" "Defaults" === "Standard" "Light Squares" === "Weie Felder" "Dark Squares" === "Schwarze Felder" "White Pieces" === "Weie Figuren" "Black Pieces" === "Schwarze Figuren" "Square Highlights" === "Felder hervorheben" "Premove Highlights" === "Vorabeingabe hervorheben" "Monochrome" === "Monochrome" "All White" === "Alle Wei" "Flip Black" === "Drehe Schwarz" "Size" === "Gre" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. ## This is a space for imagination (useful note to add to lang450.txt). "&Tiny" === "&Mini" "T&eeny" === "&Sehr winzig" "&Dinky" === "&Winziger" "&Petite" === "W&inzig" "Sl&im" === "Sehr &klein" "&Small" === "K&leiner" "Medi&ocre" === "Kl&ein" "&Middling" === "&Solala" "&Average" === "&Durchschnitt" "Mode&rate" === "&Moderat" "Medi&um" === "&Normal" "Bul&ky" === "M&assiv" "&Large" === "&Gro" "&Big" === "G&rer" "&Huge" === "Sehr gr&o" "&Giant" === "Gigan&tisch" "&Colossal" === "Kol&losal" "Tita&nic" === "Tita&nisch" FONTS "Fonts" === "Schriftarten" "Current Board Size" === "Aktuelle Brettgre" "All Board Sizes" === "Alle Brettgren" "&Revert to Defaults" === "&Standardeinstellung" "Clocks" === "Uhren" "Messages" === "Nachrichten" "Coordinates" === "Koordinaten" "Tags" === "Markierungen" "Comments" === "Kommentare" "I C S Interaction" === "ICS Kommunikation" "&Color..." === "&Farben..." "Move History, Engine Output" === "Notation, Engineausgabe" ADJUDICATIONS DIALOG "Adjudications" === "Abschtzungen" ## Make wider next four controls, text could be more clear "Ponder Next Move" === "Auf Gegnerzeit rechnen" "Enable and Show Thinking (recommended)" === "Engineausgabe anzeigen (empfohlen)" "Hide Thinking when Playing against Human" === "Engineausgabe im Spiel gegen Menschen ausblenden" "Periodic Updates (for Analysis Mode)" === "Regelmig aktualisieren (im Analysemodus)" "Adjudications in non-ICS games" === "Abschtzungen in Nicht-ICS-Partien" ## Make it wider "Adjudicate draw after:" === "Als Remis abschtzen nach:" ## Make it wider "moves" === "Zge" "Win/loss adjudication threshold:" === "Gewinn-/Verlustabschtzung bei:" ## Make it wider "centipawns" === "1/100 Bauerneinheit" "&Verify Engine Claims" === "&berprfe Enginereklamationen" "Detect &Mates" === "&Matterkennung" "Draw if &Insufficient Material" === "&Remis falls kein Mattmaterial" "Adjudicate &Trivial Draws" === "&Klare Remis abschtzen" "Apply" === "bernehmen" ## Make wider next four (currently cutted) "-move rule" === "-Zge-Regel" "-fold repeats" === "-fache Wiederholung" "Engine #1 Score is Absolute" === "Bewertung Engine #1 ist absolut" "Engine #2 Score is Absolute" === "Bewertung Engine #2 ist absolut" COMMON ENGINE DIALOG "Common Engine Settings" === "Allgemeine Einstellungen (Engines)" "Polyglot Directory:" === "Verzeichnis Polyglot:" "Hash Size (MB):" === "Hashgre (MB):" ## Make wider next four "EGTB Path:" === "Verzeichnis EGTB:" "EGTB Size (MB):" === "Gre EGTB (MB):" "Use Book:" === "Buch verwenden:" "Max nr of CPUs:" === "Max. Prozessoren:" "First has Own Book" === "Eigenes Buch (Engine #1)" "Second has Own Book" === "Eigenes Buch (Engine #2)" "Book Depth:" === "Buchtiefe:" "Book Variation:" === "Buchvariation:" "Default Match Games:" === "Anzahl Matchpartien" NEW-VARIANT DIALOG (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "Varianten" "Variant" === "Variante" "Board size:" === "Brettgre" ## Make it wider (currently cutted) "ranks" === "Reihe" "files" === "Linie" "Holdings with room for:" === "Figuren zum Einsetzen:" "pieces" === "Figuren" ## Make it wider (so 'val.' becomes 'valor', and 'sel.' becomes 'seleccionada') "('-1' means defaults for selected variant)" === "('-1' bedeutet Standard fr ausgewhlte Variante)" VARIANT NAMES: "&normal" === "&Normal" "&FRC" === "&FRC" "&wildcastle" === "&Wildcastle" "&nocastle" === "&Nocastle" "&losers" === "&Losers" "&giveaway" === "&Ruberschach" "s&uicide" === "&Selbstmord" "&3Check" === "&Drei Schachs" "&twokings" === "&Zwei Knige" "&atomic" === "&Atomschach" "cra&zyhouse" === "Cra&zyhouse" "&bughouse" === "&Tandem" "&Twilight" === "&Twilight" "&shogi" === "&Shogi" "su&per" === "Su&per" "&knightmate" === "&Springermatt" "&Berolina" === "&Berolina" "c&ylinder" === "&Zylinderschach" "&fairy" === "&Mrchenschach" "&makruk" === "&Makruk" "&gothic" === "&Gothic" "&capablanca" === "&Capablanca" "&Janus" === "&Janus" "&CRC" === "&CRC" "&Falcon" === "&Falcon" "cou&rier" === "&Courier" "&Great" === "&Groschach" "&Shatranj" === "&Shatanj" "&xiangqi" === "&Xiangqi" NEW SHUFFLE GAME "New Shuffle Game" === "Neue Partie FRC" "&Start Position Number:" === "Startposition Nr.:" "Random" === "Zufllig" GAME-LIST OPTIONS DIALOG "Game List Options" === "Einstellungen (Partieliste)" "PGN &Tags:" === "&PGN-Tags:" ## Make wider next five "&Up" === "&Aufwrts" "&Down" === "A&bwrts" "Default" === "Standard" "Factory" === "Fabrik" "Restore to:" === "Wiederherstellen nach:" MOVE HISTORY WINDOW "Move History" === "Notation" EVALUATION GRAPH "Evaluation Graph" === "Bewertungsgraph" ENGINE OUTPUT WINDOW "Engine output" === "Engineausgabe" "Engine #1" === "Engine #1" "NPS" === "Kn./Sec." "Engine #2" === "Engine #2" CHAT BOXES "Chat Window" === "Chatfenster" "Chat partner:" === "Chatpartner:" "Clear" === "Leeren" "Send" === "Senden" winboard.c "&File" === "&Datei" "&Mode" === "&Modus" "&Action" === "&Partie" "&Step" === "&Zug" "&Options" === "&Optionen" "&Help" === "Hilfe" "Font name too long:" === "Schriftname zu lang:" "Font point size missing:" === "Schriftgre fehlt:" "Can't parse color name %s" === "Unbekannte Farbe: %s" "Unrecognized board size value" === "Unbekannte Brettgre" "Unrecognized argument" === "Unbekannter Parameter" "No value provided for argument" === "Fehlender Wert fr Parameter" "Incomplete \\ escape in value for" === "Escapezeichen \\ nicht komplett in Wert fr" "Failed to open indirection file" === "Konnte Umleitungsdatei nicht ffnen" "Unrecognized boolean argument value" === "Ungltiger Wert fr boolschen Parameter" "Unrecognized argument" === "Unbekannter Parameter" "Too many colors" === "Zu viele Farben" "&Minimize\tCtrl+F4" === "&Minimieren\tCtrl+F4" "White: %s" === "Wei: %s" "We only care about the height here" === "Hier ist nur die Hhe wichtig" "Cannot build game list" === "Konnte Partieliste nicht erzeugen" "Load Game from File" === "Partie aus Datei laden" "Load Position from File" === "Stellung aus Datei laden" "Save Game to File" === "Partie in Datei speichern" "Save Position to File" === "Stellung in Datei speichern" "%s does not support analysis" === "%s untersttzt Analysemodus nicht" "Analyze Game from File" === "Analysiere Partie aus Datei" "Unable to activate help" === "Hilfe konnte nicht aktiviert werden" "Send to chess program:" === "An Engine senden:" "Send to second chess program:" === "An Engine #2 senden:" "Direct Command" === "Direkter Befehl" "Error loading sound %s" === "Konnte Klang %s nicht laden" "Error playing sound %s" === "Konnte Klang %s nicht abspielen" "File open failed" === "Konnte Datei nicht ffnen" "Internal error in file dialog box" === "Interner Fehler in Dateidialog" "Option Error" === "Fehler (Option)" "Choose an option, or cancel to exit" === "Option auswhlen oder abbrechen" "Unable to activate help" === "Hilfe konnte nicht aktiviert werden" "Displayed move is not current" === "Angezeigter Zug ist nicht aktuell" "Could not parse move" === "Konnte Zug nicht verarbeiten" "%s:\nError code %d" === "%s:\nFehler %d" "Error" === "Fehler" "Fatal Error" === "Schwerer Fehler" "Exiting" === "Beende..." "%s:\nError code %d" === "%s:\nFehler %d" "Note" === "Beachte" "Error writing to chess program" === "Fehler beim Senden an Engine" "User" === "Benutzer" "Unknown" === "Unbekannt" "White" === "Wei" "Black" === "Schwarz" "Save Game to File" === "Partie in Datei speichern" "Not implemented" === "Nicht implementiert" ## What is this? appears that it can be without translation "Shout Text" === "" "SShout/CShout" === "" "Channel 1 Text" === "Text (Kanal 1)" "Channel Text" === "Text (Kanal)" "Kibitz Text" === "Text (Kibitz)" "Tell Text" === "Text (Chat)" "Challenge Text" === "Text (Fordern)" "Request Text" === "Text (Forderung)" "Seek Text" === "Text (Suche)" "Normal Text" === "Text (Standard)" "None" === "Nichts" "Pawn" === "Bauer" "Knight" === "Springer" "Bishop" === "Lufer" "Rook" === "Turm" "Queen" === "Dame" "Information" === "Information" wclipbrd.c "Unable to convert position to FEN." === "Konnte Stellung nicht nach FEN konvertieren." "Unable to copy FEN to clipboard." === "Konnte FEN nicht in Zwischenablage kopieren" "Cannot create temporary file name." === "Konnte temporre Datei nicht erstellen" "Cannot open temporary file." === "Konnte temporre Datei nicht ffnen" "Cannot write to temporary file." === "Konnte temporre Datei nicht schreiben" "Cannot reopen temporary file." === "Konnte temporre Datei nicht erneut ffnen" "Cannot determine size of file." === "Konnte Dateigre nicht bestimmen" "Cannot allocate clipboard buffer." === "Nicht genug Speicher fr Zwischenablage" "Cannot read from temporary file." === "Konnte temporre Datei nicht lesen" "Error reading from temporary file." === "Fehler beim Lesen temporrer Datei" "Cannot copy text to clipboard" === "Konnte Text nicht in Zwischenablage kopieren" "Unable to allocate memory for clipboard." === "Nicht genug Speicher fr Zwischenablage" "Unable to lock clipboard memory." === "Konnte Speicher fr Zwischenablage nicht blockieren" "Cannot unlock clipboard memory." === "Konnte Speicher fr Zwischenablage nicht freigeben" "Cannot open clipboard." === "Konnte Zwischenablage nicht ffnen" "Cannot empty clipboard." === "" "Cannot copy text to clipboard." === "" "Cannot close clipboard." === "" "Unable to paste FEN from clipboard." === "" "Unable to create temporary file." === "" "Error writing to temporary file." === "" "Unable to open clipboard." === "" "No text in clipboard." === "" "Unable to lock clipboard memory." === "" "Unable to allocate memory for text string." === "" "Unable to unlock clipboard memory." === "" "Unable to close clipboard." === "" woptions.c "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" ## What is this? appears that it can be without translation "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" "Browse for Sound File" === "" "Can't parse com port settings" === "" "Option Error" === "" "Invalid data rate" === "" "Option Error" === "" "Failed to set comm port state;\r\ninvalid options?" === "" "Failed to set comm port state" === "" "Invalid load game step rate" === "" "Invalid save game file name" === "" "Browse for Auto Save File" === "" "Invalid moves per time control" === "" "Invalid minutes per time control" === "" "Invalid increment" === "" "Invalid initial time" === "" "Changing time control during a game is not implemented" === "" "Variant %s not supported by %s" === "" "Warning: second engine (%s) does not support this!" === "" "Invalid ICS Alarm Time" === "" "Invalid max time per move" === "" "Invalid time-odds factor" === "" "Choose Folder" === "" "Choose Book" === "" "Choose Polyglot Directory" === "" "Choose EGTB Directory:" === "" "Polyglot was not found in the specified folder!" === "" wgamelist.c "No game selected" === "" "Can't go forward any further" === "" "Can't back up any further" === "" "No game list" === "" "Game List" === "" "Game list not loaded or empty" === "" "%s - %d/%d games" === "" wedittags.c "Edit Tags" === "" "Tags" === "" "Error replacing tags." === "" wsettings.c "%s Engine Settings (%s)" === "" "OK" === "" "Cancel" === "" backend.c "bad timeControl option %s" === "" "bad searchTime option %s" === "" "first" === "" "second" === "" "protocol version %d not supported" === "" "Variant %s supported only in ICS mode" === "" "Unknown variant name %s" === "" "Starting chess program" === "" "Could not open comm port %s" === "" "Could not connect to host %s, port %s" === "" "Unknown initialMode %s" === "" "Can't have a match with no chess programs" === "" "Bad game file" === "" "Bad position file" === "" "AnalyzeFile mode requires a game file" === "" "Analysis mode requires a chess engine" === "" "Analysis mode does not work with ICS mode" === "" "MachineWhite mode requires a chess engine" === "" "MachineWhite mode does not work with ICS mode" === "" "MachineBlack mode requires a chess engine" === "" "MachineBlack mode does not work with ICS mode" === "" "TwoMachines mode does not work with ICS mode" === "" "TwoMachines mode requires a chess engine" === "" "Training mode requires a game file" === "" "Error writing to ICS" === "" "Error reading from keyboard" === "" "Got end of file from keyboard" === "" "Error writing to ICS" === "" "Error writing to display" === "" "Error gathering move list: two headers" === "" "Error gathering move list: nested" === "" "Connection closed by ICS" === "" "Error reading from ICS" === "" "Failed to parse board string:\n\"%s\"" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Error gathering move list: extra board" === "" "Illegal move \"%s\" from ICS" === "" "Couldn't parse move \"%s\" from ICS" === "" ## 'say' must not be translated (add this comment to lang450.txt) "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "" "You are playing Black" === "" "You are playing White" === "" "It is White's turn" === "" "It is Black's turn" === "" "Displayed position is not current" === "" "Illegal move" === "" "End of game" === "" "Incorrect move" === "" ## Second %s is translated 'first' or 'second'. (add this comment to lang450.txt) "Illegal move \"%s\" from %s machine" === "" "Forfeit due to illegal move" === "" "%s does not support analysis" === "" ## Second %s is translated 'first' or 'second' (add this comment to lang450.txt) "Illegal move \"%s\" (rejected by %s chess program)" === "" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Failed to start %s chess program %s on %s: %s\n" === "" "Hint: %s" === "" "Machine accepts your draw offer" === "" "Machine offers a draw\nSelect Action / Draw to agree" === "" "%s (only move)" === "" "Ambiguous move in ICS output: \"%s\"" === "" "Illegal move in ICS output: \"%s\"" === "" "Gap in move list" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Variant %s not supported by %s" === "" "Startup failure on '%s'" === "" "Waiting for first chess program" === "" "Waiting for second chess program" === "" "Match %s vs. %s: final score %d-%d-%d" === "" "Stalemate" === "" "Illegal move: %d.%s%s" === "" "Ambiguous move: %d.%s%s" === "" "Can't open \"%s\"" === "" "Cannot build game list" === "" "No more games in this message" === "" "No game has been loaded yet" === "" "Can't back up any further" === "" "Game number out of range" === "" "Can't seek on game file" === "" "Game not found in file" === "" "Bad FEN position in file" === "" "No moves in game" === "" "No position has been loaded yet" === "" "Can't back up any further" === "" "Can't open \"%s\"" === "" "Can't seek on position file" === "" "Position not found in file" === "" "Bad FEN position in file" === "" "Black to play" === "" "White to play" === "" "Can't open \"%s\"" === "" "You have edited the game history.\nUse Reload Same Game and make your move again." === "" "You have entered too many moves.\nBack up to the correct position and try again." === "" "Displayed position is not current.\nStep forward to the correct position and try again." === "" "You have not made a move yet" === "" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "" "No unfinished games" === "" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "" "Failed to invoke cmail" === "" "Waiting for reply from opponent\n" === "" "Still need to make move for game\n" === "" "Still need to make moves for both games\n" === "" "Still need to make moves for all %d games\n" === "" "Still need to make a move for game %s\n" === "" "No unfinished games\n" === "" "Ready to send mail\n" === "" "Still need to make moves for games %s\n" === "" "Edit comment" === "" "Edit comment on %d.%s%s" === "" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "" "It is not White's turn" === "" "It is not Black's turn" === "" "Wait until your turn,\nor select Move Now" === "" "Starting second chess program" === "" "Training mode off" === "" "Training mode on" === "" "Already at end of game" === "" "Warning: You are still playing a game" === "" "Warning: You are still observing a game" === "" "Warning: You are still examining a game" === "" "It is Black's turn" === "" "It is White's turn" === "" "That square is occupied" === "" "There is no pending offer on this move" === "" "Your opponent is not out of time" === "" "Black offers a draw" === "" "White offers a draw" === "" "You must make your move before offering a draw" === "" "You are not examining a game" === "" "You can't revert while pausing" === "" "Wait until your turn,\nor select Move Now" === "" "It is your turn" === "" "Wait until your turn" === "" "No hint available" === "" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error writing to %s chess program" === "" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error: %s chess program (%s) exited unexpectedly" === "" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error reading from %s chess program (%s)" === "" "Analysis (%s)" === "" "Comment" === "" "Comment on %d.%s%s" === "" "Both flags fell" === "" "White's flag fell" === "" "Black's flag fell" === "" "Bad FEN position in clipboard" === "" "No response from ICS" === "" "You cannot do this while you are playing or observing" === "" "Click in holdings to choose piece" === "" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [Well, this is currently not possible, they are used for both. And it only appears as a comment in the PGN.] "Game aborted" === "" "White wins on time" === "" "Black wins on time" === "" "Both players ran out of time" === "" "White resigns" === "" "Black resigns" === "" "White mates" === "" "Black mates" === "" "Draw" === "" "Draw agreed" === "" "Xboard adjudication: King destroyed" === "" "Xboard adjudication: Bare king" === "" "Xboard adjudication: 3rd check" === "" "Xboard adjudication: Stalemate" === "" "Xboard adjudication: Checkmate" === "" "Xboard adjudication: Insufficient mating material" === "" "Xboard adjudication: Trivial draw" === "" "XBoard adjudication: repetition draw" === "" "Xboard adjudication: perpetual checking" === "" "Xboard adjudication: perpetual chasing" === "" "%Xboard adjudication: perpetual chasing of" === "" "Xboard adjudication: 50-move rule" === "" "Draw claim: 50-move rule" === "" "Draw claim: 3-fold repetition" === "" "Draw claim: insufficient mating material" === "" "Xboard adjudication: long game" === "" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "" "Xboard adjudication" === "" "User adjudication" === "" "False win claim: '%s'" === "" "False draw claim: '%s'" === "" "xboard exit" === "" ## One forgetted string (remove comment if added to lang450.txt) "Type in your name" === "Geben sie ihre namen ein" xboard-4.8.0/winboard/language/italiano.lng0000644000175000001440000013324112420374633015621 00000000000000## WinBoard 4.5.0 language file ## ## Italian / Italiano ## v1.0 beta 1 ## ## Translation by Giorgio Medeot (09-nov-2010) ## Traduzione di Giorgio Medeot ## WEB ADDRESS OF TRANSLATOR ## ## If you revise this, please insert your date, name and description. ## Se modificate questo file, inserite la data, il vostro nome e la descrizione della modifica ## ## For example: ## Per esempio: ## 24-ago-2010. Juan Prez (j@xyz.p). Corrected translation for xyzzy. ## Notes for translators (can be deleted from the file after translation): ## Just write the translations between the second pair of quotes ## Things like %s, %d and %c must be preserved in the original order ## Empty translated strings will be ignored, so there is no reason ## to delete those for which you don't know a translation, ## and you can start testing everything immediately. ## Simply rename this file to LANGUAGE.lng, and WinBoard should see it, ## and allow you to use the option /language=LANGUAGE. ## You are encouraged to call up the corresponding WinBoard dialog while ## working on the translation, to see in which context the strings are used. ## This is why the strings below are sorted by dialog ## ## Of duplicats, only the first occurrence will be used, even if it was in ## a different dialog! For this reason you will only see an 'OK' in the ## About Box. After you translated it there, this translation will be used ## for all other dialogs as well. ## o Use ## for comments, to make it easy to find them scattered throughout the translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. ## preferably it should be unique in the applicable menu, so it depends on translation of other items! " " === "Traduzione di Giorgio Medeot" winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "&New Game\tCtrl-N" === "&Nuova partita\tCtrl-N" "New Sh&uffle Game..." === "Nuova partita Shu&ffle..." "New &Variant...\tAlt+Shift+V" === "Nuova &variante...\tAlt+Shift+V" "&Load Game...\tCtrl-O" === "&Apri partita da file...\tCtrl-O" "&Save Game...\tCtrl-S" === "&Salva partita...\tCtrl-S" "L&oad Position...\tCtrl+Shift+O" === "Apri &posizione da file...\tCtrl+Shift+O" "S&ave Position...\tCtrl+Shift+S" === "&Salva posizione...\tCtrl+Shift+S" "Save as &Diagram..." === "Salva come &immagine..." "&Quit" === "&Esci" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === "Partita successiva\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "Partita precedente\tAlt+PgUp" "&Reload Same Game" === "Riapri partita corrente" "Load N&ext Position\tAlt+Shift+PgDn" === "Posizione successiva\tAlt+Shift+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Posizione precedente\tAlt+Shift+PgUp" "Reload Sa&me Position" === "Riapri posizione corrente" "&Copy Game To Clipboard\tCtrl+C" === "&Copia partita\tCtrl+C" "C&opy Position To Clipboard\tCtrl+Shift+C" === "&Copia posizione\tCtrl+Shift+C" "Copy Game List to Clipboard" === "Copia &lista partite" "&Paste Game From Clipboard\tCtrl+V" === "&Incolla partita\tCtrl+V" "P&aste Position From Clipboard\tCtrl+Shift+V" === "&Incolla posizione\tCtrl+Shift+V" "&Edit Game\tCtrl+E" === "&Modifica partita\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "&Modifica posizione\tCtrl+Shift+E" "Edit Ta&gs..." === "Mo&difica informazioni partita..." "Edit Co&mment..." === "Mo&difica commento..." "Enter &Username..." === "Inserisci nome &utente..." "&Revert\tHome" === "&Ripristina\tHome" "&Annotate" === "A&nnota" "&Truncate Game\tEnd" === "Tr&onca la partita\tEnd" "&Backward\tAlt+Left" === "&Indietro\tAlt+Left" "&Forward\tAlt+Right" === "&Avanti\tAlt+Right" "Back to &Start\tAlt+Home" === "&Torna all'inizio\tAlt+Home" "For&ward to End\tAlt+End" === "Vai alla &fine\tAlt+End" "Flip &View\tF2" === "&Ruota la scacchiera\tF2" "&Swap Clocks" === "Scambia gli &orologi" "Engine &Output\tAlt+Shift+O" === "&Output del motore di gioco\tAlt+Shift+O" "Move &History\tAlt+Shift+H" === "Lista &mosse\tAlt+Shift+H" "Evaluation &Graph\tAlt+Shift+E" === "&Grafico della valutazione\tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "&Lista partite\tAlt+Shift+G" "Open &New Chat Window" === "Apri nuova Chat" "Type In &Move...\tAlt+I" === "&Digita mossa...\tAlt+I" "&Tags" === "&Informazioni partita" "&Comments" === "&Commenti" "&Game List Tags..." === "Impostazioni &lista partite..." "&Board..." === "&Scacchiera..." "&Fonts..." === "&Fonts..." "Machine &White\tCtrl+W" === "&Bianco al motore di gioco\tCtrl+W" "Machine &Black\tCtrl+B" === "&Nero al motore di gioco\tCtrl+B" "&Two Machines\tCtrl+T" === "Mo&tore di gioco 1 vs 2\tCtrl+T" "Machine Both" === "Osserva motore di gioco" "&Analysis Mode\tCtrl+A" === "&Avvia analisi\tCtrl+A" "Analyze &File\tCtrl+F" === "Analizza &file\tCtrl+F" "&Edit Game\tCtrl+E" === "Mo&difica partita\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "Mo&difica posizione\tCtrl+Shift+E" "Trai&ning" === "Allenamento" "&ICS Client" === "Connetti ad un &ICS" "&Machine Match" === "Matc&h tra i motori di gioco" "&Pause\tPause" === "&Pausa\tPause" "&Accept\tF3" === "&Accetta\tF3" "D&ecline\tF4" === "&Declina\tF4" "Re&match\tF12" === "&Rigioca\tF12" "Call &Flag\tF5" === "Chiama il &Tempo\tF5" "&Draw\tF6" === "&Offri Patta\tF6" "Ad&journ\tF7" === "A&ggiorna\tF7" "A&bort\tF8" === "&Interrompi\tF8" "&Resign\tF9" === "Abband&ona\tF9" "Stop &Observing\tF10" === "Smetti di o&sservare\tF10" "Stop E&xamining\tF11" === "Smetti di &esaminare\tF11" "&Upload to Examine" === "&Carica su ICS per esaminare" "Adjudicate to &White" === "Aggiudica al &Bianco" "Adjudicate to &Black" === "Aggiudica al &Nero" "Adjudicate &Draw" === "Aggiudica come &Patta" "Install 1st..." === "Installa motore 1..." "Install 2nd..." === "Installa motore 2..." "Engine #&1 Settings..." === "Impostazioni motore &1" "Engine #&2 Settings..." === "Impostazioni motore &2" "&Hint..." === "&Suggerimento..." "&Book..." === "&Libro delle aperture..." "&Move Now\tCtrl+M" === "&Muovi subito\tCtrl+M" "&Retract Move\tCtrl+X" === "&Annulla mossa\tCtrl+X" "&Mute all Sounds" === "Modalit silen&ziosa" "&General..." === "&Generali..." "&Time Control...\tAlt+Shift+T" === "Controllo &Tempo...\tAlt+Shift+T" "Common &Engine...\tAlt+Shift+U" === "&Motori di gioco...\tAlt+Shift+U" "Ad&judications...\tAlt+Shift+J" === "&Aggiudicazioni...\tAlt+Shift+J" "&Load Game...\tAlt+Shift+L" === "Apertura &partita...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "Sal&vataggio partita...\tAlt+Shift+S" "G&ame List..." === "&Lista partite..." "Soun&ds..." === "Suo&ni..." "&ICS..." === "&ICS..." "Add ICS..." === "Aggiungi ICS..." "Comm&unications..." === "&Comunicazioni..." "Save Settings &Now" === "&Salva impostazioni" "Save Settings on E&xit" === "Salva impostazioni all'&uscita" "Help &Contents\tF1" === "&Guida in linea\tF1" "Help &Index" === "&Indice della Guida" "How to &Use Help" === "&Utilizzo della Guida" "&About WinBoard" === "Informazioni su &Winboard" "White" === "Bianco" "Promote" === "Promuovi" "Pawn" === "Pedone" "Knight" === "Cavallo" "Bishop" === "Alfiere" "Rook" === "Torre" "Queen" === "Donna" "King" === "Re" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "Arcivescovo" "Chancellor" === "Cancelliere" ## Next 2 are Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === "Elefante" "Cannon" === "Cannone" ## Next 3 are Shogi (Japanese Chess) pieces. Google for 'Shogi' in the target language to get the standard translation. "Lance" === "Lancia" "Silver" === "Generale Argento" "Gold" === "Generale Oro" "Empty Square" === "Casa vuota" "Black" === "Nero" "Demote" === "Degrada" "Clear Board " === "Svuota scacchiera" "Drop" === "Paracadutaggio" "Cop&y and Paste" === "Co&pia e Incolla" "&Copy" === "&Copia" "&Paste" === "&Incolla" "&Undo" === "&Annulla" "Cu&t" === "&Taglia" "&Copy" === "&Copia" "&Paste" === "&Incolla" "Select &All" === "&Seleziona tutto" DIALOGS: ABOUTBOX ## Perhaps copyright notices best left untranslated? "About WinBoard" === "Informazioni su Winboard" "OK" === "OK" "Chessboard for Windows" === "Interfaccia per gli Scacchi e varianti per Windows" "Copyright 1991 Digital Equipment Corporation" === "Copyright (C) 1991 Digital Equipment Corporation" "Enhancements Copyright 1992-2014 Free Software Foundation" === "Modifiche Copyright (C) 1992-2014 Free Software Foundation" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "Modifiche Copyright (C) 2005\r\nAlessandro Scotti" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccin por scar Toledo G.". " " === "Traduzione italiana di Giorgio Medeot" "WinBoard 0.0.0" === "WinBoard 4.5.0" ABOUTBOX2 ## Weird, is it needed? [Normally not. It is a built-in 'Easter Egg' joke.] "galactic" === "galattico TIME CONTROL DIALOG "Time Control" === "Controllo Tempo" "Conventional chess clock" === "Orologio tradizionale" "Incremental clock" === "Orologio con incremento" "Cancel" === "Cancella" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Usa le frecce per specificare quale tipo di orologio utilizzare, poi premi il tasto tabulazione per modificare i valori." "Fixed time per move" === "Tempo per mossa fisso" "Number of moves:" === "Mosse:" "Within number of minutes:" === "In minuti:" "Initial number of minutes:" === "Tempo iniziale in minuti:" "Plus number of seconds per move:" === "Secondi aggiuntivi per mossa:" "Maximum seconds per move:" === "Secondi per mossa:" "Time-Odds Factors:" === "Riduci il tempo di un fattore:" "Engine #1:" === "Motore 1:" "Engine #2:" === "Motore 2:" LOAD OPTIONS DIALOG "Load Game Options" === "Impostazioni apertura partita" "Load games with automatic stepping" === "Apri partite attivando replay automatico" "seconds per move" === "secondi per mossa" SAVE OPTIONS DIALOG "Save Game Options" === "Impostazioni salvataggio partita" ##"Save Style" === "Tipo file: " "Save As: " === "Tipo file: " "Save games automatically" === "Salva automaticamente" "Prompt for filename" === "Chiedi sempre dove salvare" "To file:" === "Salva in:" "PGN" === "" "Old" === "Formato Winboard 3.x" "Browse..." === "Sfoglia..." "Save out of book info in PGN" === "Salva informazioni 'out of book' nel PGN" 1536 ## This dialog is only used in some older Windows versions, so you might not be able to test it. "Open" === "Apri file" "File &Name:" === "&Nome file:" "&Directories:" === "Cerca &in:" "List Files of &Type:" === "&Tipo file:" "Dri&ves:" === "&Unit:" "&Help" === "&Aiuto" "&Index number:" === "I&ndice:" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === "Impostazioni porta di comunicazione" "Net&work..." === "Re&te..." "&Port:" === "&Porta:" "Data &Rate:" === "Data &rate:" "Data &Bits:" === "Data &bits:" "P&arity:" === "P&arit:" "&Stop Bits:" === "&Stop bits" "F&low:" === "F&lusso" EDIT COMMENT "Edit Comment" === "Modifica commento" "&Clear" === "&Cancella" "&Edit" === "&Modifica" PROMOTION POPUP "Promote to:" === "Promuovi a:" ## next used in Shogi as promotion-popup header "Promote?" === "Promuovi?" "Promotion" === "Promozione" "&Queen" === "&Donna" "&Rook" === "&Torre" "&Bishop" === "&Alfiere" "K&night" === "&Cavallo" "&King" === "&Re" "&Cancel" === "&Cancella" "Chance&llor" === "&Cancelliere" "&Archbishop" === "&Arcivescovo" "YES" === "SI" "NO" === "NO" "C&entaur" === "&Centauro" GAME LIST "Game List" === "Lista partite" "&Load" === "&Apri" "&Prev" === "&Prec" "&Next" === "&Succ" "&Close" === "&Chiudi" "Filter" === "Filtro" EDIT TAGS "Edit Tags" === "Modifica informazioni" ERROR "ICS Interaction" === "Console ICS" "Dialog" === "Dialogo" "Error" === "Errore" ## I don't think the next will really appear ever. "Sorry Charlie" === "Spiacente Ciccio" COLORIZE "I C S Interaction Colors" === "Colori Console ICS" "Interaction Colors" === "Colori Console" "Premove" === "Premossa" "Alarm" === "Allarme" "Colors" === "Colori" "&Choose Color..." === "Scegli &colori" "&Bold" === "&Grassetto" "&Italic" === "&Corsivo" "&Underline" === "&Sottolineato" "&Strikeout" === "&Barrato" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === "Digita un comando per il motore di gioco" "Question" === "Comando diretto" "Enter" === "Invia" STARTUP DIALOG "WinBoard Startup" === "Avvio di Winboard" "What would you like to do?" === "Selezionare una delle seguenti azioni:" "&Play against a chess engine or match two engines" === "&Partita contro un motore di gioco o match tra due motori" "&Use an Internet Chess Server" === "&Connetti ad un Internet Chess Server" "Just &view or edit game files" === "&Apri o modifica una partita su file" "Specify Chess &Engines:" === "Specificare &motore di gioco:" "Specify Chess &Server:" === "Specificare indirizzo &ICS:" "&Additional options" === "&Opzioni aggiuntive:" INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === "I&ndice:" MOVE TYPE-IN "Type in a move" === "Digita una mossa" USER-NAME TYPE-IN "Type in your name" === "Inserisci il tuo nome" SOUND DIALOG "Sounds" === "Impostazioni suoni" "&Event:" === "&Evento:" "&No sound" === "&Silenzioso" "&Default beep" === "&Beep" "&Built-in sound:" === "Suoni &predefiniti:" "&WAV file:" === "&File WAV:" "B&rowse..." === "&Apri..." "&Play" === "A&scolta" "&Defaults" === "&Default" GENERAL OPTIONS DIALOG ## please keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === "Impostazioni generali" "Always on &Top" === "Sempre in &primo piano" "Always &Queen Ctrl+Shift+Q" === "Promuovi a &Donna Ctrl+Shift+Q" "Animate &Dragging" === "&Trascinamento animato" "&Animate Moving Ctrl+Shift+A" === "&Mosse animate Ctrl+Shift+A" "Auto &Flag Ctrl+Shift+F" === "Aggiudica sul &tempo Ctrl+Shift+F" "Auto Flip &View" === "Ruota &vista automaticamente" "Auto &Raise Board" === "Porta in p&rimo piano" "&Blindfold" === "Alla &cieca" "Highlight Dra&gging" === "Eviden&zia trascinamento" "Highlight Last &Move" === "&Evidenzia l'ultima mossa" "Periodic &Updates" === "&Aggiornamenti continui" "Ponder &Next Move Ctrl+Shift+P" === "Pe&nsa sul mio tempo Ctrl+Shift+P" "&Popup Exit Message" === "C&hiedi conferma alla chiusura" "Popup Move &Errors" === "Mostra pop&up per mosse errate" "Show Butt&on Bar" === "Mostra &barra dei pulsanti" "Show &Coordinates" === "Mostra c&oordinate" "&Show Thinking" === "Mo&stra output del motore" "Test &Legality Ctrl+Shift+L" === "Verifica mosse i&llegali Ctrl+Shift+L" "&Hide Thinking Ctrl+Shift+H" === "N&ascondi analisi Ctrl+Shift+H" "&Info in Move History Ctrl+Shift+I" === "&Informazioni nella Lista mosse Ctrl+Shift+I" "&Send Engine Think" === "Invia l'output del &motore di gioco" "E&xtended PGN Info Ctrl+Shift+X" === "&Informazioni PGN estese Ctrl+Shift+X" "Highlight with Arro&w" === "Evidenzia con una &freccia" "Displa&y Logos" === "Mostra i &loghi" "One-Click Move" === "Muovi con click &singolo" ICS OPTIONS "ICS Options" === "Impostazioni ICS" "&Auto Comment" === "&Commenti automatici" "Auto &Observe" === "&Osserva automaticamente" "&Get Move List" === "Scarica lista &mosse" "&Local Line Editing" === "Modifiche in &locale" "&Quiet Play" === "Non &disturbare durante il gioco" "&Premove" === "&Premosse" "&White first move" === "1 mossa &Bianco" "&Black first move" === "1 mossa &Nero" "&Sound alarm at" === "Avvi&sa a" "seconds" === "secondi" "Choose..." === "Scegli..." "Do ¬ colorize messages" === "Non colorare i &messaggi" "&Auto Kibitz" === "&Auto Kibitz" "Auto Kibit&z" === "Auto Kibit&z" "See&k Graph" === "Grafico delle &richieste" "auto-&Refresh" === "Auto a&ggiorna" "Bckgnd Obser&ve" === "&Osserva in bckgnd" "&Dual Board" === "Doppia &scacchiera" "One-Click &Move" === "&Mossa con click singolo" "Background..." === "Sfondo..." "&Defaults..." === "&Default..." "Startup &Chat Boxes:" === "Apri &Chat all'avvio:" "General" === "Generali" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === "Impostazioni scacchiera" "Defaults" === "Default" "Light Squares" === "Case bianche" "Dark Squares" === "Case nere" "White Pieces" === "Pezzi bianchi" "Black Pieces" === "Pezzi neri" "Square Highlights" === "Case evidenziate" "Premove Highlights" === "Premosse evidenziate" "Monochrome" === "Monocromatico" "All White" === "Neri a colore pieno" "Flip Black" === "Neri capovolti" "Size" === "Dimensioni" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "&Minima" "T&eeny" === "&Scricciola" "&Dinky" === "&Minuscola" "&Petite" === "&Piccina" "Sl&im" === "&Ridotta" "&Small" === "&Piccola" "Medi&ocre" === "&Contenuta" "&Middling" === "&Modesta" "&Average" === "&Usuale" "Mode&rate" === "&Moderata" "Medi&um" === "&Media" "Bul&ky" === "&Ampia" "&Large" === "&Estesa" "&Big" === "&Grande" "&Huge" === "&Imponente" "&Giant" === "&Gigantesca" "&Colossal" === "&Colossale" "Tita&nic" === "&Titanica" FONTS "Fonts" === "Font" "Current Board Size" === "Dmensione scacchiera corrente" "All Board Sizes" === "Impostazioni globali" "&Revert to Defaults" === "Valori di &default" "Clocks" === "Orologi" "Messages" === "Messaggi" "Coordinates" === "Coordinate" "Tags" === "Tags" "Comments" === "Commenti" "I C S Interaction" === "Console ICS" "&Color..." === "&Colori..." "Move History, Engine Output" === "Lista mosse,\noutput motore" ADJUDICATIONS DIALOG "Adjudications" === "Impostazioni aggiudicazioni" "Ponder Next Move" === "Pensa sul mio tempo" "Enable and Show Thinking (recommended)" === "Abilita e mostra output del motore (raccomandato)" "Hide Thinking when Playing against Human" === "Nascondi l'output del motore se gioca contro un uomo" "Periodic Updates (for Analysis Mode)" === "Aggiornamenti continui (per Modalit di analisi)" "Adjudications in non-ICS games" === "Aggiudicazioni in partite non ICS" "Adjudicate draw after:" === "Aggiudica patta dopo:" "moves" === "mosse" "Win/loss adjudication threshold:" === "Limite per aggiudicare vinta/persa:" "centipawns" === "centipawn" "&Verify Engine Claims" === "&Verifica gli annunci del motore" "Detect &Mates" === "Individua scacco &matto" "Draw if &Insufficient Material" === "Patta per materiale &insufficiente" "Adjudicate &Trivial Draws" === "Aggiudica patte &triviali" "Apply" === "Applica regole" ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === "mosse irreversibili" "-fold repeats" === "ripetizioni di posizione" "Engine #1 Score is Absolute" === "Output motore 1 sempre riferito al Bianco" "Engine #2 Score is Absolute" === "Output motore 2 sempre riferito al Bianco" COMMON ENGINE DIALOG "Common Engine Settings" === "Impostazioni motori di gioco" "Polyglot Directory:" === "Cartella Polyglot:" "Hash Size (MB):" === "Dimensione Hash [MB]:" "EGTB Path:" === "Cartella EGTB:" "EGTB Size (MB):" === "Dimensione EGTB [MB]:" "Use Book:" === "Libro aperture:" "Max nr of CPUs:" === "Num max di CPU:" "First has Own Book" === "Libro proprio per motore 1" "Second has Own Book" === "Libro proprio per motore 2" "Book Depth:" === "Profondit Libro:" "Book Variation:" === "Varianti Libro:" "Default Match Games:" === "Partite per match:" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "Varianti di gioco" "Variant" === "Variante" "Board size:" === "Scacchiera:" "ranks" === "traverse" "files" === "colonne" "Holdings with room for:" === "Num max di pezzi in mano" "pieces" === "pezzi" "('-1' means defaults for selected variant)" === "('-1' per il default della variante selezionata)" VARIANT NAMES: "&normal" === "&Normale" "&FRC" === "&FRC" "&wildcastle" === "&Wildcastle" "&nocastle" === "&Nocastle" "&losers" === "&Losers" "&giveaway" === "&Giveaway" "s&uicide" === "S&uicide" "&3Check" === "&3Check" "&twokings" === "&Twokings" "&atomic" === "&Atomic" "cra&zyhouse" === "Cra&zyhouse" "&bughouse" === "&Bughouse" "&Twilight" === "&Twilight" "&shogi" === "&Shogi" "su&per" === "Su&per" "&knightmate" === "&Knightmate" "&Berolina" === "&Berolina" "c&ylinder" === "&Cilindrici" "&fairy" === "&Fairy" "&makruk" === "&Makruk" "&gothic" === "&Gothic" "&capablanca" === "&Capablanca" "&Janus" === "&Janus" "&CRC" === "&CRC" "&Falcon" === "&Falcon" "cou&rier" === "Cou&rier" "&Great" === "&Great" "&Shatranj" === "&Shatranj" "&xiangqi" === "&Xiangqi" NEW SHUFFLE GAME "New Shuffle Game" === "Partita Shuffle" "&Start Position Number:" === "Disposizione iniziale:" "Random" === "Casuale" GAME-LIST OPTIONS DIALOG "Game List Options" === "Impostazioni lista partite" "PGN &Tags:" === "&Informazioni PGN:" "&Up" === "Muovi &su" "&Down" === "Muovi &giu" "Default" === "Default" "Factory" === "Fabbrica" "Restore to:" === "Reimposta:" MOVE HISTORY WINDOW "Move History" === "Lista mosse" EVALUATION GRAPH "Evaluation Graph" === "Grafico della valutazione" ENGINE OUTPUT WINDOW "Engine output" === "Output del motore di gioco" "Engine #1" === "Motore 1" "NPS" === "" "Engine #2" === "Motore 2" CHAT BOXES "Chat Window" === "Finestra della Chat" "Chat partner:" === "Compagno di chat:" "Clear" === "Cancella" "Send" === "Invia" winboard.c "&File" === "&File" "&Edit" === "&Modifica" "&View" === "&Visualizza" "&Mode" === "&Modalit" "&Action" === "&Azioni" "&Step" === "&Avanzamento" "E&ngine" === "&Motore" "&Options" === "&Impostazioni" "&Help" === "&Aiuto" "You can only start a match from the initial position." === "Un match pu essere avviato solo dalla posizione iniziale." "Font name too long:" === "Nome del font troppo lungo:" "Font point size missing:" === "Dimensione del font mancante:" "Can't parse color name %s" === "Impossibile leggere nome del colore %s" "Unrecognized board size value" === "Dimensione scacchiera non riconosciuta" "Unrecognized argument" === "Argomento non riconosciuto" "No value provided for argument" === "Valore mancante per l'argomento" "Incomplete \\ escape in value for" === "Escape \\ incompleto nel valore per" "Failed to open indirection file" === "Apertura fallita per il file di reindirizzamneto" "Unrecognized boolean argument value" === "Valore non valido per argomento booleano" "Unrecognized argument" === "Argomento non riconosciuto" "Too many colors" === "Troppi colori" "&Minimize\tCtrl+F4" === "&Minimizza\tCtrl+F4" "White: %s" === "Bianco: %s" "We only care about the height here" === "Qui solo l'altezza significativa" "Cannot build game list" === "Impossibile costruire lista delle partite" "Load Game from File" === "Apri partita da file" "Load Position from File" === "Apri posizione da file" "Save Game to File" === "Salva partita" "Save Position to File" === "Salva posizione" "%s does not support analysis" === "%s non supporta l'analisi" "Analyze Game from File" === "Analizza partita da file" "Unable to activate help" === "Impossibile aprire file della guida" "Send to chess program:" === "Invia al motore di gioco:" "Send to second chess program:" === "Invia al secondo motore di gioco" "Direct Command" === "Comando diretto" "Error loading sound %s" === "Errore nell'apertura del suono %s" "Error playing sound %s" === "Errore nella riproduzione del suono %s" "File open failed" === "Apertura file fallita" "Internal error in file dialog box" === "Errore interno nella finestra di dialogo apertura file" "Option Error" === "Errore nelle opzioni" "Choose an option, or cancel to exit" === "Scegli un'opzione o premi Cancella per uscire" "Unable to activate help" === "Impossibile aprire file della guida" "Displayed move is not current" === "La mossa mostrata non quella corrente" "Could not parse move" === "Impossibile leggere mossa" "%s:\nError code %d" === "%s:\nCodice errore %d" "Error" === "Errore" "Fatal Error" === "Errore fatale" "Exiting" === "Chiusura in corso" "%s:\nError code %d" === "%s:\nCodice errore %d" "Note" === "Nota" "Error writing to chess program" === "Errore in scrittura sul motore di gioco" "User" === "Utente" "Unknown" === "Sconosciuto" "White" === "Bianco" "Black" === "Nero" "Save Game to File" === "Salva partita" "Not implemented" === "Non implementato" "Shout Text" === "Testo Shout" "SShout/CShout" === "" "Channel 1 Text" === "Testo Canale 1" "Channel Text" === "Testo Canale" "Kibitz Text" === "Testo Kibitz" "Tell Text" === "Testo Tell" "Challenge Text" === "Testo Challenge" "Request Text" === "Testo Richiesta" "Seek Text" === "Testo Seek" "Normal Text" === "Testo normale" "None" === "Nessuno" "Pawn" === "Pedone" "Knight" === "Cavallo" "Bishop" === "Alfiere" "Rook" === "Torre" "Queen" === "Donna" "Information" === "Informazione" wclipbrd.c "Unable to convert position to FEN." === "Impossibile convertire posizione in FEN." "Unable to copy FEN to clipboard." === "Impossibile copiare FEN negli Appunti." "Cannot create temporary file name." === "Impossibile creare nome file temporaneo." "Cannot open temporary file." === "Impossibile aprire file temporaneo." "Cannot write to temporary file." === "Impossibile scrivere su file temporaneo." "Cannot reopen temporary file." === "Impossibile riaprire file temporaneo." "Cannot determine size of file." === "Impossibile determinare la dimensione del file." "Cannot allocate clipboard buffer." === "Impossibile allocare il buffer per gli Appunti." "Cannot read from temporary file." === "Impossibile leggere da file temporaneo." "Error reading from temporary file." === "Errore in lettura da file temporaneo." "Cannot copy text to clipboard" === "Impossibile copiare il testo negli Appunti" "Unable to allocate memory for clipboard." === "Impossibile allocare la memoria per gli Appunti." "Unable to lock clipboard memory." === "Impossibile riservare la memoria per gli Appunti." "Cannot unlock clipboard memory." === "Impossibile rilasciare la memoria per gli Appunti." "Cannot open clipboard." === "Impossibile aprire gli Appunti." "Cannot empty clipboard." === "Impossibile svuotare gli Appunti" "Cannot copy text to clipboard." === "Impossibile copiare il testo negli Appunti." "Cannot close clipboard." === "Impossibile chiudere gli Appunti." "Unable to paste FEN from clipboard." === "Impossibile incollare FEN dagli Appunti." "Unable to create temporary file." === "Impossibile creare file temporaneo." "Error writing to temporary file." === "Errore in scrittura su file temporaneo." "Unable to open clipboard." === "Impossibile aprire gli Appunti." "No text in clipboard." === "NEssun testo negli Appunti." "Unable to lock clipboard memory." === "Impossibile riservare la memoria per gli Appunti." "Unable to allocate memory for text string." === "Impossibile allocare la memoria per il testo." "Unable to unlock clipboard memory." === "Impossibile rilasciare la memoria per gli Appunti." "Unable to close clipboard." === "Impossibile chiudere gli Appunti." woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === "Sfoglia..." "Can't parse com port settings" === "Impossibile leggere le impostazioni per la porta COM" "Option Error" === "Errore nelle impostazioni" "Invalid data rate" === "Data Rate non valido" "Option Error" === "Errore nelle impostazioni" "Failed to set comm port state;\r\ninvalid options?" === "Settaggio della porta COM fallito;\r\nimpostazioni non valide?" "Failed to set comm port state" === "Settaggio dello stato della porta COM fallito" "Invalid load game step rate" === "Velocit replay partita non valida" "Invalid save game file name" === "Nome file per salvataggio partita non valido" "Browse for Auto Save File" === "Sfoglia nome file Salvataggio Automatico" "Invalid moves per time control" === "Numero mosse per sessione non valido" "Invalid minutes per time control" === "Valore minuti per sessione non valido" "Invalid increment" === "Valore incremento non valido" "Invalid initial time" === "Valore tempo iniziale non valido" "Changing time control during a game is not implemented" === "La possibilit di modificare il controllo di tempo durante la partita non implementata" "Variant %s not supported by %s" === "La variante %s non supportata da %s" "Warning: second engine (%s) does not support this!" === "Attenzione: il secondo motore di gioco (%s) non supporta questa azione!" "Invalid ICS Alarm Time" === "Valore per allarme controllo tempo ICS non valido" "Invalid max time per move" === "Valore tempo massimo per mossa non valido" "Invalid time-odds factor" === "Fattore di riduzione del tempo non valido" "Choose Folder" === "Scegli cartella" "Choose Book" === "Scegli Libro aperture" "Choose Polyglot Directory" === "Scegli cartella Polyglot" "Choose EGTB Directory:" === "Scegli cartella EGTB:" "Polyglot was not found in the specified folder!" === "Polyglot non stato trovato nella cartella specificata!" wgamelist.c "No game selected" === "Nessuna partita selezionata" "Can't go forward any further" === "Impossibile avanzare oltre" "Can't back up any further" === "Impossibile tornare pi indietro" "No game list" === "Nessuna lista partite" "Game List" === "Lista partite" "Game list not loaded or empty" === "Lista partite vuota o non caricata" "%s - %d/%d games" === "%s - %d/%d partite" wedittags.c "Edit Tags" === "Modifica informazioni" "Tags" === "Campi" "Error replacing tags." === "Errore nella sostituzione dei campi" wsettings.c "%s Engine Settings (%s)" === "Impostazioni %s motore di gioco (%s)" "OK" === "OK" "Cancel" === "Cancella" backend.c "bad timeControl option %s" === "Opzione timeControl non corretta: %s" "bad searchTime option %s" === "Opzione searchTime non corretta: %s" ## following to will appear in combinations like "first engine" "first" === "primo" "second" === "secondo" "protocol version %d not supported" === "Versione %d del protocollo non supportata" "Variant %s supported only in ICS mode" === "La variante %s supportata solo in modalit ICS" "Unknown variant name %s" === "Nome di variante sconosciuto: %s" "Starting chess program" === "Avvio del motore di gioco" "Could not open comm port %s" === "Apertura della porta comm %s fallita" "Could not connect to host %s, port %s" === "Connessione all'host %s, porta %s fallita" "Unknown initialMode %s" === "Valore per initialMode non riconosciuto: %s" "Can't have a match with no chess programs" === "Impossibile avviare un match senza specificare alcun motore di gioco" "Bad game file" === "File partita non riconosciuto" "Bad position file" === "File posizione non riconosciuto" "AnalyzeFile mode requires a game file" === "La modalit 'Analizza file' richiede un file partita" "Analysis mode requires a chess engine" === "La modalit Analisi richiede un motore di gioco" "Analysis mode does not work with ICS mode" === "La funzione di Analisi non disponibile in modalit ICS" "MachineWhite mode requires a chess engine" === "La modalit 'Bianco al motore di gioco' richiede almeno un motore" "MachineWhite mode does not work with ICS mode" === "La funzione 'Bianco al motore di gioco' non disponibile in modalit ICS" "MachineBlack mode requires a chess engine" === "La modalit 'Nero al motore di gioco' richiede almeno un motore" "MachineBlack mode does not work with ICS mode" === "La funzione 'Nero al motore di gioco' non disponibile in modalit ICS" "TwoMachines mode does not work with ICS mode" === "La funzione 'Motore di gioco 1 vs 2' non disponibile in modalit ICS" "TwoMachines mode requires a chess engine" === "La modalit 'Motore di gioco 1 vs 2' richiede almeno un motore di gioco" "Training mode requires a game file" === "La modalit Allenamento richiede un file partita" "Error writing to ICS" === "Errore in scrittura sull'ICS" "Error reading from keyboard" === "Errore in lettura da tastiera" "Got end of file from keyboard" === "Ricevuto carattere di Fine file (EOF) dalla tastiera" "Error writing to ICS" === "Errore in scrittura sull'ICS" "Error writing to display" === "Errore in scrittura sul display" "Error gathering move list: two headers" === "Errore nella lettura della lista mosse: sono presenti due intestazioni" "Error gathering move list: nested" === "Errore nella lettura della lista mosse: mosse annidate" "Connection closed by ICS" === "Connessione chiusa dal'ICS" "Error reading from ICS" === "Errore in lettura dall'ICS" "Failed to parse board string:\n\"%s\"" === "Lettura della descrizione posizione fallita:\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "Partita troppo lunga; incrementare il valore di MAX_MOVES e ricompilare" "Error gathering move list: extra board" === "Errore nela lettura della lista mosse: presente una posizione in pi" "Illegal move \"%s\" from ICS" === "Mossa illegale dall'ICS: \"%s\"" "Couldn't parse move \"%s\" from ICS" === "Impossibile interpretare la mossa dall'ICS: \"%s\"" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "say Errore interno; moveType malformato %d (%d,%d-%d,%d)" "You are playing Black" === "Stai giocando con il Nero" "You are playing White" === "Stai giocando con il Bianco" "It is White's turn" === "Il tratto al Bianco" "It is Black's turn" === "Il tratto al Nero" "Displayed position is not current" === "La posizione mostrata non quella corrente" "Illegal move" === "Mossa illegale" "End of game" === "Termine della partita" "Incorrect move" === "Mossa non corretta" ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === "Mossa illegale \"%s\" dal %s motore di gioco" "Illegal move \"%s\" (rejected by %s chess program)" === "Mossa illegale \"%s\" (rifiutata dal %s motore di gioco)" "Failed to start %s chess program %s on %s: %s\n" === "Avvio del %s motore di gioco %s su %s fallito: %s\n" "Error writing to %s chess program" === "Errore in scrittura sul %s motore di gioco" "Error: %s chess program (%s) exited unexpectedly" === "Errore: il %s motore di gioco (%s) terminato in maniera inaspettata" "Error reading from %s chess program (%s)" === "Errore in lettura dal %s motore di gioco (%s)" "Forfeit due to illegal move" === "Forfeit decretato per mossa illegale" "%s does not support analysis" === "%s non supporta la modalit di analisi" "Hint: %s" === "Suggerimento: %s" "Machine accepts your draw offer" === "Il motore di gioco accetta la tua offerta di patta" "Machine offers a draw\nSelect Action / Draw to agree" === "Il motore di gioco offre la patta\nPer accettare seleziona il men Azioni / Offri Patta" "%s (only move)" === "%s (unica mossa)" "Ambiguous move in ICS output: \"%s\"" === "Mossa ambigua nell'output dell'ICS: \"%s\"" "Illegal move in ICS output: \"%s\"" === "Mossa illegale nell'output dell'ICS: \"%s\"" "Gap in move list" === "Mosse mancanti nella lista mosse" "Game too long; increase MAX_MOVES and recompile" === "Partita troppo lunga; incrementare il valore di MAX_MOVES e ricompilare" "Variant %s not supported by %s" === "La variante %s non supportata da %s" "Startup failure on '%s'" === "Avvio di '%s' fallito" "Waiting for first chess program" === "In attesa del primo motore di gioco" "Waiting for second chess program" === "In attesa del secondo motore di gioco" "Match %s vs. %s: final score %d-%d-%d" === "Match %s vs %s: punteggio finale %d-%d-%d" "Stalemate" === "Stallo" "Illegal move: %d.%s%s" === "Mossa illegale: %d.%s%s" "Ambiguous move: %d.%s%s" === "Mossa ambigua: %d.%s%s" "Can't open \"%s\"" === "Impossibile aprire \"%s\"" "Cannot build game list" === "Impossibile costruire la lista partite" "No more games in this message" === "In questo messaggio non sono presenti altre partite" "No game has been loaded yet" === "Non ancora stata caricata nessuna partita" "Can't back up any further" === "Impossibile risalire oltre" "Game number out of range" === "Indice superiore al numero di partite" "Can't seek on game file" === "Impossibile effettuare la ricerca nel file di partita" "Game not found in file" === "Partita non trovata nel file" "Bad FEN position in file" === "Stringa FEN di posizione scorretta nel file" "No moves in game" === "Partita senza mosse" "No position has been loaded yet" === "Non ancora stata caricata nessuna posizione" "Can't back up any further" === "Impossibile risalire oltre" "Can't open \"%s\"" === "Impossibile aprire \"%s\"" "Can't seek on position file" === "Impossibile effettuare la ricerca nel file di posizione" "Position not found in file" === "Posizione non trovata nel file" "Bad FEN position in file" === "Stringa FEN di posizione scorretta nel file" "Black to play" === "Il tratto al Nero" "White to play" === "Il tratto al Bianco" "Can't open \"%s\"" === "Impossibile aprire \"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === "La lista mosse stata modificata.\nUtilizzare 'Riapri partita corrente' e ripetere la mossa" "You have entered too many moves.\nBack up to the correct position and try again." === "Sono state immesse troppe mosse.\nRitornare alla posizione corretta e riprovare." "Displayed position is not current.\nStep forward to the correct position and try again." === "La posizione mostrata non quella corrente.\nAvanzare fino alla posizione corretta e riprovare." "You have not made a move yet" === "Non hai ancora fatto alcuna mossa" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "Il messaggio cmail non stato caricato.\Utilizzare 'Ricarica Messaggio CMail e reimmettere la mossa." "No unfinished games" === "Non presente nessuna partita non terminata" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "E' gi stata postata una mossa.\nAttendere sino a quando non viene inviata una mossa dall'avversario.\nPer reinviare la stessa mossa, digitare\n\"cmail -remail -game %s\"\nsulla riga di comando." "Failed to invoke cmail" === "Impossibile aprire l'applicazione cmail" "Waiting for reply from opponent\n" === "In attesa di risposta dall'avversario\n" "Still need to make move for game\n" === "Occorre ancora eseguire la mossa per la partita\n" "Still need to make moves for both games\n" === "Occorre ancora eseguire mosse per entrambe le partite\n" "Still need to make moves for all %d games\n" === "Occorre ancora eseguire mosse per tutte le %d partite\n" "Still need to make a move for game %s\n" === "Occorre ancora eseguire una mossa per la partita %s\n" "No unfinished games\n" === "Non presente nessuna partita non terminata" "Ready to send mail\n" === "Pronto all'invio della posta\n" "Still need to make moves for games %s\n" === "Occorre ancora eseguire mosse per le partite %s\n" "Edit comment" === "Modifica commento" "Edit comment on %d.%s%s" === "Modifica commento a %d.%s%s" ##"Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "Comenzando modo de anlisis...\nSi este mensaje permanece, su programa de ajedrez no admite anlisis." "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "Avvio della modalit di analisi...\nSe questo messaggio rimane visibile, il motore di gioco non supporta la modalit di analisi." "It is not White's turn" === "Il tratto non al Bianco" "It is not Black's turn" === "Il tratto non al Nero" "Wait until your turn,\nor select Move Now" === "Attendi il tuo turno,\noppure seleziona 'Muovi subito'" "Starting second chess program" === "Avvio del secondo motore di gioco" "Training mode off" === "Modalit Allenamento disattivata" "Training mode on" === "Modalit Allenamento attivata" "Already at end of game" === "Gi alla fine della partita" "Warning: You are still playing a game" === "Avviso: Stai ancora giocando una partita" "Warning: You are still observing a game" === "Avviso: Stai ancora osservando una partita" "Warning: You are still examining a game" === "Avviso: Stai ancora esaminando una partita" "It is Black's turn" === "Il tratto al Nero" "It is White's turn" === "Il tratto al Bianco" "That square is occupied" === "La casa gi occupata" "There is no pending offer on this move" === "Non vi alcuna offerta pendente a questa mossa" "Your opponent is not out of time" === "Il tuo avversario non ha ancora esaurito il proprio tempo" "Black offers a draw" === "Il Nero offre la patta" "White offers a draw" === "Il Bianco ofre la patta" "You must make your move before offering a draw" === "Devi eseguire la tua mossa prima di offrire la patta" "You are not examining a game" === "Non stai esaminando alcuna partita" "You can't revert while pausing" === "Non possibile ripristinare mentre la pausa attiva" "Wait until your turn,\nor select Move Now" === "Attendi il tuo turno,\noppure seleziona 'Muovi subito'" "It is your turn" === "E' il tuo turno" "Wait until your turn" === "Attendi il tuo turno" "No hint available" === "Nessun suggerimento disponibile" "Analysis (%s)" === "Analisi (%s)" "Comment" === "Commento" "Comment on %d.%s%s" === "Commento a %d.%s%s" "Both flags fell" === "Tempo esaurito per entrambi" "White's flag fell" === "Tempo esaurito per il Bianco" "Black's fell" === "Tempo esaurito per il Nero" "Bad FEN position in clipboard" === "Stringa FEN di posizione scorretta negli Appunti" "No response from ICS" === "Nessuna risposta dall'ICS" "You cannot do this while you are playing or observing" === "Questa operazione non pu essere eseguita mentre si sta giocando o osservando una partita" "Click in holdings to choose piece" === "Cliccare sui pezzi 'in mano' per sceglierne uno" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === "Partita abortita" "White wins on time" === "Il Bianco vince sul tempo" "Black wins on time" === "Il Nero vince sul tempo" "Both players ran out of time" === "Tempo esaurito per entrambi i giocatori" "White resigns" === "Il Bianco abbandona" "Black resigns" === "Il Nero abbandona" "White mates" === "Il Bianco matta" "Black mates" === "Il Nero matta" "Draw" === "Patta" "Draw agreed" === "Patta concordata" "Xboard adjudication: King destroyed" === "Aggiudicazione di Xboard: Re distrutto" "Xboard adjudication: Bare king" === "Aggiudicazione di Xboard: Resta solo il re" "Xboard adjudication: 3rd check" === "Aggiudicazione di Xboard: Terzo scacco" "Xboard adjudication: Stalemate" === "Aggiudicazione di Xboard: Stallo" "Xboard adjudication: Checkmate" === "Aggiudicazione di Xboard: Scacco matto" "Xboard adjudication: Insufficient mating material" === "Aggiudicazione di Xboard: Materiale insufficiente" "Xboard adjudication: Trivial draw" === "Aggiudicazione di Xboard: Patta triviale" "XBoard adjudication: repetition draw" === "Aggiudicazione di Xboard: Patta per ripetizione" "Xboard adjudication: perpetual checking" === "Aggiudicazione di Xboard: Scacco perpetuo" "Xboard adjudication: perpetual chasing" === "Aggiudicazione di Xboard: Minaccia perpetua" "%Xboard adjudication: perpetual chasing of" === "Aggiudicazione di Xboard: Minaccia perpetua" "Xboard adjudication: 50-move rule" === "Aggiudicazione di Xboard: Regola delle 50 mosse" "Draw claim: 50-move rule" === "Patta dichiarata: Regola delle 50 mosse" "Draw claim: 3-fold repetition" === "Patta dichiarata: Terza ripetizione" "Draw claim: insufficient mating material" === "Patta dichiarata: Materiale insufficiente" "Xboard adjudication: long game" === "Aggiudicazione di Xboard: Partita lunga" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "Xboard: Forfeit decretato per mossa non valida: %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "Xboard: Forfeit decretato per mossa illegale: %s (%c%c%c%c)%c" "Xboard adjudication" === "Aggiudicazione di Xboard" "User adjudication" === "Aggiudicazione dell'utente" "False win claim: '%s'" === "Falsa dichiarazione di vittoria: '%s'" "False draw claim: '%s'" === "Falsa dichiarazione di patta: '%s'" "xboard exit" === "Chiusura di Xboard" xboard-4.8.0/winboard/language/chinese(simp).lng0000644000175000001440000010033512420374633016447 00000000000000winboard.rc " " === "Translation by Morning Yellow && Liuzy" MENUS "&New Game\tCtrl-N" === "(&N)\tCtrl-N" "New Sh&uffle Game..." === "ϴϷ(&u)..." "New &Variant...\tAlt+Shift+V" === "±(&V)...\tAlt+Shift+V" "&Load Game...\tCtrl-O" === "(&L)...\tCtrl-O" "Load &Next Game\tAlt+PgDn" === "һ(&N)\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "һ(&P)\tAlt+PgUp" "&Reload Same Game" === "ͬһ(&R)" "&Save Game...\tCtrl-S" === "(&S)...\tCtrl-S" "&Copy Game To Clipboard\tCtrl+C" === "ֵ(&C)\tCtrl+C" "&Paste Game From Clipboard\tCtrl+V" === "ճԼ(&P)\tCtrl+V" "Copy Game List to Clipboard" === "Ϸб" "L&oad Position...\tCtrl+Shift+O" === "(&O)...\tCtrl+Shift+O" "Load N&ext Position\tAlt+Shift+PgDn" === "һ(&E)\tAlt+Shift+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "һ(&V)\tAlt+Shift+PgUp" "Reload Sa&me Position" === "ͬһ(&M)" "S&ave Position...\tCtrl+Shift+S" === "(&A)...\tCtrl+Shift+S" "Save as &Diagram..." === "ͼ...(&D)" "C&opy Position To Clipboard\tCtrl+Shift+C" === "ƾ浽(&Y)\tCtrl+Shift+C" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Ӽճ(&T)\tCtrl+Shift+V" "E&xit" === "˳(&X)" "&Quit" === "˳(&Q)" "&Edit Game\tCtrl+E" === "༭(&E)\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "༭(&d)\tCtrl+Shift+E" "&Tags" === "༭ǩ(&T)" "&Comments" === "༭ע(&C)..." "&Game List Tags..." === "Ϸб..." "Machine &White\tCtrl+W" === "ִ(&W)\tCtrl+W" "Machine &Black\tCtrl+B" === "ִ(&B)\tCtrl+B" "&Two Machines\tCtrl+T" === "Զ(&M)\tCtrl+T" "Machine Both" === "ִ׺ͺ" "&Machine Match" === "(&M)" "&Analysis Mode\tCtrl+A" === "ģʽ(&A)\tCtrl+A" "Analyze &File\tCtrl+F" === "ļ(&F)\tCtrl+F" "&ICS Client" === "&ICSͻ" "Edit &Game\tCtrl+E" === "༭(&G)\tCtrl+E" "&Edit Position\tShift+Ctrl+E" === "༭(&E)\tShift+Ctrl+E" "Trai&ning" === "ѵ(&N)" "Engine &Output\tAlt+Shift+O" === "ʾ\tAlt+Shift+O" "Evaluation &Graph\tAlt+Shift+E" === "ʾͼ\tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "ʾб(&L)\tAlt+Shift+G" "Move &History\tAlt+Shift+H" === "ʾŷ\tAlt+Shift+H" "Open &New Chat Window" === "촰" "Edit Ta&gs..." === "༭ǩ(&T)" "Edit Co&mment..." === "༭ע(&C)..." "Enter &Username..." === "û(&U)" "&Pause\tPause" === "ͣ(&P)\tPause" "&Accept\tF3" === "(&A)\tF3" "D&ecline\tF4" === "ܾ(&C)\tF4" "Re&match\tF12" === "(&M)\tF12" "Call &Flag\tF5" === "ʱи(&F)\tF5" "&Draw\tF6" === "(&D)\tF6" "Ad&journ\tF7" === "(&J)\tF7" "A&bort\tF8" === "ֹ(&B)\tF8" "&Resign\tF9" === "(&R)\tF9" "Stop &Observing\tF10" === "ֹͣԹ(&O)\tF10" "Stop E&xamining\tF11" === "ֹͣо(&X)\tF11" "&Upload to Examine" === "ϴ(&U)" "Adjudicate to &White" === "þӮ (&W)" "Adjudicate to &Black" === "þӮ (&B)" "Adjudicate &Draw" === "ٲ(&D)" "Type In &Move...\tAlt+I" === "ŷ(&Y)...\tAlt+I" "&Backward\tAlt+Left" === "һ(&B)\tAlt+Left" "&Forward\tAlt+Right" === "һ(&F)\tAlt+Right" "Back to &Start\tAlt+Home" === "ʼ(&S)\tAlt+Home" "For&ward to End\tAlt+End" === "(&E)\tAlt+End" "&Revert\tHome" === "ָ(&V)" "&Annotate" === "ע(&A)" "&Truncate Game\tEnd" === "ضϺŷ(&T)" "&Move Now\tCtrl+M" === "(&M)\tCtrl+M" "&Retract Move\tCtrl+X" === "(&R)\tCtrl+X" "Flip &View\tF2" === "ת(&V)\tF2" "&Swap Clocks" === "ӱ(&C)" "&Mute all Sounds" === "(&M)" "&General..." === "ѡ(&G)..." "&Board..." === "ѡ(&B)..." "Ad&judications...\tAlt+Shift+J" === "о(&j)...\tAlt+Shift+J" "Common &Engine...\tAlt+Shift+U" === "ͨ(&E)...\tAlt+Shift+U" "Engine #&1 Settings..." === " #1 " "Engine #&2 Settings..." === " #2 " "&ICS..." === "&ICSѡ..." "&Fonts..." === "ѡ(&F)..." "Soun&ds..." === "ѡ(&D)..." "G&ame List..." === "Ϸб..." "Comm&unications..." === "ͨѶ˿(&U)..." "&Load Game...\tAlt+Shift+L" === "ѡ(&L)...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "ѡ(&S)...\tAlt+Shift+S" "&Time Control...\tAlt+Shift+T" === "ʱ(&T)...\tAlt+Shift+T" "Save Settings &Now" === "(&N)" "Save Settings on E&xit" === "˳ʱ(&X)" "Help &Contents\tF1" === "(&C)\tF1" "Help &Index" === "(&I)" "How to &Use Help" === "ʹð(&U)" "&Hint..." === "ʾ(&H)..." "&Book..." === "ֿ(&B)..." "&About WinBoard" === "WinBoard(&A)" "White" === "׷" "Promote" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "King" === "" "Archbishop" === "ʦ" "Chancellor" === "" "Elephant" === "" "Cannon" === "" "Empty Square" === "ո" "Black" === "ڷ" "Demote" === "" "Clear Board " === "" "Drop" === "ȡ" "Cop&y and Paste" === "Ʋճ(&Y)" "&Copy" === "(&C)" "&Paste" === "ճ(&P)" "&Undo" === "(&U)" "Cu&t" === "(&T)" "&Copy" === "(&C)" "&Paste" === "ճ(&P)" "Select &All" === "ȫѡ(&A)" DIALOGS "&Animate Moving Ctrl+Shift+A" === "(&A) Ctrl+Shift+A" "&Auto Comment" === "Զע(&A)" "&Average" === "54" "&Big" === "87" "&Bishop" === "(&B)" "&Black first move" === "ڷ(&B)" "&Blindfold" === "ä(&B)" "&Bold" === "Ӵ(&B)" "&Cancel" === "ȡ(&C)" "&Choose Background Color..." === "ѡ񱳾ɫ(&C)..." "&Choose Color..." === "ѡɫ(&C)..." "&Clear" === "(&C)" "&Close" === "ر(&C)" "&Colossal" === "116" "&Default ICS Colors" === "ĬICSɫ(&D)" "&Dinky" === "29" "&Directories:" === "Ŀ¼(&D)" "&Edit" === "༭(&E)" "&Edit" === "༭(&E)" "&Get Move List" === "ȡŷб(&G)" "&Giant" === "108" "&Help" === "(&H)" "Highlight Dra&gging" === "קĿʾ(&H)" "&Huge" === "95" "&Index number:" === "(&I)" "&Italic" === "б(&I)" "&King" === "(&K)" "&Large" === "80" "&Load" === "(&L)" "&Local Line Editing" === "б༭(&L)" "&Middling" === "49" "&Next" === "һ(&N)" "&Petite" === "33" "&Popup Exit Message" === "˳ʱʾ(&P)" "&Port:" === "˿(&P)" "&Premove" === "Ԥ(&P)" "&Prev" === "һ(&P)" "&Queen" === "(&Q)" "&Quiet Play" === "(&Q)" "&Revert to Defaults" === "ָĬ趨(&R)" "&Rook" === "(&R)" "&Show Thinking" === "ʾ˼ϸ(&S)" "&Small" === "40" "&Sound alarm at" === "(&S)" "&Stop Bits:" === "ֹͣλ(&S)" "&Strikeout" === "ɾ(&S)" "&Tiny" === "21" "&Underline" === "»(&U)" "&White first move" === "׷(&W)" "&Additional options" === "ѡ(&A)" "Always &Queen Ctrl+Shift+Q" === "Ϊ(&Q) Ctrl+Shift+Q" "Always on &Top" === "ǰ(&T)" "Animate &Dragging" === "ק(&D)" "Auto &Flag Ctrl+Shift+F" === "Զʱи(&F) Ctrl+Shift+F" "Auto &Observe" === "ԶԹ(&O)" "Auto &Raise Board" === "Զı̴С(&R)" "Auto Flip &View" === "Զת(&V)" "Black Pieces" === "" "Browse..." === "..." "Built-in sound:" === "ڽ" "Bul&ky" === "72" "Cancel" === "ȡ" "Chessboard for Windows" === "Windowsµĵӹ" "Choose..." === "ѡ..." "Clocks" === "ʱ" "Comments" === "ע" "Conventional chess clock" === "ʱ" "Coordinates" === "" "Copyright 1991 Digital Equipment Corporation" === "Copyright 1991 Digital Equipment Corporation" "Dark Squares" === "ڸ" "Data &Bits:" === "λ(&B)" "Data &Rate:" === "(&R)" "Default beep" === "Ĭ" "Defaults" === "Ĭ" "Do ¬ colorize messages" === "ҪϢɫ(&N)" "Dri&ves:" === "(&V)" "Enter" === "" "Event:" === "¼" "F&low:" === "(&L)" "File &Name:" === "ļ(&N)" "Help" === "" "Highlight Last &Move" === "Ŀʾһŷ(&M)" "ICS Interaction" === "ICS" "Incremental clock" === "ʱ" "Inde&x number:" === "(&X)" "Just &view or edit game files" === "ֻۿ༭(&v)" "K&night" === "(&N)" "Light Squares" === "׸" "List Files of &Type:" === "ļ(&T)" "Load games with automatic stepping" === "Զ" "Medi&ocre" === "45" "Medi&um" === "64" "Messages" === "Ϣ" "Mode&rate" === "58" "Monochrome" === "ڰ" "Net&work..." === "(&W)..." "No sound" === "" "OK" === "ȷ" "Old" === "ɸʽ" "P&arity:" === "У(&A)" "PGN" === "PGNʽ" "Periodic &Updates" === "ڸ(&U)" "Play" === "" "Ponder &Next Move Ctrl+Shift+P" === "ͬ˼(&N) Ctrl+Shift+P" "Popup Move &Errors" === "ʾŷ(&E)" "Premove Highlights" === "Ԥ" "Promote pawn to:" === "Ϊ" "Prompt for filename" === "ʾļ" "Save As: " === "" "Save games automatically" === "Զ" "Show &Coordinates" === "ʾ(&C)" "Show Butt&on Bar" === "ʾť(&O)" "Sl&im" === "37" "Sorry Charlie" === "Բ𣬸" "Square Highlights" === "ӱ" "T&eeny" === "25" "Tags" === "ǩ" "Test &Legality Ctrl+Shift+L" === "ŷ(&L) Cl+Sh+L" "Tita&nic" === "129" "To file:" === "ļ" "Use an Internet Chess Server" === "¼Ϲ" "WAV file:" === "WAVļ" "White Pieces" === "" "WinBoard 0.0.0" === "WinBoard 0.0.0" "galactic" === "galactic" "minutes initially," === "ʼʱ" "minutes" === "" "moves in" === "" "plus" === "" "seconds per move" === "ÿһ" "seconds per move" === "һ" "seconds" === "" "Save As:" === "" "What would you like to do?" === "ʹã" "Interaction Colors" === "ɫ" "Premove" === "Ԥ" "Alarm" === "ʾ" "Colors" === "ɫ" "Size" === "С" "Current Board Size" === "ǰ̴С" "All Board Sizes" === "̴С" "Number of moves:" === "" "Within number of minutes:" === "" "Initial number of minutes:" === "ʼʱ" "Plus number of seconds per move:" === "ÿһ" "Ponder Next Move" === "ͬ˼(&N)" "Enable and Show Thinking (recommended)" === "ʾ˼ϸ" "Periodic Updates (for Analysis Mode)" === "ڸ(ģʽ)" "Game List Options" === "бѡ" "PGN &Tags:" === "PGNǩ(&T)" "Default" === "Ĭ" "Sounds" === "" "&Event:" === "¼(&E)" "&No sound" === "(&N)" "&Default beep" === "Ĭ(&D)" "&Built-in sound:" === "ڽ(&B)" "&WAV file:" === "&WAVļ" "B&rowse..." === "...(&B)" "&Play" === "(&P)" "&Defaults" === "Ĭ(&D)" "I C S Interaction" === "I C S " "About WinBoard" === "WinBoard" "Time Control" === "ʱ" "Load Game Options" === "ѡ" "Save Game Options" === "ѡ" "Open" === "" "Communication Port Settings" === "ͨѶ˿" "Edit Comment" === "༭ע" "Promotion" === "" "Game List" === "б" "Edit Tags" === "༭ǩ" "ICS Interaction" === "ICS" "Dialog" === "Ի" "Error" === "" "ICS Interaction Colors" === "ICSɫ" "Question" === "ʾ" "WinBoard Startup" === "WinBoard" "Type in a move" === "ŷ" "General Options" === "ѡ" "ICS Options" === "ICS" "Board Options" === "ѡ" "Fonts" === "" NEW "&Up" === "" "&Down" === "" "Filter" === "" "All White" === "ȫɫ" "Flip Black" === "תɫ" "Specify Chess &Engines:" === "ָ(&E)" "Specify Chess &Server:" === "ָ(&S)" "New Shuffle Game..." === "ϴϷ..." "New Variant...\tAlt+Shift+V" === "±...\tAlt+Shift+V" "Copy Game List to Clipboard" === "Ϸб" "Save &Diagram..." === "ͼ...(&D)" "Machine Both" === "ִ׺ͺ" "Machine Matc&h" === "(&h)" "Show Engine &Output\tAlt+Shift+O" === "ʾ\tAlt+Shift+O" "Show Evaluation Graph\tAlt+Shift+E" === "ʾͼ\tAlt+Shift+E" "Show Move History\tAlt+Shift+H" === "ʾŷ\tAlt+Shift+H" "Open Chat Window" === "촰" "Enter &Username..." === "û(&U)" "&Upload to Examine" === "ϴ(&U)" "Adjudicate to &White" === "þӮ (&W)" "Adjudicate to &Black" === "þӮ (&B)" "Adjudicate &Draw" === "ٲ(&D)" "&Annotate" === "ע(&A)" "&Truncate Game" === "ض(&T)" "Swap &Clocks" === "ӱ(&C)" "&Mute all Sounds" === "(&M)" "Adjudications...\tAlt+Shift+J" === "о...\tAlt+Shift+J" "Common Engine...\tAlt+Shift+U" === "ͨ...\tAlt+Shift+U" "Engine #1 Settings..." === " #1 " "Engine #2 Settings..." === " #2 " "Game List..." === "Ϸб..." "Promote" === "" "Archbishop" === "ʦ" "Chancellor" === "" "Elephant" === "" "Cannon" === "" "Demote" === "" "Lance" === "㳵" "Silver" === "" "Gold" === "" "Fixed time per move" === "̶ʱ" "Maximum seconds per move:" === "ʱ()" "Time-Odds Factors:" === "ʱ䱶" "Engine #1:" === " #1" "Engine #2:" === " #2" "Save out of book info in PGN" === "PGNбϢ" "&Send Engine Think" === "˼(&S)" "E&xtended PGN Info Ctrl+Shift+X" === "չPGNϢ Ctrl+Shift+X" "&Hide Thinking Ctrl+Shift+H" === "˼ Ctrl+Shift+H" "&Info in Move History Ctrl+Shift+I" === "ŷбʾϢ Cl+Sh+I" "Highlight with Arro&w" === "üͷͻƶ" "Displa&y Logos" === "ʾ־(&y)" "&Auto Kibitz" === "Զ\"kibitz\"(&A)" "See&k Graph" === "ѡͼ(&k)" "auto-&Refresh" === "Զˢͼ(&R)" "Bckgnd Obser&ve" === "̨۲(&v)" "&Dual Board" === "˫(&D)" "One-Click &Move" === "ƶ(&M)" "Background..." === "..." "&Defaults..." === "ȱʡ(&D)" "Startup &Chat Boxes:" === "(&C)" "General" === "" " YES" === "" " NO" === "" "Move History, Engine Output" === "ʷϵĶ,ķ" "New Shuffle Game" === "ϴϷ" "&Start Position Number:" === "λú(&S)" "Random" === "" "Move History" === "ŷ" "Evaluation Graph" === "ͼ" "Engine output" === "" "Engine #1" === " #1" "NPS" === "NPS" "Engine #2" === " #2" "Chat Window" === "촰" "Chat partner:" === "" "Clear" === "" "Send" === "" "Adjudications" === "о" "Hide Thinking when Playing against Human" === "˶ʱ˼ϸ" "Adjudications in non-ICS games" === "оICSϷ" "Adjudicate draw after:" === "źо" "moves" === "ŷ" "Win/loss adjudication threshold:" === "/Ӯоֵ" "centipawns" === "ٷ֮һ" "&Verify Engine Claims" === "֤(&V)" "Detect &Mates" === "⽫ɱ(&M)" "Draw if &Insufficient Material" === "ʱк(&I)" "Adjudicate &Trivial Draws" === "һо(&T)" "Apply" === "Ӧ" "-move rule" === "" "-fold repeats" === "ظ" "Engine #1 Score is Absolute" === " #1 ǾԷ" "Engine #2 Score is Absolute" === " #2 ǾԷ" "Common Engine Settings" === "ͨ" "Polyglot Directory:" === " Polyglot Ŀ¼" "Hash Size (MB):" === "Hash С(MB)" "EGTB Path:" === "EGTB ·" "EGTB Size (MB):" === "EGTB С(MB)" "Use Book:" === "ʹÿ" "Max nr of CPUs:" === "CPU" "First has Own Book" === "1ÿ" "Second has Own Book" === "2ÿ" "Book Depth:" === "ŷ" "Book Variation:" === "" "Default Match Games:" === "ȱʡԾ" "Variants" === "" "Variant" === "" "Board size:" === "̴С" "ranks" === "" "files" === "" "Holdings with room for:" === "ӵеĿ" "('-1' means defaults for selected variant)" === "-1ʾȱʡ" "Type In Your Name" === "Je Naam, Sufferd!" "&Play against a chess engine or match two engines" === "˻ĻԶ(&P)" "&Use an Internet Chess Server" === "¼Ϲ(&U)" winboard.c "&File" === "ļ(&F)" "&Mode" === "ģʽ(&M)" "&Action" === "Ϊ(&A)" "&Step" === "ŷ(&S)" "&Options" === "ѡ(&O)" "&Help" === "(&H)" "&View" === "(&V)" "E&ngine" === "(&N)" "Font name too long:" === "̫" "Font point size missing:" === "ûС" "Can't parse color name %s" === "޷ʶɫ %s" "Unrecognized board size value" === "޷ʶ̴С" "Unrecognized argument" === "޷ʶIJ" "No value provided for argument" === "ûֵṩ" "Incomplete \\ escape in value for" === "жϵֵ" "Failed to open indirection file" === "޷򿪼ļ" "Unrecognized boolean argument value" === "޷ʶ߼ֵ" "Unrecognized argument" === "޷ʶIJ" "Too many colors" === "ɫ̫" "&Minimize\tCtrl+F4" === "С(&M)\tCtrl+F4" "White: %s" === "׷ %s" "We only care about the height here" === "ֻע߶" "Cannot build game list" === "޷б" "Load Game from File" === "ļ" "Load Position from File" === "ļ" "Save Game to File" === "ֵļ" "Save Position to File" === "浽ļ" "%s does not support analysis" === "%s ַ֧" "Analyze Game from File" === "ļ" "Unable to activate help" === "޷򿪰" "Send to chess program:" === "͸һ" "Send to second chess program:" === "͸ڶ" "Direct Command" === "ֱ" "Error loading sound %s" === " %s " "Error playing sound %s" === " %s " "File open failed" === "޷ļ" "Internal error in file dialog box" === "ļԻڲ" "Option Error" === "ѡ" "Choose an option, or cancel to exit" === "ѡһѡ߰ȡť˳" "Unable to activate help" === "޷򿪰" "Displayed move is not current" === "ʾŷǵǰŷ" "Could not parse move" === "޷ŷ" "%s:\nError code %d" === "%s:\n %d" "Error" === "" "Fatal Error" === "ش" "Exiting" === "˳" "%s:\nError code %d" === "%s:\n %d" "ʾϢ" === "ʾϢ" "Note" === "ע" "Error writing to chess program" === "Ϣʱ" "User" === "û" "Unknown" === "δ֪" "White" === "׷" "Black" === "ڷ" "Save Game to File" === "ֵļ" "Not implemented" === "δʵ" "Shout Text" === "" "SShout/CShout" === "" "Channel 1 Text" === "ƵI" "Channel Text" === "Ƶ" "Kibitz Text" === "" "Tell Text" === "˵" "Challenge Text" === "ս" "Request Text" === "" "Seek Text" === "" "Normal Text" === "" "None" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "Information" === "" wclipbrd.c "Unable to convert position to FEN." === "޷ѾתΪFEN" "Unable to copy FEN to clipboard." === "޷FEN" "Cannot create temporary file name." === "޷ʱļ" "Cannot open temporary file." === "޷ʱļ" "Cannot write to temporary file." === "޷дʱļ" "Cannot reopen temporary file." === "޷ٴδʱļ" "Cannot determine size of file." === "޷ȷļС" "Cannot determine size of file." === "޷ȷļС" "Cannot allocate clipboard buffer." === "޷Ļ" "Cannot read from temporary file." === "޷ʱļ" "Error reading from temporary file." === "ʱļʱ" "Cannot copy text to clipboard" === "޷ֵ" "Unable to allocate memory for clipboard." === "޷Ϊ洢ռ" "Unable to lock clipboard memory." === "޷Ĵ洢ռ" "Cannot unlock clipboard memory." === "޷ΪĴ洢ռ" "Cannot open clipboard." === "޷򿪼" "Cannot empty clipboard." === "޷ռ" "Cannot copy text to clipboard." === "޷ֵ" "Cannot close clipboard." === "޷رռ" "Unable to paste FEN from clipboard." === "޷ӼճFEN" "Unable to create temporary file." === "޷ʱļ" "Error writing to temporary file." === "дʱļʱ" "Unable to open clipboard." === "޷򿪼" "No text in clipboard." === "û" "Unable to lock clipboard memory." === "޷Ĵ洢ռ" "Unable to allocate memory for text string." === "޷Ϊַ洢ռ" "Unable to unlock clipboard memory." === "޷ԼĴ洢ռ" "Unable to close clipboard." === "޷رռ" woptions.c "Variant %s not supported by %s" === " %s %s ֧" "Warning: second engine (%s) does not support this!" === ": ڶ(%s) ִ֧!" "Invalid ICS Alarm Time" === "ICSǷ" "Invalid max time per move" === "ʱǷ" "Invalid time-odds factor" === "ʱ䱶Ƿ" "Choose Folder" === "ѡĿ¼" "Choose Book" === "ѡÿ" "Choose Polyglot Directory" === "ѡ Polyglot Ŀ¼" "Choose EGTB Directory:" === "ѡ EGTB Ŀ¼" "Polyglot was not found in the specified folder!" === "ѡĿ¼δ Polyglot " wgamelist.c "No game selected" === "ûѡ" "Can't go forward any further" === "޷ǰ" "Can't back up any further" === "޷ٺ" "No game list" === "ûб" "Game List" === "б" "Game list not loaded or empty" === "" "%s - %d/%d games" === "%s - %d/%d " "Game list not loaded or empty" === "бδػΪ" wedittags.c "Edit Tags" === "༭ǩ" "Tags" === "ǩ" "Error replacing tags." === "滻ǩ" wsettings.c "%s Engine Settings (%s)" === "%s (%s)" "OK" === "ȷ" "Cancel" === "ȡ" backend.c "bad timeControl option %s" === "Ƿ\"timeControl\"(ʱ)ѡ %s" "bad searchTime option %s" === "Ƿ\"searchTime\"(ʱ)ѡ %s" "first" === "һ" "second" === "ڶ" "protocol version %d not supported" === "Э汾 %d ֧" "Variant %s supported only in ICS mode" === " %s ֻICSģʽ֧" "Unknown variant name %s" === "δ֪ı %s" "Starting chess program" === "" "Could not open comm port %s" === "޷ͨѶ˿ %s" "Could not connect to host %s, port %s" === "޷ %s ˿ %s" "Unknown initialMode %s" === "δ֪\"initialMode\"(ʼģʽ)ѡ %s" "Can't have a match with no chess programs" === "ûʱ޷б" "Bad game file" === "ļ" "Bad position file" === "ļ" "AnalyzeFile mode requires a game file" === "\"AnalyzeFile\"(ļ)ģʽָһļ" "Analysis mode requires a chess engine" === "\"Analysis\"()ģʽ" "Analysis mode does not work with ICS mode" === "\"Analysis\"()ģʽ޷ICSģʽ¹" "MachineWhite mode requires a chess engine" === "\"MachineWhite\"(ִ)ģʽ" "MachineWhite mode does not work with ICS mode" === "\"MachineWhite\"(ִ)ģʽ޷ICSģʽ" "MachineBlack mode requires a chess engine" === "\"MachineBlack\"(ִ)ģʽ" "MachineBlack mode does not work with ICS mode" === "\"MachineBlack\"(ִ)ģʽ޷ICSģʽ" "TwoMachines mode does not work with ICS mode" === "\"TwoMachines\"(Զ)ģʽ޷ICSģʽ" "TwoMachines mode requires a chess engine" === "\"TwoMachines\"()ģʽ" "Training mode requires a game file" === "\"Training\"(ѵ)ģʽָһļ" "Error writing to ICS" === "ϢICSʱ" "Error reading from keyboard" === "ȡʱ" "Got end of file from keyboard" === "ȡʱļβ" "Error writing to ICS" === "ϢICSʱ" "Error writing to display" === "Ϣʾʱ" "Error gathering move list: two headers" === "ȡŷʱͷ" "Error gathering move list: nested" === "ȡŷʱǶ״" "Connection closed by ICS" === "ӱICSر" "Error reading from ICS" === "ȡICSϢʱ" "Failed to parse board string:\n\"%s\"" === "޷ַ\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "̫Ҫ\"MAX_MOVES\"±" "Error gathering move list: extra board" === "ȡŷʱ" "Illegal move \"%s\" from ICS" === "ICSŷ\"%s\"" "Couldn't parse move \"%s\" from ICS" === "޷ICSŷ\"%s\"" "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "say ڲ󣬷Ƿ\"moveType\"(ŷ) %d (%d,%d-%d,%d)" "You are playing Black" === "ִ" "You are playing White" === "ִ" "It is White's turn" === "ֵ׷" "It is Black's turn" === "ֵڷ" "Displayed position is not current" === "ʾľ治ǵǰ" "Illegal move" === "ŷ" "End of game" === "ֽ" "Incorrect move" === "ŷ" "Illegal move \"%s\" from %s machine" === "%sŷ\"%s\"" "Forfeit due to illegal move" === "߲ŷ" "%s does not support analysis" === "%s ַ֧" "Illegal move \"%s\" (rejected by %s chess program)" === "ŷ\"%s\" (%sܾܸŷ)" "Failed to start %s chess program %s on %s: %s\n" === "޷%s %s( %s )%s\n" "Hint: %s" === "ʾ %s" "White resigns" === "׷" "Black resigns" === "ڷ" "White mates" === "׷ɱ" "Black mates" === "ڷɱ" "Draw" === "" "Draw agreed" === "Э̺" "Machine accepts your draw offer" === "..." "Machine offers a draw\nSelect Action / Draw to agree" === "\nѡǷ" "%s (only move)" === "%s (Ψһŷ)" "Ambiguous move in ICS output: \"%s\"" === "ICSȷŷ\"%s\"" "Illegal move in ICS output: \"%s\"" === "ICSȷŷ\"%s\"" "Gap in move list" === "ŷϿ" "Game too long; increase MAX_MOVES and recompile" === "̫Ҫ\"MAX_MOVES\"±" "Variant %s not supported by %s" === " %s %s ֧" "Startup failure on '%s'" === "޷'%s'" "Waiting for first chess program" === "ȴһ" "Waiting for second chess program" === "ȴڶ" "Match %s vs. %s: final score %d-%d-%d" === " %s vs. %s: ձȷ %d-%d-%d" "Stalemate" === "ƺ" "Illegal move: %d.%s%s" === "ŷ %d.%s%s" "Ambiguous move: %d.%s%s" === "ȷŷ %d.%s%s" "Can't open \"%s\"" === "޷\"%s\"" "Cannot build game list" === "޷б" "No more games in this message" === "Ϣ" "No game has been loaded yet" === "δ" "Can't back up any further" === "޷ٺ" "Game number out of range" === "Χ" "Can't seek on game file" === "޷ļ" "Game not found in file" === "ļûҵ" "Bad FEN position in file" === "ļеFEN" "No moves in game" === "ûŷ" "No position has been loaded yet" === "δо" "Can't back up any further" === "޷ٺ" "Can't open \"%s\"" === "޷\"%s\"" "Can't seek on position file" === "޷ļ" "Position not found in file" === "ļûŵ" "Bad FEN position in file" === "ļеFEN" "Black to play" === "ֵڷ" "White to play" === "ֵ׷" "Can't open \"%s\"" === "޷\"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === "Ѿ༭\nִ\"ͬһ\"֮" "You have entered too many moves.\nBack up to the correct position and try again." === "˹ŷ\n˻صȷľһ" "Displayed position is not current.\nStep forward to the correct position and try again." === "ʾľ治ǵǰ\nǰǰһ" "You have not made a move yet" === "һҲû߹" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." "No unfinished games" === "No unfinished games" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." "Failed to invoke cmail" === "Failed to invoke cmail" "Waiting for reply from opponent\n" === "Waiting for reply from opponent\n" "Still need to make move for game\n" === "Still need to make move for game\n" "Still need to make moves for both games\n" === "Still need to make moves for both games\n" "Still need to make moves for all %d games\n" === "Still need to make moves for all %d games\n" "Still need to make a move for game %s\n" === "Still need to make a move for game %s\n" "No unfinished games\n" === "No unfinished games\n" "Ready to send mail\n" === "Ready to send mail\n" "Still need to make moves for games %s\n" === "Still need to make moves for games %s\n" "Edit comment" === "༭ע" "Edit comment on %d.%s%s" === "༭ע %d.%s%s" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "ģʽ...\nϢһֱţ˵Ĺַ֧" "It is not White's turn" === "ûֵ׷" "It is not Black's turn" === "ûֵڷ" "Wait until your turn,\nor select Move Now" === "ȴ\nѡ\"\"" "Starting second chess program" === "ڶ" "Training mode off" === "ѵģʽѹر" "Training mode on" === "ѵģʽѴ" "Already at end of game" === "Ѿ" "Warning: You are still playing a game" === "ע⣺ڽ" "Warning: You are still observing a game" === "ע⣺Թ" "Warning: You are still examining a game" === "ע⣺о" "It is Black's turn" === "ֵڷ" "It is White's turn" === "ֵ׷" "That square is occupied" === "ѷ" "Draw agreed" === "Э̺" "There is no pending offer on this move" === "ŷûд" "Both players ran out of time" === "˫ʱ" "Black wins on time" === "׷ʱи" "Your opponent is not out of time" === "ûгʱ" "Both players ran out of time" === "˫ʱ" "White wins on time" === "ڷʱи" "Your opponent is not out of time" === "ûгʱ" "Draw agreed" === "Э̺"1,$g/=== ""/d "Black offers a draw" === "׷" "White offers a draw" === "ڷ" "You must make your move before offering a draw" === "" "Draw agreed" === "Э̺" "Game aborted" === "ж" "You are not examining a game" === "ûз" "You can't revert while pausing" === "ͣʱܸԭ" "Wait until your turn,\nor select Move Now" === "ȴ\nѡ\"\"" "It is your turn" === "ֵ" "Wait until your turn" === "ȴ" "No hint available" === "ûпõʾ" "Error writing to %s chess program" === "Ϣ%sʱ" "Error: %s chess program (%s) exited unexpectedly" === "%s(%s)ͻȻ˳" "Error reading from %s chess program (%s)" === "%s(%s)Ϣʱ" "Analysis (%s)" === "(%s)" "Comment" === "ע" "Comment on %d.%s%s" === "ע %d.%s%s" "Both flags fell" === "˫ʱ" "White's flag fell" === "׷ʱ" "Black wins on time" === "׷ʱи" "Black's flag fell" === "ڷʱ" "White wins on time" === "ڷʱи" "Bad FEN position in clipboard" === "FEN" "No response from ICS" === "ICS δӦ" "You cannot do this while you are playing or observing" === "Թʱܽд˲" "Click in holdings to choose piece" === "ѡֳֵ" END-OF-GAME MESSAGES (should they be translated?) "Xboard adjudication: King destroyed" === "Xboard о" "Xboard adjudication: Bare king" === "Xboard о⽫" "Xboard adjudication: 3rd check" === "Xboard о3ν" "Xboard adjudication: Stalemate" === "Xboard о" "Xboard adjudication: Checkmate" === "Xboard о" "Xboard adjudication: Insufficient mating material" === "Xboard оȡʤ" "Xboard adjudication: Trivial draw" === "Xboard оһ" "XBoard adjudication: repetition draw" === "Xboard оѭ" "Xboard adjudication: perpetual checking" === "Xboard о" "Xboard adjudication: perpetual chasing" === "Xboard о׽" "%Xboard adjudication: perpetual chasing of" === "Xboard о׽" "Xboard adjudication: 50-move rule" === "Xboard о50غк͹" "Draw claim: 50-move rule" === "50غк͹" "Draw claim: 3-fold repetition" === "3ѭ" "Draw claim: insufficient mating material" === "ȡʤ" "Xboard adjudication: long game" === "Xboard оԾֹ" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "Xboardδʶ岽¸ %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "XboardǷ岽¸ %s (%c%c%c%c)%c" "Xboard adjudication" === "Xboard о" "User adjudication" === "ûо" "False win claim: '%s'" === "Ӯʧ" "False draw claim: '%s'" === "ʧ" "xboard exit" === "xboard ˳" xboard-4.8.0/winboard/language/spanish.lng0000644000175000001440000012443512420374633015473 00000000000000## WinBoard 4.5.0 language file ## Spanish/Espaol v1.0 ## Translation by scar Toledo G. ## ## If you revise this, please insert your date, name and description. ## Si usted revisa esto, por favor inserte su fecha, nombre y descripcin. ## ## Aug/24/2010 scar Toledo G. http://nanochess.110mb.com/ ## First beta translation ## Aug/25/2010 scar Toledo G. ## Second beta, enhanced translation. Added notes for translators. ## Nov/29/2010 scar Toledo G. ## Final revision, added new string, adjusted messages for new menu reorganization. ## Notes for translators: (suggested also for lang450.txt) ## o Use ## for comments, find them scattered around this translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. winboard.rc MENUS: "&New Game\tCtrl-N" === "&Nueva partida\tCtrl+N" "New Sh&uffle Game..." === "Nueva partida revuelta..." "New &Variant...\tAlt+Shift+V" === "Nueva variante...\tAlt+Mays+V" "&Load Game...\tCtrl-O" === "&Leer partida...\tCtrl+O" "L&oad Position...\tCtrl+Shift+O" === "Lee&r posicin...\tCtrl+Mays+O" "&Save Game...\tCtrl-S" === "&Guardar partida...\tCtrl+S" "S&ave Position...\tCtrl+Shift+S" === "Guardar po&sicin...\tCtrl+Mays+S" "Save as &Diagram..." === "Guardar &diagrama..." "&Quit" === "&Salir" ## Next six strings not used now. "Load &Next Game\tAlt+PgDn" === "Partida s&iguiente\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "Par&tida previa\tAlt+PgUp" "&Reload Same Game" === "Releer la &misma partida" "Load N&ext Position\tAlt+Shift+PgDn" === "Posicin si&guiente\tAlt+Mays+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Posici&n previa\tAlt+Mays+PgUp" "Reload Sa&me Position" === "Releer la mism&a posicin" "&Copy Game To Clipboard\tCtrl+C" === "&Copiar partida\tCtrl+C" "C&opy Position To Clipboard\tCtrl+Shift+C" === "C&opiar posicin\tAlt+Mays+C" "Copy Game List to Clipboard" === "Copiar lista de &partidas" "&Paste Game From Clipboard\tCtrl+V" === "&Pegar partida\tCtrl+V" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Peg&ar posicin\tAlt+Mays+V" "&Edit Game\tCtrl+E" === "&Editar partida\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "E&ditar posicin\tCtrl+Mays+E" "Edit Ta&gs..." === "Editar c&ircunstancias" "Edit Co&mment..." === "Editar co&mentarios" "Enter &Username..." === "Introducir nombre de &usuario..." "&Revert\tHome" === "&Revertir\tHome" "&Annotate" === "&Anotar" "&Truncate Game\tEnd" === "&Truncar partida\tEnd" "&Backward\tAlt+Left" === "Jugada &anterior\tAlt+Izquierda" "&Forward\tAlt+Right" === "&Siguiente jugada\tAlt+Derecha" "Back to &Start\tAlt+Home" === "&Primera jugada\tAlt+Inicio" "For&ward to End\tAlt+End" === "&Ultima jugada\tAlt+Fin" "Flip &View\tF2" === "&Tablero invertido\tF2" "&Swap Clocks" === "Intercambiar relojes" "Engine &Output\tAlt+Shift+O" === "Mostrar &salida del motor\tAlt+Mays+O" "Evaluation &Graph\tAlt+Shift+E" === "Mostrar &grfica de evaluacin\tAlt+Mays+E" "Game &List\tAlt+Shift+G" === "Mostrar &lista de partidas\tAlt+Mays+G" "Move &History\tAlt+Shift+H" === "Mostrar lista de &jugadas\tAlt+Mays+H" "Open &New Chat Window" === "Abrir ventana de conversacin" "Type In &Move...\tAlt+I" === "T&eclear jugada...\tAlt+I" "&Tags" === "C&ircunstancias" "&Comments" === "&Comentarios" "&Game List Tags..." === "Opciones de lista de &partidas..." "&Board..." === "Opciones del t&ablero..." "&Fonts..." === "Opciones de ti&pografa..." "Machine &White\tCtrl+W" === "El programa juega con &blancas\tCtrl+W" "Machine &Black\tCtrl+B" === "El programa juega con &negras\tCtrl+B" "&Two Machines\tCtrl+T" === "Juegan d&os programas\tCtrl+T" "Machine Both" === "Programa contra si mismo" "&Analysis Mode\tCtrl+A" === "&Anlisis\tCtrl+A" "Analyze &File\tCtrl+F" === "A&nalizar archivo\tCtrl+F" "&Edit Game\tCtrl+E" === "&Editar partida\tCtrl+E" "E&dit Position\tShift+Ctrl+E" === "E&ditar posicin\tCtrl+Mays+E" "Trai&ning" === "Ent&renamiento" "&ICS Client" === "Conectado a un &ICS" "&Machine Match" === "&Torneo de dos programas" "&Pause\tPause" === "&Pausa\tPausa" "&Accept\tF3" === "&Acepto\tF3" "D&ecline\tF4" === "&Rehuso\tF4" "Re&match\tF12" === "Pido &desquite\tF12" "Call &Flag\tF5" === "&Pedir la bandera\tF5" "&Draw\tF6" === "&Tablas\tF6" "Ad&journ\tF7" === "Ap&lazamiento\tF7" "A&bort\tF8" === "A&nulacin\tF8" "&Resign\tF9" === "&Me rindo\tF9" "Stop &Observing\tF10" === "Dejo de obser&var\tF10" "Stop E&xamining\tF11" === "Dejo de e&xaminar\tF11" "&Upload to Examine" === "Enviar para examinar" "Adjudicate to &White" === "Adjudicar a blancas" "Adjudicate to &Black" === "Adjudicar a negras" "Adjudicate &Draw" === "Adjudicar tablas" "Engine #&1 Settings..." === "Configuracin motor #&1..." "Engine #&2 Settings..." === "Configuracin motor #&2..." "Install 1st..." === "Lista de motores #1..." "Install 2nd..." === "Lista de motores #2..." "&Hint..." === "&Dame una pista..." "&Book..." === "Repertorio de &aperturas..." "&Move Now\tCtrl+M" === "&Forzar jugada\tCtrl+M" "&Retract Move\tCtrl+X" === "&Revocar jugada\tCtrl+X" "&Mute all Sounds" === "&Apagar los sonidos" "&General..." === "&Generales..." "&Time Control...\tAlt+Shift+T" === "&Controles de tiempo..." "Common &Engine...\tAlt+Shift+U" === "Para los motores...\tAlt+Mays+U" "Ad&judications...\tAlt+Shift+J" === "Adjudicaciones...\tAlt+Mays+J" "&Load Game...\tAlt+Shift+L" === "Para &leer partida...\tAlt+Mays+L" "&Save Game...\tAlt+Shift+S" === "Para gua&rdar partida...\tAlt+Mays+S" "G&ame List..." === "Lista de &partidas..." "Soun&ds..." === "Soni&do..." "&ICS..." === "&ICS..." "Add ICS..." === "Nueva ICS..." "Comm&unications..." === "Com&unicaciones..." "Save Settings &Now" === "Salvar config. a&hora" "Save Settings on E&xit" === "Salvar config. al &salir del programa" "Help &Contents\tF1" === "&Contenido\tF1" "Help &Index" === "&Indice alfabtico" "How to &Use Help" === "Modo de utilizar la ayuda" "&About WinBoard" === "Acerca de &WinBoard" "White" === "Blancas" "Promote" === "Coronar" "Pawn" === "Pen" "Knight" === "Caballo" "Bishop" === "Alfil" "Rook" === "Torre" "Queen" === "Dama" "King" === "Rey" "Archbishop" === "Arzobispo" "Chancellor" === "Canciller" "Elephant" === "Elefante" "Cannon" === "Can" "Empty Square" === "Vaciar el escaque" "Black" === "Negras" "Demote" === "Degradar" "Clear Board " === "Limpiar el tablero " "Gold" === "Oro" "Silver" === "Plata" "Lance" === "Lanza" "Drop" === "Soltar" "Cop&y and Paste" === "Cop&iar y pegar" "&Copy" === "&Copiar" "&Paste" === "&Pegar" "&Undo" === "&Deshacer" "Cu&t" === "Cor&tar" "&Copy" === "&Copiar" "&Paste" === "&Pegar" "Select &All" === "&Seleccionar todo" DIALOGS: ABOUTBOX "About WinBoard" === "Acerca de WinBoard" "OK" === "Aceptar" "Chessboard for Windows" === "Tablero de ajedrez para Windows" ## Following 3 strings doesn't get translated :( "Copyright 1991 Digital Equipment Corporation" === "(c) Copyright Digital Equipment Corporation 1991" "Enhancements Copyright 1992-2014 Free Software Foundation" === "Mejoras (c) Copyright Free Software Fundation 1992-2010" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "Mejoras (c) Copyright\r\nAlessandro Scotti 2005" ## What happened with H.G.Muller? ## Absolutely needed a link to download the most recent version " " === "Traduccin por scar Toledo G." "WinBoard 0.0.0" === "WinBoard 0.0.0" ABOUTBOX2 "galactic" === "galctico" TIME CONTROL DIALOG "Time Control" === "Control de tiempo" "Conventional chess clock" === "Reloj convencional de ajedrez" "Incremental clock" === "Reloj incremental" "Cancel" === "Cancelar" "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Utilice las flechas del teclado para especificar el tipo de configuracin de reloj, despus oprima Tab para alterar los valores." "Fixed time per move" === "Tiempo fijo por jugada" "Number of moves:" === "Nmero jugadas:" "Within number of minutes:" === "Durante (minutos):" "Initial number of minutes:" === "Nmero inicial de minutos:" "Plus number of seconds per move:" === "Segundos extra por jugada:" "Maximum seconds per move:" === "Mximo de segundos por jugada:" "Time-Odds Factors:" === "Factores de tiempo:" "Engine #1:" === "Motor #1:" "Engine #2:" === "Motor #2:" LOAD OPTIONS DIALOG "Load Game Options" === "Opciones al leer partida" "Load games with automatic stepping" === "Carga partida con avance automtico" "seconds per move" === "segundos por jugada" SAVE OPTIONS DIALOG "Save Game Options" === "Opciones al salvar partida" "Save As: " === "Estilo" "Save games automatically" === "Salvar partidas automtico" "Prompt for filename" === "Pedir nombre" "To file:" === "Archivo:" "PGN" === "PGN" "Old" === "Viejo" "Browse..." === "Ver" "Save out of book info in PGN" === "Incluir en PGN info. al dejar libro de aperturas" 1536 ## Used in old Windows versions (still working?) "Open" === "Abrir" "File &Name:" === "&Nombre:" "&Directories:" === "&Directorios:" "List Files of &Type:" === "Listar de &tipo:" "Dri&ves:" === "&Unidades:" "&Help" === "Ay&uda" "&Index number:" === "N&m. ndice" COMMPORT ## Not tested, I could not access it. "Communication Port Settings" === "Configuracin comunicaciones" "Net&work..." === "&Red..." "&Port:" === "&Puerta:" "Data &Rate:" === "&Velocidad:" "Data &Bits:" === "&Bits:" "P&arity:" === "P&aridad:" "&Stop Bits:" === "Bits pa&rada:" "F&low:" === "F&lujo:" EDIT COMMENT "Edit Comment" === "Editar comentario" "&Clear" === "&Limpiar" "&Edit" === "&Edicin" PROMOTION POPUP "Promotion" === "Coronacin" "&Queen" === "&Dama" "&Rook" === "&Torre" "&Bishop" === "&Alfil" "K&night" === "Ca&ballo" "&King" === "&Rey" "&Cancel" === "&Cancelar" ## This text appears and it is not in lang450.txt (remove comment if added to lang450.txt) "Promote to:" === "Coronar a:" "Promote?" === "Coronar?:" "Chance&llor" === "Canci&ller" "&Archbishop" === "Ar&zobispo" " YES" === " SI" " NO" === " NO" "C&entaur" === "C&entauro" GAME LIST "Game List" === "Lista de juegos" "&Load" === "&Leer" "&Prev" === "&Previo" "&Next" === "&Siguiente" "&Close" === "&Cerrar" "Filter" === "Filtro" EDIT TAGS "Edit Tags" === "Circunstancias" ERROR "ICS Interaction" === "Interaccin ICS" "Dialog" === "Dilogo" "Error" === "Error" "Sorry Charlie" === "Lo siento amigo" COLORIZE "I C S Interaction Colors" === "Colores interaccin I C S" "Interaction Colors" === "Colores interaccin" "Premove" === "Pre-mov." "Alarm" === "Alarma" "Colors" === "Colores" "&Choose Color..." === "&Escoger color..." "&Bold" === "&Negrita" "&Italic" === "&Itlica" "&Underline" === "&Subrayado" "&Strikeout" === "&Tachado" QUESTION ## Next string currently not used "Enter a chess engine command or just type something stupid that will completely screw things up." === "Introduzca una orden para el motor o slo teclee algo tonto que arruinar completamente las cosas." "Question" === "Pregunta" "Enter" === "Entrar" STARTUP DIALOG "WinBoard Startup" === "Inicio de WinBoard" "What would you like to do?" === "Qu le gustara hacer?" "&Play against a chess engine or match two engines" === "&Jugar contra un motor de ajedrez o torneo de dos motores" "&Use an Internet Chess Server" === "&Utilizar un servidor de ajedrez de Internet (ICS)" "Just &view or edit game files" === "Slo &ver o editar archivos de partidas" "Specify Chess &Engines:" === "Especifique &motores de ajedrez:" "Specify Chess &Server:" === "Especifique &servidor de ajedrez:" "&Additional options" === "Opciones extras" INDEX "Type in a move" === "Introduzca una jugada" "Inde&x number:" === "Nm. ndi&ce" SOUND DIALOG "Sounds" === "Sonidos" "&Event:" === "&Evento:" "&No sound" === "&Sin sonido" "&Default beep" === "Bip por &defecto" "&Built-in sound:" === "Sonido &interno" "&WAV file:" === "Archivo &WAV:" "B&rowse..." === "E&xaminar..." "&Play" === "&Reproducir" "&Defaults" === "&Por defecto" GENERAL OPTIONS DIALOG ## Note: finely tuned spaces to align keys at right (add this comment to lang450.txt for commodity) "General Options" === "Opciones generales" "Always on &Top" === "Siempre al &frente" "Always &Queen Ctrl+Shift+Q" === "Siempre &dama Ctrl+Mays+Q" "Animate &Dragging" === "Animar &arrastre" "&Animate Moving Ctrl+Shift+A" === "Animar &movimiento Ctrl+Mays+A" "Auto &Flag Ctrl+Shift+F" === "&Bandera automtica Ctrl+Mays+F" "Auto Flip &View" === "Cambio de &lado automtico" "Auto &Raise Board" === "&Tablero al frente (automtico)" "&Blindfold" === "A &ciegas" "Highlight Dra&gging" === "Iluminar a&rrastre" "Highlight Last &Move" === "Iluminar ltima ju&gada" "Periodic &Updates" === "Act&ualizacin peridica" ## Was wrong in lang450.txt (remove comment if corrected in lang450.txt) "Ponder &Next Move Ctrl+Shift+P" === "Prever &prx.jugada Ctrl+Mays+P" "&Popup Exit Message" === "&Ventana al salir" "Popup Move &Errors" === "Ventana si &error en jugada" "Show Butt&on Bar" === "Mostrar barra de boto&nes" "Show &Coordinates" === "Mostrar coordenada&s" "&Show Thinking" === "Mostrar cog&itaciones" "Test &Legality Ctrl+Shift+L" === "Checar &legalidad Ctrl+Mays+L" "&Hide Thinking Ctrl+Shift+H" === "Ocultar cogitacin Ctrl+Mays+H" "&Info in Move History Ctrl+Shift+I" === "Info. en lista jugadas Ctrl+Mays+I" "&Send Engine Think" === "Enviar cogitaciones del motor" "E&xtended PGN Info Ctrl+Shift+X" === "Info. PGN extendida Ctrl+Mays+X" "Highlight with Arro&w" === "Iluminar con flecha" "Displa&y Logos" === "Mostrar logotipos" "One-Click Move" === "Moviemento de un click" ICS OPTIONS "ICS Options" === "Opciones ICS" "&Auto Comment" === "&Auto-comentario" "Auto &Observe" === "Auto-&Observar" "&Get Move List" === "L&eer lista jugadas" "&Local Line Editing" === "Edicin de lnea &local" "&Quiet Play" === "Jugar en s&ilencio" "&Premove" === "&Moviemento prev." "&White first move" === "1er. mov. &blancas" "&Black first move" === "1er. mov. &negras" "&Sound alarm at" === "&Sonar alarma en" "seconds" === "segundos" "Choose..." === "Escoger..." "Do ¬ colorize messages" === "N&o colorear mensajes" "&Auto Kibitz" === "&Auto Kibitz" "Auto Kibit&z" === "Auto Kibit&z" "See&k Graph" === "&Buscar grfica" "auto-&Refresh" === "auto-&Refresco" "Bckgnd Obser&ve" === "M&irar en el fondo" "&Dual Board" === "Tablero &dual" "One-Click &Move" === "&Moviemento de un click" "Background..." === "Fondo..." "&Defaults..." === "&Por defecto..." "Startup &Chat Boxes:" === "Cajones de pltica:" "General" === "General" BOARD OPTIONS ## (NOTE: AllWhite uses the white pieces for both sides ## FlipBlack plots the black pieces upside down) "Board Options" === "Opciones de tablero" "Defaults" === "Por defecto" "Light Squares" === "Cuadros claros" "Dark Squares" === "Cuadros obscuros" "White Pieces" === "Piezas blancas" "Black Pieces" === "Piezas negras" "Square Highlights" === "Cuadro iluminado" "Premove Highlights" === "Iluminacin pre.mov." "Monochrome" === "Monocromo" "All White" === "Slo blancas" "Flip Black" === "Girar negras" "Size" === "Tamao" BOARD SIZES ## This is a space for imagination (useful note to add to lang450.txt). "&Tiny" === "&Infimo" "T&eeny" === "Dimin&uto" "&Dinky" === "&Pigmeo" "&Petite" === "E&nano" "Sl&im" === "Pequein" "&Small" === "Pe&queo" "Medi&ocre" === "Medio&cre" "&Middling" === "Esca&so" "&Average" === "Ra&zonable" "Mode&rate" === "Mode&rado" "Medi&um" === "&Medio" "Bul&ky" === "Apara&toso" "&Large" === "&Grande" "&Big" === "&Enorme" "&Huge" === "Inmen&so" "&Giant" === "Gigante" "&Colossal" === "Colos&al" "Tita&nic" === "Titnico" FONTS "Fonts" === "Tipografa" "Current Board Size" === "Tamao actual del tablero" "All Board Sizes" === "Todos los tamaos de tablero" "&Revert to Defaults" === "&Volver a por defecto" "Clocks" === "Relojes" "Messages" === "Mensajes" "Coordinates" === "Coordenadas" "Tags" === "Circunstancias" "Comments" === "Comentarios" "I C S Interaction" === "Interaccin ICS" "&Color..." === "&Color..." "Move History, Engine Output" === "Lista jugadas, salida motor" ADJUDICATIONS DIALOG "Adjudications" === "Adjudicaciones" "Ponder Next Move" === "Prever siguente jugada" "Enable and Show Thinking (recommended)" === "Activa y muestra cogitaciones(recomendado)" "Hide Thinking when Playing against Human" === "Ocultar cogitaciones al jugar contra humano" "Periodic Updates (for Analysis Mode)" === "Actualizacin peridica (en anlisis)" "Adjudications in non-ICS games" === "Adjudicaciones en juegos no-ICS" "Adjudicate draw after:" === "Adjudicar mate despus de:" "moves" === "jugadas" "Win/loss adjudication threshold:" === "Lmite para adjudicar juego:" "centipawns" === "centipeones" "&Verify Engine Claims" === "&Verificar avisos del motor" "Detect &Mates" === "Detectar &mates" "Draw if &Insufficient Material" === "Tablas si hay material &insufficiente" "Adjudicate &Trivial Draws" === "Adjudicar tablas &triviales" "Apply" === "Aplicar" "-move rule" === "-jugadas (regla)" "-fold repeats" === "-veces (repeticin)" "Engine #1 Score is Absolute" === "Puntuacin motor #1 es absoluta" "Engine #2 Score is Absolute" === "Puntuacin motor #2 es absoluta" COMMON ENGINE DIALOG "Common Engine Settings" === "Configuracin comn de motor" "Polyglot Directory:" === "Carpeta Polyglot:" "Hash Size (MB):" === "Tamao hash (MB):" "EGTB Path:" === "Carpeta EGTB:" "EGTB Size (MB):" === "Tamao EGTB (MB):" "Use Book:" === "Usar libro:" "Max nr of CPUs:" === "Nmero max. CPUs:" "First has Own Book" === "Primero tiene libro propio" "Second has Own Book" === "Segundo tiene libro propio" "Book Depth:" === "Profundo libro:" "Book Variation:" === "Variacin libro:" "Default Match Games:" === "Partidas torneo p/def" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "Variantes" "Variant" === "Variante" "Board size:" === "Tamao de tablero" "ranks" === "columnas" "files" === "filas" "Holdings with room for:" === "Admitir en mano hasta:" "pieces" === "piezas" "('-1' means defaults for selected variant)" === "('-1' indica valor por defecto para variante seleccionada)" VARIANT NAMES: "&normal" === "&normal" "&FRC" === "" "&wildcastle" === "" "&nocastle" === "" "&losers" === "" "&giveaway" === "" "s&uicide" === "s&uicida" "&3Check" === "" "&twokings" === "" "&atomic" === "&atmico" "cra&zyhouse" === "" "&bughouse" === "" "&Twilight" === "" "&shogi" === "" "su&per" === "" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "c&ilindro" "&fairy" === "" "&makruk" === "" "&gothic" === ">ico" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "&xiangqi" === "" NEW SHUFFLE GAME "New Shuffle Game" === "Nueva partida revuelta" "&Start Position Number:" === "Nm. de pos. inicial:" "Random" === "Aleatorio" GAME-LIST OPTIONS DIALOG "Game List Options" === "Opciones de lista de partidas" "PGN &Tags:" === "&Etiquetas PGN:" "&Up" === "&Arriba" "&Down" === "A&bajo" "Default" === "Por defecto" "Factory" === "De fbrica" "Restore to:" === "Restaurar a" MOVE HISTORY WINDOW "Move History" === "Lista de jugadas" EVALUATION GRAPH "Evaluation Graph" === "Grfica de evaluacin" ENGINE OUTPUT WINDOW "Engine output" === "Salida de motores" "Engine #1" === "Motor #1" "NPS" === "NPS" "Engine #2" === "Motor #2" CHAT BOXES "Chat Window" === "Ventana de pltica" "Chat partner:" === "Quin platica:" "Clear" === "Limpiar" "Send" === "Enviar" winboard.c "&File" === "&Archivo" "&Edit" === "&Editar" "&View" === "&Ver" "&Mode" === "&Modo" "&Action" === "&Partida" "E&ngine" === "Moto&r" "&Step" === "&Jugada" "&Options" === "&Opciones" "&Help" === "Ay&uda" "Font name too long:" === "Nombre tipogrfico muy largo:" "Font point size missing:" === "Falta tamao tipogrfico:" "Can't parse color name %s" === "No se pudo analizar nombre de color %s" "Unrecognized board size value" === "Valor no reconocido de tamao de tablero" "Unrecognized argument" === "Parametro no reconocido" "No value provided for argument" === "No se dio valor para parametro" "Incomplete \\ escape in value for" === "Escape \\ incompleto en valor para" "Failed to open indirection file" === "Falla al abrir archivo de indireccin" "Unrecognized boolean argument value" === "Valor no reconocido para parametro booleano" "Unrecognized argument" === "Parametro no reconocido" "Too many colors" === "Demasiados colores" "&Minimize\tCtrl+F4" === "&Minimizar\tCtrl+F4" "White: %s" === "Blancas: %s" "We only care about the height here" === "Aqu solo importa la altura" "Cannot build game list" === "No se pudo armar lista de partidas" "Load Game from File" === "Leer partida desde archivo" "Load Position from File" === "Leer posicin desde archivo" "Save Game to File" === "Salvar partida a archivo" "Save Position to File" === "Salvar posicin a archivo" "%s does not support analysis" === "%s no admite anlisis" "Analyze Game from File" === "Analizar juego desde archivo" "Unable to activate help" === "No se pudo activar la ayuda" "Send to chess program:" === "Enviar al programa de ajedrez:" "Send to second chess program:" === "Enviar al segundo programa de ajedrez:" "Direct Command" === "Orden directa" "Error loading sound %s" === "Error al cargar sonido %s" "Error playing sound %s" === "Error al ejecutar sonido %s" "File open failed" === "Falla al abrir archivo" "Internal error in file dialog box" === "Error interno en archivo de caja de dilogo" "Option Error" === "Error de opcin" "Choose an option, or cancel to exit" === "Escoja una opcin o cancelar para salir" "Unable to activate help" === "Imposible activar ayuda" "Displayed move is not current" === "La jugada ilustrada no es la actual" "Could not parse move" === "No se pudo analizar la jugada" "%s:\nError code %d" === "%s:\nCdigo de error %d" "Error" === "Error" "Fatal Error" === "Error fatal" "Exiting" === "Saliendo" "%s:\nError code %d" === "%s:\nCdigo de error %d" "Note" === "Nota" "Error writing to chess program" === "Error al escribir al programa de ajedrez" "User" === "Usuario" "Unknown" === "Desconocido" "White" === "Blancas" "Black" === "Negras" "Save Game to File" === "Salvar partida en archivo" "Not implemented" === "No implementado" "Shout Text" === "Texto Shout" "SShout/CShout" === "" "Channel 1 Text" === "Texto canal 1" "Channel Text" === "Texto de canal" "Kibitz Text" === "Texto kibitz" "Tell Text" === "Texto tell" "Challenge Text" === "Texto desafo" "Request Text" === "Texto de pedido" "Seek Text" === "Texto de bsqueda" "Normal Text" === "Texto normal" "None" === "Ninguno" "Pawn" === "Pen" "Knight" === "Caballo" "Bishop" === "Alfil" "Rook" === "Torre" "Queen" === "Dama" "Information" === "Informacin" wclipbrd.c "Unable to convert position to FEN." === "Imposible convertir posicin a FEN." "Unable to copy FEN to clipboard." === "Imposible copiar FEN a portapapeles." "Cannot create temporary file name." === "No se pudo crear nombre de archivo temporal" "Cannot open temporary file." === "No se pudo abrir archivo temporal" "Cannot write to temporary file." === "No se pudo escribir a archivo temporal" "Cannot reopen temporary file." === "No se pudo reabrir archivo temporal" "Cannot determine size of file." === "No se pudo determinar el tamao del archivo" "Cannot allocate clipboard buffer." === "No se pudo asignar buffer para el portapapeles" "Cannot read from temporary file." === "No se pudo leer de archivo temporal" "Error reading from temporary file." === "Error al leer de archivo temporal" "Cannot copy text to clipboard" === "No se pudo copiar texto al portapapeles" "Unable to allocate memory for clipboard." === "Imposible asignar memoria para el portapapeles" "Unable to lock clipboard memory." === "Imposible proteger memoria del portapapeles" "Cannot unlock clipboard memory." === "Imposible desproteger memoria del portapapeles" "Cannot open clipboard." === "No se puede abrir el portapapeles" "Cannot empty clipboard." === "No se puede vaciar el portapapeles" "Cannot copy text to clipboard." === "No se puede copiar texto al portapapeles" "Cannot close clipboard." === "No se puede cerrar el portapapeles" "Unable to paste FEN from clipboard." === "Imposible pegar FEN desde el portapapeles." "Unable to create temporary file." === "Imposible crear archivo temporal." "Error writing to temporary file." === "Error al escribir a archivo temporal." "Unable to open clipboard." === "Imposible abrir el portapapeles" "No text in clipboard." === "No hay texto en el portapapeles." "Unable to lock clipboard memory." === "Imposible proteger memora del portapapeles" "Unable to allocate memory for text string." === "Imposible asignar memoria para cadena de texto" "Unable to unlock clipboard memory." === "Imposible desproteger memoria del portapapeles" "Unable to close clipboard." === "Imposible cerrar portapapeles" woptions.c ## "Move" === "Jugada" ## "Bell" === "Campana" ## "ICS Alarm" === "Alarma ICS" ## "ICS Win" === "Gana ICS" ## "ICS Loss" === "Pierde ICS" ## "ICS Draw" === "Empate ICS" ## "ICS Unfinished" === "Sin terminar ICS" ## "Shout" === "" ## "SShout/CShout" === "" ## "Channel 1" === "Canal 1" ## "Channel" === "Canal" ## "Kibitz" === "Kibitz" ## "Tell" === "Decir" ## "Challenge" === "Desafiar" ## "Request" === "Pedir" ## "Seek" === "Buscar" "Browse for Sound File" === "Buscar archivo de audio" "Can't parse com port settings" === "No se puede leer configuracin de puerta COM" "Option Error" === "Error de opcin" "Invalid data rate" === "Velocidad incorrecta" "Option Error" === "Error de opcin" "Failed to set comm port state;\r\ninvalid options?" === "Falla al poner estado de puerta de comunicaciones;\r\nopciones invlidas?" "Failed to set comm port state" === "Falla al poner estado de puerta de comunicaciones" "Invalid load game step rate" === "Velocidad de paso invlida para leer partida" "Invalid save game file name" === "Nombre de archivo invlido para salvar partida" "Browse for Auto Save File" === "Buscar el archivo de salvado automtico" "Invalid moves per time control" === "Control invlido de jugadas por tiempo" "Invalid minutes per time control" === "Control invlido de minutos por tiempo" "Invalid increment" === "Incremento invlido" "Invalid initial time" === "Tiempo inicial invlido" "Changing time control during a game is not implemented" === "No est implementado cambiar el control de tiempo durante un juego" "Variant %s not supported by %s" === "La variante %s no es admitida por %s" "Warning: second engine (%s) does not support this!" === "Advertencia: el segundo motor (%s) no admite esto!" "Invalid ICS Alarm Time" === "Tiempo de alarma ICS invlido" "Invalid max time per move" === "Tiempo mximo por jugada es invlido" "Invalid time-odds factor" === "Factor de tiempo es invlido" "Choose Folder" === "Escoja carpeta" "Choose Book" === "Escoja libro" "Choose Polyglot Directory" === "Escoja directorio Polyglot" "Choose EGTB Directory:" === "Escoja directorio EGTB" "Polyglot was not found in the specified folder!" === "Polyglot no fue encontrado en la carpeta especificada!" wgamelist.c "No game selected" === "Ninguna partida seleccionada" "Can't go forward any further" === "Ya no se puede ir ms adelante" "Can't back up any further" === "Ya no se puede ir ms atrs" "No game list" === "No hay lista de partidas" "Game List" === "Lista de partidas" "Game list not loaded or empty" === "Lista de partidas no cargada o vaca" "%s - %d/%d games" === "%s - %d/%d partidas" wedittags.c "Edit Tags" === "Editar circunstancias" "Tags" === "Etiquetas" "Error replacing tags." === "Error al reemplazar etiquetas" wsettings.c "%s Engine Settings (%s)" === "Config. motor %s (%s)" "OK" === "Aceptar" "Cancel" === "Cancelar" backend.c "bad timeControl option %s" === "opcin timeControl incorrecta %s" "bad searchTime option %s" === "opcin searchTime incorrecta %s" ## Note that translation cannot be "primero" because it is for a composed string, check ahead "first" === "primer" "second" === "segundo" "protocol version %d not supported" === "versin %d del protocolo no es admitida" "Variant %s supported only in ICS mode" === "La variante %s solo se admite en modo ICS" "Unknown variant name %s" === "Nombre de variante desconocido %s" "Starting chess program" === "Iniciando programa de ajedrez" "Could not open comm port %s" === "No se pudo abrir la puerta de comunicaciones %s" "Could not connect to host %s, port %s" === "No se pudo conectar al servidor %s, puerta %s" "Unknown initialMode %s" === "Modo inicial desconocido %s" "Can't have a match with no chess programs" === "No se puede tener una partida sin programas de ajedrez" "Bad game file" === "archivo de partidas incorrecto" "Bad position file" === "archivo de posicin incorrecto" "AnalyzeFile mode requires a game file" === "El modo anlisis de archivo requiere un archivo de partida" "Analysis mode requires a chess engine" === "El modo de anlisis requiere un motor de ajedrez" "Analysis mode does not work with ICS mode" === "El modo de anlisis no funciona con el modo ICS" "MachineWhite mode requires a chess engine" === "El modo de mquina con blancas requiere un motor de ajedrez" "MachineWhite mode does not work with ICS mode" === "El modo de mquina con blancas no funciona con el modo ICS" "MachineBlack mode requires a chess engine" === "El modo de mquina con negras requiere un motor de ajedrez" "MachineBlack mode does not work with ICS mode" === "El modo de mquina con negras no funciona con el modo ICS" "TwoMachines mode does not work with ICS mode" === "El modo de dos mquinas no funciona con el modo ICS" "TwoMachines mode requires a chess engine" === "El modo de dos mquinas requiere un motor de ajedrez" "Training mode requires a game file" === "El modo de entrenamiento requiere un archivo de partidas" "Error writing to ICS" === "Error al escribir a ICS" "Error reading from keyboard" === "Error al leer el teclado" "Got end of file from keyboard" === "Se obtuvo del teclado un fin de archivo" "Error writing to ICS" === "Error al escribir a ICS" "Error writing to display" === "Error al escribir a la pantalla" "Error gathering move list: two headers" === "Error al recolectar lista de jugadas: dos encabezados" "Error gathering move list: nested" === "Error al recolectar lista de jugadas: anidado" "Connection closed by ICS" === "Conexin cerrada por ICS" "Error reading from ICS" === "Error al leer de ICS" "Failed to parse board string:\n\"%s\"" === "Falla al analizar cadena de tablero:\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "Juego demasiado largo; incremente MAX_MOVES y recompile" "Error gathering move list: extra board" === "Error al recolectar lista de jugadas: tablero extra" "Illegal move \"%s\" from ICS" === "Jugada ilegal \"%s\" de ICS" "Couldn't parse move \"%s\" from ICS" === "No se pudo analizar jugada \"%s\" de ICS" ## 'say' must not be translated (add this comment to lang450.txt) "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "say Error interno; moveType incorrecto %d (%d,%d-%d,%d)" "You are playing Black" === "Usted juega negras" "You are playing White" === "Usted juega blancas" "It is White's turn" === "Turno de las blancas" "It is Black's turn" === "Turno de las negras" "Displayed position is not current" === "La posicin mostrada no es la actual" "Illegal move" === "Jugada ilegal" "End of game" === "Fin del juego" "Incorrect move" === "Jugada incorrecta" ## Second %s is translated 'first' or 'second'. (add this comment to lang450.txt) "Illegal move \"%s\" from %s machine" === "Jugada ilegal \"%s\" del %s motor" "Forfeit due to illegal move" === "Detenido por jugada ilegal" "%s does not support analysis" === "%s no admite anlisis" ## Second %s is translated 'first' or 'second' (add this comment to lang450.txt) "Illegal move \"%s\" (rejected by %s chess program)" === "Jugada ilegal \"%s\" (rechazada por %s programa de ajedrez)" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Failed to start %s chess program %s on %s: %s\n" === "Falla al iniciar %s programa de ajedrez %s en %s: %s\n" "Hint: %s" === "Sugerencia: %s" "Machine accepts your draw offer" === "La mquina acepta su oferta de tablas" "Machine offers a draw\nSelect Action / Draw to agree" === "La mquina ofrece tablas\nSeleccione accin / Tablas para acordar" "%s (only move)" === "%s (jugada nica)" "Ambiguous move in ICS output: \"%s\"" === "Jugada ambigua en salida ICS: \"%s\"" "Illegal move in ICS output: \"%s\"" === "Jugada ilegal en salida ICS: \"%s\"" "Gap in move list" === "Hueco en lista de jugadas" "Game too long; increase MAX_MOVES and recompile" === "Juego demasiado largo; incremente MAX_MOVES y recompile" "Variant %s not supported by %s" === "Variante %s no es admitida por %s" "Startup failure on '%s'" === "Falla al iniciar '%s'" "Waiting for first chess program" === "Esperando al primer programa de ajedrez" "Waiting for second chess program" === "Esperando al segundo programa de ajedrez" "Match %s vs. %s: final score %d-%d-%d" === "Partida %s vs. %s: puntuacin final %d-%d-%d" "Stalemate" === "Mate ahogado" "Illegal move: %d.%s%s" === "Jugada ilegal: %d.%s%s" "Ambiguous move: %d.%s%s" === "Jugada ambigua: %d.%s%s" "Can't open \"%s\"" === "No se puede abrir \"%s\"" "Cannot build game list" === "No se puede armar lista de partidas" "No more games in this message" === "No hay ms partidas en este mensaje" "No game has been loaded yet" === "Ninguna partida se ha cargado an" "Can't back up any further" === "No se puede ir ms atrs" "Game number out of range" === "Nmero de partida fuera de rango" "Can't seek on game file" === "No se puede buscar en archivo de partidas" "Game not found in file" === "Partida no hallada en archivo" "Bad FEN position in file" === "Posicin FEN incorrecta en archivo" "No moves in game" === "Ninguna jugada en la partida" "No position has been loaded yet" === "Ninguna posicin se ha cargado an" "Can't back up any further" === "No se puede ir ms atrs" "Can't open \"%s\"" === "No se puede abrir \"%s\"" "Can't seek on position file" === "No se puede buscar en archivo de partidas" "Position not found in file" === "No se hall la posicin en el archivo" "Bad FEN position in file" === "Posicin FEN incorrecta en archivo" "Black to play" === "Las negras juegan" "White to play" === "Las blancas juegan" "Can't open \"%s\"" === "No se puede abrir \"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === "Usted edit la lista de jugadas.\nUtilice Recargar misma partida y realice su jugada de nuevo." "You have entered too many moves.\nBack up to the correct position and try again." === "Usted entr demasiados jugadas.\nRetroceda a la posicin correcta y vuelva a intentar" "Displayed position is not current.\nStep forward to the correct position and try again." === "La posicin ilustrada no es la actual.\nAdelante a la posicin correcta y vuelva a intentar." "You have not made a move yet" === "Usted todava no hace una jugada" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "El mensaje cmail no est cargado.\nUtilice Reload CMail Message y realice su jugada de nuevo." "No unfinished games" === "No hay partidas sin terminar" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "Usted ya envi una jugada.\nEspere hasta que llegue una jugada de su oponente.\nPara reenviar la misma jugada, teclee\n\"cmail -remail -game %s\"\nen la lnea de comandos." "Failed to invoke cmail" === "Falla al invocar cmail" "Waiting for reply from opponent\n" === "Esperando respuesta del oponente\n" "Still need to make move for game\n" === "Todava necesita hacer una jugada para la partida\n" "Still need to make moves for both games\n" === "Todava necesita hacer jugadas para ambas partidas\n" "Still need to make moves for all %d games\n" === "Todava necesita hacer jugadas para las %d partidas\n" "Still need to make a move for game %s\n" === "Todava necesita hacer una jugada para la partida %s\n" "No unfinished games\n" === "No hay juegos sin terminar\n" "Ready to send mail\n" === "Listo para enviar correo\n" "Still need to make moves for games %s\n" === "Todava necesita hacer jugadas para las partidas %s\n" "Edit comment" === "Editar comentario" "Edit comment on %d.%s%s" === "Editar comentario en %d.%s%s" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "Comenzando modo de anlisis...\nSi este mensaje permanece, su programa de ajedrez no admite anlisis." "It is not White's turn" === "No es turno de las blancas" "It is not Black's turn" === "No es turno de las negras" "Wait until your turn,\nor select Move Now" === "Espere su turno,\no seleccione Forzar Jugada" "Starting second chess program" === "Comenzado el segundo programa de ajedrez" "Training mode off" === "Modo de entrenamiento apagado" "Training mode on" === "Modo de entrenamiento activo" "Already at end of game" === "Ya se encuentra al final de la partida" "Warning: You are still playing a game" === "Advertencia: Usted todava est jugando una partida" "Warning: You are still observing a game" === "Advertencia: Usted todava est observando una partida" "Warning: You are still examining a game" === "Advertencia: Usted todava est examinando una partida" "It is Black's turn" === "Es turno de las negras" "It is White's turn" === "Es turno de las blancas" "That square is occupied" === "Ese cuadro est ocupado" "There is no pending offer on this move" === "No hay oferta pendiente para esta jugada" "Your opponent is not out of time" === "Su oponente no est fuera de tiempo" "Black offers a draw" === "Las negras ofrecen tablas" "White offers a draw" === "Las blancas ofrecen tablas" "You must make your move before offering a draw" === "Debe hacer su jugada antes de ofrecer tablas" "You are not examining a game" === "Usted no est examinando una partida" "You can't revert while pausing" === "No puede revertir si est en pausa" "Wait until your turn,\nor select Move Now" === "Espere su turno,\no seleccione Forzar Jugada" "It is your turn" === "Es su turno" "Wait until your turn" === "Espero su turno" "No hint available" === "No hay sugerencia disponible" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error writing to %s chess program" === "Error al escribir al %s programa de ajedrez" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error: %s chess program (%s) exited unexpectedly" === "Error: el %s programa de ajedrez (%s) termin inesperadamente" ## First %s is translated 'first' or 'second' (add this comment to lang450.txt) "Error reading from %s chess program (%s)" === "Error al leer del %s programa de ajedrez (%s)" "Analysis (%s)" === "Anlisis (%s)" "Comment" === "Comentario" "Comment on %d.%s%s" === "Comentario de %d.%s%s" "Both flags fell" === "Ambas banderas cayeron" "White's flag fell" === "La bandera blanca cay" "Black's flag fell" === "La bandera negra cay" "Bad FEN position in clipboard" === "Posicin FEN incorrecta en portapapeles" "No response from ICS" === "No hay respuesta de ICS" "You cannot do this while you are playing or observing" === "Usted no puede hacer esto mientras juega u observa" "Click in holdings to choose piece" === "Haga click para escoger pieza" END-OF-GAME MESSAGES "Game aborted" === "Partida abortada" "White wins on time" === "Las blancas ganan por tiempo" "Black wins on time" === "Las negras ganan por tiempo" "Both players ran out of time" === "Ambos jugadores se quedaron sin tiempo" "White resigns" === "Las blancas se resignan" "Black resigns" === "Las negras se resignan" "White mates" === "Las blancas dan mate" "Black mates" === "Las negras dan mate" "Draw" === "Tablas" "Draw agreed" === "Tablas acordadas" "Xboard adjudication: King destroyed" === "XBoard adjudica: Rey destruido" "Xboard adjudication: Bare king" === "XBoard adjudica: Rey solitario" "Xboard adjudication: 3rd check" === "XBoard adjudica: 3er. jaque" "Xboard adjudication: Stalemate" === "XBoard adjudica: Mate ahogado" "Xboard adjudication: Checkmate" === "XBoard adjudica: Jaquemate" "Xboard adjudication: Insufficient mating material" === "XBoard adjudica: Material insuficiente para dar mate" "Xboard adjudication: Trivial draw" === "XBoard adjudica: Tablas triviales" "XBoard adjudication: repetition draw" === "XBoard adjudica: Tablas por repeticin" "Xboard adjudication: perpetual checking" === "XBoard adjudica: Jaque perpetuo" "Xboard adjudication: perpetual chasing" === "XBoard adjudica: Persecucin perpetua" "%Xboard adjudication: perpetual chasing of" === "XBoard adjudica: Persecucin perpetua" "Xboard adjudication: 50-move rule" === "XBoard adjudica: regla de las 50 jugadas" "Draw claim: 50-move rule" === "Pide tablas: regla de las 50 jugadas" "Draw claim: 3-fold repetition" === "Pide tablas: 3 repeticiones de posicin" "Draw claim: insufficient mating material" === "Pide tablas: material insuficiente para dar mate" "Xboard adjudication: long game" === "XBoard adjudica: juego largo" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "XBoard: Perdido por jugada invlida: %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "XBoard: Perdido por jugada ilegal: %s (%c%c%c%c)%c" "Xboard adjudication" === "XBoard adjudica" "User adjudication" === "El usuario adjudica" "False win claim: '%s'" === "Falso aviso de ganar: '%s'" "False draw claim: '%s'" === "Falso aviso de tablas: '%s'" "xboard exit" === "XBoard termina" ## One forgetted string (remove comment if added to lang450.txt) "Type in your name" === "Introduzca su nombre" "You can only start a match from the initial position" === "Slo se puede iniciar un torneo desde la posicin inicial" xboard-4.8.0/winboard/language/nederlands.lng0000644000175000001440000015162412420374633016145 00000000000000## WinBoard language file ## ## Dutch / Nederlands ## v1.2 ## ## Translation by H.G.Muller (July 19, 2011) ## Vertaald door H.G.Muller (19 juli 2011) ## http://www.open-aurec.com/wbforum ## 3-oct-2011. H.G.Muller. Added a few missing translations. ## 7-oct-2011. H.G.Muller. Redid Load Options dialog, new Tournament dialog strings ## 10-feb-2012. H.G.Muller. Added some strings in Load Engine, Tournament and Board dialogs ## 1-feb-2010. H.G.Muller. Added new strings for version 4.7.0 ## ## If you revise this, please insert your date, name and description. ## AUB uw naam en datum hierboven bijschrijven als u dit bestand bijwerkt ## winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "&New Game\tCtrl-N" === "&Nieuwe partij\tCtrl-N" "New Sh&uffle Game..." === "Openingsstelling Sch&udden..." "New &Variant...\tAlt+Shift+V" === "Nieuwe Schaak&variant...\tAlt+Shift+V" "&Load Game...\tCtrl-O" === "Partij &Inlezen...\tCtrl-O" "&Save Game...\tCtrl-S" === "Partij &Opslaan...\tCtrl-S" "L&oad Position...\tCtrl+Shift+O" === "Stelling In&lezen...\tCtrl+Shift+O" "S&ave Position...\tCtrl+Shift+S" === "Stelling Op&slaan...\tCtrl+Shift+S" "Save as &Diagram..." === "Opslaan als &Diagram" "&Quit" === "&Afsluiten" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === "" "Load &Previous Game\tAlt+PgUp" === "" "&Reload Same Game" === "" "Load N&ext Position\tAlt+Shift+PgDn" === "Vol&gende stelling\tAlt+Shift+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Vo&rige Stelling\tAlt+Shift+PgUp" "Reload Sa&me Position" === "" "&Copy Game To Clipboard\tCtrl+C" === "Partij &Kopiren\tCtrl+C" "C&opy Position To Clipboard\tCtrl+Shift+C" === "Stelling K&opiren\tCtrl+Shift+C" "Copy Game List to Clipboard" === "Partijenover&zicht Kopiren" "&Paste Game From Clipboard\tCtrl+V" === "Partij &Plakken\tCtrl+V" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Stelling P&lakken\tCtrl+Shift+V" "&Edit Game\tCtrl+E" === "Partij &Bewerken\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "Stelling B&ewerken\tCtrl+Shift+E" "Edit Ta&gs..." === "P G N &Titels Bewerken..." "Edit Co&mment..." === "&Commentaar Bewerken..." "Enter &Username..." === "Gebruikers&naam Invoeren..." "&Revert\tHome" === "&Herstel Vorige Variant" "&Annotate" === "Becommentarier met &Variant" "&Truncate Game\tEnd" === "Partij &Afkappen\tEnd" "&Backward\tAlt+Left" === "Stap Te&rug\tAlt+Left" "&Forward\tAlt+Right" === "Stap &Vooruit\tAlt+Right" "Back to &Start\tAlt+Home" === "Naar Be&gin\tAlt+Home" "For&ward to End\tAlt+End" === "Naar Ein&d\tAlt+End" "Flip &View\tF2" === "Bord &Omdraaien\tF2" "&Swap Clocks" === "&Klokken Verwisselen" "Engine &Output\tAlt+Shift+O" === "O&verwogen Zetten\tAlt+Shift+O" "Move &History\tAlt+Shift+H" === "&Zettenlijst\tAlt+Shift+H" "Evaluation &Graph\tAlt+Shift+E" === "&Scoregrafiek\tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "&Partijenoverzicht\tAlt+Shift+G" "Open &New Chat Window" === "Open &Nieuw Kwebbelvenster" "Type In &Move...\tAlt+I" === "Zet &Intypen...\tAlt+I" "&Tags" === "P G N &Titels" "&Comments" === "&Commentaar" "&Game List Tags..." === "Partijenove&rzicht titels..." "&Board..." === "Schaak&bord..." "&Fonts..." === "&Lettertypen..." "Machine &White\tCtrl+W" === "Computer &Wit\tCtrl+W" "Machine &Black\tCtrl+B" === "Computer &Zwart\tCtrl+B" "&Two Machines\tCtrl+T" === "&Twee Programma's\tCtrl+T" "Machine Both" === "" "&Analysis Mode\tCtrl+A" === "&Analyseren\tCtrl+A" "Analyze &File\tCtrl+F" === "Bestan&d Analyseren\tCtrl+F" "&Edit Game\tCtrl+E" === "Partij &Bewerken\tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "Stelling B&ewerken\tCtrl+Shift+E" "Trai&ning" === "T&raining" "&ICS Client" === "&Internet Verbinding" "&Machine Match" === "&Computer Tweekamp" "&Pause\tPause" === "&Pauze\tPause" "&Accept\tF3" === "&Accepteer Uitdaging\tF3" "D&ecline\tF4" === "&Uitdaging afwijzen\tF4" "Re&match\tF12" === "&Opnieuw Uitdagen\tF12" "Call &Flag\tF5" === "&Vlag Gevallen\tF5" "&Draw\tF6" === "&Remise Aanbieden\tF6" "Ad&journ\tF7" === "A&fbreken\tF7" "A&bort\tF8" === "&Beindigen\tF8" "&Resign\tF9" === "&Geef Op\tF9" "Stop &Observing\tF10" === "&Stop met Toekijken\tF10" "Stop E&xamining\tF11" === "Stop met Anal&yseren\tF11" "&Upload to Examine" === "&Partij Overzenden" "Adjudicate to &White" === "Arbitreer Winst &Wit" "Adjudicate to &Black" === "Arbitreer Winst &Zwart" "Adjudicate &Draw" === "Arbitreer Re&mise" "Install 1st..." === "Installeer &eerste" "Install 2nd..." === "Installeer t&weede" "Engine #&1 Settings..." === "Programma #&1 Instellingen" "Engine #&2 Settings..." === "Programma #&2 Instellingen" "&Hint..." === "&Hint" "&Book..." === "&Boekzetten" "&Move Now\tCtrl+M" === "&Zet Onmiddelijk" "&Retract Move\tCtrl+X" === "Zet &Terugnemen" "&Mute all Sounds" === "Geluid &Uit" "&General..." === "&Algemeen..." "&Time Control...\tAlt+Shift+T" === "Speel&duur...\tAlt+Shift+T" "Common &Engine...\tAlt+Shift+U" === "&Globale Engine...\tAlt+Shift+U" "Ad&judications...\tAlt+Shift+J" === "Ar&bitrage...\tAlt+Shift+J" "&Load Game...\tAlt+Shift+L" === "&Inlees...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "&Opslag...\tAlt+Shift+S" "G&ame List..." === "&Partijenoverzicht..." "Soun&ds..." === "Ge&luiden..." "&ICS..." === "Internet &Schaakdiensten" "Add ICS..." === "Internet Schaakdienst &Toevoegen" "Comm&unications..." === "&Com-poort Instellingen..." "Save Settings &Now" === "Instellingen &Nu Opslaan" "Save Settings on E&xit" === "Inste&llingen Opslaan bij Afsluiten" "Help &Contents\tF1" === "&Help Inhoud\tF1" "Help &Index" === "Help Inde&x" "How to &Use Help" === "Help &Gebruiken" "&About WinBoard" === "WinBoard &Info" "White" === "Wit" "Promote" === "Promoveer" "Pawn" === "Pion" "Knight" === "Paard" "Bishop" === "Loper" "Rook" === "Toren" "Queen" === "Dame" "King" === "Koning" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "Aartsbischop" "Chancellor" === "Kanselier" ## Next 2 Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === "Olifant" "Cannon" === "Kanon" "Empty Square" === "Leeg Veld" "Black" === "Zwart" "Demote" === "Degradeer" "Clear Board " === "Leeg Bord" ## Next 3: Shogi pieces. "Gold" === "Goud" "Silver" === "Zilver" "Lance" === "Lans" "Drop" === "Inzetten" "Cop&y and Paste" === "Kopier en Plak" "&Copy" === "Kopier" "&Paste" === "Plak" "&Undo" === "Ongedaan Maken" "Cu&t" === "Knippen" "&Copy" === "Kopiren" "&Paste" === "Plakken" "Select &All" === "Alles Selecteren" DIALOGS: ABOUTBOX ## Pehaps copyright notices best left untranslated? "About WinBoard" === "Info" "OK" === "OK" "Chessboard for Windows" === "Schaakbord voor Windows" "Copyright 1991 Digital Equipment Corporation" === "" "Enhancements Copyright 1992-2014 Free Software Foundation" === "" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccin por scar Toledo G.". " " === "Nederlandse vertaling: H.G.Muller" "WinBoard 0.0.0" === "" ABOUTBOX2 ## Weird, it is needed? [Normally not. It is a built-in 'Easter Egg' joke.] "galactic" === "" TIME CONTROL DIALOG "Time Control" === "Speelduur Instellen" "Conventional chess clock" === "Klassieke Schaakklok" "Incremental clock" === "Incrementele Klok" "Cancel" === "Annuleren" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Gebruik pijltjestoetsen om kloktype te kiezen, en dan de tabulatortoets om de waarden te veranderen" "Fixed time per move" === "Gongschaak" "Number of moves:" === "Aantal zetten:" "Within number of minutes:" === "In aantal minuten:" "Initial number of minutes:" === "Aanvangstijd (min):" "Plus number of seconds per move:" === "Plus aantal seconden per zet:" "Maximum seconds per move:" === "Maximum seconden per zet" "Time-Odds Factors:" === "Tijdvoorgift Factoren:" "Engine #1:" === "Schaakprog 1:" "Engine #2:" === "Schaakprog 2:" LOAD OPTIONS DIALOG "Load Game Options" === "Opties voor Inlezen Partijen" "Load games with &automatic stepping" === "Stap &automatisch door partij" "&seconds per move" === "&seconden per zet" "when filtering game list on position, use thresholds:" === "Gebruikte drempels bij zoeken stelling:" "Search Mode: " === "Zoekmethode:" "Match exact &position" === "Alleen e&xacte stelling" "Match if position is s&ubset" === "M&ogelijk met extra materiaal" "Match material with e&xact pawn structure" === "Zelfde materiaal, met exacte &pion opstelling" "Match &material" === "Zelfde &materiaal" "Material &range (upper board-half is optional)" === "Materiaal&interval (bovenste bordhelft optioneel)" "Material &difference (optional material balanced)" === "Materiaal&verschil (optioneel deel evenwichtig)" "Also match reversed &colors" === "Accepteer ook verwisselde &kleuren" "Also match &left-right mirror image" === "Accepteer &links-rechts spiegeling" "minimum Elo for &best player" === "minimum Elo &beste speler" "minimum Elo for &weakest players" === "minimum Elo &zwakste speler" "or later &year" === "of een later &jaar" "co&nsecutive positions" === "opee&nvolgende stellingen" SAVE OPTIONS DIALOG "Save Game Options" === "Opties voor Opslaan Partijen" "Save As: " === "Opslaan als:" "Save games automatically" === "Sla partijen automatisch op" "Prompt for filename" === "Vraag telkens om bestandsnaam" "To file:" === "Op bestand:" "PGN" === "P G N" "Old" === "Oud formaat" "Browse..." === "Bladeren..." "Save out of book info in PGN" === "Uit-boek info opslaan in P G N" 1536 ## This dialog is only used in some older Windows versions, so you might not be ableto test it. "Open" === "Open" "File &Name:" === "Bestandsnaam:" "&Directories:" === "Map" "List Files of &Type:" === "List van bestandstypen" "Dri&ves:" === "Schijf" "&Help" === "Help" "&Index number:" === "Index nummer" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === "Communicatiepoort Instellingen" "Net&work..." === "Netwerk" "&Port:" === "Poort" "Data &Rate:" === "Data Snelheid" "Data &Bits:" === "Data Bits" "P&arity:" === "Pariteit" "&Stop Bits:" === "Stop Bits" "F&low:" === "Vloed" EDIT COMMENT "Edit Comment" === "Commentaar Bewerken" "&Clear" === "Wissen" PROMOTION POPUP "Promote to:" === "Promoveer tot:" ## next used in Shogi as promotion-popup header "Promote?" === "Promoveren?" "Promotion" === "Promotie" "&Queen" === "&Dame" "&Rook" === "&Toren" "&Bishop" === "&Loper" "K&night" === "&Paard" "&King" === "&Koning" "&Cancel" === "&Annuleren" "Chance&llor" === "Kan&selier" "&Archbishop" === "Aarts&bischop" "YES" === "&JA" "NO" === "&NEE" "C&entaur" === "&Centaur" GAME LIST "Game List" === "Partijenoverzicht" "&Load" === "&Inlezen" "&Prev" === "Vo&rige" "&Next" === "&Volgende" "&Close" === "&Sluiten" "Filter" === "&Filter" EDIT TAGS "Edit Tags" === "P G N Titels Bewerken" ERROR "ICS Interaction" === "ICS Interactie" "Dialog" === "Dialoog" "Error" === "Fout" ## I don't think the next will really appear ever. "Sorry Charlie" === "" COLORIZE "I C S Interaction Colors" === "I C S Interactie Kleuren" "Interaction Colors" === "Interactie Kleuren" "Premove" === "Voor&zet" "Alarm" === "Tijdnood Alarm" "Colors" === "Kleuren" "&Choose Color..." === "&Kies Kleur..." "&Bold" === "&Vet" "&Italic" === "&Cursief" "&Underline" === "&Onderstreep" "&Strikeout" === "&Doorstreep" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === "" "Question" === "Vraag" "Enter" === "" STARTUP DIALOG "WinBoard Startup" === "Opstarten WinBoard" "What would you like to do?" === "Waarvoor wilt u WinBoard gebruiken?" "&Play against a chess engine or match two engines" === "&Spelen tegen de computer, of twee programma's tegen elkaar" "&Use an Internet Chess Server" === "Een &Internet Schaakdienst gebruiken" "Just &view or edit game files" === "&Alleen partijen uit bestand bekijken of bewerken" "Specify Chess &Engines:" === "Specificeer Schaak&programma's" "Specify Chess &Server:" === "Specificeer Internet Schaak&dienst" "&Additional options" === "&Overige opties" INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === "Inde&x nummer" MOVE TYPE-IN "Type in a move" === "Type een zet" USER-NAME TYPE-IN "Type in your name" === "Typ uw naam" SOUND DIALOG "Sounds" === "Geluid" "&Event:" === "&Gebeurtenis" "&No sound" === "&Stilte" "&Default beep" === "Standaard &piepje" "&Built-in sound:" === "&Ingebouwd geluid" "&WAV file:" === "&WAV bestand:" "B&rowse..." === "&Bladeren..." "&Play" === "&Afspelen" "&Defaults" === "Stan&daard" GENERAL OPTIONS DIALOG ## pleace keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === "Algemene Instellingen" "Always on &Top" === "Altijd &Voorgrond" "Always &Queen Ctrl+Shift+Q" === "Alti&jd Dame Ctrl+Shift+Q" "Animate &Dragging" === "&Sleep Stukken" "&Animate Moving Ctrl+Shift+A" === "Sch&uif Stukken Ctrl+Shift+A" "Auto &Flag Ctrl+Shift+F" === "&Automatisch Vlag Claimen Ctrl+Shift+F" "Auto Flip &View" === "Automatische Bord &Orintatie" "Auto &Raise Board" === "Automatisch naar Voorgrond" "&Blindfold" === "&Blind Schaken" "Highlight Dra&gging" === "Toon &Doelveld(en)" "Highlight Last &Move" === "Acce&ntueer Laatste Zet" "Periodic &Updates" === "Period&iek &Bijwerken" "Ponder &Next Move Ctrl+Shift+P" === "Denk in &Tijd Tegenstander Ctrl+Shift+P" "&Popup Exit Message" === "Toon &Mededeling bij Afsluiten" "Popup Move &Errors" === "Waarschuw bij &Foute Zetten" "Show Butt&on Bar" === "Toon &Knoppenpaneel" "Show &Coordinates" === "Toon Bord&cordinaten" "&Show Thinking" === "Toon Bedenksels" "Test &Legality Ctrl+Shift+L" === "&Weiger Onreglemetaire Zetten Ctrl+Shift+L" "&Hide Thinking Ctrl+Shift+H" === "Verberg &Gedachten Ctrl+Shift+H" "&Info in Move History Ctrl+Shift+I" === "Scores in Zettenlijst Ctrl+Shift+I" "&Send Engine Think" === "Rapporteer Bedenksels" "E&xtended PGN Info Ctrl+Shift+X" === "Vermeld Scores in P G N Ctrl+Shift+X" "Highlight with Arro&w" === "Accentueren met &Pijl" "Displa&y Logos" === "Toon &Logo's" "One-Click Move" === "Tu&rbo-zet" ICS OPTIONS "ICS Options" === "Instellingen Internet Schaakdienst" "&Auto Comment" === "&Commentaar opvangen" "Auto &Observe" === "&Automatisch Toekijken" "&Get Move List" === "Ophalen Zetten&lijst" "&Local Line Editing" === "&Bewerk Regels ter Plaatse" "&Quiet Play" === "&Rustig Spelen" "&Premove" === "&Voorzet" "&White first move" === "&Wit's eerste zet" "&Black first move" === "&Zwart's eerste zet" "&Sound alarm at" === "&Waarschuw bij" "seconds" === "sec" "Choose..." === "Kies..." "Do ¬ colorize messages" === "Boodschappen &niet kleuren" "&Auto Kibitz" === "Auto-Kibitz" "Auto Kibit&z" === "" "See&k Graph" === "Zoek&grafiek" "auto-&Refresh" === "Zel&f-verversend" "Bckgnd Obser&ve" === "Verdekt Toekijken" "&Dual Board" === "&Dubbel Bord" "One-Click &Move" === "&Turbo-zet" "Background..." === "Achtergrond..." "&Defaults..." === "&Standaard..." "Startup &Chat Boxes:" === "&Kwebbelvensters:" "General" === "Algemeen" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === "Schaakbord Instellingen" "Defaults" === "Standaard" "Light Squares" === "Lichte Velden" "Dark Squares" === "Donkere Velden" "White Pieces" === "Witte Stukken" "Black Pieces" === "Zwarte Stukken" "Square Highlights" === "Accentuering" "Premove Highlights" === "Accentuering Voorzet" "Monochrome" === "Zwart-Wit" "All White" === "Beiden Wit" "Flip Black" === "Zwart Omkeren" "Use Board Textures" === "Bord inkleuren" "Use Piece Font" === "Externe stukken" "Suppress Grid" === "Onderdruk belijning" "Size" === "Bordgrootte" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "" "T&eeny" === "" "&Dinky" === "" "&Petite" === "" "Sl&im" === "" "&Small" === "" "Medi&ocre" === "" "&Middling" === "" "&Average" === "" "Mode&rate" === "" "Medi&um" === "" "Bul&ky" === "" "&Large" === "" "&Big" === "" "&Huge" === "" "&Giant" === "" "&Colossal" === "" "Tita&nic" === "" FONTS "Fonts" === "Lettertypen" "Current Board Size" === "Huidige Bordgrootte" "All Board Sizes" === "Alle Bordgroottes" "&Revert to Defaults" === "Gebruik Standaardwaarden" "Clocks" === "Klokken" "Messages" === "Mededelingen" "Coordinates" === "Cordinaten" "Tags" === "P G N Titels" "Comments" === "Commentaar" "I C S Interaction" === "I C S Interactie" "Piece Font" === "Externe stukken" "&Color..." === "Kleur..." "Move History, Engine Output" === "Zettenlijst, Overwogen Zetten" ADJUDICATIONS DIALOG "Adjudications" === "Arbitrage" "Ponder Next Move" === "Denk in Tijd Tegenstander" "Enable and Show Thinking (recommended)" === "Raporteer Bedenksels" "Hide Thinking when Playing against Human" === "Verberg Gedachten voor Gebruiker" "Periodic Updates (for Analysis Mode)" === "Periodiek Bijwerken (bij Analyse)" "Adjudications in non-ICS games" === "Arbitrage in Lokale Partijen" "Adjudicate draw after:" === "Geef Remise na:" "moves" === "zetten" "Win/loss adjudication threshold:" === "Win/verlies drempel" "centipawns" === "centi-pion" "&Verify Engine Claims" === "Controleer Partijresultaat" "Detect &Mates" === "Detecteer Mat en Pat" "Draw if &Insufficient Material" === "Remise als geen Matpotentieel" "Adjudicate &Trivial Draws" === "Arbitreer Simpele Remises" "Apply" === "Toepassen:" ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === "-zettenregel" "-fold repeats" === "-voudige herhaling" "Engine #1 Score is Absolute" === "Programma #1 geeft Score voor Wit" "Engine #2 Score is Absolute" === "Programma #2 geeft Score voor Wit" COMMON ENGINE DIALOG "Common Engine Settings" === "Globale Instellingen" "Polyglot Directory:" === "Polyglot Map:" "Hash Size (MB):" === "Tabelgrootte (MB):" "EGTB Path:" === "EGTB pad:" "EGTB Size (MB):" === "EGTB buffer (MB):" "Use Book:" === "Openingsboek:" "Max nr of CPUs:" === "Max aantal CPUs:" "First has Own Book" === "Prog #1 heeft eigen Boek" "Second has Own Book" === "Prog #2 heeft eigen Boek" "Book Depth:" === "Boekdiepte:" "Book Variation:" === "Boekvariatie:" "Default Match Games:" === "Partijen in Tweekamp" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "Schaakvarianten" "Variant" === "Schaakariant" "Board size:" === "Bordgrootte:" "ranks" === "rijen" "files" === "lijnen" "Holdings with room for:" === "Ruimte voor:" "pieces" === "stukken in de hand" "('-1' means defaults for selected variant)" === "('-1' betekent standaardwaarde voor gekozen variant)" VARIANT NAMES: "&normal" === "Standard" "&FRC" === "Chess960" "&wildcastle" === "" "&nocastle" === "" "&losers" === "" "&giveaway" === "weg&gevertje" "s&uicide" === "" "&3Check" === "" "&twokings" === "" "&atomic" === "" "cra&zyhouse" === "" "&bughouse" === "doorgeefschaak" "&Twilight" === "" "Sp&artan" === "Spartaans" "&shogi" === "Japans (&shogi)" "su&per" === "Superschaak" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "cylinder" "&fairy" === "sprookjes" "&makruk" === "Thais (&makruk)" "&gothic" === "Gotisch" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "&xiangqi" === "Chinees (&xiangqi)" NEW SHUFFLE GAME "New Shuffle Game" === "Willekeurig Opzetten" "&Start Position Number:" === "&Nummer Beginopstelling" "Random" === "&zomaar een" GAME-LIST OPTIONS DIALOG "Game List Options" === "Partijoverzicht Opties" "PGN &Tags:" === "PGN &Titels" "&Up" === "&Op" "&Down" === "&Neer" "Default" === "&Standaard" "Factory" === "&Fabrieks" "Restore to:" === "&Herstel naar:" MOVE HISTORY WINDOW "Move History" === "Zettenlijst" EVALUATION GRAPH "Evaluation Graph" === "Scoregrafiek" ENGINE OUTPUT WINDOW "Engine Output" === "Overwogen zetten" "%s (%d reversible plies)" === "%s (%d omkeerbare zetten)" "Engine #1" === "Programma #1" "NPS" === "" "Engine #2" === "Programma #1" CHAT BOXES "Chat Window" === "Kwebbelvenster" "Chat partner:" === "&Klets met" "Clear" === "&Wis" "Send" === "&Zend" winboard.c "&File" === "&Bestand" "&Edit" === "Be&werk" "&View" === "Beel&d" "&Mode" === "&Modus" "&Action" === "&Actie" "&Step" === "&Stap" "E&ngine" === "&Schaakprog" "&Options" === "&Opties" "&Help" === "&Help" "You can only start a match from the initial position." === "Een tweekamp kan alleen starten vanuit de openingsstelling" "Font name too long:" === "" "Font point size missing:" === "" "Can't parse color name %s" === "" "Unrecognized board size value" === "Ongeldige bordgrootte" "Unrecognized argument" === "Waarde onherkenbaar" "No value provided for argument" === "Waarde van optie ontbreekt" "Incomplete \\ escape in value for" === "Onvolledige \\ in waarde van" "Failed to open indirection file" === "Openen indirectie bestand mislukt" "Unrecognized boolean argument value" === "Onherkenbare waarde" "Unrecognized argument" === "Onherkenbaar argument" "Too many colors" === "Teveel kleuren" "&Minimize\tCtrl+F4" === "&Minimaliseer\tCtrl+F4" "White: %s" === "Wit: %s" "We only care about the height here" === "Alleen de hoogte telt hier" "Cannot build game list" === "Maken van partijenoverzicht mislukt" "Load Game from File" === "Partij van bestand inlezen" "Load Position from File" === "Stelling van bestand inlezen" "Save Game to File" === "Partij opslaan in bestand" "Save Diagram to File" === "Diagram opslaan in bestand" "Save Position to File" === "Stelling opslaan in bestand" "%s does not support analysis" === "%s kan niet analyseren" "Analyze Game from File" === "Analyseer Partij van Bestand" "Unable to activate help" === "Activeren helpprogramma mislukt" "Send to chess program:" === "Zend naar schaakprogramma:" "Send to second chess program:" === "Zend naar tweede schaakprogramma" "Direct Command" === "Rechtstreekse opdracht" "Error loading sound %s" === "Fout bij inlezen geluid %s" "Error playing sound %s" === "Fout bij afspelen geluid %s" "File open failed" === "Openen bestand mislukt" "Internal error in file dialog box" === "Interne fout in bestandsdialoog" "Option Error" === "Optie Fout" "Choose an option, or cancel to exit" === "Kies een optie, of annuleer" "Unable to activate help" === "" "Displayed move is not current" === "Getoonde zet is niet de huidige" "Could not parse move" === "Onbegrijpelijke zet" "%s:\nError code %d" === "%s:\nFout code %d" "Error" === "Fout" "Fatal Error" === "Fatale Fout" "Exiting" === "Afsluiten" "Note" === "Let op" "Error writing to chess program" === "Fout bij zenden naar schaakprogramma" "User" === "Gebruiker" "Unknown" === "Onbekend" "White" === "Wit" "Black" === "Zwart" "Save Game to File" === "Partij Opslaan in Bestand" "Not implemented" === "Niet Gemplementeerd" "Shout Text" === "" "SShout/CShout" === "" "Channel 1 Text" === "" "Channel Text" === "" "Kibitz Text" === "" "Tell Text" === "" "Challenge Text" === "" "Request Text" === "" "Seek Text" === "" "Normal Text" === "" "None" === "" "Pawn" === "Pion" "Knight" === "Paard" "Bishop" === "Loper" "Rook" === "Toren" "Queen" === "Dame" "Information" === "Informatie" wclipbrd.c "Unable to convert position to FEN." === "Kan stelling niet in FEN omzetten" "Unable to copy FEN to clipboard." === "Kan FEN niet naar klembord kopiren" "Cannot create temporary file name." === "Maken van tijdelijk opslagbestand mislukt" "Cannot open temporary file." === "Openen van tijdelijk opslagbestand mislukt" "Cannot write to temporary file." === "Schrijven naar tijdelijk opslagbestand mislukt" "Cannot reopen temporary file." === "Heropenen van tijdelijk opslagbestand mislukt" "Cannot determine size of file." === "Kan grootte van bestand niet bepalen" "Cannot allocate clipboard buffer." === "Reserveren ruimte op klembord mislukt" "Cannot read from temporary file." === "Lezen van tijdelijk opslagbestand mislukt" "Error reading from temporary file." === "Fout bij lezen van tijdelijk opslagbestand" "Cannot copy text to clipboard" === "Kan tekst niet naar klembord kopiren" "Unable to allocate memory for clipboard." === "Reserveren geheugenruimte voor klembord mislukt" "Unable to lock clipboard memory." === "Vergrendelen van klembordgeheugen mislukt" "Cannot unlock clipboard memory." === "Ontgrendelen van klembordgeheugen mislukt" "Cannot open clipboard." === "Openen klembord mislukt" "Cannot empty clipboard." === "Ledigen klembord mislukt" "Cannot copy text to clipboard." === "Kopiren van tekst naar klembord mislukt" "Cannot close clipboard." === "Afsluiten klembord mislukt" "Unable to paste FEN from clipboard." === "Plakken FEN vanaf klembord mislukt" "Unable to create temporary file." === "" "Error writing to temporary file." === "" "Unable to open clipboard." === "" "No text in clipboard." === "" "Unable to lock clipboard memory." === "" "Unable to allocate memory for text string." === "" "Unable to unlock clipboard memory." === "" "Unable to close clipboard." === "" woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === "Bladeren voor Geluidsbestand" "Can't parse com port settings" === "" "Option Error" === "Optie Fout" "Invalid data rate" === "" "Option Error" === "" "Failed to set comm port state;\r\ninvalid options?" === "" "Failed to set comm port state" === "" "Invalid load game step rate" === "" "Invalid save game file name" === "" "Browse for Auto Save File" === "Bladeren voor automatische partijopslag" "Invalid moves per time control" === "Ongeldig aantal zetten per periode" "Invalid minutes per time control" === "Ongeldig aantal minuten per periode" "Invalid increment" === "Ongeldige tijdophoging" "Invalid initial time" === "Ongeldige starttijd" "Changing time control during a game is not implemented" === "De speelduur kan niet veranderd worden als een partij nog bezig is" "Variant %s not supported by %s" === "Schaakvariant %s kan door %s niet gespeeld worden" "Warning: second engine (%s) does not support this!" === "Pas op: het tweede schaakprogramma (%s) kan dit niet!" "Invalid ICS Alarm Time" === "Ongeldige tijdnoodwaarschuwingstijd" "Invalid max time per move" === "Ongeldige maximum tijd per zet" "Invalid time-odds factor" === "Ongeldige tijdsvoorgiftfactor" "Choose Folder" === "Kies Map" "Choose Book" === "Kies Openingsboek" "Choose Polyglot Directory" === "Kies Polyglot Map" "Choose EGTB Directory:" === "Kies EGTB Map:" "Polyglot was not found in the specified folder!" === "Polyglot is niet aanwezig in de gekozen map!" wgamelist.c "No game selected" === "Geen partij geselecteerd" "Can't go forward any further" === "U bent al aan het eind" "Can't back up any further" === "U bent al aan het begin" "No game list" === "Geen partijenoverzicht" "Game List" === "Partijenoverzicht" "Game list not loaded or empty" === "Partijenoverzicht niet gemaakt of leeg" "%s - %d/%d games" === "%s - %d/%d partijen" wedittags.c "Edit Tags" === "P G N Titels Bewerken" "Tags" === "P G N Titels" "Error replacing tags." === "Fout bij vervangen P G N Titels" wsettings.c "%s Engine Settings (%s)" === "Instellingen %s Schaakprogramma" "OK" === "OK" "Cancel" === "Annuleren" wchat.c "Chat Window %s" === "Kwebbelvenster %s" backend.c "bad timeControl option %s" === "Misvormde speeltijd instelling" "bad searchTime option %s" === "misvormde zoektijd instelling" ## following to will appear in combinationslike "first engine" "first" === "eerste" "second" === "tweede" "protocol version %d not supported" === "protocol versie %d niet ondersteund" "Variant %s supported only in ICS mode" === "Schaakvariant %s werkt alleen op Internet Schaakdienst" "Unknown variant name %s" === "Onbekende schaakvariant %s" "Starting chess program" === "Schaakprogramma opstarten" "Could not open comm port %s" === "Kan com poort %s niet openen" "Could not connect to host %s, port %s" === "Verbinding maken met %s (poort %s) mislukt" "Unknown initialMode %s" === "Onbekende startmodus %s" "Can't have a match with no chess programs" === "Tweekamp is niet mogelik zonder schaakprogramma's" "Bad game file" === "Foutief partijenbestand" "Bad position file" === "Foutief stellingenbestand" "AnalyzeFile mode requires a game file" === "Partij analyseren vereist een partijenbestand" "Analysis mode requires a chess engine" === "Analyseren vereist een schaakprogramma" "Analysis mode does not work with ICS mode" === "Analyseren werkt niet met een Internet Schaakdienst" "MachineWhite mode requires a chess engine" === "Computer Wit verseist een schaakprogramma" "MachineWhite mode does not work with ICS mode" === "Computer Wit werkt niet met een Internet Schaakdienst" "MachineBlack mode requires a chess engine" === "Computer Zwart verseist een schaakprogramma" "MachineBlack mode does not work with ICS mode" === "Computer Zwart werkt niet met een Internet Schaakdienst" "TwoMachines mode does not work with ICS mode" === "Twee Programma's werkt niet met een Internet Schaakdienst" "TwoMachines mode requires a chess engine" === "Twee Programma's verseist een schaakprogramma" "Training mode requires a game file" === "Training vereist eenpartijenbestand" "Error writing to ICS" === "Fout bij zenden naar Interenet Schaakdienst" "Error reading from keyboard" === "Fout bij invoer toetsenbord" "Got end of file from keyboard" === "'Einde bestand' ontvangen van toetsenbord" "Error writing to display" === "Fout bij scrijven op beeldscherm" "Error gathering move list: two headers" === "Fout bij ophalen zettenlijst: twee koppen" "Error gathering move list: nested" === "Fout bij ophalen zettenlijst: n binnen ander" "Connection closed by ICS" === "Verbinding verbroken door Internet Schaakdienst" "Error reading from ICS" === "Fout bij ontvangen van Interenet Schaakdienst" "Failed to parse board string:\n\"%s\"" === "Onbegrijpelijk bord:\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === "Partij te lang" "Error gathering move list: extra board" === "Fout bij ophalen zettenlijst: extra bord" "Illegal move \"%s\" from ICS" === "Onreglementaire zet \"%s\" van Internet Schaakdienst" "Couldn't parse move \"%s\" from ICS" === "Onbegrijpelijke zet \"%s\" van Internet Schaakdienst" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "" "You are playing Black" === "U speelt met Zwart" "You are playing White" === "U speelt met Wit" "It is White's turn" === "Wit is aan zet" "It is Black's turn" === "Zwart is aan zet" "Displayed position is not current" === "Getoonde stelling is niet de huidige" "Illegal move" === "Onreglementaire zet" "End of game" === "Einde partij" "Incorrect move" === "Incorrecte zet" ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === "Onreglementaire zet \"%s\" van %s schaakprogramma" "Illegal move \"%s\" (rejected by %s chess program)" === "Onreglementaire zet \"%s\" (geweigerd door %s schaakprogramma)" "Failed to start %s chess program %s on %s: %s\n" === "Opstarten %s schaakprogramma %s op %s mislukt: %s\n" "Error writing to %s chess program" === "Fout bij zenden naar %s schaakprogramma" "Error: %s chess program (%s) exited unexpectedly" === "Fout: %s schaakprogramma onverwacht gestopt" "Error reading from %s chess program (%s)" === "Fout bij ontvangen van %s schaakprogramma (%s)" "Forfeit due to illegal move" === "Verloren wegens onreglementaire zet" "%s does not support analysis" === "%s kan niet analyseren" "Hint: %s" === "" "Machine accepts your draw offer" === "Schaakprogramma neemt remiseaanbod aan" "Machine offers a draw\nSelect Action / Draw to agree" === "Schaakprogramma bied remise aan\nKies Actie" "%s (only move)" === "%s (enige zet)" "Ambiguous move in ICS output: \"%s\"" === "Dubbelzinnige zet in bericht van Internet Schaakdienst: \"%s\"" "Illegal move in ICS output: \"%s\"" === "Onreglementaire zet in bericht van Internet Schaakdienst: \"%s\"" "Gap in move list" === "Lacune in zettenlijst" "Startup failure on '%s'" === "Opstarten '%s' mislukt" "Waiting for first chess program" === "Wacht op eerste schaakprogramma" "Waiting for second chess program" === "Wacht op tweede schaakprogramma" "Match %s vs. %s: final score %d-%d-%d" === "Tweekamp %s tegen %s: eindscore %d-%d-%d" "Stalemate" === "Pat" "Illegal move: %d.%s%s" === "Onreglementaire zet: %d.%s%s" "Ambiguous move: %d.%s%s" === "Dubelzinnige zet: %d.%s%s" "Can't open \"%s\"" === "Openen \"%s\" mislukt" "Cannot build game list" === "Maken partijenoverzicht mislukt" "No more games in this message" === "Geen partijen meer in dit bericht" "No game has been loaded yet" === "Er is nog geen partij ingelezen" "Game number out of range" === "Er is geen partij met dat nummer" "Can't seek on game file" === "Spoelen door partijenbestand mislukt" "Game not found in file" === "Het bestand bevat geen partij" "Bad FEN position in file" === "Ongeldige FEN stelling in bestand" "No moves in game" === "Partij zonder zetten" "No position has been loaded yet" === "Er is nog geen stelling ingelezen" "Can't seek on position file" === "Spoelen door stellingenbestand mislukt" "Position not found in file" === "Bestand bevat geen stelling" "Black to play" === "Zwart aan zet" "White to play" === "Wit aan zet" "You have edited the game history.\nUse Reload Same Game and make your move again." === "U heeft de partij bewerkt.\nGebruik Herlaad Partij en herhaaluw zet" "You have entered too many moves.\nBack up to the correct position and try again." === "U heeftteveel zetten ingevoerd.\nStap terug naarde juiste stelling, and probeer het opnieuw" "Displayed position is not current.\nStep forward to the correct position and try again." === "De getoonde stelling is niet de huidige.\nStap vooruit naar de juiste stelling en probeer het opnieuw" "You have not made a move yet" === "U heeft nog geen zet gedaan" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "Het cmail bericht is niet ingelezen.\nGebruik CMailbericht Herladen, en doe u zet opnieuw" "No unfinished games" === "Geen actieve partijen" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "" "Failed to invoke cmail" === "" "Waiting for reply from opponent\n" === "" "Still need to make move for game\n" === "" "Still need to make moves for both games\n" === "" "Still need to make moves for all %d games\n" === "" "Still need to make a move for game %s\n" === "" "No unfinished games\n" === "" "Ready to send mail\n" === "" "Still need to make moves for games %s\n" === "" "Edit comment" === "Commentaar Bewerken" "Edit comment on %d.%s%s" === "Commentaar op %d.%s%s" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "" "It is not White's turn" === "Wit is niet aan zet" "It is not Black's turn" === "Zwart is niet aan zet" "Wait until your turn,\nor select Move Now" === "Wacht op uw beurt,\nof kies nu een zet" "Starting second chess program" === "Bezig met opstarten tweede schaakprogramma" "Training mode off" === "Trainingmodus uit" "Training mode on" === "Trainingmodus aan" "Already at end of game" === "U bent alaan het eind" "Warning: You are still playing a game" === "Pas op: Uw partij is nog bezig" "Warning: You are still observing a game" === "Pas op: U bent nog toeschouwer bij een partij" "Warning: You are still examining a game" === "Pas op: U bent nog een partij aan het analyseren" "It is Black's turn" === "Zwart is aan zet" "It is White's turn" === "Wit is aan zet" "That square is occupied" === "Dat veld is bezet" "There is no pending offer on this move" === "Er is geen remiseaanbod gedaan op deze zet" "Your opponent is not out of time" === "Uw tegenstander is nog niet door zijn vlag" "Black offers a draw" === "Zwart biedt remise aan" "White offers a draw" === "Wit biedt remise aan" "You must make your move before offering a draw" === "U moet zetten voordat u remise aanbiedt" "You are not examining a game" === "U bent geenpartij aan het analyseren" "You can't revert while pausing" === "Herstellen gedurende een pauze is niet mogelijk" "It is your turn" === "U bent aan zet" "Wait until your turn" === "Wacht op uw beurt" "No hint available" === "Geen hint beschikbaar" "Analysis (%s)" === "Analyse (%s)" "Comment" === "Commentaar" "Comment on %d.%s%s" === "Commentaar op %d.%s%s" "Both flags fell" === "Bijde vlaggen zijn gevallen" "White's flag fell" === "Wit's vlag is gavalen" "Black's flag fell" === "Zwart's vlag is gevallen" "Bad FEN position in clipboard" === "Ongeldige FEN stelling op klembord" "No response from ICS" === "Geen respons van Internet Schaakdienst" "You cannot do this while you are playing or observing" === "Dit kan niet als u aan het spelen of toeschouwen bent" "Click in holdings to choose piece" === "Klik in de voorraad om een stuk te kiezen" "Click clock to clear board" === "Klik op klok voor leeg bord" "Pull pawn backwards to under-promote" === "Trek pion terug voor minor promotie" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === "Partij afgelazen" "White wins on time" === "Wit wint op tijd" "Black wins on time" === "Zwart wint op tijd" "Both players ran out of time" === "Beide spelers overschreden hun tijd" "White resigns" === "Wit geeft op" "Black resigns" === "Zwart geeft op" "White mates" === "Zwart staat mat" "Black mates" === "Wit staat mat" "Draw" === "Remise" "Draw agreed" === "Remise overeengekomen" "Xboard adjudication: King destroyed" === "XBoard arbitrage: Koning opgeblazen" "Xboard adjudication: Bare king" === "XBoard arbitrage: Kale koning" "Xboard adjudication: 3rd check" === "XBoard arbitrage: 3e schaakje" "Xboard adjudication: Stalemate" === "XBoard arbitrage: Pat" "Xboard adjudication: Checkmate" === "XBoard arbitrage: Schaakmat" "Xboard adjudication: Insufficient mating material" === "XBoard arbitrage: Geen matpotentiel" "Xboard adjudication: Trivial draw" === "XBoard arbitrage: Simpele remise" "XBoard adjudication: repetition draw" === "XBoard arbitrage: zettenherhaling" "Xboard adjudication: perpetual checking" === "XBoard arbitrage: eeuwig schaak" "Xboard adjudication: perpetual chasing" === "XBoard arbitrage: eeuwig najagen" "%Xboard adjudication: perpetual chasing of" === "XBoard arbitrage: eeuwig najagen van" "Xboard adjudication: 50-move rule" === "XBoard arbitrage: 50-zettenregel" "Draw claim: 50-move rule" === "Remise opgeist: 50-zettenregel" "Draw claim: 3-fold repetition" === "Remise opgeist: 3x zelfde stelling" "Draw claim: insufficient mating material" === "Remise opgeist: geen matpotentiel" "Xboard adjudication: long game" === "XBoard arbitrage: lange partij" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "XBoard: ongeldige zet: %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "XBoard: onreglementaire zet: %s (%c%c%c%c)%c" "Xboard adjudication" === "XBoard arbitrage" "User adjudication" === "Gebruiker arbitrage" "False win claim: '%s'" === "Onterechte winsteis: '%s'" "False draw claim: '%s'" === "Onterechte remiseis: '%s'" "xboard exit" === "XBoard afgesloten" # NEW STRINGS FOR EXPERIMENTAL TM VERSION: # MENU "Edit Boo&k..." === "Openingsboek Be&werken" "Edit Engine List..." === "&Lijst met Schaakprogs Bewerken..." "Load Engine..." === "&Schaakprogramma Wisselen..." "Tournament..." === "Toernooi..." # LOAD ENGINE DIALOG "First" === "Eerste" "Second" === "Tweede" "Choose File" === "Kies Bestand" "Choose Folder:" === "Kies Map:" "Select engine from list:" === "Kies schaakprog van &lijst:" "or specify one below:" === "of specificeer er een hieronder" "Nickname (optional):" === "Bijnaam (optioneel)" "Use nickname in PGN tag" === "Gebruik bijnaam in P G N titel" "Engine (*.exe):" === "&Schaakprog (*.exe)" "command-line parameters:" === "&Parameters bij opstartbevel" "directory:" === "&map:" "(Directory will be derived from engine path when left empty)" === "(de map wordt afgeleid van het pad wanneer u het leeg laat)" "Add this engine to the list" === "&Voeg schaakprogramma toe aan lijst" "Must not use GUI book" === "Gebruik gezamenlijk openings&boek niet" "UCI" === "&UCI" "WB protocol v1 (skip waiting for features)" === "WB protocol v&1 (wacht niet of 'features')" "UCCI / USI (uses specified /uxiAdapter)" === "UCCI/USI (gebruik ingestelde uxiAdapter)" "Force current variant with this engine" === "Alleen met huidige schaakvariant" "Load mentioned engine as" === "&Gebruik schaakprogramma als" "Load Engine" === "Wisselen Schaakprogramma" "You did not specify the engine executable" === "U heeft geen schaakprogramma (.exe bestand) gespecificeerd" "Select single engine from the group" === "Kies een schaakprogramma uit deze groep" # TOURNAMENT OPTIONS DIALOG "Tournament file:" === "Toernooibestand:" "If you specify an existing file, the rest of this dialog will be ignored." === "Als u een bestaand bestand aangeeft wordt de rest van deze dialoog genegeerd" "Otherwise, the file will be created, with the settings you specify below:" === "Zo niet, dan wordt het bestand aangemaakt met onderstaande gegevens" "Select Engine:" === "Selecteer Schaakprogramma" "Use Swiss pairing engine (cycles = rounds)" === "Zwitsers (cycli = rondes)" "Tourney type (0=RR, 1=gauntlet):" === "Toernooitype (0=competitie)" "Sync after cycle" === "Synchroniseer na cyclus" "Number of tourney cycles:" === "Aantal toernooicycli:" "Sync after round" === "Synchroniseer na ronde" "Games per Match / Pairing:" === "Partijen per paring/tweekamp" "File for saving tourney games:" === "Bestand voor toernooipartijen:" "Game File with Opening Lines:" === "Bestand met Openingszetten:" "Game Number:" === "Partijnummer" "File with Start Positions:" === "Bestand met Beginstellingen:" "Position Number:" === "Stellingnummer" "Step through lines/positions in file" === "Stap door openingen/stellingen in bestand" "Rewind after (0 = never):" === "Terugspoelen na: (0 = nooit)" "Use each line/position twice" === "Gebruik elke opening/stelling 2x" "Pause between Games (ms):" === "Pauze tussen partijen (ms):" "Tournament and Match Options" === "Toernooi en Tweekamp Instellingen" "Tourney participants:" === "Deelnemers:" "Replace Engine" === "Vervang Speler" "Upgrade Engine" === "Invaller" "Time Control..." === "Speelduur..." "Common Engine..." === "Glob. Instellingen..." "Clone Tourney" === "Kloon Toernooi" "Make all use GUI book by default" === "Gebruik openingsboek voor iedereen" "You must supply a tournament file,\nfor storing the tourney progress" === "U moet een toernooibestand specificeren,\nwaarin de voortgang kan worden bijgehouden" "Not enough participants" === "Niet genoeg deelnemers voor een dergelijk toernooi" "Continue Later" === "Straks afmaken" "First you must specify an existing tourney file to clone" === "U moet eerst een bestand om te klonen specificeren" "No engine %s is installed" === "Er is geen schaakprogramma %s genstalleerd" # THEMES DIALOG "Board themes" === "Schaakbord thema's" "Select theme from list:" === "Kies thema uit de lijst:" "or specify new theme below:" === "of specifficeer een nieuw thema hieronder:" "Theme name:" === "Thema naam:" "Use board textures" === "Kleur bord in" "Light-square texture:" === "Patroon lichte velden" "Dark-square texture:" === "Patroon donkere velden" "Dark reorientation mode:" === "donkere orientatiemethode:" "Light reorientation mode:" === "lichte orientatiemethode:" "Draw border around board" === "Bord met rand" "Optional border bitmap:" === "Rand afbeelding" " Beware: a specified piece font will prevail over piece bitmaps" === " Let op: een schaakfiguren lettertype prevaleert over plaatjes" "Directory with piece bitmaps:" === "Map met stukkenplaatjes" "Use piece font" === "Gebruik schaakfiguur lettertype" "Font size (%):" === "Afmeting lettertype(%)" "Font name:" === "Lettertype:" "Font piece to char:" === "Letters voor stukken:" "Delete Theme" === "Verwijder thema" "Select single theme from the group" === "Selecteer een enkel thema uit de groep" # book.c "Could not create book" === "Kon geen openingen bestand maken" "Polyglot book not valid" === "Polyglot openingboek ongeldig" "Hash keys are different" === "" "Book Fault" === "Boek fout" "Book file exists! Try again for overwrite." === "Openingsboek bestaat al. Probeer het nog eens om het te overschrijven." # NEW MENU ITEMS IN 4.7 "Save Games to &Book" === "Sla partijen op als openings&boek" "Colo&rs..." === "Kleu&ren..." "&Board Themes..." === "&Bord stijlen..." "Load &First Engine..." === "1e Schaakprogramma &Wisselen..." "Load &Second Engine..." === "2e &Schaakprogramma Wisselen..." "Auto &Create Logon" === "Bewaar login in&fo" JAWS strings # board coords, files "ay" === "a" "b" === "" "c" === "" "d" === "" "e" === "" "f" === "" "g" === "" "h" === "" "i" === "" "j" === "" "k" === "" "l" === "" # board coords, ranks "naught" === "nul" "zeroth" === "nulde" "first" === "eerste" "second" === "tweede" "third" === "derde" "fourth" === "vierde" "fifth" === "vijfde" "sixth" === "zesde" "seventh" === "zevende" "eighth" === "achtste" "nineth" === "negende" # piece names "White Pawn" === "Witte Pion" "White Knight" === "Wit Paard" "White Bishop" === "Witte Loper" "White Rook" === "Witte Toren" "White Queen" === "Witte Dame" "White Guard" === "Witte Paleiswacht" "White Elephant" === "Witte Olifant" "White Arch Bishop" === "Witte Aartsbischop" "White Chancellor" === "Witte Kanselier" "White General" === "Witte Generaal" "White Man" === "Witte Burger" "White Cannon" === "Wit Kanon" "White Night Rider" === "Witte Nachtruiter" "White Crowned Bishop" === "Witte Gekroonde Loper" "White Crowned Rook" === "Witte Gekroonde Toren" "White Grass Hopper" === "Witte Sprinkhaan" "White Veteran" === "Witte Veteraan" "White Falcon" === "Witte Valk" "White Amazon" === "Witte Amazone" "White Snake" === "Witte Cobra" "White Unicorn" === "Witte Eenhoorn" "White King" === "Witte Koning" "Black Pawn" === "Zwarte Pion" "Black Knight" === "Zwart Paard" "Black Bishop" === "Zwarte Loper" "Black Rook" === "Zwarte Toren" "Black Queen" === "Zwarte Dame" "Black Guard" === "Zwarte Paleiswacht" "Black Elephant" === "Zwarte Olifant" "Black Arch Bishop" === "Zwarte Aartsbischop" "Black Chancellor" === "Zwarte Kanselier" "Black General" === "Zwarte Generaal" "Black Man" === "Zwarte Burger" "Black Cannon" === "Zwart Kanon" "Black Night Rider" === "Zwarte Nachtruiter" "Black Crowned Bishop" === "Zwarte Gekroonde Loper" "Black Crowned Rook" === "Zwarte Gekroonde Toren" "Black Grass Hopper" === "Zwarte Sprinkhaan" "Black Veteran" === "Zwarte Veteraan" "Black Falcon" === "Zwarte Valk" "Black Amazon" === "Zwarte Amazone" "Black Snake" === "Zwarte Cobra" "Black Unicorn" === "Zwarte Eenhoorn" "Black King" === "Zwarte Koning" "Empty" === "Leeg" "Pawn" === "Pion" "Knight" === "Paard" "Bishop" === "Loper" "Rook" === "Toren" "Queen" === "Dame" "Guard" === "Paleiswacht" "Elephant" === "Olifant" "Arch Bishop" === "Aartsbischop" "Chancellor" === "Kanselier" "General" === "Generaal" "Man" === "Burger" "Cannon" === "Kanon" "Night Rider" === "Nachtruiter" "Crowned Bishop" === "Gekroonde Loper" "Crowned Rook" === "Gekroonde Toren" "Grass Hopper" === "Sprinkhaan" "Veteran" === "Veteraan" "Falcon" === "Valk" "Amazon" === "Amazone" "Snake" === "Cobra" "Unicorn" === "Eenhoorn" "King" === "Koning" # JAWS menu "Say Clock &Time\tAlt+T" === "Lees &Klokken\tAlt+T" "Say Last &Move\tAlt+M" === "Zeg Laatste &Zet\tAlt+M" "Say W&ho's Turn\tAlt+X" === "Zeg Wie &aan Zet is\tAlt+X" "Say Complete &Position\tAlt+P" === "Lees hele &Stelling op\tAlt+P" "Say &White Pieces\tAlt+W" === "Noem &Witte Stukken\tAlt+W" "Say &Black Pieces\tAlt+B" === "Noem &Zwarte Stukken\tAlt+B" "Say Board &Rank\tAlt+R" === "Lees &Rij op\tAlt+R" "Say Board &File\tAlt+F" === "Lees &Lijn Op\tAlt+F" "Say &Upper Diagonals\tAlt+U" === "Lees &Bovendiagonalen op\tAlt+U" "Say &Lower Diagonals\tAlt+L" === "Lees &Onderdiagonalen op\tAlt+L" "Say K&night Moves\tAlt+N" === "Noem &Paard Zetten\tAlt+N" "Say Current &Square\tAlt+S" === "Noem &Huidig Veld\tAlt+S" "Say &Attacks\tAlt+A" === "Noem Aan&vallers\tAlt+A" "Say Attacke&d\tAlt+D" === "Noem Aan&gevallenen\tAlt+D" "black holdings" === "zwarte voorraad" "white holdings" === "witte voorraad" "holdings" === "voorraad" "Your" === "Uw" "would have" === "zou hebben" "You must select a piece first" === "U moet eerst een stuk activeren" "possible captures from here are" === "Mogelijke slagzetten van hieruit" "None" === "Geen" "Pieces that can capture you are" === "Stukken die u kunt slaan zijn" "You are defended by" === "U staat gedekt door" "rank" === "rij" "empty" === "leeg" "file empty" === "lijn leeg" "The diagnol squares to your upper right contain" === "De diagonaal rechts boven u bevat" "There is no squares to your upper right" === "Er zijn geen velden rechts boven u" "The diagnol squares to your upper left contain" === "De diagonaal links boven u bevat" "There is no squares to your upper left" === "Er zijn geen velden links boven u" "The diagnol squares to your lower right contain" === "De diagonaal rechts onder u bevat" "There is no squares to your lower right" === "Er zijn geen velden rechts onder u" "The diagnol squares to your lower left contain" === "De diagonaal links onder u bevat" "There is no squares to your lower left" === "Er zijn geen velden links onder u" "The possible squares a Knight could move to are" === "Velden waareen paard heen zou kunnen zijn" "The squares a Knight could possibly attack from are" === "De velden van waaruit een paard u zou kunnen aanvallen zijn" "White pieces" === "Witte stukken" "Black pieces" === "Zwarte stukken" "Pieces" === "Stukken" "are located" === "bevinden zich" "at" === "op" "nowhere" === "nergens" "You strayed into the white holdings" === "U bent de witte voorraad binnengestapt" "You strayed into the black holdings" === "U bent de zwarte voorraad binnengestapt" "Your current position is" === "Uw huidige locatie is" "on a light square" === "op een licht veld" "on a dark square" === "op een donker veld" "white holds" === "wit heeft voorradig" "black holds" === "zwart heeft voorradig" "all" === "alles" "It is your turn" === "U bent aan zet" "It is your opponents turn" === "Uw tegenstander is aan zet" "White is on move here" === "Wit is aan zet" "Black is on move here" === "wart is aan zet" "score %s %d at %d ply" === "Score %d %d bij %d halve zetten" "plus" === "plus" "minus" === "minus" "promotion" === "promotie" "move" === "zet" "queen side castling" === "lange rokade" "king side castling" === "korte rokade" "dropped on" === "neergezet op" "to" === "naar" "Capturing a" === "en slaat een" "Capturing onn passann" === "en slaat en passant" "check" === "schaak" "finishing off" === "en verslaat" "white wins" === "wit wint" "black wins" === "zwart wint" "game ends in a draw" === "partij eindigt in remise" "draw" === "remise" "due to" === "vanwege" "illegal" === "onreglementair" "White clock" === "witte klok" "Black clock" === "zwarte klok" "is now" === "is nu" "on" === "aan" "off" === "uit" "selected" === "geactiveerd" "unselected" === "gedeactiveerd" "ponder" === "peins" "animate moving" === "verschuiven stukken" "auto flag" === "automatisch vlaggen" "always promote to queen" === "altijd to dame promoveren" "legality testing" === "weiger onreglementaire zetten" "hide thinking" === "verberg gedachten" "extended P G N info" === "scores in P G N" "extra info in move history" === "scores in zettenlijst" xboard-4.8.0/winboard/language/russian.lng0000644000175000001440000012675212420374633015516 00000000000000## WinBoard 4.5.1 language file ## Encoding: Win-1251 ## Win-1251 should be set as the default encoding for nonunicode programs (on WinXP) ## ## Russian/ ## v1.0 beta 1 ## ## Translation by Hr. Burunduk (2011.04.14) ## Based on the WinBoard 4.2.6 translation by A.V.Serdiukov (.., 2003) ## ## ## If you revise this, please insert your date, name and description. ## , , , , . ## For example: ## : ## 24-ago-2010. Juan Perez (j@xyz.p). Corrected translation for xyzzy. ## Notes for translators (can be deleted from he file after translation): ## Just write the translations between the second pair of quotes ## Things like %s, %d and %c must be preserved in the original order ## Empty translated strings will be ignored, so there is no reason ## to delete those for which you don't know a translation, ## and you can start testing everything immediately. ## Simply rename this file to LANGUAGE.lng, and WinBoard should see it, ## and allow you to use the option /language=LANGUAGE. ## You are encouraged to call up the corresponding WinBoard dialog while ## working on the translation, to see in which context the strings are used. ## This is why the strings below are sorted by dialog ## ## Of duplicats, only the first occurrence will be used, even if it was in ## a different dialog! For this reason you will only see an 'OK' in the ## About Box. After you translated it there, this translation will be used ## for all other dialogs as well. ## o Use ## for comments, to make iteasy to find them scattered throughout the translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. ## preferably it should be unique in the applicable menu, so it depends on translation of other items! winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "&New Game\tCtrl-N" === "& \tCtrl-N" "New Sh&uffle Game..." === " & ..." "New &Variant...\tAlt+Shift+V" === " &...\tAlt+Shift+V" "&Load Game...\tCtrl-O" === "& ...\tCtrl-O" "&Save Game...\tCtrl-S" === "& ...\tCtrl-S" "L&oad Position...\tCtrl+Shift+O" === "& ...\tCtrl+Shift+O" "S&ave Position...\tCtrl+Shift+S" === "& ...\tCtrl+Shift+S" "Save as &Diagram..." === " &..." "&Quit" === "&" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === " & \tAlt+PgDn"" "Load &Previous Game\tAlt+PgUp" === " & \tAlt+PgUp" "&Reload Same Game" === "& " "Load N&ext Position\tAlt+Shift+PgDn" === "& \tAlt+Shift+PgDn" "Load Pre&vious Position\tAlt+Shift+PgUp" === "& \tAlt+Shift+PgUp" "Reload Sa&me Position" === "& " "&Copy Game To Clipboard\tCtrl+C" === "& \tCtrl+C" "C&opy Position To Clipboard\tCtrl+Shift+C" === "& \tCtrl+Shift+C" "Copy Game List to Clipboard" === " & " "&Paste Game From Clipboard\tCtrl+V" === "& \tCtrl+V" "P&aste Position From Clipboard\tCtrl+Shift+V" === "& \tCtrl+Shift+V" "&Edit Game\tCtrl+E" === "& \tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "& \tCtrl+Shift+E" "Edit Ta&gs..." === "& ..." "Edit Co&mment..." === "& ..." "Enter &Username..." === "& ..." "&Revert\tHome" === "&\tHome" "&Annotate" === "& " "&Truncate Game\tEnd" === "& \tEnd" "&Backward\tAlt+Left" === "&\tAlt+Left" "&Forward\tAlt+Right" === "&\tAlt+Right" "Back to &Start\tAlt+Home" === " &\tAlt+Home" "For&ward to End\tAlt+End" === " &\tAlt+End" "Flip &View\tF2" === "& \tF2" "&Swap Clocks" === " & " "Engine &Output\tAlt+Shift+O" === "& \tAlt+Shift+O" "Move &History\tAlt+Shift+H" === " &\tAlt+Shift+H" "Evaluation &Graph\tAlt+Shift+E" === "& \tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "& \tAlt+Shift+G" "Open &New Chat Window" === " &" "Type In &Move...\tAlt+I" === "& ...\tAlt+I" "&Tags" === "&" "&Comments" === "&" "&Game List Tags..." === "& ..." "&Board..." === "&..." "&Fonts..." === "&..." "Machine &White\tCtrl+W" === " &\tCtrl+W" "Machine &Black\tCtrl+B" === " &\tCtrl+B" "&Two Machines\tCtrl+T" === "& \tCtrl+T" "Machine Both" === " &" "&Analysis Mode\tCtrl+A" === "&\tCtrl+A" "Analyze &File\tCtrl+F" === " &\tCtrl+F" "&Edit Game\tCtrl+E" === "& \tCtrl+E" "E&dit Position\tCtrl+Shift+E" === "& \tCtrl+Shift+E" "Trai&ning" === "&" "&ICS Client" === "& ICS" "&Machine Match" === " & " "&Pause\tPause" === "&" "&Accept\tF3" === "&\tF3" "D&ecline\tF4" === "&\tF4" "Re&match\tF12" === "&\tF12" "Call &Flag\tF5" === "& \tF5" "&Draw\tF6" === "&\tF6" "Ad&journ\tF7" === "&\tF7" "A&bort\tF8" === "&\tF8" "&Resign\tF9" === "&\tF9" "Stop &Observing\tF10" === " & \tF10" "Stop E&xamining\tF11" === " & \tF11" "&Upload to Examine" === "& " "Adjudicate to &White" === " &" "Adjudicate to &Black" === " &" "Adjudicate &Draw" === " &" "Install 1st..." === "1- & ..." "Install 2nd..." === "2- & ..." "Engine #&1 Settings..." === " &1..." "Engine #&2 Settings..." === " &2..." "&Hint..." === "&..." "&Book..." === "&..." "&Move Now\tCtrl+M" === " &!\tCtrl+M" "&Retract Move\tCtrl+X" === " &\tCtrl+X" "&Mute all Sounds" === " &" "&General..." === "&..." "&Time Control...\tAlt+Shift+T" === " &...\tAlt+Shift+T" "Common &Engine...\tAlt+Shift+U" === "& ...\tAlt+Shift+U" "Ad&judications...\tAlt+Shift+J" === "&...\tAlt+Shift+J" "&Load Game...\tAlt+Shift+L" === "&...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "&...\tAlt+Shift+S" "G&ame List..." === "& ..." "Soun&ds..." === "&..." "&ICS..." === "&ICS..." "Add ICS..." === "& ICS..." "Comm&unications..." === "&..." "Save Settings &Now" === "& " "Save Settings on E&xit" === " &" "Help &Contents\tF1" === "&\tF1" "Help &Index" === "&" "How to &Use Help" === " & " "&About WinBoard" === " & WinBoard" "White" === "" "Promote" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "King" === "" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "" "Chancellor" === "" ## Next 2 Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === " (.)" "Cannon" === "" "Empty Square" === " " "Black" === "" "Demote" === "" "Clear Board " === " " ## Next 3: Shogi pieces. "Gold" === "" "Silver" === "" "Lance" === "" "Drop" === "" "Cop&y and Paste" === " " "&Copy" === "" "&Paste" === "" "&Undo" === "" "Cu&t" === "" "&Copy" === "" "&Paste" === "" "Select &All" === " " DIALOGS: ABOUTBOX ## Pehaps copyright notices best left untranslated? "About WinBoard" === " WinBoard" "OK" === "OK" "Chessboard for Windows" === " Windows" "Copyright 1991 Digital Equipment Corporation" === "" "Enhancements Copyright 1992-2014 Free Software Foundation" === "" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccion por Oscar Toledo G.". " " === ": .. (2003), Hr.Burunduk (2011)" "WinBoard 0.0.0" === "" ABOUTBOX2 ## Weird, it is needed? [Normally not. It is a built-in 'Easter Egg' joke.] ## It's a "galactic software ltd." bitmap, no need to translate. "galactic" === "" TIME CONTROL DIALOG "Time Control" === " " "Conventional chess clock" === " " "Incremental clock" === " " "Cancel" === "" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === " , tab ." "Fixed time per move" === " " "Number of moves:" === " :" "Within number of minutes:" === " :" "Initial number of minutes:" === " , :" "Plus number of seconds per move:" === " :" "Maximum seconds per move:" === " :" "Time-Odds Factors:" === " :" "Engine #1:" === " 1-:" "Engine #2:" === " 2-:" LOAD OPTIONS DIALOG "Load Game Options" === " " "Load games with automatic stepping" === " " "seconds per move" === ". " SAVE OPTIONS DIALOG "Save Game Options" === " " "Save As: " === " : " "Save games automatically" === " " "Prompt for filename" === " " "To file:" === " :" "PGN" === "PGN" "Old" === "" "Browse..." === "..." "Save out of book info in PGN" === " PGN" 1536 ## This dialog is only used in some older Windows versions, so you might not be ableto test it. "Open" === "" "File &Name:" === " :" "&Directories:" === ":" "List Files of &Type:" === " :" "Dri&ves:" === ":" "&Help" === "&" "&Index number:" === ":" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === " COM-" "Net&work..." === "..." "&Port:" === ":" "Data &Rate:" === ":" "Data &Bits:" === " :" "P&arity:" === ":" "&Stop Bits:" === "-:" "F&low:" === ":" EDIT COMMENT "Edit Comment" === " " "&Clear" === "&" "&Edit" === "&" PROMOTION POPUP "Promote to:" === "" ## next used in Shogi as promotion-popup header "Promote?" === "?" "Promotion" === "" "&Queen" === "&" "&Rook" === "&" "&Bishop" === "&" "K&night" === "&" "&King" === "&" "&Cancel" === "&" "Chance&llor" === "&" "&Archbishop" === "&" "YES" === "" "NO" === "" "C&entaur" === "&" GAME LIST "Game List" === " " "&Load" === "&" "&Prev" === "" "&Next" === "" "&Close" === "&" "Filter" === "" EDIT TAGS "Edit Tags" === " " ERROR "ICS Interaction" === " ICS" "Dialog" === "" "Error" === "" ## I don't think the next will really appear ever. "Sorry Charlie" === ", !" COLORIZE "I C S Interaction Colors" === " ICS" "Interaction Colors" === " " "Premove" === " " "Alarm" === "" "Colors" === "" "&Choose Color..." === " " "&Bold" === "" "&Italic" === "" "&Underline" === "" "&Strikeout" === "" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === " - , ." "Question" === "" "Enter" === "" STARTUP DIALOG "WinBoard Startup" === " WinBoard" "What would you like to do?" === " " "&Play against a chess engine or match two engines" === "& " "&Use an Internet Chess Server" === "& " "Just &view or edit game files" === "& " "Specify Chess &Engines:" === " " "Specify Chess &Server:" === " " "&Additional options" === "& " INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === ":" MOVE TYPE-IN "Type in a move" === " " USER-NAME TYPE-IN "Type in your name" === " " SOUND DIALOG "Sounds" === "" "&Event:" === "" "&No sound" === " " "&Default beep" === " " "&Built-in sound:" === " :" "&WAV file:" === "WAV-" "B&rowse..." === "..." "&Play" === "" "&Defaults" === "" GENERAL OPTIONS DIALOG ## pleace keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === " " "Always on &Top" === " " "Always &Queen Ctrl+Shift+Q" === " CS+Q" "Animate &Dragging" === " " "&Animate Moving Ctrl+Shift+A" === " CS+A" "Auto &Flag Ctrl+Shift+F" === " CS+F" "Auto Flip &View" === " " "Auto &Raise Board" === " " "&Blindfold" === " " "Highlight Dra&gging" === " " "Highlight Last &Move" === " " "Periodic &Updates" === " " "Ponder &Next Move Ctrl+Shift+P" === " CS+P" "&Popup Exit Message" === " " "Popup Move &Errors" === " " "Show Butt&on Bar" === " " "Show &Coordinates" === " " "&Show Thinking" === " " "Test &Legality Ctrl+Shift+L" === " CS+L" "&Hide Thinking Ctrl+Shift+H" === " CS+H" "&Info in Move History Ctrl+Shift+I" === " CS+I" "&Send Engine Think" === " " "E&xtended PGN Info Ctrl+Shift+X" === " PGN CS+X" "Highlight with Arro&w" === " " "Displa&y Logos" === " " "One-Click Move" === " " ICS OPTIONS "ICS Options" === " ICS" "&Auto Comment" === "" "Auto &Observe" === " " "&Get Move List" === " " "&Local Line Editing" === " " "&Quiet Play" === " " "&Premove" === " " "&White first move" === "1- " "&Black first move" === "1- " "&Sound alarm at" === " " "seconds" === "." "Choose..." === "..." "Do ¬ colorize messages" === " " "&Auto Kibitz" === "" "Auto Kibit&z" === "" "See&k Graph" === " " "auto-&Refresh" === "" "Bckgnd Obser&ve" === " " "&Dual Board" === " " "One-Click &Move" === " " "Background..." === " ..." "&Defaults..." === "" "Startup &Chat Boxes:" === " (/ ;):" "General" === "" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === " " "Defaults" === "" "Light Squares" === " " "Dark Squares" === " " "White Pieces" === " " "Black Pieces" === " " "Square Highlights" === " " "Premove Highlights" === ". " "Monochrome" === "" "All White" === " " "Flip Black" === " " "Size" === "" BOARD SIZES ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "" "T&eeny" === "" "&Dinky" === "" "&Petite" === "" "Sl&im" === "" "&Small" === "" "Medi&ocre" === "" "&Middling" === "" "&Average" === "" "Mode&rate" === "" "Medi&um" === "" "Bul&ky" === "" "&Large" === "" "&Big" === "" "&Huge" === "" "&Giant" === "" "&Colossal" === "" "Tita&nic" === "" FONTS "Fonts" === "" "Current Board Size" === " " "All Board Sizes" === " " "&Revert to Defaults" === " " "Clocks" === "" "Messages" === "" "Coordinates" === "" "Tags" === "" "Comments" === "" "I C S Interaction" === " ICS" "&Color..." === "..." "Move History, Engine Output" === " , " ADJUDICATIONS DIALOG "Adjudications" === "" "Ponder Next Move" === " " "Enable and Show Thinking (recommended)" === " ()" "Hide Thinking when Playing against Human" === " " "Periodic Updates (for Analysis Mode)" === " ( )" "Adjudications in non-ICS games" === " ICS" "Adjudicate draw after:" === " " "moves" === "" "Win/loss adjudication threshold:" === "/ " "centipawns" === " " "&Verify Engine Claims" === " " "Detect &Mates" === " " "Draw if &Insufficient Material" === " " "Adjudicate &Trivial Draws" === " . " "Apply" === " " ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === " " "-fold repeats" === "- " "Engine #1 Score is Absolute" === " 1 - " "Engine #2 Score is Absolute" === " 2 - " COMMON ENGINE DIALOG "Common Engine Settings" === " " "Polyglot Directory:" === "Polyglot :" "Hash Size (MB):" === " ():" "EGTB Path:" === " :" "EGTB Size (MB):" === " ():" "Use Book:" === ":" "Max nr of CPUs:" === "Max CPU:" "First has Own Book" === " 1" "Second has Own Book" === " 2" "Book Depth:" === " :" "Book Variation:" === ":" "Default Match Games:" === " :" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "" "Variant" === "" "Board size:" === " " ## , . "ranks" === "" "files" === "" "Holdings with room for:" === " :" "pieces" === "" "('-1' means defaults for selected variant)" === "'-1' - " VARIANT NAMES: "&normal" === "" "&FRC" === " (960)" "&wildcastle" === "" "&nocastle" === "" "&losers" === " ()" "&giveaway" === "" "s&uicide" === "" "&3Check" === "3 " "&twokings" === "" "&atomic" === "" "cra&zyhouse" === "" "&bughouse" === "" "&Twilight" === "" "Sp&artan" === "" "&shogi" === "" "su&per" === "" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "" "&fairy" === "" "&makruk" === "" "&gothic" === "" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "Seira&wan" === "" "&xiangqi" === "" NEW SHUFFLE GAME "New Shuffle Game" === " " "&Start Position Number:" === " :" "Random" === "" GAME-LIST OPTIONS DIALOG "Game List Options" === " " "PGN &Tags:" === " PGN :" "&Up" === "" "&Down" === "" "Default" === "" "Factory" === "" "Restore to:" === " " MOVE HISTORY WINDOW "Move History" === " " EVALUATION GRAPH "Evaluation Graph" === " " ENGINE OUTPUT WINDOW "Engine output" === " " "Engine #1" === " 1" "NPS" === "NPS (./.)" "Engine #2" === " 2" CHAT BOXES "Chat Window" === " " "Chat partner:" === ":" "Clear" === "" "Send" === "." winboard.c "&File" === "&" "&Edit" === "&" "&View" === "&" "&Mode" === "&" "&Action" === "&" "&Step" === "&" "E&ngine" === "&" "&Options" === "&" "&Help" === "&" ## One-letter menu for small board sizes "&F" === "&" "&E" === "&" "&V" === "&" "&M" === "&" "&A" === "&" "&N" === "&" "&O" === "&" "&H" === "&?" "You can only start a match from the initial position." === " ." "Font name too long:" === " :" "Font point size missing:" === " :" "Can't parse color name %s" === " %s" "Unrecognized board size value" === " " "Unrecognized argument" === " " "No value provided for argument" === " " "Incomplete \\ escape in value for" === " \\ " "Failed to open indirection file" === " INI-" "Unrecognized boolean argument value" === " " "Unrecognized argument" === " " "Too many colors" === " " "&Minimize\tCtrl+F4" === "\tCtrl+F4" "White: %s" === ": %s" "We only care about the height here" === " " "Cannot build game list" === " " "Load Game from File" === " " "Load Position from File" === " " "Save Game to File" === " " "Save Diagram to File" === " " "Save Position to File" === " " "%s does not support analysis" === "%s " "Analyze Game from File" === " " "Unable to activate help" === " " "Send to chess program:" === " :" "Send to second chess program:" === " :" "Direct Command" === " " "Error loading sound %s" === " %s" "Error playing sound %s" === " %s" "File open failed" === " " "Internal error in file dialog box" === " " "Option Error" === " " "Choose an option, or cancel to exit" === " \"\" " "Unable to activate help" === " " "Displayed move is not current" === " " "Could not parse move" === " " "%s:\nError code %d" === "%s:\n %d" "Error" === "" "Fatal Error" === " " "Exiting" === "" "%s:\nError code %d" === "%s:\n %d" "Note" === "" "Error writing to chess program" === " " "User" === "" "Unknown" === "" "White" === "" "Black" === "" "Save Game to File" === " " "Not implemented" === " " "Shout Text" === "Shout" "SShout/CShout" === "" "Channel 1 Text" === "Channel 1" "Channel Text" === "Channel" "Kibitz Text" === "Kibitz" "Tell Text" === "Tell" "Challenge Text" === "Challenge" "Request Text" === "Request" "Seek Text" === "Seek" "Normal Text" === " " "None" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "Information" === "" wclipbrd.c "Unable to convert position to FEN." === " FEN." "Unable to copy FEN to clipboard." === " (FEN) ." "Cannot create temporary file name." === " ." "Cannot open temporary file." === " ." "Cannot write to temporary file." === " ." "Cannot reopen temporary file." === " ." "Cannot determine size of file." === " ." "Cannot allocate clipboard buffer." === " " "Cannot read from temporary file." === " ." "Error reading from temporary file." === " ." "Cannot copy text to clipboard" === " ." "Unable to allocate memory for clipboard." === " ." "Unable to lock clipboard memory." === " ." "Cannot unlock clipboard memory." === " ." "Cannot open clipboard." === " ." "Cannot empty clipboard." === " ." "Cannot copy text to clipboard." === " ." "Cannot close clipboard." === " ." "Unable to paste FEN from clipboard." === " (FEN) ." "Unable to create temporary file." === " ." "Error writing to temporary file." === " ." "Unable to open clipboard." === " ." "No text in clipboard." === " ." "Unable to lock clipboard memory." === " ." "Unable to allocate memory for text string." === " ." "Unable to unlock clipboard memory." === " ." "Unable to close clipboard." === " ." woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === " " "Can't parse com port settings" === " COM-." "Option Error" === " " "Invalid data rate" === " ." "Option Error" === " " "Failed to set comm port state;\r\ninvalid options?" === " COM-;\r\n ?" "Failed to set comm port state" === " COM-." "Invalid load game step rate" === " ." "Invalid save game file name" === " " "Browse for Auto Save File" === " " "Invalid moves per time control" === " " "Invalid minutes per time control" === " " "Invalid increment" === " " "Invalid initial time" === " " "Changing time control during a game is not implemented" === " " "Variant %s not supported by %s" === " %s %s" "Warning: second engine (%s) does not support this!" === ": (%s) !" "Invalid Alarm Time" === " ICS" "Invalid max time per move" === " " "Invalid time-odds factor" === " " "Choose Folder" === " " "Choose Book" === " " "Choose Polyglot Directory" === " Polyglot" "Choose EGTB Directory:" === " :" "Polyglot was not found in the specified folder!" === "Polyglot !" wgamelist.c "No game selected" === " " "Can't go forward any further" === " " "Can't back up any further" === " " "No game list" === " " "Game List" === " " "Game list not loaded or empty" === " " "%s - %d/%d games" === "%s - %d/%d " wedittags.c "Edit Tags" === " " "Tags" === "" "Error replacing tags." === " ." wsettings.c "%s Engine Settings (%s)" === " %s (%s)" "OK" === "OK" "Cancel" === "" wchat.c "Chat Window %s" === " %s" backend.c "bad timeControl option %s" === "timeControl: %s" "bad searchTime option %s" === "searchTime: %s" ## following to will appear in combinationslike "first engine" "first" === "1" "second" === "2" "protocol version %d not supported" === " %d " "Variant %s supported only in ICS mode" === " %s ICS" "Unknown variant name %s" === " %s" "Starting chess program" === " " "Could not open comm port %s" === " COM- %s" "Could not connect to host %s, port %s" === " %s, %s" "Unknown initialMode %s" === "initialMode: %s" "Can't have a match with no chess programs" === " " "Bad game file" === " " "Bad position file" === " " "AnalyzeFile mode requires a game file" === " : " "Analysis mode requires a chess engine" === " " "Analysis mode does not work with ICS mode" === " ICS" "MachineWhite mode requires a chess engine" === " \" \" " "MachineWhite mode does not work with ICS mode" === " \" \" ICS" "MachineBlack mode requires a chess engine" === " \" \" ()" "MachineBlack mode does not work with ICS mode" === " \" \" ICS" "TwoMachines mode does not work with ICS mode" === " \" \" ICS" "TwoMachines mode requires a chess engine" === " \" \" " "Training mode requires a game file" === " " "Error writing to ICS" === " ICS" "Error reading from keyboard" === " " "Got end of file from keyboard" === " " "Error writing to ICS" === " ICS" "Error writing to display" === " " "Error gathering move list: two headers" === " : " "Error gathering move list: nested" === " : " "Connection closed by ICS" === " ICS " "Error reading from ICS" === " ICS" "Failed to parse board string:\n\"%s\"" === " :\n\"%s\"" "Game too long; increase MAX_MOVES and recompile" === " : MAX_MOVES " "Error gathering move list: extra board" === " : " "Illegal move \"%s\" from ICS" === " "%s" ICS" "Couldn't parse move \"%s\" from ICS" === " "%s" ICS" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "" "You are playing Black" === " " "You are playing White" === " " "It is White's turn" === " " "It is Black's turn" === " " "Displayed position is not current" === " " "Illegal move" === " " "End of game" === " " "Incorrect move" === " " ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === " \"%s\" %s" "Illegal move \"%s\" (rejected by %s chess program)" === " \"%s\" ( %s)" "Failed to start %s chess program %s on %s: %s\n" === " %s %s %s: %s\n" "Error writing to %s chess program" === " %s" "Error: %s chess program (%s) exited unexpectedly" === ": %s (%s) " "Error reading from %s chess program (%s)" === " %s (%s)" "Forfeit due to illegal move" === " " "%s does not support analysis" === "%s " "Hint: %s" === ": %s" "Machine accepts your draw offer" === " " "Machine offers a draw\nSelect Action / Draw to agree" === " .\n , /" "%s (only move)" === "%s ( )" "Ambiguous move in ICS output: \"%s\"" === " ICS: \"%s\"" "Illegal move in ICS output: \"%s\"" === " ICS: \"%s\"" "Gap in move list" === " " "Game too long; increase MAX_MOVES and recompile" === " : MAX_MOVES " "Variant %s not supported by %s" === " %s %s" "Startup failure on '%s'" === " '%s'" "Waiting for first chess program" === " " "Waiting for second chess program" === " " "Match %s vs. %s: final score %d-%d-%d" === " %s %s: %d-%d-%d" "Stalemate" === "" "Illegal move: %d.%s%s" === " : %d.%s%s" "Ambiguous move: %d.%s%s" === " : %d.%s%s" "Can't open \"%s\"" === " \"%s\"" "Cannot build game list" === " " "No more games in this message" === " " "No game has been loaded yet" === " " "Can't back up any further" === " " "Game number out of range" === " - " "Can't seek on game file" === " " "Game not found in file" === " " "Bad FEN position in file" === " FEN " "No moves in game" === " " "No position has been loaded yet" === " " "Can't back up any further" === " " "Can't open \"%s\"" === " \"%s\"" "Can't seek on position file" === " " "Position not found in file" === " " "Bad FEN position in file" === " FEN " "Black to play" === " " "White to play" === " " "Can't open \"%s\"" === " \"%s\"" "You have edited the game history.\nUse Reload Same Game and make your move again." === " .\n \" \" ." "You have entered too many moves.\nBack up to the correct position and try again." === " .\n ." "Displayed position is not current.\nStep forward to the correct position and try again." === " .\n ." "You have not made a move yet" === " " "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === " CMail .\n \"Reload CMail Message\" ." "No unfinished games" === " " "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === " .\n .\n :\n\"cmail -remail -game %s\"\n ." "Failed to invoke cmail" === " cmail" "Waiting for reply from opponent\n" === " \n" "Still need to make move for game\n" === " \n" "Still need to make moves for both games\n" === " \n" "Still need to make moves for all %d games\n" === " %d \n" "Still need to make a move for game %s\n" === " %s\n" "No unfinished games\n" === " \n" "Ready to send mail\n" === " \n" "Still need to make moves for games %s\n" === " %s\n" "Edit comment" === " " "Edit comment on %d.%s%s" === " %d.%s%s" "Starting analysis mode...If this message stays up, your chess program does not support analysis." === " ...\n , , " "It is not White's turn" === " " "It is not Black's turn" === " " "Wait until your turn,\nor select Move Now" === " ,\n \" \"" "Starting second chess program" === " " "Training mode off" === " " "Training mode on" === "" "Already at end of game" === " " "Warning: You are still playing a game" === ": " "Warning: You are still observing a game" === ": " "Warning: You are still examining a game" === ": " "It is Black's turn" === " " "It is White's turn" === " " "That square is occupied" === " " "There is no pending offer on this move" === " " "Your opponent is not out of time" === " " "Black offers a draw" === " " "White offers a draw" === " " "You must make your move before offering a draw" === " , " "You are not examining a game" === " " "You can't revert while pausing" === " \"\"" "Wait until your turn,\nor select Move Now" === " ,\n \" \"" "It is your turn" === " " "Wait until your turn" === " " "No hint available" === " " "Analysis (%s)" === " (%s)" "Comment" === "" "Comment on %d.%s%s" === " %d.%s%s" "Both flags fell" === " " "White's flag fell" === " " "Black's flag fell" === " " "Bad FEN position in clipboard" === " FEN" "No response from ICS" === " ICS " "You cannot do this while you are playing or observing" === " " "Click in holdings to choose piece" === " , " END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === " " "White wins on time" === " " "Black wins on time" === " " "Both players ran out of time" === " " "White resigns" === " " "Black resigns" === " " "White mates" === " " "Black mates" === " " "Draw" === "" "Draw agreed" === " " "Xboard adjudication: King destroyed" === " Xboard: " "Xboard adjudication: Bare king" === " Xboard: " "Xboard adjudication: 3rd check" === " Xboard: " "Xboard adjudication: Stalemate" === " Xboard: " "Xboard adjudication: Checkmate" === " Xboard: " "Xboard adjudication: Insufficient mating material" === " Xboard: " "Xboard adjudication: Trivial draw" === " Xboard: " "XBoard adjudication: repetition draw" === " Xboard: - " "Xboard adjudication: perpetual checking" === " Xboard: " "Xboard adjudication: perpetual chasing" === " Xboard: " "%Xboard adjudication: perpetual chasing of" === " Xboard: " "Xboard adjudication: 50-move rule" === " Xboard: 50 " "Draw claim: 50-move rule" === " : 50 " "Draw claim: 3-fold repetition" === " : " "Draw claim: insufficient mating material" === " : " "Xboard adjudication: long game" === " Xboard: " "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "Xboard: - : %s (%c%c%c%c) res=%d" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "Xboard: - : %s (%c%c%c%c)%c" "Xboard adjudication" === " Xboard" "User adjudication" === " " "False win claim: '%s'" === " : '%s'" "False draw claim: '%s'" === " : '%s'" "xboard exit" === " Xboard" xboard-4.8.0/winboard/language/vietnamese.lng0000644000175000001440000007741112420374633016167 00000000000000## WinBoard language file ## ## LANGUAGE NAME IN ENGLISH / TRANSLATED ## v1.0 beta 1 ## ## Translation by Nguyen Pham (27 Jan 2011) ## Ngi dich: Pham Hng Nguyn (27/01/2011) ## xqfan.com ## ## If you revise this, please insert your date, name and description. ## TRANSLATION OF MESSAGE ABOVE ## ## For example: ## TRANSLATION OF FOR EXAMPLE ## 24-ago-2010. Juan Prez (j@xyz.p). Corrected translation for xyzzy. ## Notes for translators (can be deleted from he file after translation): ## Just write the translations between the second pair of quotes ## Things like %s, %d and %c must be preserved in the original order ## Empty translated strings will be ignored, so there is no reason ## to delete those for which you don't know a translation, ## and you can start testing everything immediately. ## Simply rename this file to LANGUAGE.lng, and WinBoard should see it, ## and allow you to use the option /language=LANGUAGE. ## You are encouraged to call up the corresponding WinBoard dialog while ## working on the translation, to see in which context the strings are used. ## This is why the strings below are sorted by dialog ## ## Of duplicats, only the first occurrence will be used, even if it was in ## a different dialog! For this reason you will only see an 'OK' in the ## About Box. After you translated it there, this translation will be used ## for all other dialogs as well. ## o Use ## for comments, to make iteasy to find them scattered throughout the translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. ## preferably it should be unique in the applicable menu, so it depends on translation of other items! winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "New &Game\tCtrl-N" === "Vn Mi\tCtrl-N" "New Sh&uffle Game..." === "Tro Bn..." "New &Variant...\tAlt+Shift+V" === "Bin Mi...\tAlt+Shift+&V" "&Load Game...\tCtrl-O" === "Tai Vn C...\tCtr&l-O" "&Save Game...\tCtrl-S" === "Lu Vn C...\tCtrl-&S" "L&oad Position...\tCtrl+Shift+O" === "Tai Th C...\tCtrl+Shift+&O" "S&ave Position...\tCtrl+Shift+S" === "Lu Th C...\tCtrl+Shift+S" "Save as &Diagram..." === "Lu Thnh Biu ..." "&Quit" === "Thot" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === "Tai V&n Tip\tAlt+PgDn" "Load &Previous Game\tAlt+PgUp" === "Tai Vn Trc" "&Reload Same Game" === "Tai Lai Vn C" "Load N&ext Position\tAlt+Shift+PgDn" === "Tai Th C Tip" "Load Pre&vious Position\tAlt+Shift+PgUp" === "Tai Th C Trc" "Reload Sa&me Position" === "Tai Lai Th C" "&Copy Game To Clipboard\tCtrl+C" === "&Chp Vn C Vo Clipboard\tCtrl+C" "C&opy Position To Clipboard\tCtrl+Shift+C" === "Chp Th C Vo Clipb&oard\tCtrl+Shift+C" "Copy Game List to Clipboard" === "Copy Danh Sch Cc Vn C Vo Clipboard" "&Paste Game From Clipboard\tCtrl+V" === "Dn Vn C T Clipboard\tCtrl+V" "P&aste Position From Clipboard\tCtrl+Shift+V" === "Dn Th C T Clipbo&ard\tCtrl+Shift+V" "&Edit Game\tCtrl+E" === "Soan Vn C\tCtrl+&E" "E&dit Position\tCtrl+Shift+E" === "Soan Th C\tCtrl+Shift+E" "Edit Ta&gs..." === "Soan Cc The..." "Edit &Comment..." === "Soan Binh Ch..." "Enter &Username..." === Nhp Username..." "&Revert\tHome" === "Ngc Lai\tHome" "&Annotate" === "Ch Giai" "&Truncate Game\tEnd" === "C&t Ngn Vn C\tEnd" "&Backward\tAlt+Left" === "Quay Tr Lai\tAlt+Left" "&Forward\tAlt+Right" === "i Tip\tAlt+Right" "Back to &Start\tAlt+Home" === "Quay Lai n u\tAlt+Home" "For&ward to End\tAlt+End" === "i Tip Ti Cui\tAlt+End" "Flip &View\tF2" === "Lt Ngc Bn C\tF2" "&Swap Clocks" === "i ng H" "Engine &Output\tAlt+Shift+O" === "In Ra Cua Cc Chng Trinh C\tAlt+Shift+&O" "Move &History\tAlt+Shift+H" === "Cc Nc i\tAlt+Shift+&H" "Evaluation &Graph\tAlt+Shift+E" === " Thi Lng &Gi\tAlt+Shift+E" "Game &List\tAlt+Shift+G" === "Danh Sch Cc Vn C\tA<+Shift+G" "Open &New Chat Window" === "M Ca S i Thoai Mi" "Type In &Move...\tAlt+I" === "Binh Ch Cho Nc i...\tAlt+I" "&Tags" === "Cc The" "&Comments" === "Binh &Ch" "&Game List Tags..." === "Cc The cua Danh Sch Vn C" "&Board..." === "&Bn C..." "&Fonts..." === "Cc &Fonts..." "Machine &White\tCtrl+W" === "My Chi Bn Trng\tCtrl+&W" "Machine &Black\tCtrl+B" === "My Chi &Bn en\tCtrl+B" "&Two Machines\tCtrl+T" === "My Chi Ca Hai Bn\tCtrl+&T" "Machine Both" === "My Chi Ca Hai Bn" "&Analysis Mode\tCtrl+A" === "Ch Phn Tch\tCtrl+&A" "Analyze &File\tCtrl+F" === "Phn Tch &File\tCtrl+F" "&Edit Game\tCtrl+E" === "Soan Thao Vn C\tCtrl+&E" "E&dit Position\tCtrl+Shift+E" === "Soan Thao Th C\tCtrl+Shift+E" "Trai&ning" === "a&ng Dy My" "&ICS Client" === "Kt Ni Chi Vi My Chu &ICS" "&Machine Match" === "Trn u Vi &My" "&Pause\tPause" === "Tam Dng\t&Pause" "&Accept\tF3" === "Chp Nhn\tF3" "D&ecline\tF4" === "T Chi\tF4" "Re&match\tF12" === "Chi Vn Na\tF12" "Call &Flag\tF5" === "t C\t&F5" "&Draw\tF6" === "Hoa\tF6" "Ad&journ\tF7" === "\tF7" "A&bort\tF8" === "Bo\tF8" "&Resign\tF9" === "Nhn Thua\tF9" "Stop &Observing\tF10" === "Ngng Xem" "Stop E&xamining\tF11" === "Ngng Th" "&Upload to Examine" === "Tai " "Adjudicate to &White" === "Phn X Trng Thng" "Adjudicate to &Black" === "Phn X en Thng" "Adjudicate &Draw" === "Phn X Hoa" "Install 1st..." === "Ci t Ngi Chi Th Nht" "Install 2nd..." === "Ci t Ngi Chi Th Hai" "Engine #&1 Settings..." === "t Tham S Cho Chng Trinh Chi 1..." "Engine #&2 Settings..." === "t Tham S Cho Chng Trinh Chi 2..." "&Hint..." === "Gi Y..." "&Book..." === "Cm Nang Khai Cuc..." "&Move Now\tCtrl+M" === "Phai i Ngay\tCtrl+M" "&Retract Move\tCtrl+X" === "Hoan Nc i Va Ri\tCtrl+X" "&Mute all Sounds" === "Ngng Pht m Thanh" "&General..." === "Chung..." "&Time Control...\tAlt+Shift+T" === "t Thi Gian...\tAlt+Shift+T" "Common &Engine...\tAlt+Shift+U" === "Chng Trinh C Chung...\tAlt+Shift+U" "Ad&judications...\tAlt+Shift+J" === "Phn X Kt Qua...\tAlt+Shift+J" "&Load Game...\tAlt+Shift+L" === "Tai Vn C...\tAlt+Shift+L" "&Save Game...\tAlt+Shift+S" === "Lu Vn C...\tAlt+Shift+S" "G&ame List..." === "Danh Sch Vn C" "Soun&ds..." === "m Thanh" "&ICS..." === "&ICS..." "Add ICS..." === "Thm ICS..." "Comm&unications..." === "Kt Ni...." "Save Settings &Now" === "Lu Cc Tham S &Ngay" "Save Settings on E&xit" === "Lu Cc Tham S Khi Kt Thc" "Help &Contents\tF1" === "Ni Dung Hng Dn" "Help &Index" === "Hng Dn" "How to &Use Help" === "S Dung Hng Dn" "&About WinBoard" === "Thng Tin V WinBoard" "White" === "Trng" "Promote" === "Phong Cp" "Pawn" === "Tt" "Knight" === "Ma" "Bishop" === "Tng" "Rook" === "Xe" "Queen" === "Hong Hu" "King" === "Vua" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "Si" "Chancellor" === "Xe" ## Next 2 Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === "Tng" "Cannon" === "Pho" "Empty Square" === " Trng" "Black" === "en" "Demote" === "" "Clear Board " === "Xa Bn C" ## Next 3: Shogi pieces. "Gold" === "Vng" "Silver" === "Bac" "Lance" === "ng" "Drop" === "t" "Cop&y and Paste" === "Chp v Dn" "&Copy" === "Chp" "&Paste" === "Dn" "&Undo" === "Lai Nh Trc" "Cu&t" === "Ct" "&Copy" === "Chp" "&Paste" === "Dn" "Select &All" === "Chon Tt Ca" DIALOGS: ABOUTBOX ## Pehaps copyright notices best left untranslated? "About WinBoard" === "Thng Tin V WinBoard" "OK" === "c" "Chessboard for Windows" === "Bn C Cho Windows" "Copyright 1991 Digital Equipment Corporation" === "Ban Quyn 1991 Digital Equipment Corporation" "Enhancements Copyright 1992-2014 Free Software Foundation" === "" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccin por scar Toledo G.". " " === "" "WinBoard 0.0.0" === "WinBoard 0.0.0" ABOUTBOX2 ## Weird, it is needed? [Normally not. It is a built-in 'Easter Egg' joke.] "galactic" === "" TIME CONTROL DIALOG "Time Control" === "Thi gian chi" "Conventional chess clock" === "ng h qui chun" "Incremental clock" === "ng h tng tin" "Cancel" === "Bo" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === "Dng cc phm mui tn chon kiu ng h mong mun, ri bm phm tab thay i gi tri." "Fixed time per move" === "Thi gian c inh cho mi nc i" "Number of moves:" === "S nc i" "Within number of minutes:" === "Trong s pht:" "Initial number of minutes:" === "Khi u vi s pht" "Plus number of seconds per move:" === "S giy thm cho mi nc:" "Maximum seconds per move:" === "S giy cc ai cho mi nc" "Time-Odds Factors:" === "H s thi gian le" "Engine #1:" === "Chng trinh c 1:" "Engine #2:" === "Chng trinh c 2:" LOAD OPTIONS DIALOG "Load Game Options" === "Cc La Chon Tai Vn C" "Load games with automatic stepping" === "Tai cc vn c v t ng i qun" "seconds per move" === "s giy mi nc" SAVE OPTIONS DIALOG "Save Game Options" === "Cc La Chon Lu Vn C" "Save Style" === "Kiu Lu" "Save games automatically" === "Lu t ng cc vn c" "Prompt for filename" === "Nhc tn file" "To file:" === "ra file:" "PGN" === "PGN" "Old" === "Cu" "Browse..." === "Xem" "Save out of book info in PGN" === "Lu thng tin khi ht cm nang khai cuc vo PGN" 1536 ## This dialog is only used in some older Windows versions, so you might not be ableto test it. "Open" === "M" "File &Name:" === "T&n File:" "&Directories:" === "Th Muc:" "List Files of &Type:" === "Danh Sch File Vi Kiu:" "Dri&ves:" === " ia:" "&Help" === "&Hng Dn" "&Index number:" === "Chi Muc:" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === "" "Net&work..." === "" "&Port:" === "" "Data &Rate:" === "" "Data &Bits:" === "" "P&arity:" === "" "&Stop Bits:" === "" "F&low:" === "" EDIT COMMENT "Edit Comment" === "Soan Binh Ch" "&Clear" === "Xa" "&Edit" === "Soan" PROMOTION POPUP "Promote to:" === "Phong cp thnh:" ## next used in Shogi as promotion-popup header "Promote?" === "Phong cp?" "Promotion" === "Phong cp" "&Queen" === "Hong Hu" "&Rook" === "Xe" "&Bishop" === "Tng" "K&night" === "Ma" "&King" === "Vua" "&Cancel" === "Bo" "Chance&llor" === "Xe" "&Archbishop" === "Si" "YES" === "ng Y" "NO" === "Khng" "C&entaur" === "" GAME LIST "Game List" === "Danh Sch Vn C" "&Load" === "Tai" "&Prev" === "Trc" "&Next" === "Tip" "&Close" === "ng" "Filter" === "Loc" EDIT TAGS "Edit Tags" === "Soan cc the" ERROR "ICS Interaction" === "" "Dialog" === "" "Error" === "" ## I don't think the next will really appear ever. "Sorry Charlie" === "" COLORIZE "I C S Interaction Colors" === "" "Interaction Colors" === "" "Premove" === "" "Alarm" === "" "Colors" === "" "&Choose Color..." === "" "&Bold" === "" "&Italic" === "" "&Underline" === "" "&Strikeout" === "" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === "" "Question" === "" "Enter" === "" STARTUP DIALOG "WinBoard Startup" === "WinBoard ang Khi ng" "What would you like to do?" === "Ban Mun Lm Gi?" "&Play against a chess engine or match two engines" === "Chi vi mt chng trinh c hoc cho hai chng trinh u vi nhau" "&Use an Internet Chess Server" === "Kt ni v chi vi mt my chu c" "Just &view or edit game files" === "Chi xem hoc soan thao cc file vn c" "Specify Chess &Engines:" === "Chon Cc Chng Trinh C:" "Specify Chess &Server:" === "Chon My Chu Chi C" "&Additional options" === "Cc la chon thm" INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === "S chi muc" MOVE TYPE-IN "Type in a move" === "" USER-NAME TYPE-IN "Type in your name" === "" SOUND DIALOG "Sounds" === "m thanh" "&Event:" === "S kin:" "&No sound" === "Khng m thanh" "&Default beep" === "Ting tt ngm inh" "&Built-in sound:" === "m thanh c sn" "&WAV file:" === "File m thanh WAV" "B&rowse..." === "Xem..." "&Play" === "Chi" "&Defaults" === "Ngm inh" GENERAL OPTIONS DIALOG ## pleace keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === "Cc La Chon Chung" "Always on &Top" === "Lun Ni Ln Trn" "Always &Queen Ctrl+Shift+Q" === "Lun L Hong Hu Ctrl+Shift+&Q" "Animate &Dragging" === "" "&Animate Moving Ctrl+Shift+A" === "" "Auto &Flag Ctrl+Shift+F" === "T ng t C" "Auto Flip &View" === "T ng Xoay Bn C" "Auto &Raise Board" === "T ng Hin Bn C" "&Blindfold" === "M Qung" "Highlight Dra&gging" === "nh Du Khi ang Ko Qun C" "Highlight Last &Move" === "nh Du Nc Cui" "Periodic &Updates" === "Cp Nht Theo Chu Ky" "Ponder &Next Move Ctrl+Shift+P" === "Tip Tuc Tnh Trc" "&Popup Exit Message" === "Bt Ca S Thot Chng trinh" "Popup Move &Errors" === "Bt Ca S Li Nc i" "Show Butt&on Bar" === "Hin Thanh Nt Bm" "Show &Coordinates" === "Hin Toa " "&Show Thinking" === "Hin Tnh Ton" "Test &Legality Ctrl+Shift+L" === "Kim Tra Hp &L" "&Hide Thinking Ctrl+Shift+H" === "n Suy Nghi" "&Info in Move History Ctrl+Shift+I" === "Thng Tin trong Nc i" "&Send Engine Think" === "Lnh Cho Chng Trinh Suy Nghi" "E&xtended PGN Info Ctrl+Shift+X" === "Thng Tin M rng Trong PGN" "Highlight with Arro&w" === "nh Du Vi Mui Tn" "Displa&y Logos" === "Hin Logo" "One-Click Move" === "i Qun Vi Chi Mt Bm" ICS OPTIONS "ICS Options" === "" "&Auto Comment" === "" "Auto &Observe" === "" "&Get Move List" === "" "&Local Line Editing" === "" "&Quiet Play" === "" "&Premove" === "" "&White first move" === "" "&Black first move" === "" "&Sound alarm at" === "" "seconds" === "" "Choose..." === "" "Do ¬ colorize messages" === "" "&Auto Kibitz" === "" "Auto Kibit&z" === "" "See&k Graph" === "" "auto-&Refresh" === "" "Bckgnd Obser&ve" === "" "&Dual Board" === "" "One-Click &Move" === "" "Background..." === "" "&Defaults..." === "" "Startup &Chat Boxes:" === "" "General" === "" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === "" "Defaults" === "" "Light Squares" === "" "Dark Squares" === "" "White Pieces" === "" "Black Pieces" === "" "Square Highlights" === "" "Premove Highlights" === "" "Monochrome" === "" "All White" === "" "Flip Black" === "" "Size" === "" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "" "T&eeny" === "" "&Dinky" === "" "&Petite" === "" "Sl&im" === "" "&Small" === "" "Medi&ocre" === "" "&Middling" === "" "&Average" === "" "Mode&rate" === "" "Medi&um" === "" "Bul&ky" === "" "&Large" === "" "&Big" === "" "&Huge" === "" "&Giant" === "" "&Colossal" === "" "Tita&nic" === "" FONTS "Fonts" === "" "Current Board Size" === "" "All Board Sizes" === "" "&Revert to Defaults" === "" "Clocks" === "" "Messages" === "" "Coordinates" === "" "Tags" === "" "Comments" === "" "I C S Interaction" === "" "&Color..." === "" "Move History, Engine Output" === "" ADJUDICATIONS DIALOG "Adjudications" === "" "Ponder Next Move" === "" "Enable and Show Thinking (recommended)" === "" "Hide Thinking when Playing against Human" === "" "Periodic Updates (for Analysis Mode)" === "" "Adjudications in non-ICS games" === "" "Adjudicate draw after:" === "" "moves" === "" "Win/loss adjudication threshold:" === "" "centipawns" === "" "&Verify Engine Claims" === "" "Detect &Mates" === "" "Draw if &Insufficient Material" === "" "Adjudicate &Trivial Draws" === "" "Apply" === "" ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === "" "-fold repeats" === "" "Engine #1 Score is Absolute" === "" "Engine #2 Score is Absolute" === "" COMMON ENGINE DIALOG "Common Engine Settings" === "" "Polyglot Directory:" === "" "Hash Size (MB):" === "" "EGTB Path:" === "" "EGTB Size (MB):" === "" "Use Book:" === "" "Max nr of CPUs:" === "" "First has Own Book" === "" "Second has Own Book" === "" "Book Depth:" === "" "Book Variation:" === "" "Default Match Games:" === "" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "" "Variant" === "" "Board size:" === "" "ranks" === "" "files" === "" "Holdings with room for:" === "" "pieces" === "" "('-1' means defaults for selected variant)" === "" VARIANT NAMES: "&normal" === "" "&FRC" === "" "&wildcastle" === "" "&nocastle" === "" "&losers" === "" "&giveaway" === "" "s&uicide" === "" "&3Check" === "" "&twokings" === "" "&atomic" === "" "cra&zyhouse" === "" "&bughouse" === "" "&Twilight" === "" "&shogi" === "" "su&per" === "" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "" "&fairy" === "" "&makruk" === "" "&gothic" === "" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "&xiangqi" === "" NEW SHUFFLE GAME "New Shuffle Game" === "" "&Start Position Number:" === "" "Random" === "" GAME-LIST OPTIONS DIALOG "Game List Options" === "" "PGN &Tags:" === "" "&Up" === "" "&Down" === "" "Default" === "" "Factory" === "" "Restore to:" === "" MOVE HISTORY WINDOW "Move History" === "" EVALUATION GRAPH "Evaluation Graph" === "" ENGINE OUTPUT WINDOW "Engine output" === "" "Engine #1" === "" "NPS" === "" "Engine #2" === "" CHAT BOXES "Chat Window" === "" "Chat partner:" === "" "Clear" === "" "Send" === "" winboard.c "&File" === "" "&Edit" === "" "&View" === "" "&Mode" === "" "&Action" === "" "&Step" === "" "E&ngine" === "" "&Options" === "" "&Help" === "" "You can only start a match from the initial position" === "" "Font name too long:" === "" "Font point size missing:" === "" "Can't parse color name %s" === "" "Unrecognized board size value" === "" "Unrecognized argument" === "" "No value provided for argument" === "" "Incomplete \\ escape in value for" === "" "Failed to open indirection file" === "" "Unrecognized boolean argument value" === "" "Unrecognized argument" === "" "Too many colors" === "" "&Minimize\tCtrl+F4" === "" "White: %s" === "" "We only care about the height here" === "" "Cannot build game list" === "" "Load Game from File" === "" "Load Position from File" === "" "Save Game to File" === "" "Save Position to File" === "" "%s does not support analysis" === "" "Analyze Game from File" === "" "Unable to activate help" === "" "Send to chess program:" === "" "Send to second chess program:" === "" "Direct Command" === "" "Error loading sound %s" === "" "Error playing sound %s" === "" "File open failed" === "" "Internal error in file dialog box" === "" "Option Error" === "" "Choose an option, or cancel to exit" === "" "Unable to activate help" === "" "Displayed move is not current" === "" "Could not parse move" === "" "%s:\nError code %d" === "" "Error" === "" "Fatal Error" === "" "Exiting" === "" "%s:\nError code %d" === "" "Note" === "" "Error writing to chess program" === "" "User" === "" "Unknown" === "" "White" === "" "Black" === "" "Save Game to File" === "" "Not implemented" === "" "Shout Text" === "" "SShout/CShout" === "" "Channel 1 Text" === "" "Channel Text" === "" "Kibitz Text" === "" "Tell Text" === "" "Challenge Text" === "" "Request Text" === "" "Seek Text" === "" "Normal Text" === "" "None" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "Information" === "" wclipbrd.c "Unable to convert position to FEN." === "" "Unable to copy FEN to clipboard." === "" "Cannot create temporary file name." === "" "Cannot open temporary file." === "" "Cannot write to temporary file." === "" "Cannot reopen temporary file." === "" "Cannot determine size of file." === "" "Cannot allocate clipboard buffer." === "" "Cannot read from temporary file." === "" "Error reading from temporary file." === "" "Cannot copy text to clipboard" === "" "Unable to allocate memory for clipboard." === "" "Unable to lock clipboard memory." === "" "Cannot unlock clipboard memory." === "" "Cannot open clipboard." === "" "Cannot empty clipboard." === "" "Cannot copy text to clipboard." === "" "Cannot close clipboard." === "" "Unable to paste FEN from clipboard." === "" "Unable to create temporary file." === "" "Error writing to temporary file." === "" "Unable to open clipboard." === "" "No text in clipboard." === "" "Unable to lock clipboard memory." === "" "Unable to allocate memory for text string." === "" "Unable to unlock clipboard memory." === "" "Unable to close clipboard." === "" woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === "" "Can't parse com port settings" === "" "Option Error" === "" "Invalid data rate" === "" "Option Error" === "" "Failed to set comm port state;\r\ninvalid options?" === "" "Failed to set comm port state" === "" "Invalid load game step rate" === "" "Invalid save game file name" === "" "Browse for Auto Save File" === "" "Invalid moves per time control" === "" "Invalid minutes per time control" === "" "Invalid increment" === "" "Invalid initial time" === "" "Changing time control during a game is not implemented" === "" "Variant %s not supported by %s" === "" "Warning: second engine (%s) does not support this!" === "" "Invalid ICS Alarm Time" === "" "Invalid max time per move" === "" "Invalid time-odds factor" === "" "Choose Folder" === "" "Choose Book" === "" "Choose Polyglot Directory" === "" "Choose EGTB Directory:" === "" "Polyglot was not found in the specified folder!" === "" wgamelist.c "No game selected" === "" "Can't go forward any further" === "" "Can't back up any further" === "" "No game list" === "" "Game List" === "" "Game list not loaded or empty" === "" "%s - %d/%d games" === "" wedittags.c "Edit Tags" === "" "Tags" === "" "Error replacing tags." === "" wsettings.c "%s Engine Settings (%s)" === "" "OK" === "" "Cancel" === "" backend.c "bad timeControl option %s" === "" "bad searchTime option %s" === "" ## following to will appear in combinationslike "first engine" "first" === "" "second" === "" "protocol version %d not supported" === "" "Variant %s supported only in ICS mode" === "" "Unknown variant name %s" === "" "Starting chess program" === "" "Could not open comm port %s" === "" "Could not connect to host %s, port %s" === "" "Unknown initialMode %s" === "" "Can't have a match with no chess programs" === "" "Bad game file" === "" "Bad position file" === "" "AnalyzeFile mode requires a game file" === "" "Analysis mode requires a chess engine" === "" "Analysis mode does not work with ICS mode" === "" "MachineWhite mode requires a chess engine" === "" "MachineWhite mode does not work with ICS mode" === "" "MachineBlack mode requires a chess engine" === "" "MachineBlack mode does not work with ICS mode" === "" "TwoMachines mode does not work with ICS mode" === "" "TwoMachines mode requires a chess engine" === "" "Training mode requires a game file" === "" "Error writing to ICS" === "" "Error reading from keyboard" === "" "Got end of file from keyboard" === "" "Error writing to ICS" === "" "Error writing to display" === "" "Error gathering move list: two headers" === "" "Error gathering move list: nested" === "" "Connection closed by ICS" === "" "Error reading from ICS" === "" "Failed to parse board string:\n\"%s\"" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Error gathering move list: extra board" === "" "Illegal move \"%s\" from ICS" === "" "Couldn't parse move \"%s\" from ICS" === "" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "" "You are playing Black" === "" "You are playing White" === "" "It is White's turn" === "" "It is Black's turn" === "" "Displayed position is not current" === "" "Illegal move" === "" "End of game" === "" "Incorrect move" === "" ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === "" "Illegal move \"%s\" (rejected by %s chess program)" === "" "Failed to start %s chess program %s on %s: %s\n" === "" "Error writing to %s chess program" === "" "Error: %s chess program (%s) exited unexpectedly" === "" "Error reading from %s chess program (%s)" === "" "Forfeit due to illegal move" === "" "%s does not support analysis" === "" "Hint: %s" === "" "Machine accepts your draw offer" === "" "Machine offers a draw\nSelect Action / Draw to agree" === "" "%s (only move)" === "" "Ambiguous move in ICS output: \"%s\"" === "" "Illegal move in ICS output: \"%s\"" === "" "Gap in move list" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Variant %s not supported by %s" === "" "Startup failure on '%s'" === "" "Waiting for first chess program" === "" "Waiting for second chess program" === "" "Match %s vs. %s: final score %d-%d-%d" === "" "Stalemate" === "" "Illegal move: %d.%s%s" === "" "Ambiguous move: %d.%s%s" === "" "Can't open \"%s\"" === "" "Cannot build game list" === "" "No more games in this message" === "" "No game has been loaded yet" === "" "Can't back up any further" === "" "Game number out of range" === "" "Can't seek on game file" === "" "Game not found in file" === "" "Bad FEN position in file" === "" "No moves in game" === "" "No position has been loaded yet" === "" "Can't back up any further" === "" "Can't open \"%s\"" === "" "Can't seek on position file" === "" "Position not found in file" === "" "Bad FEN position in file" === "" "Black to play" === "" "White to play" === "" "Can't open \"%s\"" === "" "You have edited the game history.\nUse Reload Same Game and make your move again." === "" "You have entered too many moves.\nBack up to the correct position and try again." === "" "Displayed position is not current.\nStep forward to the correct position and try again." === "" "You have not made a move yet" === "" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "" "No unfinished games" === "" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "" "Failed to invoke cmail" === "" "Waiting for reply from opponent\n" === "" "Still need to make move for game\n" === "" "Still need to make moves for both games\n" === "" "Still need to make moves for all %d games\n" === "" "Still need to make a move for game %s\n" === "" "No unfinished games\n" === "" "Ready to send mail\n" === "" "Still need to make moves for games %s\n" === "" "Edit comment" === "" "Edit comment on %d.%s%s" === "" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "Comenzando modo de anlisis...\nSi este mensaje permanece, su programa de ajedrez no admite anlisis." "It is not White's turn" === "" "It is not Black's turn" === "" "Wait until your turn,\nor select Move Now" === "" "Starting second chess program" === "" "Training mode off" === "" "Training mode on" === "" "Already at end of game" === "" "Warning: You are still playing a game" === "" "Warning: You are still observing a game" === "" "Warning: You are still examining a game" === "" "It is Black's turn" === "" "It is White's turn" === "" "That square is occupied" === "" "There is no pending offer on this move" === "" "Your opponent is not out of time" === "" "Black offers a draw" === "" "White offers a draw" === "" "You must make your move before offering a draw" === "" "You are not examining a game" === "" "You can't revert while pausing" === "" "Wait until your turn,\nor select Move Now" === "" "It is your turn" === "" "Wait until your turn" === "" "No hint available" === "" "Analysis (%s)" === "" "Comment" === "" "Comment on %d.%s%s" === "" "Both flags fell" === "" "White's flag fell" === "" "Black's flag fell" === "" "Bad FEN position in clipboard" === "" "No response from ICS" === "" "You cannot do this while you are playing or observing" === "" "Click in holdings to choose piece" === "" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === "Vn c bi bo d" "White wins on time" === "Trng thng thi gian" "Black wins on time" === "en thng thi gian" "Both players ran out of time" === "Ca hai bn ht thi gian" "White resigns" === "Trng Xin Thua" "Black resigns" === "en Xin Thua" "White mates" === "Trng Chiu Ht" "Black mates" === "en Chiu Ht" "Draw" === "Hoa" "Draw agreed" === "ng y hoa" "Xboard adjudication: King destroyed" === "" "Xboard adjudication: Bare king" === "" "Xboard adjudication: 3rd check" === "" "Xboard adjudication: Stalemate" === "" "Xboard adjudication: Checkmate" === "" "Xboard adjudication: Insufficient mating material" === "" "Xboard adjudication: Trivial draw" === "" "XBoard adjudication: repetition draw" === "" "Xboard adjudication: perpetual checking" === "" "Xboard adjudication: perpetual chasing" === "" "%Xboard adjudication: perpetual chasing of" === "" "Xboard adjudication: 50-move rule" === "" "Draw claim: 50-move rule" === "" "Draw claim: 3-fold repetition" === "" "Draw claim: insufficient mating material" === "" "Xboard adjudication: long game" === "" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "" "Xboard adjudication" === "" "User adjudication" === "" "False win claim: '%s'" === "" "False draw claim: '%s'" === "" "xboard exit" === "" xboard-4.8.0/winboard/res/0000755000175000001440000000000012420374633012401 500000000000000xboard-4.8.0/winboard/res/winboard.exe.manifest0000644000175000001440000000124412420374633016437 00000000000000 Winboard 32-bit application. xboard-4.8.0/winboard/bitmaps/0000755000175000001440000000000012421746530013247 500000000000000xboard-4.8.0/winboard/bitmaps/p33s.bmp0000644000175000001440000000050612420374633014460 00000000000000BMF>(!!} } ??????xboard-4.8.0/winboard/bitmaps/c72w.bmp0000644000175000001440000000163612420374633014457 00000000000000BM>(HH`??????xboard-4.8.0/winboard/bitmaps/f72w.bmp0000644000175000001440000000163612420374633014462 00000000000000BM>(HH`???????xboard-4.8.0/winboard/bitmaps/b58s.bmp0000644000175000001440000000101612420374633014446 00000000000000BM>(::} } ?? ??       ? ? ?xboard-4.8.0/winboard/bitmaps/q72s.bmp0000644000175000001440000000163612420374633014471 00000000000000BM>(HH`} } ????@??@@   ppx?x?x????????xboard-4.8.0/winboard/bitmaps/c58w.bmp0000644000175000001440000000101612420374633014453 00000000000000BM>(::} } ??????xboard-4.8.0/winboard/bitmaps/s72s.bmp0000644000175000001440000000163612420374633014473 00000000000000BM>(HH`??????????????~80|??xboard-4.8.0/winboard/bitmaps/e49w.bmp0000644000175000001440000000070612420374633014462 00000000000000BM>(11 0ǀǀ?>||???xboard-4.8.0/winboard/bitmaps/r80o.bmp0000644000175000001440000000177612420374633014472 00000000000000BM>(PP  ????????????????????????xboard-4.8.0/winboard/bitmaps/n45o.bmp0000644000175000001440000000064612420374633014462 00000000000000BM>(--h} } 888888888x/xxxxx~?]xboard-4.8.0/winboard/bitmaps/r87o.bmp0000644000175000001440000000212212420374633014463 00000000000000BMR>(WW} } ????????xboard-4.8.0/winboard/bitmaps/w72o.bmp0000644000175000001440000000163612420374633014473 00000000000000BM>(HH`??? ρ|??????????????y?p??????xboard-4.8.0/winboard/bitmaps/l45o.bmp0000644000175000001440000000064612420374633014460 00000000000000BM>(--h} } =}}}xboard-4.8.0/winboard/bitmaps/k21w.bmp0000644000175000001440000000022212420374633014447 00000000000000BM>(Txxxx8xboard-4.8.0/winboard/bitmaps/b54s.bmp0000644000175000001440000000075612420374633014454 00000000000000BM>(66} } x0||<| ?00000000xboard-4.8.0/winboard/bitmaps/a58w.bmp0000644000175000001440000000101612420374633014451 00000000000000BM>(::} } ? ????xboard-4.8.0/winboard/bitmaps/wn72s.bmp0000644000175000001440000000163612420374633014655 00000000000000BM>(HH`?? |~??????????~~~~? ?8??????xboard-4.8.0/winboard/bitmaps/r25s.bmp0000644000175000001440000000024212420374633014460 00000000000000BM>(d} } π????????cxboard-4.8.0/winboard/bitmaps/r54o.bmp0000644000175000001440000000075612420374633014470 00000000000000BM>(66} } ????xx>y>>xboard-4.8.0/winboard/bitmaps/m33w.bmp0000644000175000001440000000050612420374633014461 00000000000000BMF>(!!????xboard-4.8.0/winboard/bitmaps/p29s.bmp0000644000175000001440000000026212420374633014464 00000000000000BM>(t} } ????xboard-4.8.0/winboard/bitmaps/n29o.bmp0000644000175000001440000000026212420374633014456 00000000000000BM>(t} } 8888888x{xǽxxx???sxboard-4.8.0/winboard/bitmaps/a37w.bmp0000644000175000001440000000054612420374633014455 00000000000000BMf>(%%(} } xx 8x<???xx888xxboard-4.8.0/winboard/bitmaps/k58o.bmp0000644000175000001440000000101612420374633014453 00000000000000BM>(::} } ??s|??????0?<????xboard-4.8.0/winboard/bitmaps/a64s.bmp0000644000175000001440000000107612420374633014450 00000000000000BM>>(@@  ??g????????xboard-4.8.0/winboard/bitmaps/k80w.bmp0000644000175000001440000000177612420374633014473 00000000000000BM>(PP?????????xboard-4.8.0/winboard/bitmaps/q58s.bmp0000644000175000001440000000101612420374633014465 00000000000000BM>(::} } ???   ppp>x?????@?@?@|@||~?xboard-4.8.0/winboard/bitmaps/b33w.bmp0000644000175000001440000000050612420374633014446 00000000000000BMF>(!!???xboard-4.8.0/winboard/bitmaps/k116o.bmp0000644000175000001440000000357612420374633014543 00000000000000BM~>(tt@} } ????????>???????????~????????0??GG?G??????????>??????????xboard-4.8.0/winboard/bitmaps/a40s.bmp0000644000175000001440000000057612420374633014446 00000000000000BM~>(((@  >?_???xboard-4.8.0/winboard/bitmaps/k87s.bmp0000644000175000001440000000212212420374633014460 00000000000000BMR>(WW} } ??????<xx?<ǀp~<x~88~88~888~88p8~8<|x8~<x|<xp???cハ?ハ?ハハ?8??xboard-4.8.0/winboard/bitmaps/n72o.bmp0000644000175000001440000000163612420374633014462 00000000000000BM>(HH`} } ?????????????s?????σ3q??xboard-4.8.0/winboard/bitmaps/o72o.bmp0000644000175000001440000000163612420374633014463 00000000000000BM>(HH`??>?????????????????????????????????p??xboard-4.8.0/winboard/bitmaps/a54o.bmp0000644000175000001440000000075612420374633014447 00000000000000BM>(66} } 0|<<|0??'c?|||??xboard-4.8.0/winboard/bitmaps/cv37s.bmp0000644000175000001440000000054612420374633014641 00000000000000BMf>(%%(  ??? ''qxboard-4.8.0/winboard/bitmaps/p25o.bmp0000644000175000001440000000024212420374633014452 00000000000000BM>(d} } ߀߀xboard-4.8.0/winboard/bitmaps/f72o.bmp0000644000175000001440000000163612420374633014452 00000000000000BM>(HH`??Gg???(__t?????????<~xboard-4.8.0/winboard/bitmaps/a58o.bmp0000644000175000001440000000101612420374633014441 00000000000000BM>(::} } ? ?G?? ????????xboard-4.8.0/winboard/bitmaps/b29s.bmp0000644000175000001440000000026212420374633014446 00000000000000BM>(t} } 888_xboard-4.8.0/winboard/bitmaps/r25w.bmp0000644000175000001440000000024212420374633014464 00000000000000BM>(d?????????cxboard-4.8.0/winboard/bitmaps/w72w.bmp0000644000175000001440000000163612420374633014503 00000000000000BM>(HH`?????????????xboard-4.8.0/winboard/bitmaps/n58s.bmp0000644000175000001440000000101612420374633014462 00000000000000BM>(::} }  ?`|???<<xxx<???xboard-4.8.0/winboard/bitmaps/l49w.bmp0000644000175000001440000000070612420374633014471 00000000000000BM>(11???????????xboard-4.8.0/winboard/bitmaps/q21o.bmp0000644000175000001440000000022212420374633014445 00000000000000BM>(T  xxxxxxwXڈxboard-4.8.0/winboard/bitmaps/b40s.bmp0000644000175000001440000000057612420374633014447 00000000000000BM~>(((@  >??xboard-4.8.0/winboard/bitmaps/icon_ob.ico0000644000175000001440000000207612420374633015300 00000000000000 0& V( @@  %BPa X (   @@@@0@@0``0`E"*<Q@aA~??( @~??xboard-4.8.0/winboard/bitmaps/h72o.bmp0000644000175000001440000000163612420374633014454 00000000000000BM>(HH`?????????????s??? <>???σ3q??xboard-4.8.0/winboard/bitmaps/q29s.bmp0000644000175000001440000000026212420374633014465 00000000000000BM>(t} }  ?xxxx8888888瘇8}80axxboard-4.8.0/winboard/bitmaps/h49s.bmp0000644000175000001440000000070612420374633014461 00000000000000BM>(1177777777?O/G/Co!oo__߀  ? ߀/s`xboard-4.8.0/winboard/bitmaps/c45o.bmp0000644000175000001440000000064612420374633014447 00000000000000BM>(--h} } xϟx~~ϟxxxboard-4.8.0/winboard/bitmaps/p29o.bmp0000644000175000001440000000026212420374633014460 00000000000000BM>(t} } ϟ?xboard-4.8.0/winboard/bitmaps/r58o.bmp0000644000175000001440000000101612420374633014462 00000000000000BM>(::} } ????????????????????????????????????????????Ϟ|Ϟ|||xboard-4.8.0/winboard/bitmaps/b58o.bmp0000644000175000001440000000101612420374633014442 00000000000000BM>(::} } ? ?G?? ??????????????xboard-4.8.0/winboard/bitmaps/cv33s.bmp0000644000175000001440000000050612420374633014631 00000000000000BMF>(!!} } 88?88????@?@``< 07 @xboard-4.8.0/winboard/bitmaps/c37o.bmp0000644000175000001440000000054612420374633014447 00000000000000BMf>(%%(} } wwww88{{oooo{{88wwwwxboard-4.8.0/winboard/bitmaps/e33s.bmp0000644000175000001440000000050612420374633014445 00000000000000BMF>(!!0XFAÀǀðÀqxboard-4.8.0/winboard/bitmaps/b54w.bmp0000644000175000001440000000075612420374633014460 00000000000000BM>(660|<<|?xboard-4.8.0/winboard/bitmaps/c33w.bmp0000644000175000001440000000050612420374633014447 00000000000000BMF>(!!} } ???π????π???xboard-4.8.0/winboard/bitmaps/r25o.bmp0000644000175000001440000000024212420374633014454 00000000000000BM>(d} } ?ocxboard-4.8.0/winboard/bitmaps/a72s.bmp0000644000175000001440000000163612420374633014451 00000000000000BM>(HH`?~???0???????xboard-4.8.0/winboard/bitmaps/n29s.bmp0000644000175000001440000000026212420374633014462 00000000000000BM>(t} } 8x<xxx `'11{xboard-4.8.0/winboard/bitmaps/r108w.bmp0000644000175000001440000000337612420374633014561 00000000000000BM>(ll??xboard-4.8.0/winboard/bitmaps/unknown_14.ico0000644000175000001440000000044612420374633015672 00000000000000(<<xboard-4.8.0/winboard/bitmaps/a72w.bmp0000644000175000001440000000163612420374633014455 00000000000000BM>(HH`?~?????????xboard-4.8.0/winboard/bitmaps/b80o.bmp0000644000175000001440000000177612420374633014452 00000000000000BM>(PP  0? ~~????????????????xboard-4.8.0/winboard/bitmaps/n64w.bmp0000644000175000001440000000107612420374633014471 00000000000000BM>>(@@???????????@xboard-4.8.0/winboard/bitmaps/w33w.bmp0000644000175000001440000000050612420374633014473 00000000000000BMF>(!!??xboard-4.8.0/winboard/bitmaps/cv64s.bmp0000644000175000001440000000107612420374633014640 00000000000000BM>>(@@} } ??????c@c````0??0p@`8Ãxboard-4.8.0/winboard/bitmaps/analyze2_14.ico0000644000175000001440000000044612420374633015720 00000000000000(wwwwwwwpww?<  <xboard-4.8.0/winboard/bitmaps/board.ico0000644000175000001440000000207612420374633014757 00000000000000 & 0( @{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{( @xboard-4.8.0/winboard/bitmaps/cv54s.bmp0000644000175000001440000000075612420374633014643 00000000000000BM>(66} } ??????????33``p?0?8 pqAaxboard-4.8.0/winboard/bitmaps/p21s.bmp0000644000175000001440000000022212420374633014450 00000000000000BM>(T  xxxxboard-4.8.0/winboard/bitmaps/b129s.bmp0000644000175000001440000000512212420374633014527 00000000000000BMR >( } } ?????????p????xboard-4.8.0/winboard/bitmaps/dk72s.bmp0000644000175000001440000000163612420374633014627 00000000000000BM>(HH`????????ccc??xboard-4.8.0/winboard/bitmaps/k45o.bmp0000644000175000001440000000064612420374633014457 00000000000000BM>(--h} } ߀_p{xxxϟxxboard-4.8.0/winboard/bitmaps/n108o.bmp0000644000175000001440000000337612420374633014545 00000000000000BM>(ll} } ?????????????qpx?????ǟ????????srpxx|>????`xg|#CqGxboard-4.8.0/winboard/bitmaps/n58o.bmp0000644000175000001440000000101612420374633014456 00000000000000BM>(::} } ?????y??????G`p`Dgxboard-4.8.0/winboard/bitmaps/q25w.bmp0000644000175000001440000000024212420374633014463 00000000000000BM>(d"#"#"1c9c8w8ccxboard-4.8.0/winboard/bitmaps/cv33w.bmp0000644000175000001440000000050612420374633014635 00000000000000BMF>(!!} } pppp<x@??xboard-4.8.0/winboard/bitmaps/b116s.bmp0000644000175000001440000000357612420374633014536 00000000000000BM~>(tt@} } @???????@??@?xboard-4.8.0/winboard/bitmaps/h33o.bmp0000644000175000001440000000050612420374633014444 00000000000000BMF>(!!} } }?π߿ππߟߟA?c?gxboard-4.8.0/winboard/bitmaps/cv45s.bmp0000644000175000001440000000064612420374633014641 00000000000000BM>(--h??!~| @ ?? xboard-4.8.0/winboard/bitmaps/dk33s.bmp0000644000175000001440000000050612420374633014617 00000000000000BMF>(!!} } ?????xboard-4.8.0/winboard/bitmaps/r33w.bmp0000644000175000001440000000050612420374633014466 00000000000000BMF>(!!????xboard-4.8.0/winboard/bitmaps/ln72s.bmp0000644000175000001440000000163612421746530014642 00000000000000BM>(HH`?? ???p`?0pf?8f?83; 33? 1# ` ǀ ```afcbccc3c@3c@3c@3cccc cC 0p?`?0c0?c0 f0>00```??xboard-4.8.0/winboard/bitmaps/r37s.bmp0000644000175000001440000000054612420374633014472 00000000000000BMf>(%%(} } xboard-4.8.0/winboard/bitmaps/g72w.bmp0000644000175000001440000000163612420374633014463 00000000000000BM>(HH`} } ???????<>>~?~???????????xboard-4.8.0/winboard/bitmaps/k37o.bmp0000644000175000001440000000054612420374633014457 00000000000000BMf>(%%(} } ?C|pwxxwwx|wxboard-4.8.0/winboard/bitmaps/p40w.bmp0000644000175000001440000000057612420374633014471 00000000000000BM~>(((@??xboard-4.8.0/winboard/bitmaps/a72o.bmp0000644000175000001440000000163612420374633014445 00000000000000BM>(HH`?~?~<????p???????xboard-4.8.0/winboard/bitmaps/wl49s.bmp0000644000175000001440000000070612420374633014654 00000000000000BM>(11?@_ 8>p_p ???xboard-4.8.0/winboard/bitmaps/n25o.bmp0000644000175000001440000000024212420374633014450 00000000000000BM>(d} } {Njπw?Wxboard-4.8.0/winboard/bitmaps/r49s.bmp0000644000175000001440000000070612420374633014473 00000000000000BM>(11} } ?????xboard-4.8.0/winboard/bitmaps/as33o.bmp0000644000175000001440000000050612420374633014620 00000000000000BMF>(!!ހݾ]}ww므߀o{{}]׽{{{߀޽{{ۀxboard-4.8.0/winboard/bitmaps/q45w.bmp0000644000175000001440000000064612420374633014475 00000000000000BM>(--h ``00``00`08x8x|xx|x|~x~x8~~~?||~?xboard-4.8.0/winboard/bitmaps/a33s.bmp0000644000175000001440000000050612420374633014441 00000000000000BMF>(!!} } xboard-4.8.0/winboard/bitmaps/cv64o.bmp0000644000175000001440000000107612420374633014634 00000000000000BM>>(@@} } ???????>???>???>?>?>?39?y?????~?|qgO????ý33xboard-4.8.0/winboard/bitmaps/k21o.bmp0000644000175000001440000000022212420374633014437 00000000000000BM>(T  xxxx8w'xboard-4.8.0/winboard/bitmaps/b95w.bmp0000644000175000001440000000226212420374633014457 00000000000000BM>(__t????????xboard-4.8.0/winboard/bitmaps/l49o.bmp0000644000175000001440000000070612420374633014461 00000000000000BM>(11????????~?xboard-4.8.0/winboard/bitmaps/l40s.bmp0000644000175000001440000000057612420374633014461 00000000000000BM~>(((@  )????xboard-4.8.0/winboard/bitmaps/q129w.bmp0000644000175000001440000000512212420374633014552 00000000000000BMR >( ?88<<<<<<?~~??~~?~~??????????????????xboard-4.8.0/winboard/bitmaps/k45w.bmp0000644000175000001440000000064612420374633014467 00000000000000BM>(--hxx88888xx?xboard-4.8.0/winboard/bitmaps/l54s.bmp0000644000175000001440000000075612420374633014466 00000000000000BM>(66  Ix0?0000000000000???xboard-4.8.0/winboard/bitmaps/c33s.bmp0000644000175000001440000000050612420374633014443 00000000000000BMF>(!!} } ?π77 0??   ?? 077π?xboard-4.8.0/winboard/bitmaps/n72w.bmp0000644000175000001440000000163612420374633014472 00000000000000BM>(HH`?????????p?0p??xboard-4.8.0/winboard/bitmaps/q45o.bmp0000644000175000001440000000064612420374633014465 00000000000000BM>(--h} } O-ٝϝϞooooo{{}x{}x}~x~x8X~~~?}}~?xboard-4.8.0/winboard/bitmaps/n45w.bmp0000644000175000001440000000064612420374633014472 00000000000000BM>(--h888888888xxxxxx~?xboard-4.8.0/winboard/bitmaps/as49o.bmp0000644000175000001440000000070612420374633014631 00000000000000BM>(11o{w߀_￀^z{~o?߿~߀w߀?߿_~~߽߿~~~~߿߿￀?xboard-4.8.0/winboard/bitmaps/k29w.bmp0000644000175000001440000000026212420374633014463 00000000000000BM>(tx88x0`xboard-4.8.0/winboard/bitmaps/as72o.bmp0000644000175000001440000000163612420374633014630 00000000000000BM>(HH`?88Ϗ|~|<<<~????G8<|~~>(@@  ?p?????x??????`q`88`ppp? 0?8899s?pa?<p< 0?3333s?xboard-4.8.0/winboard/bitmaps/cv54o.bmp0000644000175000001440000000075612420374633014637 00000000000000BM>(66} } y>y>x>x>?g????7xboard-4.8.0/winboard/bitmaps/k25w.bmp0000644000175000001440000000024212420374633014455 00000000000000BM>(d?Axboard-4.8.0/winboard/bitmaps/c33o.bmp0000644000175000001440000000050612420374633014437 00000000000000BMF>(!!} } π7?π￀_￀π?7πxboard-4.8.0/winboard/bitmaps/b29o.bmp0000644000175000001440000000026212420374633014442 00000000000000BM>(t} } 8}8?/{}ϟxboard-4.8.0/winboard/bitmaps/h49w.bmp0000644000175000001440000000070612420374633014465 00000000000000BM>(11???`xboard-4.8.0/winboard/bitmaps/q58o.bmp0000644000175000001440000000101612420374633014461 00000000000000BM>(::} } ??? ?<@xlax|?p|?bx?fy?'y'qcssO#qO'y>?'???????@?@|@π|Ϟ||~xboard-4.8.0/winboard/bitmaps/n21w.bmp0000644000175000001440000000022212420374633014452 00000000000000BM>(Tр@ 88xxboard-4.8.0/winboard/bitmaps/k64w.bmp0000644000175000001440000000107612420374633014466 00000000000000BM>>(@@?????????????????xboard-4.8.0/winboard/bitmaps/n80s.bmp0000644000175000001440000000177612420374633014472 00000000000000BM>(PP  <<<<<<<<<<<==yyAy`y y0?y{ ?@` 0??<<x88?<???xboard-4.8.0/winboard/bitmaps/a33w.bmp0000644000175000001440000000050612420374633014445 00000000000000BMF>(!!} } xboard-4.8.0/winboard/bitmaps/p45s.bmp0000644000175000001440000000064612420374633014470 00000000000000BM>(--h} } ????xboard-4.8.0/winboard/bitmaps/c40w.bmp0000644000175000001440000000057612420374633014454 00000000000000BM~>(((@  ~xboard-4.8.0/winboard/bitmaps/p108w.bmp0000644000175000001440000000337612420374633014557 00000000000000BM>(ll????xboard-4.8.0/winboard/bitmaps/k54w.bmp0000644000175000001440000000075612420374633014471 00000000000000BM>(66??????||<<<<<<|| |xboard-4.8.0/winboard/bitmaps/k40s.bmp0000644000175000001440000000057612420374633014460 00000000000000BM~>(((@  ? x0_}?/6" k I @"0oϟxboard-4.8.0/winboard/bitmaps/n54w.bmp0000644000175000001440000000075612420374633014474 00000000000000BM>(66|<<<<<<<<<<<|||?|||p? >?xboard-4.8.0/winboard/bitmaps/f72s.bmp0000644000175000001440000000163612420374633014456 00000000000000BM>(HH`9?p?????????xboard-4.8.0/winboard/bitmaps/b116o.bmp0000644000175000001440000000357612420374633014532 00000000000000BM~>(tt@} } ?p??@???A??????????????xboard-4.8.0/winboard/bitmaps/n25w.bmp0000644000175000001440000000024212420374633014460 00000000000000BM>(dx?Gxboard-4.8.0/winboard/bitmaps/c37w.bmp0000644000175000001440000000054612420374633014457 00000000000000BMf>(%%(} } 8888xboard-4.8.0/winboard/bitmaps/r95s.bmp0000644000175000001440000000226212420374633014473 00000000000000BM>(__t} } ???????????xboard-4.8.0/winboard/bitmaps/n116w.bmp0000644000175000001440000000357612420374633014556 00000000000000BM~>(tt@??p0????? ????xboard-4.8.0/winboard/bitmaps/p40s.bmp0000644000175000001440000000057612420374633014465 00000000000000BM~>(((@  ??xboard-4.8.0/winboard/bitmaps/k116s.bmp0000644000175000001440000000357612420374633014547 00000000000000BM~>(tt@} } ??x?????????x??????????? ?????>>xqx8?<?8?x?p???øpøxǀ<<8x||??88>888?8?88??xboard-4.8.0/winboard/bitmaps/l72w.bmp0000644000175000001440000000163612420374633014470 00000000000000BM>(HH`??????xboard-4.8.0/winboard/bitmaps/r129w.bmp0000644000175000001440000000512212420374633014553 00000000000000BMR >( ?????????xboard-4.8.0/winboard/bitmaps/l37s.bmp0000644000175000001440000000054612420374633014464 00000000000000BMf>(%%(} } W# ? ? ?   xboard-4.8.0/winboard/bitmaps/q87w.bmp0000644000175000001440000000212212420374633014472 00000000000000BMR>(WW????0008888><x>||~||~||~>?>???xboard-4.8.0/winboard/bitmaps/b64o.bmp0000644000175000001440000000107612420374633014445 00000000000000BM>>(@@  ???O???xboard-4.8.0/winboard/bitmaps/icon_w.bmp0000644000175000001440000000027612420374633015152 00000000000000BM>(   ???=77 `@0xboard-4.8.0/winboard/bitmaps/n49o.bmp0000644000175000001440000000070612420374633014463 00000000000000BM>(11} } /πππππ߀??.nxboard-4.8.0/winboard/bitmaps/n45s.bmp0000644000175000001440000000064612420374633014466 00000000000000BM>(--h} } xxxxxxxxxxG? ?/_@xboard-4.8.0/winboard/bitmaps/e129o.bmp0000644000175000001440000000512212420374633014526 00000000000000BMR >( ????????yyy<q<?|I>?<<x~y~?ǟǟǏ?>|y9?????><<|||yyyyyyyy998<??0????xboard-4.8.0/winboard/bitmaps/q40s.bmp0000644000175000001440000000057612420374633014466 00000000000000BM~>(((@  ?>>? A`A`xboard-4.8.0/winboard/bitmaps/b45s.bmp0000644000175000001440000000064612420374633014452 00000000000000BM>(--h} } x88x????????xboard-4.8.0/winboard/bitmaps/k49s.bmp0000644000175000001440000000070612420374633014464 00000000000000BM>(11} } 9#C??@O@'@`   P H$b#/߀~4??'xboard-4.8.0/winboard/bitmaps/k129w.bmp0000644000175000001440000000512212420374633014544 00000000000000BMR >( ??????p???????????????????xboard-4.8.0/winboard/bitmaps/b40o.bmp0000644000175000001440000000057612420374633014443 00000000000000BM~>(((@  >?o>xboard-4.8.0/winboard/bitmaps/p49o.bmp0000644000175000001440000000070612420374633014465 00000000000000BM>(11} } xboard-4.8.0/winboard/bitmaps/b129o.bmp0000644000175000001440000000512212420374633014523 00000000000000BMR >( } } ????????????????????????????????????????xboard-4.8.0/winboard/bitmaps/cv37o.bmp0000644000175000001440000000054612420374633014635 00000000000000BMf>(%%(  <www?y???߯_? ?xboard-4.8.0/winboard/bitmaps/w33o.bmp0000644000175000001440000000050612420374633014463 00000000000000BMF>(!!?߀׀?cˀ;߀xboard-4.8.0/winboard/bitmaps/n116s.bmp0000644000175000001440000000357612420374633014552 00000000000000BM~>(tt@} } 0?`000xx?||<?0>>?>?|?|| >|??~>>??????xboard-4.8.0/winboard/bitmaps/wp33o.bmp0000644000175000001440000000050612420374633014643 00000000000000BMF>(!!?߀׀?cˀ;߀xboard-4.8.0/winboard/bitmaps/r29s.bmp0000644000175000001440000000026212420374633014466 00000000000000BM>(t} } xxx8a8axboard-4.8.0/winboard/bitmaps/q40o.bmp0000644000175000001440000000057612420374633014462 00000000000000BM~>(((@  xC|O}>y>y]znݻonݻoݻׯxboard-4.8.0/winboard/bitmaps/q54w.bmp0000644000175000001440000000075612420374633014477 00000000000000BM>(66????????  <>~~| ~? ~? xx p?8 <???>xboard-4.8.0/winboard/bitmaps/n33s.bmp0000644000175000001440000000050612420374633014456 00000000000000BMF>(!!} } |>777'oo@O߀@@?0gxboard-4.8.0/winboard/bitmaps/r108o.bmp0000644000175000001440000000337612420374633014551 00000000000000BM>(ll} } ??????????????xboard-4.8.0/winboard/bitmaps/b108w.bmp0000644000175000001440000000337612420374633014541 00000000000000BM>(ll???????????xboard-4.8.0/winboard/bitmaps/k95w.bmp0000644000175000001440000000226212420374633014470 00000000000000BM>(__t?????????????????>?xboard-4.8.0/winboard/bitmaps/b72s.bmp0000644000175000001440000000163612420374633014452 00000000000000BM>(HH`} } ?<??????<<???xboard-4.8.0/winboard/bitmaps/q37w.bmp0000644000175000001440000000054612420374633014475 00000000000000BMf>(%%(xxÎxǏxǏ?8>߾8xboard-4.8.0/winboard/bitmaps/r45o.bmp0000644000175000001440000000064612420374633014466 00000000000000BM>(--h|}}>xboard-4.8.0/winboard/bitmaps/r72s.bmp0000644000175000001440000000163612420374633014472 00000000000000BM>(HH`} } ????????xboard-4.8.0/winboard/bitmaps/n21o.bmp0000644000175000001440000000022212420374633014442 00000000000000BM>(T  ?џOϯϘ88xCxboard-4.8.0/winboard/bitmaps/o49s.bmp0000644000175000001440000000070612420374633014470 00000000000000BM>(11~?~?~< '''@@??xboard-4.8.0/winboard/bitmaps/c64o.bmp0000644000175000001440000000107612420374633014446 00000000000000BM>>(@@  ?O????|>O??ϟ??g'g?ϟ???????xboard-4.8.0/winboard/bitmaps/icon_o.ico0000644000175000001440000000050612420374633015132 00000000000000 0( @~?gxboard-4.8.0/winboard/bitmaps/dk33o.bmp0000644000175000001440000000050612420374633014613 00000000000000BMF>(!!} } ?߀߀߀xboard-4.8.0/winboard/bitmaps/o33w.bmp0000644000175000001440000000050612420374633014463 00000000000000BMF>(!!?xboard-4.8.0/winboard/bitmaps/q25o.bmp0000644000175000001440000000024212420374633014453 00000000000000BM>(d} } ߀ǀ7ݛꪫꪫ֪k9k8Nw9nck_xboard-4.8.0/winboard/bitmaps/ws49o.bmp0000644000175000001440000000070612420374633014657 00000000000000BM>(11?߀o??c߀_߀߀߀??xboard-4.8.0/winboard/bitmaps/n33o.bmp0000644000175000001440000000050612420374633014452 00000000000000BMF>(!!} } }?πππߟߟ??Ogxboard-4.8.0/winboard/bitmaps/wl49o.bmp0000644000175000001440000000070612420374633014650 00000000000000BM>(11?߀o??s߀_s߀߀߀??xboard-4.8.0/winboard/bitmaps/p72s.bmp0000644000175000001440000000163612420374633014470 00000000000000BM>(HH`} } ???????????xboard-4.8.0/winboard/bitmaps/k72s.bmp0000644000175000001440000000163612420374633014463 00000000000000BM>(HH`} } 8??<<????`?ǃfx8fpf?f?ÀÀ<<fpf88?p?>Ã|?y?ß?~?xboard-4.8.0/winboard/bitmaps/c40s.bmp0000644000175000001440000000057612420374633014450 00000000000000BM~>(((@  ~~A#''#! @~xboard-4.8.0/winboard/bitmaps/as33w.bmp0000644000175000001440000000050612420374633014630 00000000000000BMF>(!!AA??xboard-4.8.0/winboard/bitmaps/p54w.bmp0000644000175000001440000000075612420374633014476 00000000000000BM>(66????xboard-4.8.0/winboard/bitmaps/k45s.bmp0000644000175000001440000000064612420374633014463 00000000000000BM>(--h} } ǀ_Goxx8 @@(xHxL ~PS\__ȟ?xboard-4.8.0/winboard/bitmaps/l72o.bmp0000644000175000001440000000163612420374633014460 00000000000000BM>(HH`"?c????????>>xboard-4.8.0/winboard/bitmaps/p58o.bmp0000644000175000001440000000101612420374633014460 00000000000000BM>(::} } ??????xboard-4.8.0/winboard/bitmaps/h49o.bmp0000644000175000001440000000070612420374633014455 00000000000000BM>(11/πππππ߀??|?x`?.nxboard-4.8.0/winboard/bitmaps/n95o.bmp0000644000175000001440000000226212420374633014463 00000000000000BM>(__t} } ??????????????????ǟ???? ?xx(11???߀߀߀??߿o__o߿??߀߀߀???xboard-4.8.0/winboard/bitmaps/k54s.bmp0000644000175000001440000000075612420374633014465 00000000000000BM>(66} } ??????~?????8qp8||<<<<3<1<x|xx<| |yxboard-4.8.0/winboard/bitmaps/r72o.bmp0000644000175000001440000000163612420374633014466 00000000000000BM>(HH`} } ?????????~?~?~?~?~?xboard-4.8.0/winboard/bitmaps/r45s.bmp0000644000175000001440000000064612420374633014472 00000000000000BM>(--h????>>>xboard-4.8.0/winboard/bitmaps/r54w.bmp0000644000175000001440000000075612420374633014500 00000000000000BM>(66??>>>xboard-4.8.0/winboard/bitmaps/b54o.bmp0000644000175000001440000000075612420374633014450 00000000000000BM>(66} } 0|<<|0??'c???01yy1xboard-4.8.0/winboard/bitmaps/a58s.bmp0000644000175000001440000000101612420374633014445 00000000000000BM>(::} } ? ???  ?      xboard-4.8.0/winboard/bitmaps/u49o.bmp0000644000175000001440000000070612420374633014472 00000000000000BM>(11&π{π}πππ߀??w.wnxboard-4.8.0/winboard/bitmaps/u72w.bmp0000644000175000001440000000163612420374633014501 00000000000000BM>(HH`?A???~????p?@0p???xboard-4.8.0/winboard/bitmaps/g72s.bmp0000644000175000001440000000163612420374633014457 00000000000000BM>(HH`} } ???????????8?8?<<?|?~~xboard-4.8.0/winboard/bitmaps/o49o.bmp0000644000175000001440000000070612420374633014464 00000000000000BM>(11~?>߀߀߀߀߀߀߀߀߀߀߀߀ǀ׀ǀ??π??xboard-4.8.0/winboard/bitmaps/k108s.bmp0000644000175000001440000000337612420374633014546 00000000000000BM>(ll} } ???>?x?>q>q|qqqx8?(PP   y ?|>????????????????xboard-4.8.0/winboard/bitmaps/as49s.bmp0000644000175000001440000000070612420374633014635 00000000000000BM>(11?xp ? _?@@ ?A "p? ?@@? "@A@ ?????????xboard-4.8.0/winboard/bitmaps/b25w.bmp0000644000175000001440000000024212420374633014444 00000000000000BM>(d>{???xboard-4.8.0/winboard/bitmaps/k49w.bmp0000644000175000001440000000070612420374633014470 00000000000000BM>(11?0?xboard-4.8.0/winboard/bitmaps/e33w.bmp0000644000175000001440000000050612420374633014451 00000000000000BMF>(!!@ÀǀÀÀxboard-4.8.0/winboard/bitmaps/c40o.bmp0000644000175000001440000000057612420374633014444 00000000000000BM~>(((@  ~~~}}~~xboard-4.8.0/winboard/bitmaps/n29w.bmp0000644000175000001440000000026212420374633014466 00000000000000BM>(t8888888xxx<xxx?#sxboard-4.8.0/winboard/bitmaps/l37o.bmp0000644000175000001440000000054612420374633014460 00000000000000BMf>(%%(} } W߿߿߿wwwxboard-4.8.0/winboard/bitmaps/b37s.bmp0000644000175000001440000000054612420374633014452 00000000000000BMf>(%%(} } xx 8x<????     ??xboard-4.8.0/winboard/bitmaps/c54s.bmp0000644000175000001440000000075612420374633014455 00000000000000BM>(66} } 1yy1??<?x<8p00`` ? ?  ??``008p<??<1yy1xboard-4.8.0/winboard/bitmaps/k33s.bmp0000644000175000001440000000050612420374633014453 00000000000000BMF>(!!} } ?p??`?????O@'@@   P ,#,/?xboard-4.8.0/winboard/bitmaps/o33o.bmp0000644000175000001440000000050612420374633014453 00000000000000BMF>(!!w?xboard-4.8.0/winboard/bitmaps/wn72o.bmp0000644000175000001440000000163612420374633014651 00000000000000BM>(HH`??? ρ|??????????y?p??????xboard-4.8.0/winboard/bitmaps/cv45w.bmp0000644000175000001440000000064612420374633014645 00000000000000BM>(--h?>|x??xboard-4.8.0/winboard/bitmaps/cross.ico0000644000175000001440000000137612420374633015023 00000000000000 ( @ ϙϙxboard-4.8.0/winboard/bitmaps/q116s.bmp0000644000175000001440000000357612420374633014555 00000000000000BM~>(tt@} } ?@????????  <<~<~<>>~??????????xboard-4.8.0/winboard/bitmaps/s49w.bmp0000644000175000001440000000070612420374633014500 00000000000000BM>(11??π࿀?????xboard-4.8.0/winboard/bitmaps/dk49w.bmp0000644000175000001440000000070612420374633014634 00000000000000BM>(11??????xboard-4.8.0/winboard/bitmaps/e49s.bmp0000644000175000001440000000070612420374633014456 00000000000000BM>(11Y.3]naq1ǀǀ ?>}|        C???xboard-4.8.0/winboard/bitmaps/g33w.bmp0000644000175000001440000000050612420374633014453 00000000000000BMF>(!!} }  !a a ??ߟÇÇxboard-4.8.0/winboard/bitmaps/n21s.bmp0000644000175000001440000000022212420374633014446 00000000000000BM>(T  ɀ!xx xboard-4.8.0/winboard/bitmaps/q49s.bmp0000644000175000001440000000070612420374633014472 00000000000000BM>(11} } ;߀????  8 8 x<<||π|π???????xboard-4.8.0/winboard/bitmaps/b80w.bmp0000644000175000001440000000177612420374633014462 00000000000000BM>(PP??????????xboard-4.8.0/winboard/bitmaps/icon_ow.ico0000644000175000001440000000207612420374633015325 00000000000000 0& V( @?=/'g: ~??( @~??xboard-4.8.0/winboard/bitmaps/white_14.ico0000644000175000001440000000044612420374633015313 00000000000000(<  <xboard-4.8.0/winboard/bitmaps/b87s.bmp0000644000175000001440000000212212420374633014447 00000000000000BMR>(WW} } |??? ??888888888888?????xboard-4.8.0/winboard/bitmaps/r80w.bmp0000644000175000001440000000177612420374633014502 00000000000000BM>(PP?xboard-4.8.0/winboard/bitmaps/clock_14.ico0000644000175000001440000000044612420374633015266 00000000000000(?|<  <|xboard-4.8.0/winboard/bitmaps/v49o.bmp0000644000175000001440000000070612420374633014473 00000000000000BM>(11??[;π?Ǜxboard-4.8.0/winboard/bitmaps/p80w.bmp0000644000175000001440000000177612420374633014500 00000000000000BM>(PP????xboard-4.8.0/winboard/bitmaps/k72w.bmp0000644000175000001440000000163612420374633014467 00000000000000BM>(HH`????????x???xboard-4.8.0/winboard/bitmaps/g49s.bmp0000644000175000001440000000070612420374633014460 00000000000000BM>(11} } ???p?@???xboard-4.8.0/winboard/bitmaps/c58o.bmp0000644000175000001440000000101612420374633014443 00000000000000BM>(::} } >>???ss?s??>?ϟ?g?O?O?O?gϟ?>???sss???>>xboard-4.8.0/winboard/bitmaps/wp33s.bmp0000644000175000001440000000050612420374633014647 00000000000000BMF>(!!?'<|3CÀ 0?xboard-4.8.0/winboard/bitmaps/q87s.bmp0000644000175000001440000000212212420374633014466 00000000000000BMR>(WW} } ?????00088>88>||~||~||~~>?>???xboard-4.8.0/winboard/bitmaps/k108o.bmp0000644000175000001440000000337612420374633014542 00000000000000BM>(ll} } ??0>????`|???????????????????q??xboard-4.8.0/winboard/bitmaps/m33o.bmp0000644000175000001440000000050612420374633014451 00000000000000BMF>(!!?? ߀߀xboard-4.8.0/winboard/bitmaps/cv40s.bmp0000644000175000001440000000057612420374633014636 00000000000000BM~>(((@  ?g8xboard-4.8.0/winboard/bitmaps/b21s.bmp0000644000175000001440000000022212420374633014432 00000000000000BM>(T  p  xboard-4.8.0/winboard/bitmaps/r40o.bmp0000644000175000001440000000057612420374633014463 00000000000000BM~>(((@  ??xboard-4.8.0/winboard/bitmaps/r87w.bmp0000644000175000001440000000212212420374633014473 00000000000000BMR>(WW???????xboard-4.8.0/winboard/bitmaps/l54o.bmp0000644000175000001440000000075612420374633014462 00000000000000BM>(66  ????<ϟϟ???yyy333xboard-4.8.0/winboard/bitmaps/v33o.bmp0000644000175000001440000000050612420374633014462 00000000000000BMF>(!!π~{ x?|xboard-4.8.0/winboard/bitmaps/wp72s.bmp0000644000175000001440000000163612420374633014657 00000000000000BM>(HH`?? |~???????? 8? ????xboard-4.8.0/winboard/bitmaps/v49s.bmp0000644000175000001440000000070612420374633014477 00000000000000BM>(11@@ _ ` ?C @8?8d d?xboard-4.8.0/winboard/bitmaps/q95o.bmp0000644000175000001440000000226212420374633014466 00000000000000BM>(__t} } ???x<???????? `@??` ?8889?>?~??~????ǏǏǏ㏏Ǐ??G???GGG>?????> >?~?~?~?x<xboard-4.8.0/winboard/bitmaps/b25o.bmp0000644000175000001440000000024212420374633014434 00000000000000BM>(d} } >{Ƀ߀߀߀߀߀>xboard-4.8.0/winboard/bitmaps/l45w.bmp0000644000175000001440000000064612420374633014470 00000000000000BM>(--h} } ????xboard-4.8.0/winboard/bitmaps/ws33s.bmp0000644000175000001440000000050612420374633014652 00000000000000BMF>(!!?'<|3C@ÀC 0?xboard-4.8.0/winboard/bitmaps/r64o.bmp0000644000175000001440000000107612420374633014465 00000000000000BM>>(@@  ?????????????ϟ?ϟ???xboard-4.8.0/winboard/bitmaps/b108o.bmp0000644000175000001440000000337612420374633014531 00000000000000BM>(ll} } ???????????????????????xboard-4.8.0/winboard/bitmaps/r21o.bmp0000644000175000001440000000022212420374633014446 00000000000000BM>(T  88xxx!xxxboard-4.8.0/winboard/bitmaps/q33o.bmp0000644000175000001440000000050612420374633014455 00000000000000BMF>(!!} } ?߀???߀?O( o淀ַ׀׀箺瞼Ϟ~_}9}>xboard-4.8.0/winboard/bitmaps/cv64w.bmp0000644000175000001440000000107612420374633014644 00000000000000BM>>(@@} } ?????????????~|p`@???xboard-4.8.0/winboard/bitmaps/v49w.bmp0000644000175000001440000000070612420374633014503 00000000000000BM>(11??C??xboard-4.8.0/winboard/bitmaps/n49s.bmp0000644000175000001440000000070612420374633014467 00000000000000BM>(11} } 77777777?//!ooo?__߀@   /0s0xxboard-4.8.0/winboard/bitmaps/f33s.bmp0000644000175000001440000000050612420374633014446 00000000000000BMF>(!!} } ;?#??xboard-4.8.0/winboard/bitmaps/wn33s.bmp0000644000175000001440000000050612420374633014645 00000000000000BMF>(!!?'<|3CÀ 0?xboard-4.8.0/winboard/bitmaps/p37s.bmp0000644000175000001440000000054612420374633014470 00000000000000BMf>(%%(} } ?xboard-4.8.0/winboard/bitmaps/b95o.bmp0000644000175000001440000000226212420374633014447 00000000000000BM>(__t} } G??????x<??? ???????xboard-4.8.0/winboard/bitmaps/black_14.ico0000644000175000001440000000044612420374633015247 00000000000000(<  <xboard-4.8.0/winboard/bitmaps/k25o.bmp0000644000175000001440000000024212420374633014445 00000000000000BM>(d} } ?ooπ/]xboard-4.8.0/winboard/bitmaps/m49s.bmp0000644000175000001440000000070612420374633014466 00000000000000BM>(11??|~?0??????xboard-4.8.0/winboard/bitmaps/a64w.bmp0000644000175000001440000000107612420374633014454 00000000000000BM>>(@@  ????????xboard-4.8.0/winboard/bitmaps/q21s.bmp0000644000175000001440000000022212420374633014451 00000000000000BM>(T  xxxxx8888ȈȈوxboard-4.8.0/winboard/bitmaps/a49w.bmp0000644000175000001440000000070612420374633014456 00000000000000BM>(11?????xboard-4.8.0/winboard/bitmaps/b64s.bmp0000644000175000001440000000107612420374633014451 00000000000000BM>>(@@  ??@????xboard-4.8.0/winboard/bitmaps/q64s.bmp0000644000175000001440000000107612420374633014470 00000000000000BM>>(@@  ??~~????   `pp???????????????xboard-4.8.0/winboard/bitmaps/b45w.bmp0000644000175000001440000000064612420374633014456 00000000000000BM>(--hx88x???????xboard-4.8.0/winboard/bitmaps/README.bitmaps0000644000175000001440000000164412420374633015512 00000000000000This directory provides bitmaps with the same size and naming conventions as those distributed till xboard-3.** These bitmaps are distributed under the GNU GENERAL PUBLIC LICENSE coming with xboard. The bitmaps contained herein were converted from my MetaFont version of chess font. These are designed very well to deliver good rastered images on low resolution devices. The general shape of these fonts are designed after very old typefaces used in printing chess books. They are not as fancy as the currently used bitmaps of xboard, but I like them in their 'san serif'-ness - may be others too. The MetaFont source of this font may be obtained from me under the GNU GENERAL PUBLIC LICENSE. To convert the pk-Files to bitmaps I used the conversion tool mftobdf to generate X11-bdf - fonts, and then used a small C program, to write the xbm-files. 5.Feb.1994 Elmar Bartel bartel@informatik.tu-muenchen.de xboard-4.8.0/winboard/bitmaps/q49w.bmp0000644000175000001440000000070612420374633014476 00000000000000BM>(11????  8 88x<<||π|π???????xboard-4.8.0/winboard/bitmaps/q64w.bmp0000644000175000001440000000107612420374633014474 00000000000000BM>>(@@?????   ppp???????????????xboard-4.8.0/winboard/bitmaps/q95w.bmp0000644000175000001440000000226212420374633014476 00000000000000BM>(__t??????????????????>?????>????xboard-4.8.0/winboard/bitmaps/wp72o.bmp0000644000175000001440000000163612420374633014653 00000000000000BM>(HH`??? ρ|??????????y?p??????xboard-4.8.0/winboard/bitmaps/c49s.bmp0000644000175000001440000000070612420374633014454 00000000000000BM>(11???߀߀߀?8 @@ 8?߀߀߀???xboard-4.8.0/winboard/bitmaps/b49o.bmp0000644000175000001440000000070612420374633014447 00000000000000BM>(11} } wx??`??xboard-4.8.0/winboard/bitmaps/b72o.bmp0000644000175000001440000000163612420374633014446 00000000000000BM>(HH`} } ?~?~<????p???~<<~~~~<xboard-4.8.0/winboard/bitmaps/w72s.bmp0000644000175000001440000000163612420374633014477 00000000000000BM>(HH`?? |~?????????? 8? ????xboard-4.8.0/winboard/bitmaps/r64s.bmp0000644000175000001440000000107612420374633014471 00000000000000BM>>(@@  ????????????????xboard-4.8.0/winboard/bitmaps/a45s.bmp0000644000175000001440000000064612420374633014451 00000000000000BM>(--h} } x88xx?xx??xboard-4.8.0/winboard/bitmaps/r29o.bmp0000644000175000001440000000026212420374633014462 00000000000000BM>(t} } xxx m8axboard-4.8.0/winboard/bitmaps/s72o.bmp0000644000175000001440000000163612420374633014467 00000000000000BM>(HH`????????????????~81???xboard-4.8.0/winboard/bitmaps/w49s.bmp0000644000175000001440000000070612420374633014500 00000000000000BM>(11?@_ 8>pp_ ???xboard-4.8.0/winboard/bitmaps/ln33o.bmp0000644000175000001440000000050612421746530014626 00000000000000BMF>(!!ۯck7{܀Z;Zj}ۀޯso~gxboard-4.8.0/winboard/bitmaps/q95s.bmp0000644000175000001440000000226212420374633014472 00000000000000BM>(__t} } ???||???????????????>????>????xboard-4.8.0/winboard/bitmaps/p108o.bmp0000644000175000001440000000337612420374633014547 00000000000000BM>(ll} } ????????????xboard-4.8.0/winboard/bitmaps/l64s.bmp0000644000175000001440000000107612420374633014463 00000000000000BM>>(@@  ??????????????xboard-4.8.0/winboard/bitmaps/r95o.bmp0000644000175000001440000000226212420374633014467 00000000000000BM>(__t} } ???xboard-4.8.0/winboard/bitmaps/k58s.bmp0000644000175000001440000000101612420374633014457 00000000000000BM>(::} } ?Cq?83p33sacs333ps8s|?3303<?3?3?xboard-4.8.0/winboard/bitmaps/r37o.bmp0000644000175000001440000000054612420374633014466 00000000000000BMf>(%%(} } p;wwxboard-4.8.0/winboard/bitmaps/dk72o.bmp0000644000175000001440000000163612420374633014623 00000000000000BM>(HH`?????????~?~?~?~?~???~xboard-4.8.0/winboard/bitmaps/b45o.bmp0000644000175000001440000000064612420374633014446 00000000000000BM>(--h} } xx=ϟ??xboard-4.8.0/winboard/bitmaps/p72o.bmp0000644000175000001440000000163612420374633014464 00000000000000BM>(HH`} } ????????????????<(11@DxB| ???@@@@pp`xboard-4.8.0/winboard/bitmaps/l58w.bmp0000644000175000001440000000101612420374633014464 00000000000000BM>(::  ??????xboard-4.8.0/winboard/bitmaps/c54o.bmp0000644000175000001440000000075612420374633014451 00000000000000BM>(66} } 1yy1I??<??x?<????????ϟϟ??x?<??<I1yy1xboard-4.8.0/winboard/bitmaps/trans_14.ico0000644000175000001440000000044612420374633015322 00000000000000(xboard-4.8.0/winboard/bitmaps/r21s.bmp0000644000175000001440000000022212420374633014452 00000000000000BM>(T  88xxxxxxboard-4.8.0/winboard/bitmaps/p64w.bmp0000644000175000001440000000107612420374633014473 00000000000000BM>>(@@?????????xboard-4.8.0/winboard/bitmaps/r54s.bmp0000644000175000001440000000075612420374633014474 00000000000000BM>(66} } ?>>>xboard-4.8.0/winboard/bitmaps/ws33o.bmp0000644000175000001440000000050612420374633014646 00000000000000BMF>(!!?߀׀?c~_ˀ;߀xboard-4.8.0/winboard/bitmaps/v72o.bmp0000644000175000001440000000163612420374633014472 00000000000000BM>(HH`><|xyy9??g?'a ??s?? ?a3???xboard-4.8.0/winboard/bitmaps/p49s.bmp0000644000175000001440000000070612420374633014471 00000000000000BM>(11} } ?xboard-4.8.0/winboard/bitmaps/h33w.bmp0000644000175000001440000000050612420374633014454 00000000000000BMF>(!!} } |>??xboard-4.8.0/winboard/bitmaps/k64o.bmp0000644000175000001440000000107612420374633014456 00000000000000BM>>(@@  ????????????????????????xboard-4.8.0/winboard/bitmaps/w49w.bmp0000644000175000001440000000070612420374633014504 00000000000000BM>(11???xboard-4.8.0/winboard/bitmaps/r116o.bmp0000644000175000001440000000357612420374633014552 00000000000000BM~>(tt@} } ???????????????????????????????????????xboard-4.8.0/winboard/bitmaps/b64w.bmp0000644000175000001440000000107612420374633014455 00000000000000BM>>(@@????xboard-4.8.0/winboard/bitmaps/m72o.bmp0000644000175000001440000000163612420374633014461 00000000000000BM>(HH`8?`??? ??????>>>>??>?xboard-4.8.0/winboard/bitmaps/e72w.bmp0000644000175000001440000000163612420374633014461 00000000000000BM>(HH`?p 80?x?|?~????xboard-4.8.0/winboard/bitmaps/ln49o.bmp0000644000175000001440000000070612421746530014637 00000000000000BM>(11O-4qyomGo7wn6?ހހހހ݀݀ۀۀ݀݀~ۀ?7>π߿;?῀?xxboard-4.8.0/winboard/bitmaps/c72s.bmp0000644000175000001440000000163612420374633014453 00000000000000BM>(HH`8|||8??8q|||8qp8 00p````p088p??8>|>|>|8??>>>xboard-4.8.0/winboard/bitmaps/f49o.bmp0000644000175000001440000000070612420374633014453 00000000000000BM>(11??߀π?߀߀߀߀߀??}{o?xboard-4.8.0/winboard/bitmaps/n40o.bmp0000644000175000001440000000057612420374633014457 00000000000000BM~>(((@  _;??7xboard-4.8.0/winboard/bitmaps/ws72o.bmp0000644000175000001440000000163612420374633014656 00000000000000BM>(HH`??? ρ|?????????????y?p??????xboard-4.8.0/winboard/bitmaps/p64s.bmp0000644000175000001440000000107612420374633014467 00000000000000BM>>(@@  ?????????xboard-4.8.0/winboard/bitmaps/w49o.bmp0000644000175000001440000000070612420374633014474 00000000000000BM>(11??߀o??πo߀߀?xboard-4.8.0/winboard/bitmaps/r108s.bmp0000644000175000001440000000337612420374633014555 00000000000000BM>(ll} } ????xboard-4.8.0/winboard/bitmaps/wn49s.bmp0000644000175000001440000000070612420374633014656 00000000000000BM>(11?@_ 8><_< ???xboard-4.8.0/winboard/bitmaps/e33o.bmp0000644000175000001440000000050612420374633014441 00000000000000BMF>(!!=6ZVXۀ׿ۏ{ÿ}}}~xboard-4.8.0/winboard/bitmaps/q29o.bmp0000644000175000001440000000026212420374633014461 00000000000000BM>(t} }  ?x(%%(} } xo?<uuvvxvxۮxׯ^xׯ?8>Xﯾ߾8vwxboard-4.8.0/winboard/bitmaps/n64o.bmp0000644000175000001440000000107612420374633014461 00000000000000BM>>(@@  ?????8?|??????O?ß??y?Nx?Nxboard-4.8.0/winboard/bitmaps/l37w.bmp0000644000175000001440000000054612420374633014470 00000000000000BMf>(%%(} } ???xboard-4.8.0/winboard/bitmaps/n72s.bmp0000644000175000001440000000163612420374633014466 00000000000000BM>(HH`} } ?????????ppx?x0<<x<<yyy?<x|?<?8|xboard-4.8.0/winboard/bitmaps/o72s.bmp0000644000175000001440000000163612420374633014467 00000000000000BM>(HH`???????????xboard-4.8.0/winboard/bitmaps/a37o.bmp0000644000175000001440000000054612420374633014445 00000000000000BMf>(%%(} } xx'x</??xxxsxboard-4.8.0/winboard/bitmaps/b21o.bmp0000644000175000001440000000022212420374633014426 00000000000000BM>(T   ps'xboard-4.8.0/winboard/bitmaps/k49o.bmp0000644000175000001440000000070612420374633014460 00000000000000BM>(11} } =? #?߀߀7?xboard-4.8.0/winboard/bitmaps/l58s.bmp0000644000175000001440000000101612420374633014460 00000000000000BM>(::  ?   ? ?       ???xboard-4.8.0/winboard/bitmaps/r29w.bmp0000644000175000001440000000026212420374633014472 00000000000000BM>(txxx8a8axboard-4.8.0/winboard/bitmaps/n54o.bmp0000644000175000001440000000075612420374633014464 00000000000000BM>(66} } |<<<<<<<<<<<?|||?|3||s????σ@`@O>?xboard-4.8.0/winboard/bitmaps/dk49o.bmp0000644000175000001440000000070612420374633014624 00000000000000BM>(11??>?xboard-4.8.0/winboard/bitmaps/b116w.bmp0000644000175000001440000000357612420374633014542 00000000000000BM~>(tt@??@?????xboard-4.8.0/winboard/bitmaps/b72w.bmp0000644000175000001440000000163612420374633014456 00000000000000BM>(HH`?~?????xboard-4.8.0/winboard/bitmaps/f33o.bmp0000644000175000001440000000050612420374633014442 00000000000000BMF>(!!} } ??ۀ?}?;?xboard-4.8.0/winboard/bitmaps/q21w.bmp0000644000175000001440000000022212420374633014455 00000000000000BM>(Txxxxxx88؈xboard-4.8.0/winboard/bitmaps/cv40w.bmp0000644000175000001440000000057612420374633014642 00000000000000BM~>(((@  ??xboard-4.8.0/winboard/bitmaps/galactic.bmp0000644000175000001440000027361612420374633015455 00000000000000BMw6(Xs  o%?(<0-&^^+SJ`0q3&343f3/+~3@P3463u@5e$7475333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___www                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   xboard-4.8.0/winboard/bitmaps/r64w.bmp0000644000175000001440000000107612420374633014475 00000000000000BM>>(@@????????????????xboard-4.8.0/winboard/bitmaps/m33s.bmp0000644000175000001440000000050612420374633014455 00000000000000BMF>(!! ????xboard-4.8.0/winboard/bitmaps/cv72o.bmp0000644000175000001440000000163612420374633014635 00000000000000BM>(HH`} } ??????????????q????? ? c}GO?xboard-4.8.0/winboard/bitmaps/f49s.bmp0000644000175000001440000000070612420374633014457 00000000000000BM>(11?/߀?~??0 ??@??~ ?xboard-4.8.0/winboard/bitmaps/h72w.bmp0000644000175000001440000000163612420374633014464 00000000000000BM>(HH`?????????p?0p??xboard-4.8.0/winboard/bitmaps/p129s.bmp0000644000175000001440000000512212420374633014545 00000000000000BMR >( } } ???????xboard-4.8.0/winboard/bitmaps/r40w.bmp0000644000175000001440000000057612420374633014473 00000000000000BM~>(((@????xboard-4.8.0/winboard/bitmaps/k95s.bmp0000644000175000001440000000226212420374633014464 00000000000000BM>(__t} } ? ?||????????||???????>|p|?p>ppǀ88888888q?xboard-4.8.0/winboard/bitmaps/n33w.bmp0000644000175000001440000000050612420374633014462 00000000000000BMF>(!!|>??xboard-4.8.0/winboard/bitmaps/p129w.bmp0000644000175000001440000000512212420374633014551 00000000000000BMR >( ???????xboard-4.8.0/winboard/bitmaps/cv54w.bmp0000644000175000001440000000075612420374633014647 00000000000000BM>(66} } ?? ?xboard-4.8.0/winboard/bitmaps/m49w.bmp0000644000175000001440000000070612420374633014472 00000000000000BM>(11????????xboard-4.8.0/winboard/bitmaps/q129s.bmp0000644000175000001440000000512212420374633014546 00000000000000BMR >( } } 8???8<<<<?<<?|>??~~??~~??????????????????xboard-4.8.0/winboard/bitmaps/r49o.bmp0000644000175000001440000000070612420374633014467 00000000000000BM>(11} } ??>xboard-4.8.0/winboard/bitmaps/b37o.bmp0000644000175000001440000000054612420374633014446 00000000000000BMf>(%%(} } xx'x</??߿'wwwxboard-4.8.0/winboard/bitmaps/q80o.bmp0000644000175000001440000000177612420374633014471 00000000000000BM>(PP  ???>|???@8O0 cx??Ǚ?99sy3ϟ3ǟ?????????????????????????ϟϟϟ??xboard-4.8.0/winboard/bitmaps/q54o.bmp0000644000175000001440000000075612420374633014467 00000000000000BM>(66????????08s0l1px|9`x|dx<Dy<Ly 13O3~O3~3| ~?~?xyp?8 <?1?y?>1xboard-4.8.0/winboard/bitmaps/k40o.bmp0000644000175000001440000000057612420374633014454 00000000000000BM~>(((@  ?~ÿ?>ϟxboard-4.8.0/winboard/bitmaps/n64s.bmp0000644000175000001440000000107612420374633014465 00000000000000BM>>(@@  ?????????????pp(d} } ?_π **U Uxboard-4.8.0/winboard/bitmaps/ln49s.bmp0000644000175000001440000000070612421746530014643 00000000000000BM>(11O@ oG@H H$$`|I% 8% % % %!!##!!#ǀ$$$d@??xboard-4.8.0/winboard/bitmaps/ln72o.bmp0000644000175000001440000000163612421746530014636 00000000000000BM>(HH`??2xOxo~|n~fl~ri??>s??3?3?g?Ǚ?;3?#?? 8sss;9{9{??̜?̜?̜?̜???OO>GO?c?x???????xboard-4.8.0/winboard/bitmaps/p49w.bmp0000644000175000001440000000070612420374633014475 00000000000000BM>(11?xboard-4.8.0/winboard/bitmaps/s72w.bmp0000644000175000001440000000163612420374633014477 00000000000000BM>(HH`??????????????~80??xboard-4.8.0/winboard/bitmaps/w33s.bmp0000644000175000001440000000050612420374633014467 00000000000000BMF>(!!?'<|@3CÀ 0?xboard-4.8.0/winboard/bitmaps/f33w.bmp0000644000175000001440000000050612420374633014452 00000000000000BMF>(!!} } ?xboard-4.8.0/winboard/bitmaps/n37w.bmp0000644000175000001440000000054612420374633014472 00000000000000BMf>(%%(xxxxxxx~x>@???xboard-4.8.0/winboard/bitmaps/k29s.bmp0000644000175000001440000000026212420374633014457 00000000000000BM>(t} } ?x8X X@Xe0x5`xboard-4.8.0/winboard/bitmaps/p33o.bmp0000644000175000001440000000050612420374633014454 00000000000000BMF>(!!} } ??xboard-4.8.0/winboard/bitmaps/r58w.bmp0000644000175000001440000000101612420374633014472 00000000000000BM>(::?????????????????????????||||xboard-4.8.0/winboard/bitmaps/b87w.bmp0000644000175000001440000000212212420374633014453 00000000000000BMR>(WW|~~~?????xboard-4.8.0/winboard/bitmaps/q72o.bmp0000644000175000001440000000163612420374633014465 00000000000000BM>(HH`} } ??x??????A=~? 0?q>|>O|x#q~3s~scώ~qgϞ~y?Ϟ~y?|>|>|88|>|>|<>8<<xboard-4.8.0/winboard/bitmaps/n129s.bmp0000644000175000001440000000512212420374633014543 00000000000000BMR >( } } ??8????>?>????? @??8? ??000??????|?|???`p????xboard-4.8.0/winboard/bitmaps/r116w.bmp0000644000175000001440000000357612420374633014562 00000000000000BM~>(tt@????????xboard-4.8.0/winboard/bitmaps/cv58s.bmp0000644000175000001440000000101612420374633014635 00000000000000BM>(::} } ??????? `p0c|? xboard-4.8.0/winboard/bitmaps/b87o.bmp0000644000175000001440000000212212420374633014443 00000000000000BMR>(WW} } |!??~?~~?|???????????|8||||8xboard-4.8.0/winboard/bitmaps/n80w.bmp0000644000175000001440000000177612420374633014476 00000000000000BM>(PP??@?????xboard-4.8.0/winboard/bitmaps/e72o.bmp0000644000175000001440000000163612420374633014451 00000000000000BM>(HH`?p|~r~8~Ü>>>s'93?ys?|;?~r98C`8ϟϟ?Ϗß??????????g#??xboard-4.8.0/winboard/bitmaps/p87o.bmp0000644000175000001440000000212212420374633014461 00000000000000BMR>(WW} } ???????????~|||?xboard-4.8.0/winboard/bitmaps/p54o.bmp0000644000175000001440000000075612420374633014466 00000000000000BM>(66} } ????x?xxboard-4.8.0/winboard/bitmaps/k29o.bmp0000644000175000001440000000026212420374633014453 00000000000000BM>(t} } ????xx7`xboard-4.8.0/winboard/bitmaps/r116s.bmp0000644000175000001440000000357612420374633014556 00000000000000BM~>(tt@} } ???????????xboard-4.8.0/winboard/bitmaps/n58w.bmp0000644000175000001440000000101612420374633014466 00000000000000BM>(::?x????xboard-4.8.0/winboard/bitmaps/cv33o.bmp0000644000175000001440000000050612420374633014625 00000000000000BMF>(!!} } ppwwo{πG?߀߀?%xboard-4.8.0/winboard/bitmaps/v33s.bmp0000644000175000001440000000050612420374633014466 00000000000000BMF>(!!@ @@@ /߀?a{π?xboard-4.8.0/winboard/bitmaps/icon_w.ico0000644000175000001440000000050612420374633015142 00000000000000 0( @???=77 `@0xboard-4.8.0/winboard/bitmaps/q25s.bmp0000644000175000001440000000024212420374633014457 00000000000000BM>(d} } O߀π#"#"1c9c8c8wc㿀xboard-4.8.0/winboard/bitmaps/u49w.bmp0000644000175000001440000000070612420374633014502 00000000000000BM>(11x|???0p`xboard-4.8.0/winboard/bitmaps/a49s.bmp0000644000175000001440000000070612420374633014452 00000000000000BM>(11??`???xboard-4.8.0/winboard/bitmaps/r45w.bmp0000644000175000001440000000064612420374633014476 00000000000000BM>(--h??>>>xboard-4.8.0/winboard/bitmaps/q40w.bmp0000644000175000001440000000057612420374633014472 00000000000000BM~>(((@??? A``Ǐxboard-4.8.0/winboard/bitmaps/r33o.bmp0000644000175000001440000000050612420374633014456 00000000000000BMF>(!!} } ?߀߀߀xboard-4.8.0/winboard/bitmaps/r87s.bmp0000644000175000001440000000212212420374633014467 00000000000000BMR>(WW} } ???????xboard-4.8.0/winboard/bitmaps/c64w.bmp0000644000175000001440000000107612420374633014456 00000000000000BM>>(@@  ???@?????xboard-4.8.0/winboard/bitmaps/l40w.bmp0000644000175000001440000000057612420374633014465 00000000000000BM~>(((@  ????xboard-4.8.0/winboard/bitmaps/wn49o.bmp0000644000175000001440000000070612420374633014652 00000000000000BM>(11?߀o??߀_߀߀߀??xboard-4.8.0/winboard/bitmaps/b29w.bmp0000644000175000001440000000026212420374633014452 00000000000000BM>(t888xboard-4.8.0/winboard/bitmaps/p40o.bmp0000644000175000001440000000057612420374633014461 00000000000000BM~>(((@>?xboard-4.8.0/winboard/bitmaps/p25w.bmp0000644000175000001440000000024212420374633014462 00000000000000BM>(d?xboard-4.8.0/winboard/bitmaps/q80w.bmp0000644000175000001440000000177612420374633014501 00000000000000BM>(PP????88x???????????????????????????xboard-4.8.0/winboard/bitmaps/s49s.bmp0000644000175000001440000000070612420374633014474 00000000000000BM>(11??π࿀???`? `?xboard-4.8.0/winboard/bitmaps/b33o.bmp0000644000175000001440000000050612420374633014436 00000000000000BMF>(!!} } ~~~}}??xboard-4.8.0/winboard/bitmaps/n49w.bmp0000644000175000001440000000070612420374633014473 00000000000000BM>(11???`xboard-4.8.0/winboard/bitmaps/q33w.bmp0000644000175000001440000000050612420374633014465 00000000000000BMF>(!!???ǀǀ8<Ϟ<>~|9|?>>?xboard-4.8.0/winboard/bitmaps/c72o.bmp0000644000175000001440000000163612420374633014447 00000000000000BM>(HH`8|||8<|~??8q|||8q?>???ϏǟǟϏ???>??8>|>|>|8?>?>>>>xboard-4.8.0/winboard/bitmaps/cv40o.bmp0000644000175000001440000000057612420374633014632 00000000000000BM~>(((@  {{xoxboard-4.8.0/winboard/bitmaps/q45s.bmp0000644000175000001440000000064612420374633014471 00000000000000BM>(--h} }  ``00``00`08x8x||~?xboard-4.8.0/winboard/bitmaps/q29w.bmp0000644000175000001440000000026212420374633014471 00000000000000BM>(txxxx8888888瘇=}=8xxboard-4.8.0/winboard/bitmaps/cv45o.bmp0000644000175000001440000000064612420374633014635 00000000000000BM>(--h߿C}{_?kgk\xboard-4.8.0/winboard/bitmaps/p87s.bmp0000644000175000001440000000212212420374633014465 00000000000000BMR>(WW} } ????????xboard-4.8.0/winboard/bitmaps/r21w.bmp0000644000175000001440000000022212420374633014456 00000000000000BM>(T88xxxxxxboard-4.8.0/winboard/bitmaps/l33w.bmp0000644000175000001440000000050612420374633014460 00000000000000BMF>(!!xboard-4.8.0/winboard/bitmaps/p108s.bmp0000644000175000001440000000337612420374633014553 00000000000000BM>(ll} } ????xboard-4.8.0/winboard/bitmaps/n40s.bmp0000644000175000001440000000057612420374633014463 00000000000000BM~>(((@  7777777?/G/ooxo_ gハ?xboard-4.8.0/winboard/bitmaps/r95w.bmp0000644000175000001440000000226212420374633014477 00000000000000BM>(__t??xboard-4.8.0/winboard/bitmaps/p45o.bmp0000644000175000001440000000064612420374633014464 00000000000000BM>(--h} } ?ϟ??xboard-4.8.0/winboard/bitmaps/k87o.bmp0000644000175000001440000000212212420374633014454 00000000000000BMR>(WW} } ???ǀ?0?????~~~~8~8~|~??????c???|??xboard-4.8.0/winboard/bitmaps/icon_whi.ico0000644000175000001440000000207612420374633015467 00000000000000 0& V( @?=/'g: ~??( @~??xboard-4.8.0/winboard/bitmaps/l54w.bmp0000644000175000001440000000075612420374633014472 00000000000000BM>(66  ????xboard-4.8.0/winboard/bitmaps/q49o.bmp0000644000175000001440000000070612420374633014466 00000000000000BM>(11??};~!?6gs߀߀߀߀߀{o﯀}o}oπ}oπ߻߻?xboard-4.8.0/winboard/bitmaps/as72w.bmp0000644000175000001440000000163612420374633014640 00000000000000BM>(HH`?~<?|<><<<~?~<????<~?xboard-4.8.0/winboard/bitmaps/v72s.bmp0000644000175000001440000000163612420374633014476 00000000000000BM>(HH` O?xq??pG0a`  ``c??xboard-4.8.0/winboard/bitmaps/n108s.bmp0000644000175000001440000000337612420374633014551 00000000000000BM>(ll} } ????@>`|?`|?`x?   >|??>>??? `pxboard-4.8.0/winboard/bitmaps/as49w.bmp0000644000175000001440000000070612420374633014641 00000000000000BM>(11?xp ??? p????????????xboard-4.8.0/winboard/bitmaps/p21w.bmp0000644000175000001440000000022212420374633014454 00000000000000BM>(Txxxxxboard-4.8.0/winboard/bitmaps/p87w.bmp0000644000175000001440000000212212420374633014471 00000000000000BMR>(WW????????xboard-4.8.0/winboard/bitmaps/g33o.bmp0000644000175000001440000000050612420374633014443 00000000000000BMF>(!!} } pOJʦkkmmmm??ߟoo۷۷xboard-4.8.0/winboard/bitmaps/l33o.bmp0000644000175000001440000000050612420374633014450 00000000000000BMF>(!!_ ___xboard-4.8.0/winboard/bitmaps/r72w.bmp0000644000175000001440000000163612420374633014476 00000000000000BM>(HH`????????xboard-4.8.0/winboard/bitmaps/r49w.bmp0000644000175000001440000000070612420374633014477 00000000000000BM>(11?????xboard-4.8.0/winboard/bitmaps/p95w.bmp0000644000175000001440000000226212420374633014475 00000000000000BM>(__t????????????xboard-4.8.0/winboard/bitmaps/l49s.bmp0000644000175000001440000000070612420374633014465 00000000000000BM>(11???????????xboard-4.8.0/winboard/bitmaps/b33s.bmp0000644000175000001440000000050612420374633014442 00000000000000BMF>(!!} } =???xboard-4.8.0/winboard/bitmaps/b37w.bmp0000644000175000001440000000054612420374633014456 00000000000000BMf>(%%(xx 8x<??????xboard-4.8.0/winboard/bitmaps/p58s.bmp0000644000175000001440000000101612420374633014464 00000000000000BM>(::} } ???xboard-4.8.0/winboard/bitmaps/h72s.bmp0000644000175000001440000000163612420374633014460 00000000000000BM>(HH`?????????`<<p<<y yy??<x~<|?h?0p??xboard-4.8.0/winboard/bitmaps/n129w.bmp0000644000175000001440000000512212420374633014547 00000000000000BMR >( ??????????????o?xboard-4.8.0/winboard/bitmaps/p29w.bmp0000644000175000001440000000026212420374633014470 00000000000000BM>(t????xboard-4.8.0/winboard/bitmaps/n80o.bmp0000644000175000001440000000177612420374633014466 00000000000000BM>(PP  ?3?????3?11?O???????c?q?<x>??xboard-4.8.0/winboard/bitmaps/a54w.bmp0000644000175000001440000000075612420374633014457 00000000000000BM>(66} } 0|<<|?|||?xboard-4.8.0/winboard/bitmaps/k95o.bmp0000644000175000001440000000226212420374633014460 00000000000000BM>(__t} } ??????~????????>???????????????????????>?????xboard-4.8.0/winboard/bitmaps/n108w.bmp0000644000175000001440000000337612420374633014555 00000000000000BM>(ll?????????????????@pxboard-4.8.0/winboard/bitmaps/m72w.bmp0000644000175000001440000000163612420374633014471 00000000000000BM>(HH`????????xboard-4.8.0/winboard/bitmaps/k54o.bmp0000644000175000001440000000075612420374633014461 00000000000000BM>(66} } ????????||<<<<3<1<x|x|? |xy1xboard-4.8.0/winboard/bitmaps/r58s.bmp0000644000175000001440000000101612420374633014466 00000000000000BM>(::} } ?????????????????????????????||||xboard-4.8.0/winboard/bitmaps/k58w.bmp0000644000175000001440000000101612420374633014463 00000000000000BM>(::?0<???xboard-4.8.0/winboard/bitmaps/p95s.bmp0000644000175000001440000000226212420374633014471 00000000000000BM>(__t} } ????????????xboard-4.8.0/winboard/bitmaps/a54s.bmp0000644000175000001440000000075612420374633014453 00000000000000BM>(66} } 0|<<|?03?O0000||0|000?xboard-4.8.0/winboard/bitmaps/n95s.bmp0000644000175000001440000000226212420374633014467 00000000000000BM>(__t} } ? ??>>?>?|?||` 000<?><|?>??x??xboard-4.8.0/winboard/bitmaps/as72s.bmp0000644000175000001440000000163612420374633014634 00000000000000BM>(HH`?~<?|<><<<~? @G0 /`~<@` @0?a0# ` 0`0`? ?0?`  0`0?`` <0~0 `?xboard-4.8.0/winboard/bitmaps/b40w.bmp0000644000175000001440000000057612420374633014453 00000000000000BM~>(((@>??xboard-4.8.0/winboard/bitmaps/p116o.bmp0000644000175000001440000000357612420374633014550 00000000000000BM~>(tt@} } ?????????????????????????xboard-4.8.0/winboard/bitmaps/p95o.bmp0000644000175000001440000000226212420374633014465 00000000000000BM>(__t} } ???????????????????????xboard-4.8.0/winboard/bitmaps/k87w.bmp0000644000175000001440000000212212420374633014464 00000000000000BMR>(WW??~~~~~~~` ?????xboard-4.8.0/winboard/bitmaps/p80s.bmp0000644000175000001440000000177612420374633014474 00000000000000BM>(PP  ????xboard-4.8.0/winboard/bitmaps/f49w.bmp0000644000175000001440000000070612420374633014463 00000000000000BM>(11??????xboard-4.8.0/winboard/bitmaps/r37w.bmp0000644000175000001440000000054612420374633014476 00000000000000BMf>(%%(xboard-4.8.0/winboard/bitmaps/convert.exe0000644000175000001440000003474612420374633015370 00000000000000MZ@ !L!This program cannot be run in DOS mode. $PEL H 8  @`w PD.text   `.data0 @.rdata0@@.bssp@.idataDP@U]E1ۉu1=wC=r[$1҉T$ tzt$л؋u]]=twJ=t؋u]]=t[=u$1t$ tjt$=$D$ v# l$ 1D$d t0R$ ?$L$4 %$ D$ 'US$$@U EED$ @$@@D$ ED$@@D$@@td @P@t@@D$P@@0$P@t(@@D$P@@P$g K @!D$@@D$@@$$VD$P@@$P@@U$P@&U$P@&U P@]t&U P@]ᐐU\'WVS }U 0@D$B$0@D$\$$>H1$@~\$\$\$ 0@\$D$D$$1ɉ$@&~$0@D$D$1111ۉf$:ùt&'% IyG$ù% IyG$ù% IyG$ù% IyG ;@9‰U 11Z;tASB@zt"z\uB@zu11;'<.@<u\$1$0@D$\$$40@D$v\$$J0@fHG1K$e0@FD$;ȃÅ])Ӄ)ȉ ÅR$l0@Fq$e0@ÉD$^F$ !1;8H$o0@e[^_]Ã)A&$t0@$$0@] C$0@D$ΐU @8t @BR @uÍ&US@t)t'@Ku$ @:Y[]1=@ @@u뾍'U @@t]f] @@냐U0@Q@0@r]ÐUSX5 PX1ة 1%ft 0@@t 0@@t 0@@t 0@@t 0@@ t 0@@@ t 0@@=v,0@@@t 0@@[]à 0@@M[ 0@@]ÐU]ÐQ=r -) ̋@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@%P@@@rbBM%c%c%c%c%c%ch=%d, w=%d #define %s_width %d #define %s_height %d static char %s_bits[] = { 0x%02x, };usage is: convert %s does not have bitmap format file %s not found @P RPP4RPPQQ"Q4Q>QFQPQ\QfQnQvQ~QQQQQQQPQQ"Q4Q>QFQPQ\QfQnQvQ~QQQQQQQ'__getmainargs<__p__environ>__p__fmodeP__set_app_typey_cexit_iob^_onexit_setmodeatexit*exit1fgetc8fopenBfscanfprintfputcharputssignalExitProcessSetUnhandledExceptionFilterPPPPPPPPPPPPPPPPPmsvcrt.dllPPKERNEL32.dll.filegcrt1.c P 2 B _atexit __onexit .text*.data.bss.filegconvert.c_main .text4'.data.bss.rdata.file"gCRTglob.c.text .data.bss.file*gCRTfmode.c.text .data.bss.file2gtxtmode.c.text .data.bss .file@ggccmain.cU p.0 b  uP ___main .text  .data .bss .fileJgpseudo-reloc.c .text(.data0.bss0.fileTgcpu_features.c  .text  .data0.bss0.file_gCRT_fp10.c_fpreset    .text .data0.bss@.fileg.text .data0.bss@probe done- .text -.data0.bssP.text@ .data0.bssP.text@ .data0.bssP.idata$7.idata$5.idata$4T.idata$6>.text@ .data0.bssP.idata$7.idata$5.idata$4L.idata$6".textH .data0.bssP.idata$7.idata$5.idata$4`.idata$6\.textH .data0.bssP.idata$7.idata$5.idata$4X.idata$6F.textH .data0.bssP.idata$7.idata$5.idata$4P.idata$64.textP .data0.bssP.idata$7.idata$5.idata$4D.idata$6.textX .data0.bssP.idata$7.idata$5.idata$4.idata$6.text` .data0.bssP.idata$7.idata$5.idata$4H.idata$6.texth .data0.bssP.idata$7.idata$5.idata$4\.idata$6P.textp .data0.bssP.idata$7.idata$5.idata$4@.idata$6.textx .data0.bssP.idata$7.idata$5.idata$4x.idata$6.text .data0.bssP.idata$7.idata$5.idata$4|.idata$6.text .data0.bssP.idata$7.idata$5.idata$4h.idata$6n.text .data0.bssP.idata$7 .idata$5.idata$4p.idata$6~.text .data0.bssP.idata$7.idata$5.idata$4d.idata$6f.text .data0.bssP.idata$7.idata$5.idata$4t.idata$6.text .data0.bssP.idata$7.idata$5.idata$4l.idata$6v.filegfakehname@fthunk.text .data0.bssP.idata$2.idata$5.idata$4<.filegfake.text .data0.bssP.idata$4.idata$5.idata$7  .text .data0.bssP.idata$7,.idata$5.idata$4.idata$6.text .data0.bssP.idata$70.idata$5.idata$4.idata$6.file(gfakehnamefthunk.text .data0.bssP.idata$2.idata$5.idata$4.file6gfake.text .data0.bssP.idata$4.idata$5.idata$74 __cexitH  _putcharx   #2`  >  ]`@l  `@`@ `@_puts   !-;^vP  `@`@__dll__@ 6T__argcf  u0p   @ p`@__alloca `@__argv _fopen  __fmode__end__`@_fgetc  _signalX  - ;T`@ft`@0$/h  9G\j_exit  _printf  4`@_fscanf  __gnu_exception_handler@4___mingw_CRTStartup_mainCRTStartup_WinMainCRTStartup_initialized___do_global_dtors___do_global_ctors__pei386_runtime_relocator___cpu_features_init__fpresetpseudo-reloc-list.c___RUNTIME_PSEUDO_RELOC_LIST____imp___setmode__data_start_____DTOR_LIST____imp___onexit___p__fmode_SetUnhandledExceptionFilter@4___tls_start____libmsvcrt_a_iname__size_of_stack_commit____size_of_stack_reserve____major_subsystem_version_____crt_xl_start_____crt_xi_start_____chkstk___crt_xi_end____imp____p__environ__imp___iob__bss_start_____RUNTIME_PSEUDO_RELOC_LIST_END____size_of_heap_commit_____p__environ___crt_xp_start____imp__putchar___crt_xp_end____imp__signal__imp__puts__minor_os_version____imp__atexit__head_libmsvcrt_a__image_base____imp__exit__section_alignment____RUNTIME_PSEUDO_RELOC_LIST____imp____p__fmode_ExitProcess@4__data_end_____getmainargs__CTOR_LIST_____set_app_type__bss_end____CRT_fmode___crt_xc_end_____crt_xc_start_____CTOR_LIST____imp__fgetc__file_alignment____major_os_version____DTOR_LIST____size_of_heap_reserve_____crt_xt_start____subsystem____imp__fopen__imp____getmainargs___tls_end____imp__fscanf__imp__ExitProcess@4___cpu_features__imp__SetUnhandledExceptionFilter@4__major_image_version____loader_flags____CRT_glob__setmode__imp__printf__head_libkernel32_a__imp___cexit__minor_subsystem_version____minor_image_version____imp____set_app_type__RUNTIME_PSEUDO_RELOC_LIST_END____libkernel32_a_iname___crt_xt_end__xboard-4.8.0/winboard/bitmaps/cv49s.bmp0000644000175000001440000000070612420374633014642 00000000000000BM>(11>>>>????<0? ?@3@c ハxboard-4.8.0/winboard/bitmaps/b25s.bmp0000644000175000001440000000024212420374633014440 00000000000000BM>(d} } >{?>?>?xboard-4.8.0/winboard/bitmaps/p33w.bmp0000644000175000001440000000050612420374633014464 00000000000000BMF>(!!??????xboard-4.8.0/winboard/bitmaps/wp49s.bmp0000644000175000001440000000070612420374633014660 00000000000000BM>(11?@_ 8>_ ???xboard-4.8.0/winboard/bitmaps/k37w.bmp0000644000175000001440000000054612420374633014467 00000000000000BMf>(%%(xx88888xxboard-4.8.0/winboard/bitmaps/wl33s.bmp0000644000175000001440000000050612420374633014643 00000000000000BMF>(!!?'<|3CÀ 0?xboard-4.8.0/winboard/bitmaps/q108w.bmp0000644000175000001440000000337612420374633014560 00000000000000BM>(ll???  ``88|||?????????p?p?ppp??????xboard-4.8.0/winboard/bitmaps/wl72o.bmp0000644000175000001440000000163612420374633014647 00000000000000BM>(HH`??? ρ|???????????????y?p??????xboard-4.8.0/winboard/bitmaps/wn33o.bmp0000644000175000001440000000050612420374633014641 00000000000000BMF>(!!?߀׀?c?ˀ?;߀xboard-4.8.0/winboard/bitmaps/q108o.bmp0000644000175000001440000000337612420374633014550 00000000000000BM>(ll} } ??x????????@C??pxcÀ8px?|#?#?c?c88||q|q88?????qq?1??1??1???p?p?ppp?? ????????????????xboard-4.8.0/winboard/bitmaps/dk33w.bmp0000644000175000001440000000050612420374633014623 00000000000000BMF>(!!} } ?????xboard-4.8.0/winboard/bitmaps/o49w.bmp0000644000175000001440000000070612420374633014474 00000000000000BM>(11??xboard-4.8.0/winboard/bitmaps/ln33w.bmp0000644000175000001440000000050612421746530014636 00000000000000BMF>(!!xboard-4.8.0/winboard/bitmaps/n116o.bmp0000644000175000001440000000357612420374633014546 00000000000000BM~>(tt@} } ????>?LJ??q1???????O??|8?????>8??0??xboard-4.8.0/winboard/bitmaps/e72s.bmp0000644000175000001440000000163612420374633014455 00000000000000BM>(HH`?pr8s'93?yp?|8?~r<8`0 ??ppp00000000000?8??xboard-4.8.0/winboard/bitmaps/k33o.bmp0000644000175000001440000000050612420374633014447 00000000000000BMF>(!!} } ??_??xboard-4.8.0/winboard/bitmaps/q58w.bmp0000644000175000001440000000101612420374633014471 00000000000000BM>(::???  `ppx>????????@?@|@|||~xboard-4.8.0/winboard/bitmaps/icon_b.ico0000644000175000001440000000207612420374633015121 00000000000000 0& V( @000000 ````@` 0|>???9}( @|>???9}xboard-4.8.0/winboard/bitmaps/l58o.bmp0000644000175000001440000000101612420374633014454 00000000000000BM>(::  ?3???<<??????xboard-4.8.0/winboard/bitmaps/k33w.bmp0000644000175000001440000000050612420374633014457 00000000000000BMF>(!!??????? ?xboard-4.8.0/winboard/bitmaps/q80s.bmp0000644000175000001440000000177612420374633014475 00000000000000BM>(PP  ??@???88xx??????????????????????xboard-4.8.0/winboard/bitmaps/k108w.bmp0000644000175000001440000000337612420374633014552 00000000000000BM>(ll??????p?xboard-4.8.0/winboard/bitmaps/ln33s.bmp0000644000175000001440000000050612421746530014632 00000000000000BMF>(!!C@ B $O $"C B$TTTDH`x 0 #PCAP0xboard-4.8.0/winboard/bitmaps/l40o.bmp0000644000175000001440000000057612420374633014455 00000000000000BM~>(((@  E}}}xboard-4.8.0/winboard/bitmaps/cv49w.bmp0000644000175000001440000000070612420374633014646 00000000000000BM>(11||||??>80??xboard-4.8.0/winboard/bitmaps/n129o.bmp0000644000175000001440000000512212420374633014537 00000000000000BMR >( } } ??? ???ÃÃ?Á????????????????????0??op ?xboard-4.8.0/winboard/bitmaps/g49o.bmp0000644000175000001440000000070612420374633014454 00000000000000BM>(11?#3f{>>}޾ݽݽ۽??_wwwxboard-4.8.0/winboard/bitmaps/e49o.bmp0000644000175000001440000000070612420374633014452 00000000000000BM>(11}3=]nmu5ǀZ׀ww7w|?}?_______{_o??xboard-4.8.0/winboard/bitmaps/p54s.bmp0000644000175000001440000000075612420374633014472 00000000000000BM>(66} } ????xboard-4.8.0/winboard/bitmaps/ws49s.bmp0000644000175000001440000000070612420374633014663 00000000000000BM>(11?@_ 8>_pp  ???xboard-4.8.0/winboard/bitmaps/b21w.bmp0000644000175000001440000000022212420374633014436 00000000000000BM>(T xboard-4.8.0/winboard/bitmaps/a49o.bmp0000644000175000001440000000070612420374633014446 00000000000000BM>(11wx??`?߀??xboard-4.8.0/winboard/bitmaps/v72w.bmp0000644000175000001440000000163612420374633014502 00000000000000BM>(HH`??a?xboard-4.8.0/winboard/bitmaps/q33s.bmp0000644000175000001440000000050612420374633014461 00000000000000BMF>(!!} } ??`????ǀǀ8<Ϟ<>>>p|9(!!} } ????xboard-4.8.0/winboard/bitmaps/n40w.bmp0000644000175000001440000000057612420374633014467 00000000000000BM~>(((@8??xboard-4.8.0/winboard/bitmaps/cv58o.bmp0000644000175000001440000000101612420374633014631 00000000000000BM>(::} } ????3g??7?gg;ٿ????>?xboard-4.8.0/winboard/bitmaps/baloon_14.ico0000644000175000001440000000044612420374633015445 00000000000000(|  xboard-4.8.0/winboard/bitmaps/wp49o.bmp0000644000175000001440000000070612420374633014654 00000000000000BM>(11?߀o??߀_߀߀߀??xboard-4.8.0/winboard/bitmaps/c49w.bmp0000644000175000001440000000070612420374633014460 00000000000000BM>(11?????????xboard-4.8.0/winboard/bitmaps/q87o.bmp0000644000175000001440000000212212420374633014462 00000000000000BMR>(WW} } ?????????8?g0B?=x??????1Ǐ?1Ï?1>88>88>><|x><|||x~<|||xG~<|||q|~18181888>?>?8|||??8xboard-4.8.0/winboard/bitmaps/dk72w.bmp0000644000175000001440000000163612420374633014633 00000000000000BM>(HH`?????????xboard-4.8.0/winboard/bitmaps/n54s.bmp0000644000175000001440000000075612420374633014470 00000000000000BM>(66} } ||||||||||||><< ?<<<x`ypyy ??xboard-4.8.0/winboard/bitmaps/p116s.bmp0000644000175000001440000000357612420374633014554 00000000000000BM~>(tt@} } ???????xboard-4.8.0/winboard/bitmaps/l64w.bmp0000644000175000001440000000107612420374633014467 00000000000000BM>>(@@  ??????????????xboard-4.8.0/winboard/bitmaps/p80o.bmp0000644000175000001440000000177612420374633014470 00000000000000BM>(PP  ??????????????xboard-4.8.0/winboard/bitmaps/k80s.bmp0000644000175000001440000000177612420374633014467 00000000000000BM>(PP  x?s??``s`98p0pp 0`88?8?9?9?s?s??pcpq8 08x891s?xboard-4.8.0/winboard/bitmaps/p64o.bmp0000644000175000001440000000107612420374633014463 00000000000000BM>>(@@  ?????????????xboard-4.8.0/winboard/bitmaps/a49c.bmp0000644000175000001440000000272212420374633014432 00000000000000BMv(11\xboard-4.8.0/winboard/bitmaps/b108s.bmp0000644000175000001440000000337612420374633014535 00000000000000BM>(ll} } ????????????xboard-4.8.0/winboard/bitmaps/o33s.bmp0000644000175000001440000000050612420374633014457 00000000000000BMF>(!!G ?xboard-4.8.0/winboard/bitmaps/k129o.bmp0000644000175000001440000000512212420374633014534 00000000000000BMR >( } } ??????p?????????????????p?????????????????????xboard-4.8.0/winboard/bitmaps/h33s.bmp0000644000175000001440000000050612420374633014450 00000000000000BMF>(!!} } |>777'o op@O߀?x gxboard-4.8.0/winboard/bitmaps/k72o.bmp0000644000175000001440000000163612420374633014457 00000000000000BM>(HH`} } p?@|>?????????<<~~?????y??~?<xboard-4.8.0/winboard/bitmaps/b58w.bmp0000644000175000001440000000101612420374633014452 00000000000000BM>(::? ????????xboard-4.8.0/winboard/bitmaps/ws72s.bmp0000644000175000001440000000163612420374633014662 00000000000000BM>(HH`?? |~??????? ?q?? 8??????xboard-4.8.0/winboard/bitmaps/n37o.bmp0000644000175000001440000000054612420374633014462 00000000000000BMf>(%%(} } xxxxxxx~x_?oxboard-4.8.0/winboard/bitmaps/k21s.bmp0000644000175000001440000000022212420374633014443 00000000000000BM>(T  xxxx8H (P((&ĩxxboard-4.8.0/winboard/bitmaps/b95s.bmp0000644000175000001440000000226212420374633014453 00000000000000BM>(__t} } ?||?????xboard-4.8.0/winboard/bitmaps/l64o.bmp0000644000175000001440000000107612420374633014457 00000000000000BM>>(@@  ????????c?????~~?????xboard-4.8.0/winboard/bitmaps/n87o.bmp0000644000175000001440000000212212420374633014457 00000000000000BMR>(WW} } ?????3!  q??????ǃc O<><?xGpA???xboard-4.8.0/winboard/bitmaps/p116w.bmp0000644000175000001440000000357612420374633014560 00000000000000BM~>(tt@???????xboard-4.8.0/winboard/bitmaps/l45s.bmp0000644000175000001440000000064612420374633014464 00000000000000BM>(--h} } ????xboard-4.8.0/winboard/bitmaps/r129o.bmp0000644000175000001440000000512212420374633014543 00000000000000BMR >( } } ???????????xboard-4.8.0/winboard/bitmaps/g72o.bmp0000644000175000001440000000163612420374633014453 00000000000000BM>(HH`} } ~???@?"Do?0 ??=ü?????ϟ㟜ǟǟϟ<>y>y~y?~y?9O9O3q????q?q????q?xboard-4.8.0/winboard/bitmaps/l33s.bmp0000644000175000001440000000050612420374633014454 00000000000000BMF>(!!G@@@AACCxboard-4.8.0/winboard/bitmaps/convert.c0000644000175000001440000000366512420374633015025 00000000000000#include // [HGM] This program converts a WinBoard monochrome .bmp piece-symbol bitmap file // to a .bm C-source file suitable for inclusion in xboard as buit-in bitmap. // You will have to convert the bitmaps one by one, and re-direct the output to the desired file! main(int argc, char **argv) { int i, j, k, d, cnt; char c, *p, data[10000], *name; unsigned char h, w; FILE *f; if(argc<2) { printf("usage is: convert \n"); exit(0); } f = fopen(argv[1], "rb"); if(f == NULL) { printf("file %s not found\n", argv[1]); exit(0); } if(fscanf(f, "BM%c", &i) != 1) { printf("%s does not have bitmap format\n"); exit(0); } for(i=0; i<15; i++) fgetc(f); fscanf(f, "%c%c%c%c%c", &h, &i, &i, &i, &w); for(i=0; i<39; i++) fgetc(f); // printf("h=%d, w=%d\n", h, w); p = data; for(i=0; i>1) | (c&0x80); c <<= 1; } *p++ = d; c = fgetc(f); for(k=0; k<8; k++) { d = (d>>1) | (c&0x80); c <<= 1; } *p++ = d; c = fgetc(f); for(k=0; k<8; k++) { d = (d>>1) | (c&0x80); c <<= 1; } *p++ = d; c = fgetc(f); for(k=0; k<8; k++) { d = (d>>1) | (c&0x80); c <<= 1; } *p++ = d; } } fclose(f); name = argv[1]; for(i=0; argv[1][i]; i++) if(argv[1][i] == '\\') name = argv[1]+i+1; for(i=0; name[i]; i++) if(name[i] == '.') name[i] = 0; printf("#define %s_width %d\n", name, w); printf("#define %s_height %d\n", name, h); printf("static unsigned char %s_bits[] = {\n", name); cnt = 0; for(i=h-1; i>=0; i--) { for(j=0; j>(8+j-w); // for(k=0; k<8; k++) { // printf("%c", c&1 ? 'X' : '.'); // c >>= 1; // } if(cnt!=0) printf(","); printf("0x%02x", c&255); if(++cnt % 15 == 0) { printf("\n"); } } } printf("\n};\n"); } xboard-4.8.0/winboard/bitmaps/p21o.bmp0000644000175000001440000000022212420374633014444 00000000000000BM>(T  xxxxwwwsxboard-4.8.0/winboard/bitmaps/analyze_14.ico0000644000175000001440000000044612420374633015636 00000000000000(pwwpwwwwwwxboard-4.8.0/winboard/bitmaps/b49w.bmp0000644000175000001440000000070612420374633014457 00000000000000BM>(11???????xboard-4.8.0/winboard/bitmaps/cv72w.bmp0000644000175000001440000000163612420374633014645 00000000000000BM>(HH`} } ?????????xboard-4.8.0/winboard/bitmaps/r80s.bmp0000644000175000001440000000177612420374633014476 00000000000000BM>(PP  ?????xboard-4.8.0/winboard/bitmaps/q116w.bmp0000644000175000001440000000357612420374633014561 00000000000000BM~>(tt@????????  >><~<>>~???????xboard-4.8.0/winboard/bitmaps/q72w.bmp0000644000175000001440000000163612420374633014475 00000000000000BM>(HH`????@@   0ppx?x?x???????xboard-4.8.0/winboard/bitmaps/s49o.bmp0000644000175000001440000000070612420374633014470 00000000000000BM>(11π࿀?ߟ??}xboard-4.8.0/winboard/bitmaps/wl33o.bmp0000644000175000001440000000050612420374633014637 00000000000000BMF>(!!?߀׀?cˀﻀ;߀xboard-4.8.0/winboard/bitmaps/as33s.bmp0000644000175000001440000000050612420374633014624 00000000000000BMF>(!!AG / QA A ?D AC#?xboard-4.8.0/winboard/bitmaps/a40o.bmp0000644000175000001440000000057612420374633014442 00000000000000BM~>(((@  >?o??>xboard-4.8.0/winboard/bitmaps/c54w.bmp0000644000175000001440000000075612420374633014461 00000000000000BM>(66} } ??<?<????<??<xboard-4.8.0/winboard/bitmaps/ponder_14.ico0000644000175000001440000000044612420374633015462 00000000000000(?  |xboard-4.8.0/winboard/bitmaps/k129s.bmp0000644000175000001440000000512212420374633014540 00000000000000BMR >( } } ??8??<<???~~?<<<<<<<<??|>?~|>~||>>|>x>|~~?x>|<<??|>?xx???p??xx|>??????????????????xboard-4.8.0/winboard/bitmaps/n87w.bmp0000644000175000001440000000212212420374633014467 00000000000000BMR>(WW?p?????@???xboard-4.8.0/winboard/bitmaps/c45w.bmp0000644000175000001440000000064612420374633014457 00000000000000BM>(--h} } ??x888x?x888x??xboard-4.8.0/winboard/bitmaps/n37s.bmp0000644000175000001440000000054612420374633014466 00000000000000BMf>(%%(} } xxxxxxxxx`  07'O???xboard-4.8.0/winboard/bitmaps/m49o.bmp0000644000175000001440000000070612420374633014462 00000000000000BM>(11??a?߀߀߀?xboard-4.8.0/winboard/bitmaps/tim.bmp0000644000175000001440000001646612420374633014475 00000000000000BM66(PP  '''bbb }}}:::OOO:::'''YYY!!!zzzRRReee:::RRReee:::'''777kkkzzzRRROOOCCC777!!!eee...qqqIII111ܔܓ 9Ѿ-"HH~&UUUZZZ222^^hkMn888888ܓܔDE?$0k-1p,HHU&&&&^2UZ2Z2U2& 8e78888888ѶܔܔF$ɱk-" Hhhl"IHHI&H&22Z22^^ZtT88888888ܓܓE0p,HhH"pS="@""""I~ZZZZZ2&DT888888ܓܔT1"H,hĆ-SVVr="hhZZ222^2^r888888ܓܔܔ-pp,Hl?--SI"&ZZZ22/&&8888887-"H"-_kP0zkkV>>>>CcPPJ r@|,.sn Otc񼵼rplrJܓܓmt,1C666>꣖ʨ @r@ Z Hv%:V""=A#ܓܓܓܘCC666{66)>) {tt,Yv:(aڼ<<l=7^ܓܓܓͳ*CCC6>6{>{>6) y]:CC>>6 )6$>):Pt(:(y-".&ܓܓl&C))CC)):)CC>CCCC C6))(P%((ycy<<"lUlܓI0) ))](0)C:)C)C)<!((({,H2+JU+ij+U&Z h=p.3jLw .z}lhiJJTJ2,0)2ZTq.+i3+·H Hh "3.uX~A.}*&~hhUUUUIr]Kf>P-V5kakac<׳IUU"hYrrph.q㓓XXXx~1z0C>C>{6>]:(](aPV>>6{(]]]Pkaarp" 3瓓#[.ZX"-o*C>C>66))(K]]]](Prt""U.3ujܓ~uZlp100CfC>>>>>Q]](](]((%%(} } www88GGOGG88wwwxboard-4.8.0/winboard/bitmaps/a45w.bmp0000644000175000001440000000064612420374633014455 00000000000000BM>(--h} } x88xxxx??xboard-4.8.0/winboard/bitmaps/a33o.bmp0000644000175000001440000000050612420374633014435 00000000000000BMF>(!!} } ?xboard-4.8.0/winboard/bitmaps/icon_b.bmp0000644000175000001440000000027612420374633015125 00000000000000BM>(   777777|/>oooo_?` 3?9}xboard-4.8.0/winboard/bitmaps/c45s.bmp0000644000175000001440000000064612420374633014453 00000000000000BM>(--h} } ??x0`x@?@0`xx??xboard-4.8.0/winboard/bitmaps/l72s.bmp0000644000175000001440000000163612420374633014464 00000000000000BM>(HH`??????xboard-4.8.0/winboard/bitmaps/p45w.bmp0000644000175000001440000000064612420374633014474 00000000000000BM>(--h????xboard-4.8.0/winboard/bitmaps/p37w.bmp0000644000175000001440000000054612420374633014474 00000000000000BMf>(%%(?xboard-4.8.0/winboard/bitmaps/p58w.bmp0000644000175000001440000000101612420374633014470 00000000000000BM>(::???xboard-4.8.0/winboard/bitmaps/r129s.bmp0000644000175000001440000000512212420374633014547 00000000000000BMR >( } } ???????????xboard-4.8.0/winboard/bitmaps/n87s.bmp0000644000175000001440000000212212420374633014463 00000000000000BMR>(WW} } A0? ?x>>>?|?|?|>||?>??? p??xboard-4.8.0/winboard/bitmaps/u72s.bmp0000644000175000001440000000163612420374633014475 00000000000000BM>(HH`?E? ??~????`p <>?A1Xc0p???xboard-4.8.0/winboard/bitmaps/cv72s.bmp0000644000175000001440000000163612420374633014641 00000000000000BM>(HH`} } ????x?x?||<<<<<<<<?<>1qqaǀǀ ??ppx<|  ?xboard-4.8.0/winboard/bitmaps/p72w.bmp0000644000175000001440000000163612420374633014474 00000000000000BM>(HH`???????????xboard-4.8.0/winboard/bitmaps/a45o.bmp0000644000175000001440000000064612420374633014445 00000000000000BM>(--h} } xx=ϟ?xxx?xboard-4.8.0/winboard/bitmaps/v33w.bmp0000644000175000001440000000050612420374633014472 00000000000000BMF>(!!?{3??xboard-4.8.0/winboard/bitmaps/k116w.bmp0000644000175000001440000000357612420374633014553 00000000000000BM~>(tt@?????????????????????????????? >????xboard-4.8.0/winboard/bitmaps/q64o.bmp0000644000175000001440000000107612420374633014464 00000000000000BM>>(@@  ???|>????`  x<91<(%%(} } <0gxPPxPxTR8 x|wxboard-4.8.0/winboard/bitmaps/cv49o.bmp0000644000175000001440000000070612420374633014636 00000000000000BM>(11|}}}뿀߀߿_~__;?ooxboard-4.8.0/winboard/bitmaps/p25s.bmp0000644000175000001440000000024212420374633014456 00000000000000BM>(d} } ?xboard-4.8.0/winboard/bitmaps/a64o.bmp0000644000175000001440000000107612420374633014444 00000000000000BM>>(@@  ???O????????xboard-4.8.0/winboard/bitmaps/m72s.bmp0000644000175000001440000000163612420374633014465 00000000000000BM>(HH`???????????xboard-4.8.0/winboard/bitmaps/g49w.bmp0000644000175000001440000000070612420374633014464 00000000000000BM>(11????Á?????xboard-4.8.0/winboard/bitmaps/q116o.bmp0000644000175000001440000000357612420374633014551 00000000000000BM~>(tt@} } ???????????x?px8`Ã|<????????????>>?|>?Ǐ<|~?Ǐ<x?>?x?>?q?~?q???>?c>?c>?#<Ǐ<Ǐ?<Ǐ?88811?pGGGGGx ?xboard-4.8.0/winboard/bitmaps/q108s.bmp0000644000175000001440000000337612420374633014554 00000000000000BM>(ll} } ?>?????? ``888|||??????????p?p?ppp??????xboard-4.8.0/winboard/bitmaps/cv37w.bmp0000644000175000001440000000054612420374633014645 00000000000000BMf>(%%(  <<<?????xboard-4.8.0/winboard/bitmaps/p37o.bmp0000644000175000001440000000054612420374633014464 00000000000000BMf>(%%(} } swxboard-4.8.0/winboard/bitmaps/c64s.bmp0000644000175000001440000000107612420374633014452 00000000000000BM>>(@@  ????|>@`p 0 0??? 0 0p`|>???xboard-4.8.0/winboard/bitmaps/u72o.bmp0000644000175000001440000000163612420374633014471 00000000000000BM>(HH`???E? ??~??????s???< F?1σc3q???xboard-4.8.0/winboard/bitmaps/ln49w.bmp0000644000175000001440000000070612421746530014647 00000000000000BM>(11O oG???xboard-4.8.0/winboard/bitmaps/g33s.bmp0000644000175000001440000000050612420374633014447 00000000000000BMF>(!!} }  ??0?0?q?ǟǟπ燀πxboard-4.8.0/winboard/bitmaps/q129o.bmp0000644000175000001440000000512212420374633014542 00000000000000BMR >( } } ????`????~as?????8?8???x??????~~~~~~8??xboard-4.8.0/winboard/bitmaps/a37s.bmp0000644000175000001440000000054612420374633014451 00000000000000BMf>(%%(} } xx 8x<w???  xx 8 88xxboard-4.8.0/winboard/bitmaps/q37s.bmp0000644000175000001440000000054612420374633014471 00000000000000BMf>(%%(} } 0gxxxÎxǏxǏ8>>߾8xboard-4.8.0/winboard/bitmaps/b129w.bmp0000644000175000001440000000512212420374633014533 00000000000000BMR >( ?????????????xboard-4.8.0/winboard/bitmaps/wl72s.bmp0000644000175000001440000000163612420374633014653 00000000000000BM>(HH`?? |~????????8`0`0`0 `088??????xboard-4.8.0/winboard/bitmaps/r40s.bmp0000644000175000001440000000057612420374633014467 00000000000000BM~>(((@  ?????xboard-4.8.0/winboard/bitmaps/cv58w.bmp0000644000175000001440000000101612420374633014641 00000000000000BM>(::} } ??????????xboard-4.8.0/winboard/bitmaps/k40w.bmp0000644000175000001440000000057612420374633014464 00000000000000BM~>(((@??xboard-4.8.0/winboard/bitmaps/ln72w.bmp0000644000175000001440000000163612421746530014646 00000000000000BM>(HH`?? ??????;3#?????xboard-4.8.0/winboard/bitmaps/p129o.bmp0000644000175000001440000000512212420374633014541 00000000000000BMR >( } } ????????????xboard-4.8.0/winboard/bitmaps/b80s.bmp0000644000175000001440000000177612420374633014456 00000000000000BM>(PP  ??????????xboard-4.8.0/winboard/bitmaps/c58s.bmp0000644000175000001440000000101612420374633014447 00000000000000BM>(::} } ???ss>s880``````088>sss???xboard-4.8.0/winboard/bitmaps/b49s.bmp0000644000175000001440000000070612420374633014453 00000000000000BM>(11} } ?? ?????xboard-4.8.0/winboard/bitmaps/n25s.bmp0000644000175000001440000000024212420374633014454 00000000000000BM>(d} }  x37'oO?Gxboard-4.8.0/winboard/bitmaps/o72w.bmp0000644000175000001440000000163612420374633014473 00000000000000BM>(HH`?????????xboard-4.8.0/winboard/bitmaps/q54s.bmp0000644000175000001440000000075612420374633014473 00000000000000BM>(66} } ??????  <|~|| ~? ~? x?x p8 <???>xboard-4.8.0/winboard/bitmaps/dk49s.bmp0000644000175000001440000000070612420374633014630 00000000000000BM>(11??????xboard-4.8.0/winboard/bitmaps/a40w.bmp0000644000175000001440000000057612420374633014452 00000000000000BM~>(((@  >????xboard-4.8.0/winboard/wlayout.c0000644000175000001440000001502712420374633013405 00000000000000/* * Layout management * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * Enhancements Copyright 2009, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include #include "common.h" #include "frontend.h" #include "winboard.h" VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp ) { if( wp->x != CW_USEDEFAULT || wp->y != CW_USEDEFAULT || wp->width != CW_USEDEFAULT || wp->height != CW_USEDEFAULT ) { WINDOWPLACEMENT stWP; ZeroMemory( &stWP, sizeof(stWP) ); EnsureOnScreen( &wp->x, &wp->y, 0, 0); stWP.length = sizeof(stWP); stWP.flags = 0; stWP.showCmd = SW_SHOW; stWP.ptMaxPosition.x = 0; stWP.ptMaxPosition.y = 0; stWP.rcNormalPosition.left = wp->x; stWP.rcNormalPosition.right = wp->x + wp->width; stWP.rcNormalPosition.top = wp->y; stWP.rcNormalPosition.bottom = wp->y + wp->height; SetWindowPlacement(hWnd, &stWP); } } VOID InitWindowPlacement( WindowPlacement * wp ) { wp->visible = TRUE; wp->x = CW_USEDEFAULT; wp->y = CW_USEDEFAULT; wp->width = CW_USEDEFAULT; wp->height = CW_USEDEFAULT; } static BOOL IsAttachDistance( int a, int b ) { BOOL result = FALSE; if( a == b ) { result = TRUE; } return result; } static BOOL IsDefaultPlacement( WindowPlacement * wp ) { BOOL result = FALSE; if( wp->x == CW_USEDEFAULT || wp->y == CW_USEDEFAULT || wp->width == CW_USEDEFAULT || wp->height == CW_USEDEFAULT ) { result = TRUE; } return result; } BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp ) { BOOL result = FALSE; if( hWnd != NULL ) { WINDOWPLACEMENT stWP; ZeroMemory( &stWP, sizeof(stWP) ); stWP.length = sizeof(stWP); GetWindowPlacement( hWnd, &stWP ); wp->x = stWP.rcNormalPosition.left; wp->y = stWP.rcNormalPosition.top; wp->width = stWP.rcNormalPosition.right - stWP.rcNormalPosition.left; wp->height = stWP.rcNormalPosition.bottom - stWP.rcNormalPosition.top; result = TRUE; } return result; } static BOOL IsAttachedByWindowPlacement( LPRECT lprcMain, WindowPlacement * wp ) { BOOL result = FALSE; if( ! IsDefaultPlacement(wp) ) { if( IsAttachDistance( lprcMain->right, wp->x ) || IsAttachDistance( lprcMain->bottom, wp->y ) || IsAttachDistance( lprcMain->left, (wp->x + wp->width) ) || IsAttachDistance( lprcMain->top, (wp->y + wp->height) ) ) { result = TRUE; } } return result; } VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild ) { if( ! IsDefaultPlacement( pwpChild ) ) { GetActualPlacement( hWndChild, pwpChild ); if( IsAttachedByWindowPlacement( lprcOldPos, pwpChild ) ) { /* Get position delta */ int delta_x = pwpChild->x - lprcOldPos->left; int delta_y = pwpChild->y - lprcOldPos->top; /* Adjust placement */ pwpChild->x = new_x + delta_x; pwpChild->y = new_y + delta_y; /* Move window */ if( hWndChild != NULL ) { SetWindowPos( hWndChild, HWND_TOP, pwpChild->x, pwpChild->y, 0, 0, SWP_NOZORDER | SWP_NOSIZE ); } } } } extern FILE *debugFP; VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild ) { if( ! IsDefaultPlacement( pwpChild ) ) { GetActualPlacement( hWndChild, pwpChild ); if( IsAttachedByWindowPlacement( lprcOldPos, pwpChild ) ) { /* Get delta of lower right corner */ int delta_x = new_w - (lprcOldPos->right - lprcOldPos->left); int delta_y = new_h - (lprcOldPos->bottom - lprcOldPos->top); /* Adjust size & placement */ if(pwpChild->x + pwpChild->width >= lprcOldPos->right && (pwpChild->x + pwpChild->width < screenGeometry.right - 5 || delta_x > 0) ) // keep right edge glued to display edge if touching pwpChild->width += delta_x; if(pwpChild->x + pwpChild->width >= screenGeometry.right ) // don't move right edge off screen pwpChild->width = screenGeometry.right - pwpChild->x; if(pwpChild->y + pwpChild->height >= lprcOldPos->bottom && (pwpChild->y + pwpChild->height < screenGeometry.bottom - 35 || delta_y > 0) ) // keep bottom edge glued to display edge if touching pwpChild->height += delta_y; if(pwpChild->y + pwpChild->height >= screenGeometry.bottom - 30 ) // don't move bottom edge off screen pwpChild->height = screenGeometry.bottom - 30 - pwpChild->y; if(pwpChild->x >= lprcOldPos->right) pwpChild->width -= delta_x, pwpChild->x += delta_x; if(pwpChild->y >= lprcOldPos->bottom) pwpChild->height -= delta_y, pwpChild->y += delta_y; if(pwpChild->width < 30) pwpChild->width = 30; // force minimum width if(pwpChild->height < 50) pwpChild->height = 50; // force minimum height /* Move window */ if( hWndChild != NULL ) { SetWindowPos( hWndChild, HWND_TOP, pwpChild->x, pwpChild->y, pwpChild->width, pwpChild->height, SWP_NOZORDER ); } } } } xboard-4.8.0/winboard/winboard.rc0000644000175000001440000035534012421746612013676 00000000000000//Microsoft Developer Studio generated resource script. // #include "resource.h" #include "config.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS #include "dlgs.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 // moved to "res" subdir to make testing easier-- don't want it in the root MANIFEST_RESOURCE_ID 24 MOVEABLE PURE "res\\winboard.exe.manifest" ///////////////////////////////////////////////////////////////////////////// // // Dialog // ABOUTBOX DIALOG DISCARDABLE 22, 17, 180, 108 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About WinBoard" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,126,89,50,14,WS_GROUP ICON "icon_white",IDC_STATIC,3,6,20,20 LTEXT "Chessboard for Windows",400,25,15,121,8 LTEXT "Copyright 1991 Digital Equipment Corporation",201,6,34, 149,8 LTEXT "Enhancements Copyright 1992-2014 Free Software Foundation", OPT_TCtext1,6,45,121,17 CONTROL "",OPT_TCTime,"Static",SS_BLACKRECT,4,28,159,1 LTEXT "WinBoard 0.0.0",ABOUTBOX_Version,25,5,160,8 LTEXT "Enhancements Copyright 2005\r\nAlessandro Scotti", IDC_STATIC,6,65,120,24 LTEXT " ", OPT_MESS,6,85,120,16 END DLG_TimeControl DIALOG DISCARDABLE 6, 18, 263, 212 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Time Control" FONT 8, "MS Sans Serif" BEGIN LTEXT "Use arrow keys to specify which clock setting type, then press tab to alter values.", IDC_Babble,9,9,231,20 CONTROL "Conventional chess clock",OPT_TCUseMoves,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,7,36,113,10 CONTROL "Incremental clock",OPT_TCUseInc,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,7,73,107,10 CONTROL "Fixed time per move",OPT_TCUseFixed,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,7,124,107,10 LTEXT "Number of moves:",OPT_TCtext1,15,52,58,8,NOT WS_GROUP EDITTEXT OPT_TCMoves,77,52,22,12,ES_AUTOHSCROLL | WS_GROUP LTEXT "Within number of minutes:",OPT_TCtext2,113,54,81,8,NOT WS_GROUP EDITTEXT OPT_TCTime,197,52,32,12,ES_AUTOHSCROLL LTEXT "Initial number of minutes:",OPT_TCitext1,15,89,126,8,NOT WS_GROUP EDITTEXT OPT_TCTime2,147,87,32,12,ES_AUTOHSCROLL | WS_GROUP LTEXT "Plus number of seconds per move:",OPT_TCitext2,15,105,129,8,NOT WS_GROUP EDITTEXT OPT_TCInc,147,103,32,12,ES_AUTOHSCROLL LTEXT "Maximum seconds per move:",OPT_TCftext,15,142,129,8,NOT WS_GROUP EDITTEXT OPT_TCFixed,147,140,32,12,ES_AUTOHSCROLL LTEXT "",OPT_TCitext3,185,148,67,8,NOT WS_GROUP LTEXT "Time-Odds Factors:",GPB_Factors,6,158,150,8,NOT WS_GROUP | WS_TABSTOP LTEXT "Engine #1:",IDC_Factor1,6,173,60,8,NOT WS_GROUP EDITTEXT OPT_TCOdds1,67,171,32,12,ES_AUTOHSCROLL | WS_GROUP LTEXT "Engine #2:",IDC_Factor2,106,173,60,8,NOT WS_GROUP EDITTEXT OPT_TCOdds2,167,171,32,12,ES_AUTOHSCROLL PUSHBUTTON "OK",IDOK,139,190,40,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,195,190,40,14 END DLG_LoadOptions DIALOG DISCARDABLE 10, 18, 170, 281 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Load Game Options" FONT 8, "MS Sans Serif" BEGIN CONTROL "Load games with &automatic stepping",OPT_Autostep,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,160,10 LTEXT "&seconds per move",OPT_AStext1,46,20,90,8,NOT WS_GROUP EDITTEXT OPT_ASTimeDelay,16,16,28,14,ES_AUTOHSCROLL LTEXT "when filtering game list on position, use thresholds:",OPT_thresholds,4,36,160,8,NOT WS_GROUP LTEXT "minimum Elo for &best player",OPT_elo1t,46,54,90,8,NOT WS_GROUP EDITTEXT OPT_elo1,16,50,28,14,ES_AUTOHSCROLL LTEXT "minimum Elo for &weakest players",OPT_elo2t,46,74,90,8,NOT WS_GROUP EDITTEXT OPT_elo2,16,70,28,14,ES_AUTOHSCROLL LTEXT "or later &year",OPT_datet,46,94,94,8,NOT WS_GROUP EDITTEXT OPT_date,16,90,28,14,ES_AUTOHSCROLL LTEXT "co&nsecutive positions",OPT_Stretcht,46,114,94,8,NOT WS_GROUP EDITTEXT OPT_Stretch,16,110,28,14,ES_AUTOHSCROLL LTEXT "final piece count",OPT_Ranget,46,134,94,8,NOT WS_GROUP EDITTEXT OPT_Counts,16,130,28,14,ES_AUTOHSCROLL CONTROL "Match exact &position",OPT_Exact,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,156,159,10 CONTROL "Match if position is s&ubset",OPT_Subset,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,6,169,159,10 CONTROL "Match material with e&xact pawn structure",OPT_Struct,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,6,182,159,10 CONTROL "Match &material",OPT_Material,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,6,195,159,10 CONTROL "Material &range (upper board-half is optional)",OPT_Range,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,6,208,159,10 CONTROL "Material &difference (optional material balanced)",OPT_Difference,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,6,221,159,10 GROUPBOX "Search Mode: ",OPT_SearchMode,3,146,164,87,WS_GROUP CONTROL "Also match reversed &colors",OPT_Reversed,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,234,160,10 CONTROL "Also match &left-right mirror image",OPT_Mirror,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,247,160,10 PUSHBUTTON "OK",IDOK,56,262,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,112,262,50,14 END DLG_SaveOptions DIALOG DISCARDABLE 6, 17, 218, 119 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Save Game Options" FONT 8, "MS Sans Serif" BEGIN CONTROL "Save games automatically",OPT_Autosave,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,4,157,10 CONTROL "Prompt for filename",OPT_AVPrompt,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,18,150,10 CONTROL "To file:",OPT_AVToFile,"Button",BS_AUTORADIOBUTTON,16, 32,56,10 EDITTEXT OPT_AVFilename,74,30,117,14,ES_AUTOHSCROLL PUSHBUTTON "...",OPT_AVBrowse,196,30,18,14 GROUPBOX "Save As: ",801,4,48,210,28,WS_GROUP CONTROL "PGN",OPT_PGN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8, 60,59,10 CONTROL "Old",OPT_Old,"Button",BS_AUTORADIOBUTTON,74,60,114,10 CONTROL "Save out of book info in PGN",OPT_OutOfBookInfo,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,82,169,10 PUSHBUTTON "OK",IDOK,108,100,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,164,100,50,14 END 1536 DIALOG DISCARDABLE 36, 24, 264, 134 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Open" FONT 8, "Helv" BEGIN LTEXT "File &Name:",1090,6,6,76,9 EDITTEXT 1152,6,16,90,12,ES_AUTOHSCROLL | ES_OEMCONVERT LISTBOX 1120,6,32,90,68,LBS_SORT | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP LTEXT "&Directories:",IDC_Directories,110,6,92,9 LTEXT "",1088,110,18,92,9,SS_NOPREFIX | NOT WS_GROUP LISTBOX 1121,110,32,92,68,LBS_SORT | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP LTEXT "List Files of &Type:",1089,6,104,90,9 COMBOBOX 1136,6,114,90,36,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "Dri&ves:",1091,110,104,92,9 COMBOBOX 1137,110,114,92,68,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "OK",IDOK,208,6,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,208,24,50,14,WS_GROUP PUSHBUTTON "&Help",1038,208,46,50,14,NOT WS_VISIBLE | WS_GROUP LTEXT "&Index number:",IDC_IndexNr,208,74,48,8 EDITTEXT OPT_IndexNumberOld,208,84,50,12,ES_AUTOHSCROLL PUSHBUTTON "Net&work...",1037,208,113,50,14,WS_GROUP END DLG_CommPort DIALOG DISCARDABLE 25, 30, 220, 79 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Communication Port Settings" FONT 8, "Helv" BEGIN PUSHBUTTON "OK",IDOK,106,60,50,14 PUSHBUTTON "Cancel",IDCANCEL,164,60,50,14 RTEXT "&Port:",IDC_Port,4,6,40,10 COMBOBOX OPT_Port,49,4,55,60,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP RTEXT "Data &Rate:",IDC_Rate,114,6,40,10,NOT WS_GROUP COMBOBOX OPT_DataRate,159,4,55,100,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP RTEXT "Data &Bits:",IDC_Bits,4,25,40,10,NOT WS_GROUP COMBOBOX OPT_Bits,49,22,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "P&arity:",IDC_Parity,114,24,40,10,NOT WS_GROUP COMBOBOX OPT_Parity,159,22,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "&Stop Bits:",IDC_Stop,4,42,40,10,NOT WS_GROUP COMBOBOX OPT_StopBits,49,40,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "F&low:",IDC_Flow,114,42,40,10,NOT WS_GROUP COMBOBOX OPT_Flow,159,40,55,60,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Help",OPT_SerialHelp,4,60,50,14,NOT WS_VISIBLE END DLG_EditComment DIALOG DISCARDABLE 6, 18, 302, 102 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Edit Comment" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "OK",IDOK,194,84,50,14 PUSHBUTTON "Cancel",OPT_CancelComment,250,84,50,14 CONTROL "",OPT_CommentText,"RICHEDIT",ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,2,2,298,78 PUSHBUTTON "&Clear",OPT_ClearComment,2,84,50,14 PUSHBUTTON "&Edit",OPT_EditComment,58,84,50,14 END DLG_PromotionKing DIALOG DISCARDABLE 98, 90, 183, 41 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Promote to:" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "Chance&llor",PB_Chancellor,49,4,40,14,NOT WS_TABSTOP PUSHBUTTON "&Archbishop",PB_Archbishop,94,4,40,14,NOT WS_TABSTOP PUSHBUTTON "&Queen",PB_Queen,4,23,40,14,WS_GROUP PUSHBUTTON "&Rook",PB_Rook,49,23,40,14,NOT WS_TABSTOP PUSHBUTTON "&Bishop",PB_Bishop,94,23,40,14,NOT WS_TABSTOP PUSHBUTTON "K&night",PB_Knight,139,23,40,14,NOT WS_TABSTOP PUSHBUTTON "&King",PB_King,4,4,40,14,NOT WS_TABSTOP PUSHBUTTON "&Cancel",IDCANCEL,139,4,40,14,WS_GROUP LTEXT "C&entaur",IDC_Centaur,12,6,25,10 END ABOUTBOX2 DIALOG DISCARDABLE 22, 17, 281, 223 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About WinBoard" FONT 8, "MS Sans Serif" BEGIN RTEXT "Chessboard for Windows",IDC_ChessBoard,196,154,80,8 LTEXT "Copyright 1991 Digital Equipment Corporation",201,4,168, 151,8 LTEXT "Enhancements Copyright 1992-2014 Free Software Foundation", OPT_TCtext1,4,179,126,17 CONTROL "",OPT_TCTime,"Static",SS_BLACKRECT,4,164,272,1 LTEXT "WinBoard 0.0.0",ABOUTBOX_Version,4,154,64,8 CONTROL "galactic",IDC_STATIC,"Static",SS_BITMAP,4,4,15,13 DEFPUSHBUTTON "OK",IDOK,226,204,50,14 LTEXT "Enhancements Copyright 2005\r\nAlessandro Scotti", IDC_STATIC,4,199,183,20 LTEXT "(unofficial version ""X"")",IDC_STATIC,68,154,71,8 END DLG_GameList DIALOG DISCARDABLE 6, 18, 282, 153 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Game List" FONT 8, "MS Sans Serif" BEGIN LISTBOX OPT_GameListText,2,2,277,130,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP PUSHBUTTON "&Thresholds",OPT_GameListLoad,2,136,40,15 PUSHBUTTON "&Find Position",OPT_GameListFind,45,136,48,15 PUSHBUTTON "&Narrow",OPT_GameListNarrow,96,136,30,15 PUSHBUTTON "&Close",OPT_GameListClose,129,136,20,15 PUSHBUTTON ">",OPT_GameListNext,152,136,17,15 PUSHBUTTON "&Filter",IDC_GameListDoFilter,172,136,25,14 EDITTEXT IDC_GameListFilter,201,136,78,14,ES_AUTOHSCROLL END DLG_EditTags DIALOG DISCARDABLE 6, 18, 223, 140 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Edit Tags" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "OK",IDOK,114,122,50,14 PUSHBUTTON "Cancel",OPT_TagsCancel,170,122,50,14 PUSHBUTTON "Save",OPT_TagsSave,58,122,50,14 CONTROL "",OPT_TagsText,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,2,2,218,115 PUSHBUTTON "&Edit",OPT_EditTags,2,122,50,14 END WBCONSOLE DIALOG DISCARDABLE 0, 0, 335, 133 STYLE WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "I C S" CLASS "WBConsole" FONT 8, "Courier New" BEGIN CONTROL "",OPT_ConsoleText,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | ES_NOHIDESEL | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,0,0,335,119 CONTROL "",OPT_ConsoleInput,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_NUMBER | WS_BORDER | WS_TABSTOP,0,120,335,13, WS_EX_TRANSPARENT END DLG_Analysis DIALOG DISCARDABLE 0, 0, 294, 62 STYLE WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN CONTROL "",OPT_AnalysisText,"RICHEDIT",ES_MULTILINE | ES_READONLY | ES_WANTRETURN | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,4,4,286,54 END DLG_Error DIALOG DISCARDABLE 0, 0, 220, 66 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Error" FONT 8, "MS Sans Serif" BEGIN ICON 32515,IDC_STATIC,4,4,21,20 LTEXT "Sorry Charlie",OPT_ErrorText,28,4,188,36 DEFPUSHBUTTON "OK",IDOK,84,48,50,14 END DLG_Colorize DIALOGEX 0, 0, 174, 61 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "I C S Interaction Colors" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,64,42,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,120,42,50,14 PUSHBUTTON "&Color...",OPT_ChooseColor,119,4,51,14,WS_GROUP CONTROL "&Bold",OPT_Bold,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,4,24,30,10 CONTROL "&Italic",OPT_Italic,"Button",BS_AUTOCHECKBOX,40,24,30, 10 CONTROL "&Underline",OPT_Underline,"Button",BS_AUTOCHECKBOX,76, 24,45,10 CONTROL "&Strikeout",OPT_Strikeout,"Button",BS_AUTOCHECKBOX,128, 24,42,10 CONTROL "",OPT_Sample,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_GROUP,4,4,106,15,WS_EX_CLIENTEDGE END DLG_Question DIALOG DISCARDABLE 0, 0, 187, 77 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Question" FONT 8, "MS Sans Serif" BEGIN EDITTEXT OPT_QuestionInput,4,36,179,14,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,78,58,50,14,WS_GROUP PUSHBUTTON "Cancel",IDCANCEL,134,58,50,14 LTEXT "Enter a chess engine command or just type something stupid that will completely screw things up.", OPT_QuestionText,30,2,153,28 ICON 32514,IDC_STATIC,4,4,20,20 END DLG_Startup DIALOG DISCARDABLE 0, 0, 326, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "WinBoard Startup" FONT 8, "MS Sans Serif" BEGIN GROUPBOX "What would you like to do?",IDC_Welcome,4,4,318,56 CONTROL "&Play against a chess engine or match two engines", OPT_ChessEngine,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,17,310,10 CONTROL "&Use an Internet Chess Server",OPT_ChessServer,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,8,30,310,10 CONTROL "Just &view or edit game files",OPT_View,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,8,43,310,10 LTEXT "Specify Chess &Engines:",IDC_SPECIFY_ENG_STATIC,11,63, 200,10 COMBOBOX OPT_ChessEngineName,17,74,244,129,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP COMBOBOX OPT_SecondChessEngineName,17,92,244,129,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP LTEXT "Specify Chess &Server:",IDC_SPECIFY_SERVER_STATIC,11, 108,200,10 COMBOBOX OPT_ChessServerName,17,122,244,129,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "&Additional options",OPT_AnyAdditional,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,11,142,91,10 EDITTEXT OPT_AdditionalOptions,105,142,215,13,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,272,73,50,14 PUSHBUTTON "Cancel",IDCANCEL,272,91,50,14 PUSHBUTTON "&Help",IDM_HELPCONTENTS,272,109,50,14 END DLG_IndexNumber DIALOG DISCARDABLE 0, 0, 236, 18 STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS FONT 8, "MS Sans Serif" BEGIN LTEXT "Inde&x number:",IDC_Index,5,2,46,8 EDITTEXT OPT_IndexNumber,54,0,155,13,ES_AUTOHSCROLL END DLG_TypeInMove DIALOG DISCARDABLE 0, 0, 206, 23 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Type in a move" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,96,4,50,14 PUSHBUTTON "Cancel",IDCANCEL,152,4,50,14 EDITTEXT OPT_Move,4,4,86,13,ES_AUTOHSCROLL END DLG_TypeInName DIALOG DISCARDABLE 0, 0, 206, 23 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Type in your name" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,96,4,50,14 PUSHBUTTON "Cancel",IDCANCEL,152,4,50,14 EDITTEXT OPT_Name,4,4,86,13,ES_AUTOHSCROLL END DLG_Sound DIALOG DISCARDABLE 0, 0, 262, 105 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sounds" FONT 8, "MS Sans Serif" BEGIN LTEXT "&Event:",IDC_Event,4,7,46,9 COMBOBOX CBO_Sounds,50,4,208,110,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP // GROUPBOX "sound type",IDC_STATIC,8,18,66,62 CONTROL "&No sound",OPT_NoSound,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,12,22,47,10 CONTROL "&Default beep",OPT_DefaultBeep,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,12,36,83,10 CONTROL "&Built-in sound:",OPT_BuiltInSound,"Button", BS_AUTORADIOBUTTON | WS_TABSTOP,12,51,83,10 CONTROL "&WAV file:",OPT_WavFile,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,12,66,83,10 COMBOBOX OPT_BuiltInSoundName,96,48,103,109,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP | WS_GROUP EDITTEXT OPT_WavFileName,96,65,103,12,ES_AUTOHSCROLL PUSHBUTTON "B&rowse...",OPT_BrowseSound,208,64,50,14 PUSHBUTTON "&Play",OPT_PlaySound,208,47,50,14 PUSHBUTTON "Defaults",OPT_DefaultSounds,6,86,50,14 DEFPUSHBUTTON "OK",IDOK,152,86,50,14 PUSHBUTTON "Cancel",IDCANCEL,208,86,50,14 END DLG_GeneralOptions DIALOG DISCARDABLE 0, 0, 300, 225 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "General Options" FONT 8, "MS Sans Serif" BEGIN CONTROL "Always on &Top",OPT_AlwaysOnTop,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,6,151,10 CONTROL "Highlight Last &Move",OPT_HighlightLastMove,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,6,151,10 CONTROL "Always &Queen Ctrl+Shift+Q",OPT_AlwaysQueen,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,20,151,10 CONTROL "Periodic &Updates",OPT_PeriodicUpdates,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,20,151,10 CONTROL "Animate &Dragging",OPT_AnimateDragging,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,34,151,10 CONTROL "Ponder &Next Move Ctrl+Shift+P",OPT_PonderNextMove,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,34,151,10 CONTROL "&Animate Moving Ctrl+Shift+A",OPT_AnimateMoving,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,48,151,10 CONTROL "&Popup Exit Message",OPT_PopupExitMessage,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,48,151,10 CONTROL "Auto &Flag Ctrl+Shift+F",OPT_AutoFlag,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,62,151,10 CONTROL "Popup Move &Errors",OPT_PopupMoveErrors,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,62,151,10 CONTROL "Auto Flip &View",OPT_AutoFlipView,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,76,151,10 CONTROL "Show Butt&on Bar",OPT_ShowButtonBar,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,76,151,10 CONTROL "Auto &Raise Board",OPT_AutoRaiseBoard,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,90,151,10 CONTROL "Show &Coordinates",OPT_ShowCoordinates,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,90,151,10 CONTROL "&Blindfold",OPT_Blindfold,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,104,151,10 CONTROL "&Send Engine Think",OPT_ShowThinking,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,104,151,10 CONTROL "Highlight Dra&gging",OPT_HighlightDragging,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,118,151,10 CONTROL "Test &Legality Ctrl+Shift+L",OPT_TestLegality,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,118,151,10 CONTROL "E&xtended PGN Info Ctrl+Shift+X",OPT_SaveExtPGN,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,4,132,151,10 CONTROL "&Hide Thinking Ctrl+Shift+H",OPT_HideThinkFromHuman,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,156,132,151,10 CONTROL "&Info in Move History Ctrl+Shift+I",OPT_ExtraInfoInMoveHistory, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,146,151,10 CONTROL "Highlight with Arro&w",OPT_HighlightMoveArrow, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,146,151,10 CONTROL "Displa&y Logos",OPT_AutoLogo, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,160,151,10 CONTROL "One-Click Move",OPT_SmartMove, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,160,151,10 CONTROL "auto-Display Tags",OPT_AutoTags, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,174,151,10 CONTROL "auto-Display Comment",OPT_AutoComment, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,174,151,10 CONTROL "Headers in Engine Output",OPT_Headers, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,188,151,10 CONTROL "Enable Variation Trees",OPT_Variations, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,188,151,10 CONTROL "Play Analysis PV on Click",OPT_AutoExtend, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,202,151,10 DEFPUSHBUTTON "OK",IDOK,180,206,50,14 PUSHBUTTON "Cancel",IDCANCEL,236,206,50,14 END DLG_IcsOptions DIALOGEX 0, 0, 302, 268 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ICS Options" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,194,250,50,15 PUSHBUTTON "Cancel",IDCANCEL,248,250,50,15 CONTROL "&Auto Comment",OPT_AutoComment,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,12,73,8 CONTROL "&Auto Kibitz",OPT_AutoKibitz,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,12,73,8 CONTROL "Auto &Observe",OPT_AutoObserve,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,25,73,8 CONTROL "Auto &Create Logon",OPT_AutoCreate,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,25,73,8 CONTROL "&Get Move List",OPT_GetMoveList,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,10,38,150,8 CONTROL "&Local Line Editing",OPT_LocalLineEditing,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,10,51,150,8 CONTROL "&Quiet Play",OPT_QuietPlay,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,64,150,8 CONTROL "See&k Graph",OPT_SeekGraph,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,77,73,8 CONTROL "auto-&Refresh",OPT_AutoRefresh,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,77,73,8 CONTROL "Bckgnd Obser&ve",OPT_BgObserve,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,90,73,8 CONTROL "&Dual Board",OPT_DualBoard,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,90,73,8 CONTROL "&Premove",OPT_Premove,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,12,117,10 CONTROL "&White first move",OPT_PremoveWhite,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,180,26,67,10 EDITTEXT OPT_PremoveWhiteText,256,22,25,14,ES_AUTOHSCROLL CONTROL "&Black first move",OPT_PremoveBlack,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,180,40,66,10 EDITTEXT OPT_PremoveBlackText,256,38,25,14,ES_AUTOHSCROLL CONTROL "One-Click &Move",OPT_SmartMove,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,54,117,10 CONTROL "&Sound alarm at",OPT_IcsAlarm,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,85,63,10 EDITTEXT OPT_IcsAlarmTime,244,81,18,14,ES_AUTOHSCROLL LTEXT "seconds",IDC_Sec,264,85,33,8 PUSHBUTTON "Choose...",OPT_ChooseShoutColor,97,114,45,15 PUSHBUTTON "Choose...",OPT_ChooseSShoutColor,97,134,45,15 PUSHBUTTON "Choose...",OPT_ChooseChannel1Color,97,154,45,15 PUSHBUTTON "Choose...",OPT_ChooseChannelColor,97,174,45,15 PUSHBUTTON "Choose...",OPT_ChooseKibitzColor,97,194,45,15 PUSHBUTTON "Choose...",OPT_ChooseTellColor,246,114,45,15 PUSHBUTTON "Choose...",OPT_ChooseChallengeColor,246,134,45,15 PUSHBUTTON "Choose...",OPT_ChooseRequestColor,246,154,45,15 PUSHBUTTON "Choose...",OPT_ChooseSeekColor,246,174,45,15 PUSHBUTTON "Choose...",OPT_ChooseNormalColor,246,194,45,15 PUSHBUTTON "Background...",OPT_ChooseBackgroundColor,10,221,50,16 PUSHBUTTON "&Defaults...",OPT_DefaultColors,68,221,50,16 CONTROL "Do ¬ colorize messages",OPT_DontColorize,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,192,225,97,10 CONTROL "",OPT_SampleShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10,114,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleSShout,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10,134,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleChannel1,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10, 154,75,15,WS_EX_CLIENTEDGE CONTROL "",OPT_SampleChannel,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,10,174,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleKibitz,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_GROUP,10,194,75,15,WS_EX_CLIENTEDGE CONTROL "",OPT_SampleTell,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,114,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleChallenge,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159, 134,75,15,WS_EX_CLIENTEDGE CONTROL "",OPT_SampleRequest,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,154,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleSeek,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,174,75,15, WS_EX_CLIENTEDGE CONTROL "",OPT_SampleNormal,"RICHEDIT",ES_CENTER | ES_MULTILINE | ES_READONLY | WS_DISABLED | WS_GROUP,159,194,75,15, WS_EX_CLIENTEDGE LTEXT "Startup &Chat Boxes:",IDC_Boxes,4,251,65,8 EDITTEXT OPT_StartupChatBoxes,72,249,90,14,ES_AUTOHSCROLL GROUPBOX "Interaction Colors",GPB_Colors,4,103,294,140 GROUPBOX "Premove",GPB_Premove,174,0,124,69 GROUPBOX "General",GPB_General,4,0,166,101 GROUPBOX "Alarm",GPB_Alarm,174,71,124,30 END DLG_BoardOptions DIALOG DISCARDABLE 0, 0, 224, 262 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Board Options" FONT 8, "MS Sans Serif" BEGIN CONTROL "&Tiny",OPT_SizeTiny,"Button",BS_AUTORADIOBUTTON | WS_GROUP,9,14,50,10 CONTROL "T&eeny",OPT_SizeTeeny,"Button",BS_AUTORADIOBUTTON,9,24, 60,10 CONTROL "&Dinky",OPT_SizeDinky,"Button",BS_AUTORADIOBUTTON,9,34, 60,10 CONTROL "&Petite",OPT_SizePetite,"Button",BS_AUTORADIOBUTTON,9, 44,60,10 CONTROL "Sl&im",OPT_SizeSlim,"Button",BS_AUTORADIOBUTTON,9,54,60, 10 CONTROL "&Small",OPT_SizeSmall,"Button",BS_AUTORADIOBUTTON,9,64, 60,10 CONTROL "Medi&ocre",OPT_SizeMediocre,"Button",BS_AUTORADIOBUTTON, 80,14,60,10 CONTROL "&Middling",OPT_SizeMiddling,"Button",BS_AUTORADIOBUTTON, 80,24,60,10 CONTROL "&Average",OPT_SizeAverage,"Button",BS_AUTORADIOBUTTON, 80,34,60,10 CONTROL "Mode&rate",OPT_SizeModerate,"Button",BS_AUTORADIOBUTTON, 80,44,60,10 CONTROL "Medi&um",OPT_SizeMedium,"Button",BS_AUTORADIOBUTTON,80, 54,60,10 CONTROL "Bul&ky",OPT_SizeBulky,"Button",BS_AUTORADIOBUTTON,80,64, 60,10 CONTROL "&Large",OPT_SizeLarge,"Button",BS_AUTORADIOBUTTON,154, 14,60,10 CONTROL "&Big",OPT_SizeBig,"Button",BS_AUTORADIOBUTTON,154,24,60, 10 CONTROL "&Huge",OPT_SizeHuge,"Button",BS_AUTORADIOBUTTON,154,34, 60,10 CONTROL "&Giant",OPT_SizeGiant,"Button",BS_AUTORADIOBUTTON,154, 44,60,10 CONTROL "&Colossal",OPT_SizeColossal,"Button",BS_AUTORADIOBUTTON, 154,54,60,10 CONTROL "Tita&nic",OPT_SizeTitanic,"Button",BS_AUTORADIOBUTTON, 154,64,60,10 PUSHBUTTON "...",OPT_ChooseLightSquareColor,110,94,20,15 PUSHBUTTON "...",OPT_ChooseDarkSquareColor,110,112,20,15 PUSHBUTTON "...",OPT_ChooseWhitePieceColor,110,130,20,15 PUSHBUTTON "...",OPT_ChooseBlackPieceColor,110,148,20,15 PUSHBUTTON "...",OPT_ChooseHighlightSquareColor,110,166,20,15 PUSHBUTTON "...",OPT_ChoosePremoveHighlightColor,110,184,20,15 CONTROL "Monochrome",OPT_Monochrome,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,210,64,10 CONTROL "All White",OPT_AllWhite,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,179,73,10 CONTROL "Flip Black",OPT_UpsideDown,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,191,73,10 CONTROL "Use Board Textures",OPT_Bitmaps,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,203,73,10 CONTROL "Use Piece Font",OPT_PieceFont,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,215,73,10 CONTROL "Suppress Grid",OPT_Grid,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,227,73,10 PUSHBUTTON "Defaults",OPT_DefaultBoardColors,80,206,50,15 EDITTEXT OPT_DarkSquareColor,80,112,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT OPT_LightSquareColor,80,94,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT OPT_WhitePieceColor,80,130,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT OPT_BlackPieceColor,80,148,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT OPT_HighlightSquareColor,80,166,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP GROUPBOX "Colors",GPB_Colors,4,84,215,154 EDITTEXT OPT_PremoveHighlightColor,80,184,25,15,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "Light Squares",IDC_Light,10,98,60,10 LTEXT "Dark Squares",IDC_Dark,10,116,60,10 LTEXT "White Pieces",IDC_White,10,134,60,10 LTEXT "Black Pieces",IDC_Black,10,152,60,10 LTEXT "Square Highlights",IDC_High,10,170,60,10 LTEXT "Premove Highlights",IDC_PreHigh,10,188,70,10 GROUPBOX "Size",GPB_Size,4,4,215,75 EDITTEXT OPT_SampleLightSquare,144,96,39,36,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT OPT_SampleDarkSquare,144,138,39,36,ES_READONLY | WS_DISABLED | NOT WS_BORDER | NOT WS_TABSTOP DEFPUSHBUTTON "OK",IDOK,84,244,50,14 PUSHBUTTON "Cancel",IDCANCEL,140,244,50,14 END DLG_NewVariant DIALOG DISCARDABLE 0, 0, 224, 250 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Variants" FONT 8, "MS Sans Serif" BEGIN CONTROL "&normal",OPT_VariantNormal,"Button",BS_AUTORADIOBUTTON | WS_GROUP,9,14,70,10 CONTROL "&FRC",OPT_VariantFRC,"Button",BS_AUTORADIOBUTTON,9, 24,70,10 CONTROL "&wildcastle",OPT_VariantWildcastle,"Button",BS_AUTORADIOBUTTON,9,34, 50,10 CONTROL "&nocastle",OPT_VariantNocastle,"Button",BS_AUTORADIOBUTTON,9, 44,70,10 CONTROL "&losers",OPT_VariantLosers,"Button",BS_AUTORADIOBUTTON, 9,54,70,10 CONTROL "&giveaway",OPT_VariantGiveaway,"Button",BS_AUTORADIOBUTTON, 9,64,70,10 CONTROL "s&uicide",OPT_VariantSuicide,"Button",BS_AUTORADIOBUTTON, 9,74,70,10 CONTROL "&3Check",OPT_Variant3Check,"Button",BS_AUTORADIOBUTTON,9,84, 70,10 CONTROL "&twokings",OPT_VariantTwoKings,"Button",BS_AUTORADIOBUTTON,9,94, 70,10 CONTROL "&atomic",OPT_VariantAtomic,"Button",BS_AUTORADIOBUTTON, 9,104,70,10 CONTROL "&Mighty Lion",OPT_VariantLion,"Button",BS_AUTORADIOBUTTON, 9,114,70,10 CONTROL "cra&zyhouse",OPT_VariantCrazyhouse,"Button",BS_AUTORADIOBUTTON,80,14, 70,10 CONTROL "&bughouse",OPT_VariantBughouse,"Button",BS_AUTORADIOBUTTON,80,24,70, 10 CONTROL "Sp&artan",OPT_VariantSpartan,"Button",BS_AUTORADIOBUTTON,80,34,70, 10 CONTROL "&shogi",OPT_VariantShogi,"Button",BS_AUTORADIOBUTTON,80, 44,70,10 CONTROL "su&per",OPT_VariantSuper,"Button",BS_AUTORADIOBUTTON,80, 54,70,10 CONTROL "&knightmate",OPT_VariantKnightmate,"Button",BS_AUTORADIOBUTTON, 80,64,70,10 CONTROL "&Berolina",OPT_VariantBerolina,"Button",BS_AUTORADIOBUTTON,80,74, 70,10 CONTROL "c&ylinder",OPT_VariantCylinder,"Button",BS_AUTORADIOBUTTON,80, 84,70,10 CONTROL "&fairy",OPT_VariantFairy,"Button",BS_AUTORADIOBUTTON,80, 94,70,10 CONTROL "&makruk",OPT_VariantMakruk,"Button",BS_AUTORADIOBUTTON,80, 104,70,10 CONTROL "&ASEAN",OPT_VariantASEAN,"Button",BS_AUTORADIOBUTTON,80, 114,70,10 CONTROL "&gothic",OPT_VariantGothic,"Button",BS_AUTORADIOBUTTON,154,14, 70,10 CONTROL "&capablanca",OPT_VariantCapablanca,"Button",BS_AUTORADIOBUTTON,154, 24,70,10 CONTROL "&Janus",OPT_VariantJanus,"Button",BS_AUTORADIOBUTTON,154,34, 70,10 CONTROL "&CRC",OPT_VariantCRC,"Button",BS_AUTORADIOBUTTON,154,44, 70,10 CONTROL "&Falcon",OPT_VariantFalcon,"Button",BS_AUTORADIOBUTTON,154, 54,70,10 CONTROL "cou&rier",OPT_VariantCourier,"Button",BS_AUTORADIOBUTTON,154,64, 70,10 CONTROL "&Great",OPT_VariantGreat,"Button",BS_AUTORADIOBUTTON,154,74, 70,10 CONTROL "&Shatranj",OPT_VariantShatranj,"Button",BS_AUTORADIOBUTTON,154, 84,70,10 CONTROL "Seira&wan",OPT_VariantSChess,"Button",BS_AUTORADIOBUTTON,154,94,70, 10 CONTROL "&Grand",OPT_VariantGrand,"Button",BS_AUTORADIOBUTTON,154,104,70, 10 CONTROL "&xiangqi",OPT_VariantXiangqi,"Button",BS_AUTORADIOBUTTON,154,114,70, 10 CONTROL "",OPT_EngineVariant+0,"Button",BS_AUTORADIOBUTTON,9,134,70,10 CONTROL "",OPT_EngineVariant+1,"Button",BS_AUTORADIOBUTTON,80,134,70,10 CONTROL "",OPT_EngineVariant+2,"Button",BS_AUTORADIOBUTTON,154,134,70,10 CONTROL "",OPT_EngineVariant+3,"Button",BS_AUTORADIOBUTTON,9,144,70,10 CONTROL "",OPT_EngineVariant+4,"Button",BS_AUTORADIOBUTTON,80,144,70,10 CONTROL "",OPT_EngineVariant+5,"Button",BS_AUTORADIOBUTTON,154,144,70,10 CONTROL "",OPT_EngineVariant+6,"Button",BS_AUTORADIOBUTTON,9,154,70,10 CONTROL "",OPT_EngineVariant+7,"Button",BS_AUTORADIOBUTTON,80,154,70,10 CONTROL "",OPT_EngineVariant+8,"Button",BS_AUTORADIOBUTTON,154,154,70,10 GROUPBOX "Variant",GPB_Variant,4,4,215,165 LTEXT "Board size:",GPB_Board,10,183,40,8,WS_TABSTOP LTEXT "ranks",IDC_Height,77,183,38,8 EDITTEXT IDC_Ranks,60,179,14,14,ES_AUTOHSCROLL LTEXT "files",IDC_Width,133,183,80,8 EDITTEXT IDC_Files,116,179,14,14,ES_AUTOHSCROLL LTEXT "Holdings with room for:",IDC_Hand,10,201,90,8 EDITTEXT IDC_Holdings,93,197,14,14,ES_AUTOHSCROLL LTEXT "pieces",IDC_Pieces,110,201,100,8 LTEXT "('-1' means defaults for selected variant)",IDC_Def,10,217,210,8 DEFPUSHBUTTON "OK",IDOK,114,232,50,14 PUSHBUTTON "Cancel",IDCANCEL,170,232,50,14 END DLG_Fonts DIALOG DISCARDABLE 0, 0, 266, 274 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fonts" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,156,256,50,14 PUSHBUTTON "Cancel",IDCANCEL,212,256,50,14 PUSHBUTTON "Choose...",OPT_ChooseClockFont,212,15,45,15 PUSHBUTTON "Choose...",OPT_ChooseMessageFont,212,39,45,15 PUSHBUTTON "Choose...",OPT_ChooseCoordFont,212,63,45,15 PUSHBUTTON "Choose...",OPT_ChooseTagFont,212,101,45,15 PUSHBUTTON "Choose...",OPT_ChooseCommentsFont,212,125,45,15 PUSHBUTTON "Choose...",OPT_ChooseConsoleFont,212,149,45,15 PUSHBUTTON "Choose...",OPT_ChooseMoveHistoryFont,212,174,45,15 PUSHBUTTON "Choose...",OPT_ChooseGameListFont,212,198,45,15 PUSHBUTTON "Choose...",OPT_ChoosePieceFont,212,222,45,15 PUSHBUTTON "&Defaults",OPT_DefaultFonts,3,256,50,15 CONTROL "",OPT_SampleCoordFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,59,130,20 CONTROL "",OPT_SampleTagFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,97,130,20 CONTROL "",OPT_SampleCommentsFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,121,130,20 CONTROL "",OPT_SampleConsoleFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,145,130,20 LTEXT "Clocks",OPT_ClockFont,13,16,63,10,NOT WS_GROUP LTEXT "Messages",OPT_MessageFont,13,40,63,10,NOT WS_GROUP LTEXT "Coordinates",OPT_CoordFont,13,64,63,10,NOT WS_GROUP LTEXT "Tags",OPT_EditTagsFont,13,102,63,10,NOT WS_GROUP LTEXT "Comments",OPT_CommentsFont,13,126,63,10,NOT WS_GROUP LTEXT "I C S Interaction",OPT_MessageFont5,13,150,63,10,NOT WS_GROUP CONTROL "",OPT_SampleClockFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,11,130,20 CONTROL "",OPT_SampleMessageFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,35,130,20 GROUPBOX "Current Board Size",GPB_Current,3,1,259,83 GROUPBOX "All Board Sizes",GPB_All,3,87,259,157 CONTROL "",OPT_SampleMoveHistoryFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,170,130,20 LTEXT "Move History, Engine Output",OPT_MessageFont6,13,171,63,20,NOT WS_GROUP CONTROL "",OPT_SampleGameListFont,"RICHEDIT",ES_READONLY | WS_DISABLED | WS_BORDER,77,194,130,20 LTEXT "Game List",OPT_MessageFont7,13,199,63,20,NOT WS_GROUP CONTROL "",OPT_SamplePieceFont,"RICHEDIT", ES_AUTOHSCROLL | WS_BORDER,77,218,130,20 LTEXT "Piece Font",OPT_MessageFont8,13,223,63,20,NOT WS_GROUP END DLG_NewGameFRC DIALOG DISCARDABLE 0, 0, 176, 47 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "New Shuffle Game" FONT 8, "MS Sans Serif" BEGIN LTEXT "&Start Position Number:",IDC_NFG_Label,4,7,71,8 EDITTEXT IDC_NFG_Edit,76,4,42,14,ES_AUTOHSCROLL PUSHBUTTON "Random",IDC_NFG_Random,122,4,50,14 DEFPUSHBUTTON "OK",IDOK,64,28,50,14 PUSHBUTTON "Cancel",IDCANCEL,122,28,50,14 END DLG_GameListOptions DIALOG DISCARDABLE 0, 0, 218, 150 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Game List Options" FONT 8, "MS Sans Serif" BEGIN LTEXT "PGN &Tags:",IDC_GLT,2,2,158,8 LISTBOX IDC_GameListTags,2,12,153,112,LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&Up",IDC_GLT_Up,164,12,50,14 PUSHBUTTON "&Down",IDC_GLT_Down,164,30,50,14 PUSHBUTTON "Default",IDC_GLT_Restore,164,92,50,14 PUSHBUTTON "Factory",IDC_GLT_Default,164,110,50,14 DEFPUSHBUTTON "OK",IDOK,108,132,50,14 PUSHBUTTON "Cancel",IDCANCEL,164,132,50,14 LTEXT "Restore to:",IDC_GLT_RestoreTo,159,80,58,8 END DLG_MoveHistory DIALOGEX 0, 0, 225, 130 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW CAPTION "Move History" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN CONTROL "",IDC_MoveHistory,"RICHEDIT",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,2,2,222,128 END DLG_EvalGraph DIALOGEX 0, 0, 216, 75 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW CAPTION "Evaluation Graph" FONT 8, "MS Sans Serif" BEGIN END DLG_EngineOutput DIALOGEX 0, 0, 266, 167 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW CAPTION "Engine output" FONT 8, "MS Sans Serif" BEGIN RTEXT "NPS",IDC_Engine1_NPS,206,2,57,8 LTEXT "Engine #1",IDC_EngineLabel1,14,2,84,8 CONTROL "",IDC_EngineMemo1,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,0,10,262,72 LTEXT "Engine #2",IDC_EngineLabel2,15,84,103,8 CONTROL "",IDC_EngineMemo2,"RICHEDIT",ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,2,92,262,74 RTEXT "NPS",IDC_Engine2_NPS,210,84,55,8 ICON IDI_UNKNOWN_14,IDC_Color1,2,4,20,20,SS_REALSIZEIMAGE ICON IDI_UNKNOWN_14,IDC_Color2,4,84,20,20 LTEXT "Static",IDC_StateData1,120,2,83,8 ICON IDI_TRANS_14,IDC_StateIcon1,98,0,21,20 LTEXT "Static",IDC_StateData2,186,84,19,8 ICON IDI_TRANS_14,IDC_StateIcon2,164,84,20,20 END DLG_Chat DIALOGEX 0, 0, 290, 106 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_TOOLWINDOW CAPTION "Chat Window" FONT 8, "MS Sans Serif" BEGIN LTEXT "Chat partner:",IDC_Partner,5,5,45,10 EDITTEXT IDC_ChatPartner,50,3,45,13,ES_AUTOHSCROLL PUSHBUTTON "",IDC_Focus1,100,3,30,13 PUSHBUTTON "",IDC_Focus2,133,3,30,13 PUSHBUTTON "",IDC_Focus3,166,3,30,13 PUSHBUTTON "",IDC_Focus4,199,3,30,13 PUSHBUTTON "Clear",IDC_Clear,232,3,25,13 DEFPUSHBUTTON "Send",IDC_Send,262,3,25,13 CONTROL "",IDC_ChatMemo,"RICHEDIT",ES_MULTILINE | ES_READONLY | ES_AUTOVSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,3,17,284,70 CONTROL "",OPT_ChatInput,"RICHEDIT",ES_AUTOHSCROLL | ES_NOHIDESEL | WS_BORDER | WS_TABSTOP,3,90,284,13 END DLG_EnginePlayOptions DIALOG DISCARDABLE 0, 0, 248, 202 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Adjudications" FONT 8, "MS Sans Serif" BEGIN CONTROL "Ponder Next Move",IDC_EpPonder,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,4,240,10 CONTROL "Enable and Show Thinking (recommended)", IDC_EpShowThinking,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 4,16,240,10 CONTROL "Hide Thinking when Playing against Human", IDC_EpHideThinkingHuman,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,28,240,10 CONTROL "Periodic Updates (for Analysis Mode)", IDC_EpPeriodicUpdates,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,40,240,10 GROUPBOX "Adjudications in non-ICS games",GPB_Adjudications,4,56,240,98 LTEXT "Adjudicate draw after:",IDC_Draw,10,72,124,8 EDITTEXT IDC_EpDrawMoveCount,136,68,40,14,ES_AUTOHSCROLL LTEXT "moves",IDC_Moves,178,72,22,8 LTEXT "Win/loss adjudication threshold:",IDC_Threshold,10,90,124, 8 EDITTEXT IDC_EpAdjudicationThreshold,136,86,40,14,ES_AUTOHSCROLL LTEXT "centipawns",IDC_Centi,178,90,65,8 CONTROL "&Verify Engine Claims",IDC_TestClaims,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,108,119,10 CONTROL "Detect &Mates", IDC_DetectMates,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 10,118,119,10 CONTROL "Draw if &Insufficient Material", IDC_MaterialDraws,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,128,119,10 CONTROL "Adjudicate &Trivial Draws", IDC_TrivialDraws,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,138,119,10 GROUPBOX "Apply",GPB_Apply,130,102,106,47 EDITTEXT IDC_RuleMoves,135,113,20,14,ES_AUTOHSCROLL LTEXT "-move rule",IDC_Rule,157,117,75,8 EDITTEXT IDC_DrawRepeats,135,130,20,14,ES_AUTOHSCROLL LTEXT "-fold repeats",IDC_Repeats,157,134,75,8 CONTROL "Engine #1 Score is Absolute", IDC_ScoreAbs1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,156,140,10 CONTROL "Engine #2 Score is Absolute", IDC_ScoreAbs2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,168,140,10 DEFPUSHBUTTON "OK",IDOK,138,185,50,14 PUSHBUTTON "Cancel",IDCANCEL,194,185,50,14 END DLG_OptionsUCI DIALOG DISCARDABLE 0, 0, 248, 160 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Common Engine Settings" FONT 8, "MS Sans Serif" BEGIN LTEXT "Polyglot Directory:",IDC_PolyDir,2,8,78,8 EDITTEXT IDC_PolyglotDir,82,4,140,14,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BrowseForPolyglotDir,226,4,17,14 LTEXT "Hash Size (MB):",IDC_Hash,2,26,78,8 EDITTEXT IDC_HashSize,82,22,40,14,ES_AUTOHSCROLL LTEXT "Max nr of CPUs:",IDC_CPU,126,26,60,8 EDITTEXT IDC_Cores,187,22,35,14,ES_AUTOHSCROLL LTEXT "EGTB Path:",IDC_Path,2,44,78,8 EDITTEXT IDC_PathToEGTB,82,40,140,14,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BrowseForEGTB,226,40,17,14 LTEXT "EGTB Size (MB):",IDC_Cache,2,62,78,8 EDITTEXT IDC_SizeOfEGTB,82,58,40,14,ES_AUTOHSCROLL CONTROL "Ponder Next Move",OPT_PonderNextMove,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,136,62,100,10 CONTROL "Use Book:",IDC_UseBook,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,80,78,10 EDITTEXT IDC_BookFile,82,76,140,14,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_BrowseForBook,226,76,17,14 CONTROL "First has Own Book",IDC_OwnBook1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,94,100,10 CONTROL "Second has Own Book",IDC_OwnBook2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,107,100,10 LTEXT "Book Depth:",IDC_Depth,126,98,60,8 EDITTEXT IDC_BookDep,187,94,35,14,ES_AUTOHSCROLL LTEXT "Book Variation:",IDC_Variation,126,116,60,8 EDITTEXT IDC_BookStr,187,112,35,14,ES_AUTOHSCROLL LTEXT "Default Match Games:",IDC_DefGames,2,135,72,8 EDITTEXT IDC_Games,82,131,28,14,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,128,142,50,14 PUSHBUTTON "Cancel",IDCANCEL,194,142,50,14 END DLG_Null DIALOG DISCARDABLE 0, 0, 186, 50 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Null" FONT 8, "MS Sans Serif" BEGIN END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN DLG_GameList, DIALOG BEGIN RIGHTMARGIN, 258 END DLG_Colorize, DIALOG BEGIN BOTTOMMARGIN, 32 END DLG_GeneralOptions, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 213 TOPMARGIN, 7 BOTTOMMARGIN, 176 END DLG_IcsOptions, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 295 TOPMARGIN, 7 BOTTOMMARGIN, 248 END DLG_BoardOptions, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 187 TOPMARGIN, 7 BOTTOMMARGIN, 243 END DLG_Fonts, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 259 TOPMARGIN, 7 BOTTOMMARGIN, 219 END DLG_NewGameFRC, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 169 TOPMARGIN, 7 BOTTOMMARGIN, 40 END DLG_GameListOptions, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 199 TOPMARGIN, 7 BOTTOMMARGIN, 133 END DLG_MoveHistory, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 218 TOPMARGIN, 7 BOTTOMMARGIN, 123 END DLG_EvalGraph, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 209 TOPMARGIN, 7 BOTTOMMARGIN, 68 END DLG_EngineOutput, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 259 TOPMARGIN, 7 BOTTOMMARGIN, 160 END DLG_EnginePlayOptions, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 201 TOPMARGIN, 7 BOTTOMMARGIN, 122 END DLG_OptionsUCI, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 221 TOPMARGIN, 7 BOTTOMMARGIN, 117 END DLG_Null, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 179 TOPMARGIN, 7 BOTTOMMARGIN, 43 END END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_WHITE_14 ICON DISCARDABLE "bitmaps/white_14.ico" ICON_BLACK ICON DISCARDABLE "bitmaps/icon_ob.ico" ICON_BOARD ICON DISCARDABLE "bitmaps/board.ico" ICON_WHITE ICON DISCARDABLE "bitmaps/icon_whi.ico" ICON_XTOURNEY ICON DISCARDABLE "bitmaps/cross.ico" IDI_BLACK_14 ICON DISCARDABLE "bitmaps/black_14.ico" IDI_PONDER_14 ICON DISCARDABLE "bitmaps/ponder_14.ico" IDI_TRANS_14 ICON DISCARDABLE "bitmaps/trans_14.ico" IDI_CLOCK_14 ICON DISCARDABLE "bitmaps/clock_14.ico" IDI_UNKNOWN_14 ICON DISCARDABLE "bitmaps/unknown_14.ico" IDI_BALOON_14 ICON DISCARDABLE "bitmaps/baloon_14.ico" IDI_ANALYZE_14 ICON DISCARDABLE "bitmaps/analyze_14.ico" IDI_ANALYZE2_14 ICON DISCARDABLE "bitmaps/analyze2_14.ico" ///////////////////////////////////////////////////////////////////////////// // // Menu // WINBOARD MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New Game\tCtrl-N", IDM_NewGame MENUITEM "New Sh&uffle Game...", IDM_NewGameFRC MENUITEM "New &Variant...\tAlt+Shift+V",IDM_NewVariant MENUITEM SEPARATOR MENUITEM "&Load Game...\tCtrl-O", IDM_LoadGame MENUITEM "L&oad Position...\tCtrl+Shift+O", IDM_LoadPosition // MENUITEM "Load &Next Game\tAlt+PgDn", IDM_LoadNextGame // MENUITEM "Load &Previous Game\tAlt+PgUp", IDM_LoadPrevGame // MENUITEM "&Reload Same Game", IDM_ReloadGame MENUITEM "Load N&ext Position\tAlt+Shift+PgDn", IDM_LoadNextPosition MENUITEM "Load Pre&vious Position\tAlt+Shift+PgUp", IDM_LoadPrevPosition // MENUITEM "Reload Sa&me Position", IDM_ReloadPosition MENUITEM SEPARATOR MENUITEM "&Save Game...\tCtrl-S", IDM_SaveGame MENUITEM "S&ave Position...\tCtrl+Shift+S",IDM_SavePosition MENUITEM SEPARATOR MENUITEM "Save as &Diagram...", IDM_SaveDiagram MENUITEM "Save Selected Games...", IDM_SaveSelected MENUITEM "Save Games to &Book", IDM_CreateBook MENUITEM SEPARATOR MENUITEM "&Quit", IDM_Exit END POPUP "&Edit" BEGIN MENUITEM "&Copy Game To Clipboard\tCtrl+C", IDM_CopyGame MENUITEM "C&opy Position To Clipboard\tCtrl+Shift+C", IDM_CopyPosition MENUITEM "Copy Game List to Clipboard", IDM_CopyGameListToClipboard MENUITEM SEPARATOR MENUITEM "&Paste Game From Clipboard\tCtrl+V", IDM_PasteGame MENUITEM "P&aste Position From Clipboard\tCtrl+Shift+V", IDM_PasteAny MENUITEM SEPARATOR MENUITEM "&Edit Game\tCtrl+E", IDM_EditGame2 MENUITEM "E&dit Position\tCtrl+Shift+E",IDM_EditPosition2 MENUITEM SEPARATOR MENUITEM "Edit Ta&gs...", IDM_EditTags MENUITEM "Edit Co&mment...", IDM_EditComment MENUITEM "Edit Boo&k...", IDM_EditBook MENUITEM "Enter &Username...", IDM_TypeInName MENUITEM SEPARATOR MENUITEM "&Revert\tHome", IDM_Revert MENUITEM "&Annotate", IDM_Annotate MENUITEM "&Truncate Game\tEnd", IDM_TruncateGame MENUITEM SEPARATOR MENUITEM "&Backward\tAlt+Left", IDM_Backward MENUITEM "&Forward\tAlt+Right", IDM_Forward MENUITEM "Back to &Start\tAlt+Home", IDM_ToStart MENUITEM "For&ward to End\tAlt+End", IDM_ToEnd END POPUP "&View" BEGIN MENUITEM "Flip &View\tF2", IDM_FlipView MENUITEM "&Swap Clocks", IDM_FlipClock MENUITEM SEPARATOR MENUITEM "Engine &Output\tAlt+Shift+O", IDM_ShowEngineOutput MENUITEM "Move &History\tAlt+Shift+H", IDM_ShowMoveHistory MENUITEM "Evaluation &Graph\tAlt+Shift+E",IDM_ShowEvalGraph MENUITEM "Game &List\tAlt+Shift+G", IDM_ShowGameList MENUITEM "Open &New Chat Window", IDM_NewChat MENUITEM "Type In &Move...\tAlt+I", IDM_TypeInMove MENUITEM SEPARATOR MENUITEM "&Tags", IDM_Tags MENUITEM "&Comments", IDM_Comment MENUITEM SEPARATOR MENUITEM "&Game List Tags...", IDM_GameListOptions MENUITEM "Colo&rs...", IDM_BoardOptions MENUITEM "&Board Themes...", IDM_ThemeOptions MENUITEM "&Fonts...", IDM_Fonts END POPUP "&Mode" BEGIN MENUITEM "Machine &White\tCtrl+W", IDM_MachineWhite MENUITEM "Machine &Black\tCtrl+B", IDM_MachineBlack MENUITEM "&Two Machines\tCtrl+T", IDM_TwoMachines // MENUITEM "Machine Both", IDM_MachineBoth MENUITEM "&Analysis Mode\tCtrl+A", IDM_AnalysisMode MENUITEM "Analyze &Game\tCtrl+G", IDM_AnalyzeFile MENUITEM "&Edit Game\tCtrl+E", IDM_EditGame MENUITEM "E&dit Position\tCtrl+Shift+E",IDM_EditPosition MENUITEM "Trai&ning", IDM_Training, GRAYED MENUITEM "&ICS Client", IDM_IcsClient MENUITEM SEPARATOR MENUITEM "&Machine Match", IDM_Match MENUITEM "&Pause\tPause", IDM_Pause END POPUP "&Action" BEGIN MENUITEM "&Accept\tF3", IDM_Accept MENUITEM "D&ecline\tF4", IDM_Decline MENUITEM "Re&match\tF12", IDM_Rematch MENUITEM SEPARATOR MENUITEM "Call &Flag\tF5", IDM_CallFlag MENUITEM "&Draw\tF6", IDM_Draw MENUITEM "Ad&journ\tF7", IDM_Adjourn MENUITEM "A&bort\tF8", IDM_Abort MENUITEM "&Resign\tF9", IDM_Resign MENUITEM SEPARATOR MENUITEM "Stop &Observing\tF10", IDM_StopObserving MENUITEM "Stop E&xamining\tF11", IDM_StopExamining MENUITEM "&Upload to Examine", IDM_Upload MENUITEM SEPARATOR MENUITEM "Adjudicate to &White", IDM_UserAdjudication_White MENUITEM "Adjudicate to &Black", IDM_UserAdjudication_Black MENUITEM "Adjudicate &Draw", IDM_UserAdjudication_Draw END POPUP "E&ngine" BEGIN MENUITEM "Edit Engine List...", IDM_EditProgs1 MENUITEM "Load &First Engine...", IDM_LoadProg1 MENUITEM "Load &Second Engine...", IDM_LoadProg2 MENUITEM SEPARATOR MENUITEM "Engine #&1 Settings...", IDM_Engine1Options MENUITEM "Engine #&2 Settings...", IDM_Engine2Options MENUITEM SEPARATOR MENUITEM "&Hint...", IDM_Hint MENUITEM "&Book...", IDM_Book MENUITEM SEPARATOR MENUITEM "&Move Now\tCtrl+M", IDM_MoveNow MENUITEM "&Retract Move\tCtrl+X", IDM_RetractMove END POPUP "&Options" BEGIN MENUITEM "&Mute all Sounds", IDM_MuteSounds MENUITEM SEPARATOR MENUITEM "&General...", IDM_GeneralOptions MENUITEM "&Time Control...\tAlt+Shift+T",IDM_TimeControl MENUITEM "Common &Engine...\tAlt+Shift+U",IDM_OptionsUCI MENUITEM "Ad&judications...\tAlt+Shift+J",IDM_EnginePlayOptions MENUITEM "Tournament...", IDM_Tourney MENUITEM SEPARATOR MENUITEM "&Load Game...\tAlt+Shift+L", IDM_LoadOptions MENUITEM "&Save Game...\tAlt+Shift+S", IDM_SaveOptions MENUITEM "G&ame List...", IDM_GameListOptions MENUITEM SEPARATOR MENUITEM "Soun&ds...", IDM_Sounds MENUITEM "&ICS...", IDM_IcsOptions, GRAYED MENUITEM "Add ICS...", IDM_EditServers MENUITEM "Comm&unications...", IDM_CommPort MENUITEM SEPARATOR MENUITEM "Save Settings &Now", IDM_SaveSettings MENUITEM "Save Settings on E&xit", IDM_SaveSettingsOnExit END POPUP "&Help" BEGIN MENUITEM "Help &Contents\tF1", IDM_HELPCONTENTS MENUITEM "Help &Index", IDM_HELPSEARCH MENUITEM "How to &Use Help", IDM_HELPHELP MENUITEM SEPARATOR MENUITEM "&About WinBoard", IDM_ABOUT END END PIECEMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "White", EP_White MENUITEM SEPARATOR MENUITEM "Promote", EP_Promote MENUITEM SEPARATOR MENUITEM "Pawn", EP_WhitePawn MENUITEM "Knight", EP_WhiteKnight MENUITEM "Bishop", EP_WhiteBishop MENUITEM "Rook", EP_WhiteRook MENUITEM "Queen", EP_WhiteQueen MENUITEM "King", EP_WhiteKing MENUITEM SEPARATOR MENUITEM "Archbishop", EP_WhiteCardinal MENUITEM "Chancellor", EP_WhiteMarshall MENUITEM "Elephant", EP_WhiteAlfil MENUITEM "Cannon", EP_WhiteCannon MENUITEM SEPARATOR MENUITEM "Empty Square", EP_EmptySquare MENUITEM "Black", EP_Black, MENUBARBREAK MENUITEM SEPARATOR MENUITEM "Demote", EP_Demote MENUITEM SEPARATOR MENUITEM "Pawn", EP_BlackPawn MENUITEM "Knight", EP_BlackKnight MENUITEM "Bishop", EP_BlackBishop MENUITEM "Rook", EP_BlackRook MENUITEM "Queen", EP_BlackQueen MENUITEM "King", EP_BlackKing MENUITEM SEPARATOR MENUITEM "Archbishop", EP_BlackCardinal MENUITEM "Chancellor", EP_BlackMarshall MENUITEM "Elephant", EP_BlackAlfil MENUITEM "Cannon", EP_BlackCannon MENUITEM SEPARATOR MENUITEM "Clear Board ", EP_ClearBoard END END SHOGIPIECEMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "White", EP_White MENUITEM SEPARATOR MENUITEM "Pawn", EP_WhitePawn MENUITEM "Knight", EP_WhiteKnight MENUITEM "Bishop", EP_WhiteBishop MENUITEM "Rook", EP_WhiteRook MENUITEM "Lance", EP_WhiteQueen MENUITEM "Silver", EP_WhiteFerz MENUITEM "Gold", EP_WhiteWazir MENUITEM "King", EP_WhiteKing MENUITEM SEPARATOR MENUITEM "Promote", EP_Promote MENUITEM SEPARATOR MENUITEM "Empty Square", EP_EmptySquare MENUITEM "Black", EP_Black, MENUBARBREAK MENUITEM SEPARATOR MENUITEM "Pawn", EP_BlackPawn MENUITEM "Knight", EP_BlackKnight MENUITEM "Bishop", EP_BlackBishop MENUITEM "Rook", EP_BlackRook MENUITEM "Lance", EP_BlackQueen MENUITEM "Silver", EP_BlackFerz MENUITEM "Gold", EP_BlackWazir MENUITEM "King", EP_BlackKing MENUITEM SEPARATOR MENUITEM "Demote", EP_Demote MENUITEM SEPARATOR MENUITEM "Clear Board ", EP_ClearBoard END END WHITEPIECEMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "White", EP_White MENUITEM SEPARATOR MENUITEM "Pawn", EP_WhitePawn MENUITEM "Knight", EP_WhiteKnight MENUITEM "Bishop", EP_WhiteBishop MENUITEM "Rook", EP_WhiteRook MENUITEM "Queen", EP_WhiteQueen MENUITEM "King", EP_WhiteKing MENUITEM SEPARATOR MENUITEM "Empty Square", EP_EmptySquare MENUITEM "Clear Board", EP_ClearBoard END END BLACKPIECEMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "Black", EP_Black MENUITEM SEPARATOR MENUITEM "Pawn", EP_BlackPawn MENUITEM "Knight", EP_BlackKnight MENUITEM "Bishop", EP_BlackBishop MENUITEM "Rook", EP_BlackRook MENUITEM "Queen", EP_BlackQueen MENUITEM "King", EP_BlackKing MENUITEM SEPARATOR MENUITEM "Empty Square", EP_EmptySquare MENUITEM "Clear Board", EP_ClearBoard END END DROPPIECEMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "Drop", 0, INACTIVE MENUITEM SEPARATOR MENUITEM "Pawn", DP_Pawn MENUITEM "Knight", DP_Knight MENUITEM "Bishop", DP_Bishop MENUITEM "Rook", DP_Rook MENUITEM "Queen", DP_Queen END END TEXTMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "Cop&y and Paste", IDM_QuickPaste MENUITEM "&Copy", IDM_Copy MENUITEM "&Paste", IDM_Paste END END INPUTMENU MENU DISCARDABLE BEGIN POPUP "" BEGIN MENUITEM "&Undo", IDM_Undo MENUITEM SEPARATOR MENUITEM "Cu&t", IDM_Cut MENUITEM "&Copy", IDM_Copy MENUITEM "&Paste", IDM_Paste MENUITEM SEPARATOR MENUITEM "Select &All", IDM_SelectAll END END ///////////////////////////////////////////////////////////////////////////// // // Accelerator // WINBOARD ACCELERATORS MOVEABLE PURE BEGIN "1", IDM_DirectCommand1, VIRTKEY, ALT, NOINVERT "2", IDM_DirectCommand2, VIRTKEY, ALT, NOINVERT "I", IDM_TypeInMove, VIRTKEY, ALT, NOINVERT "N", IDM_NewGame, VIRTKEY, CONTROL, NOINVERT "O", IDM_LoadGame, VIRTKEY, CONTROL, NOINVERT "S", IDM_SaveGame, VIRTKEY, CONTROL, NOINVERT "O", IDM_LoadPosition, VIRTKEY, SHIFT, CONTROL, NOINVERT "S", IDM_SavePosition, VIRTKEY, SHIFT, CONTROL, NOINVERT "C", IDM_CopyPosition, VIRTKEY, SHIFT, CONTROL, NOINVERT "V", IDM_PasteAny, VIRTKEY, SHIFT, CONTROL, NOINVERT "O", IDM_ShowEngineOutput, VIRTKEY, ALT, SHIFT, NOINVERT "H", IDM_ShowMoveHistory, VIRTKEY, ALT, SHIFT, NOINVERT "E", IDM_ShowEvalGraph, VIRTKEY, ALT, SHIFT, NOINVERT "G", IDM_ShowGameList, VIRTKEY, ALT, SHIFT, NOINVERT "B", IDM_BoardOptions, VIRTKEY, ALT, SHIFT, NOINVERT "T", IDM_TimeControl, VIRTKEY, ALT, SHIFT, NOINVERT "L", IDM_LoadOptions, VIRTKEY, ALT, SHIFT, NOINVERT "S", IDM_SaveOptions, VIRTKEY, ALT, SHIFT, NOINVERT "J", IDM_EnginePlayOptions, VIRTKEY, ALT, SHIFT, NOINVERT "U", IDM_OptionsUCI, VIRTKEY, ALT, SHIFT, NOINVERT "V", IDM_NewVariant, VIRTKEY, ALT, SHIFT, NOINVERT "P", OPT_PonderNextMove, VIRTKEY, SHIFT, CONTROL, NOINVERT "X", OPT_SaveExtPGN, VIRTKEY, SHIFT, CONTROL, NOINVERT "L", OPT_TestLegality, VIRTKEY, SHIFT, CONTROL, NOINVERT "A", OPT_AnimateMoving, VIRTKEY, SHIFT, CONTROL, NOINVERT "Q", OPT_AlwaysQueen, VIRTKEY, SHIFT, CONTROL, NOINVERT "F", OPT_AutoFlag, VIRTKEY, SHIFT, CONTROL, NOINVERT "H", OPT_HideThinkFromHuman, VIRTKEY, SHIFT, CONTROL, NOINVERT "I", OPT_ExtraInfoInMoveHistory, VIRTKEY, SHIFT, CONTROL, NOINVERT "W", IDM_MachineWhite, VIRTKEY, CONTROL, NOINVERT "B", IDM_MachineBlack, VIRTKEY, CONTROL, NOINVERT "T", IDM_TwoMachines, VIRTKEY, CONTROL, NOINVERT "E", IDM_EditGame, VIRTKEY, CONTROL, NOINVERT "E", IDM_EditPosition, VIRTKEY, SHIFT, CONTROL, NOINVERT "D", IDM_Debug, VIRTKEY, CONTROL, NOINVERT "G", IDM_AnalyzeFile, VIRTKEY, CONTROL, NOINVERT "M", IDM_MoveNow, VIRTKEY, CONTROL, NOINVERT "X", IDM_RetractMove, VIRTKEY, CONTROL, NOINVERT VK_DOWN, IDM_ToEnd, VIRTKEY, ALT, NOINVERT VK_END, IDM_ToEnd, VIRTKEY, ALT, NOINVERT VK_F1, IDM_HELPCONTENTS, VIRTKEY, NOINVERT VK_F10, IDM_StopObserving, VIRTKEY, NOINVERT VK_F11, IDM_StopExamining, VIRTKEY, NOINVERT VK_F12, IDM_Rematch, VIRTKEY, NOINVERT VK_F12, IDM_Debug, VIRTKEY, CONTROL, ALT, NOINVERT VK_F2, IDM_FlipView, VIRTKEY, NOINVERT VK_F3, IDM_Accept, VIRTKEY, NOINVERT VK_F4, IDM_Decline, VIRTKEY, NOINVERT VK_F4, IDM_Minimize, VIRTKEY, CONTROL, NOINVERT VK_F5, IDM_CallFlag, VIRTKEY, NOINVERT VK_F6, IDM_Draw, VIRTKEY, NOINVERT VK_F7, IDM_Adjourn, VIRTKEY, NOINVERT VK_F8, IDM_Abort, VIRTKEY, NOINVERT VK_F9, IDM_Resign, VIRTKEY, NOINVERT VK_HOME, IDM_ToStart, VIRTKEY, ALT, NOINVERT VK_INSERT, IDM_MoveNow, VIRTKEY, ALT, NOINVERT VK_NEXT, IDM_LoadNextGame, VIRTKEY, ALT, NOINVERT VK_NEXT, IDM_LoadNextPosition, VIRTKEY, SHIFT, ALT, NOINVERT VK_PAUSE, IDM_Pause, VIRTKEY, NOINVERT VK_PAUSE, IDM_Pause, VIRTKEY, ALT, NOINVERT VK_PRIOR, IDM_LoadPrevGame, VIRTKEY, ALT, NOINVERT VK_PRIOR, IDM_LoadPrevPosition, VIRTKEY, SHIFT, ALT, NOINVERT VK_LEFT, IDM_Backward, VIRTKEY, ALT, NOINVERT VK_RIGHT, IDM_Forward, VIRTKEY, ALT, NOINVERT END NO_ALT ACCELERATORS MOVEABLE PURE BEGIN VK_DELETE, IDM_RetractMove, VIRTKEY, NOINVERT VK_INSERT, IDM_MoveNow, VIRTKEY, NOINVERT #ifndef JAWS VK_END, IDM_TruncateGame, VIRTKEY, NOINVERT VK_HOME, IDM_Revert, VIRTKEY, NOINVERT VK_NEXT, IDM_LoadNextGame, VIRTKEY, NOINVERT VK_NEXT, IDM_LoadNextPosition, VIRTKEY, SHIFT, NOINVERT VK_PRIOR, IDM_LoadPrevGame, VIRTKEY, NOINVERT VK_PRIOR, IDM_LoadPrevPosition, VIRTKEY, SHIFT, NOINVERT VK_LEFT, IDM_Backward, VIRTKEY, NOINVERT VK_RIGHT, IDM_Forward, VIRTKEY, NOINVERT VK_DOWN, IDM_ToEnd, VIRTKEY, NOINVERT VK_UP, IDM_ToStart, VIRTKEY, NOINVERT VK_DOWN, OPT_GameListNext, VIRTKEY, CONTROL, NOINVERT VK_UP, OPT_GameListPrev, VIRTKEY, CONTROL, NOINVERT #endif END NO_ICS ACCELERATORS DISCARDABLE BEGIN "A", IDM_AnalysisMode, VIRTKEY, CONTROL, NOINVERT "V", IDM_PasteAny, VIRTKEY, CONTROL, NOINVERT END ///////////////////////////////////////////////////////////////////////////// // // Bitmap // P21O BITMAP MOVEABLE PURE "bitmaps/p21o.bmp" N21O BITMAP MOVEABLE PURE "bitmaps/n21o.bmp" B21O BITMAP MOVEABLE PURE "bitmaps/b21o.bmp" R21O BITMAP MOVEABLE PURE "bitmaps/r21o.bmp" K21O BITMAP MOVEABLE PURE "bitmaps/k21o.bmp" Q21O BITMAP MOVEABLE PURE "bitmaps/q21o.bmp" P21S BITMAP MOVEABLE PURE "bitmaps/p21s.bmp" N21S BITMAP MOVEABLE PURE "bitmaps/n21s.bmp" B21S BITMAP MOVEABLE PURE "bitmaps/b21s.bmp" R21S BITMAP MOVEABLE PURE "bitmaps/r21s.bmp" Q21S BITMAP MOVEABLE PURE "bitmaps/q21s.bmp" K21S BITMAP MOVEABLE PURE "bitmaps/k21s.bmp" P21W BITMAP MOVEABLE PURE "bitmaps/p21w.bmp" N21W BITMAP MOVEABLE PURE "bitmaps/n21w.bmp" B21W BITMAP MOVEABLE PURE "bitmaps/b21w.bmp" R21W BITMAP MOVEABLE PURE "bitmaps/r21w.bmp" Q21W BITMAP MOVEABLE PURE "bitmaps/q21w.bmp" K21W BITMAP MOVEABLE PURE "bitmaps/k21w.bmp" P25O BITMAP MOVEABLE PURE "bitmaps/p25o.bmp" N25O BITMAP MOVEABLE PURE "bitmaps/n25o.bmp" B25O BITMAP MOVEABLE PURE "bitmaps/b25o.bmp" R25O BITMAP MOVEABLE PURE "bitmaps/r25o.bmp" Q25O BITMAP MOVEABLE PURE "bitmaps/q25o.bmp" K25O BITMAP MOVEABLE PURE "bitmaps/k25o.bmp" P25S BITMAP MOVEABLE PURE "bitmaps/p25s.bmp" N25S BITMAP MOVEABLE PURE "bitmaps/n25s.bmp" B25S BITMAP MOVEABLE PURE "bitmaps/b25s.bmp" R25S BITMAP MOVEABLE PURE "bitmaps/r25s.bmp" Q25S BITMAP MOVEABLE PURE "bitmaps/q25s.bmp" K25S BITMAP MOVEABLE PURE "bitmaps/k25s.bmp" P25W BITMAP MOVEABLE PURE "bitmaps/p25w.bmp" N25W BITMAP MOVEABLE PURE "bitmaps/n25w.bmp" B25W BITMAP MOVEABLE PURE "bitmaps/b25w.bmp" R25W BITMAP MOVEABLE PURE "bitmaps/r25w.bmp" Q25W BITMAP MOVEABLE PURE "bitmaps/q25w.bmp" K25W BITMAP MOVEABLE PURE "bitmaps/k25w.bmp" P29O BITMAP MOVEABLE PURE "bitmaps/p29o.bmp" N29O BITMAP MOVEABLE PURE "bitmaps/n29o.bmp" B29O BITMAP MOVEABLE PURE "bitmaps/b29o.bmp" R29O BITMAP MOVEABLE PURE "bitmaps/r29o.bmp" Q29O BITMAP MOVEABLE PURE "bitmaps/q29o.bmp" K29O BITMAP MOVEABLE PURE "bitmaps/k29o.bmp" P29S BITMAP MOVEABLE PURE "bitmaps/p29s.bmp" N29S BITMAP MOVEABLE PURE "bitmaps/n29s.bmp" B29S BITMAP MOVEABLE PURE "bitmaps/b29s.bmp" R29S BITMAP MOVEABLE PURE "bitmaps/r29s.bmp" Q29S BITMAP MOVEABLE PURE "bitmaps/q29s.bmp" K29S BITMAP MOVEABLE PURE "bitmaps/k29s.bmp" P29W BITMAP MOVEABLE PURE "bitmaps/p29w.bmp" N29W BITMAP MOVEABLE PURE "bitmaps/n29w.bmp" B29W BITMAP MOVEABLE PURE "bitmaps/b29w.bmp" R29W BITMAP MOVEABLE PURE "bitmaps/r29w.bmp" Q29W BITMAP MOVEABLE PURE "bitmaps/q29w.bmp" K29W BITMAP MOVEABLE PURE "bitmaps/k29w.bmp" P33O BITMAP MOVEABLE PURE "bitmaps/p33o.bmp" N33O BITMAP MOVEABLE PURE "bitmaps/n33o.bmp" B33O BITMAP MOVEABLE PURE "bitmaps/b33o.bmp" R33O BITMAP MOVEABLE PURE "bitmaps/r33o.bmp" Q33O BITMAP MOVEABLE PURE "bitmaps/q33o.bmp" K33O BITMAP MOVEABLE PURE "bitmaps/k33o.bmp" P33S BITMAP MOVEABLE PURE "bitmaps/p33s.bmp" N33S BITMAP MOVEABLE PURE "bitmaps/n33s.bmp" B33S BITMAP MOVEABLE PURE "bitmaps/b33s.bmp" R33S BITMAP MOVEABLE PURE "bitmaps/r33s.bmp" Q33S BITMAP MOVEABLE PURE "bitmaps/q33s.bmp" K33S BITMAP MOVEABLE PURE "bitmaps/k33s.bmp" P33W BITMAP MOVEABLE PURE "bitmaps/p33w.bmp" N33W BITMAP MOVEABLE PURE "bitmaps/n33w.bmp" B33W BITMAP MOVEABLE PURE "bitmaps/b33w.bmp" R33W BITMAP MOVEABLE PURE "bitmaps/r33w.bmp" Q33W BITMAP MOVEABLE PURE "bitmaps/q33w.bmp" K33W BITMAP MOVEABLE PURE "bitmaps/k33w.bmp" P37O BITMAP MOVEABLE PURE "bitmaps/p37o.bmp" N37O BITMAP MOVEABLE PURE "bitmaps/n37o.bmp" B37O BITMAP MOVEABLE PURE "bitmaps/b37o.bmp" R37O BITMAP MOVEABLE PURE "bitmaps/r37o.bmp" Q37O BITMAP MOVEABLE PURE "bitmaps/q37o.bmp" K37O BITMAP MOVEABLE PURE "bitmaps/k37o.bmp" P37S BITMAP MOVEABLE PURE "bitmaps/p37s.bmp" N37S BITMAP MOVEABLE PURE "bitmaps/n37s.bmp" B37S BITMAP MOVEABLE PURE "bitmaps/b37s.bmp" R37S BITMAP MOVEABLE PURE "bitmaps/r37s.bmp" Q37S BITMAP MOVEABLE PURE "bitmaps/q37s.bmp" K37S BITMAP MOVEABLE PURE "bitmaps/k37s.bmp" P37W BITMAP MOVEABLE PURE "bitmaps/p37w.bmp" N37W BITMAP MOVEABLE PURE "bitmaps/n37w.bmp" B37W BITMAP MOVEABLE PURE "bitmaps/b37w.bmp" R37W BITMAP MOVEABLE PURE "bitmaps/r37w.bmp" Q37W BITMAP MOVEABLE PURE "bitmaps/q37w.bmp" K37W BITMAP MOVEABLE PURE "bitmaps/k37w.bmp" P40O BITMAP MOVEABLE PURE "bitmaps/p40o.bmp" N40O BITMAP MOVEABLE PURE "bitmaps/n40o.bmp" B40O BITMAP MOVEABLE PURE "bitmaps/b40o.bmp" R40O BITMAP MOVEABLE PURE "bitmaps/r40o.bmp" Q40O BITMAP MOVEABLE PURE "bitmaps/q40o.bmp" K40O BITMAP MOVEABLE PURE "bitmaps/k40o.bmp" P40S BITMAP MOVEABLE PURE "bitmaps/p40s.bmp" N40S BITMAP MOVEABLE PURE "bitmaps/n40s.bmp" B40S BITMAP MOVEABLE PURE "bitmaps/b40s.bmp" R40S BITMAP MOVEABLE PURE "bitmaps/r40s.bmp" Q40S BITMAP MOVEABLE PURE "bitmaps/q40s.bmp" K40S BITMAP MOVEABLE PURE "bitmaps/k40s.bmp" P40W BITMAP MOVEABLE PURE "bitmaps/p40w.bmp" N40W BITMAP MOVEABLE PURE "bitmaps/n40w.bmp" B40W BITMAP MOVEABLE PURE "bitmaps/b40w.bmp" R40W BITMAP MOVEABLE PURE "bitmaps/r40w.bmp" Q40W BITMAP MOVEABLE PURE "bitmaps/q40w.bmp" K40W BITMAP MOVEABLE PURE "bitmaps/k40w.bmp" P45O BITMAP MOVEABLE PURE "bitmaps/p45o.bmp" N45O BITMAP MOVEABLE PURE "bitmaps/n45o.bmp" B45O BITMAP MOVEABLE PURE "bitmaps/b45o.bmp" R45O BITMAP MOVEABLE PURE "bitmaps/r45o.bmp" Q45O BITMAP MOVEABLE PURE "bitmaps/q45o.bmp" K45O BITMAP MOVEABLE PURE "bitmaps/k45o.bmp" P45S BITMAP MOVEABLE PURE "bitmaps/p45s.bmp" N45S BITMAP MOVEABLE PURE "bitmaps/n45s.bmp" B45S BITMAP MOVEABLE PURE "bitmaps/b45s.bmp" R45S BITMAP MOVEABLE PURE "bitmaps/r45s.bmp" Q45S BITMAP MOVEABLE PURE "bitmaps/q45s.bmp" K45S BITMAP MOVEABLE PURE "bitmaps/k45s.bmp" P45W BITMAP MOVEABLE PURE "bitmaps/p45w.bmp" N45W BITMAP MOVEABLE PURE "bitmaps/n45w.bmp" B45W BITMAP MOVEABLE PURE "bitmaps/b45w.bmp" R45W BITMAP MOVEABLE PURE "bitmaps/r45w.bmp" Q45W BITMAP MOVEABLE PURE "bitmaps/q45w.bmp" K45W BITMAP MOVEABLE PURE "bitmaps/k45w.bmp" P49O BITMAP MOVEABLE PURE "bitmaps/p49o.bmp" N49O BITMAP MOVEABLE PURE "bitmaps/n49o.bmp" B49O BITMAP MOVEABLE PURE "bitmaps/b49o.bmp" R49O BITMAP MOVEABLE PURE "bitmaps/r49o.bmp" Q49O BITMAP MOVEABLE PURE "bitmaps/q49o.bmp" K49O BITMAP MOVEABLE PURE "bitmaps/k49o.bmp" P49S BITMAP MOVEABLE PURE "bitmaps/p49s.bmp" N49S BITMAP MOVEABLE PURE "bitmaps/n49s.bmp" B49S BITMAP MOVEABLE PURE "bitmaps/b49s.bmp" R49S BITMAP MOVEABLE PURE "bitmaps/r49s.bmp" Q49S BITMAP MOVEABLE PURE "bitmaps/q49s.bmp" K49S BITMAP MOVEABLE PURE "bitmaps/k49s.bmp" P49W BITMAP MOVEABLE PURE "bitmaps/p49w.bmp" N49W BITMAP MOVEABLE PURE "bitmaps/n49w.bmp" B49W BITMAP MOVEABLE PURE "bitmaps/b49w.bmp" R49W BITMAP MOVEABLE PURE "bitmaps/r49w.bmp" Q49W BITMAP MOVEABLE PURE "bitmaps/q49w.bmp" K49W BITMAP MOVEABLE PURE "bitmaps/k49w.bmp" P54O BITMAP MOVEABLE PURE "bitmaps/p54o.bmp" N54O BITMAP MOVEABLE PURE "bitmaps/n54o.bmp" B54O BITMAP MOVEABLE PURE "bitmaps/b54o.bmp" R54O BITMAP MOVEABLE PURE "bitmaps/r54o.bmp" Q54O BITMAP MOVEABLE PURE "bitmaps/q54o.bmp" K54O BITMAP MOVEABLE PURE "bitmaps/k54o.bmp" P54S BITMAP MOVEABLE PURE "bitmaps/p54s.bmp" N54S BITMAP MOVEABLE PURE "bitmaps/n54s.bmp" B54S BITMAP MOVEABLE PURE "bitmaps/b54s.bmp" R54S BITMAP MOVEABLE PURE "bitmaps/r54s.bmp" Q54S BITMAP MOVEABLE PURE "bitmaps/q54s.bmp" K54S BITMAP MOVEABLE PURE "bitmaps/k54s.bmp" P54W BITMAP MOVEABLE PURE "bitmaps/p54w.bmp" N54W BITMAP MOVEABLE PURE "bitmaps/n54w.bmp" B54W BITMAP MOVEABLE PURE "bitmaps/b54w.bmp" R54W BITMAP MOVEABLE PURE "bitmaps/r54w.bmp" Q54W BITMAP MOVEABLE PURE "bitmaps/q54w.bmp" K54W BITMAP MOVEABLE PURE "bitmaps/k54w.bmp" P58O BITMAP MOVEABLE PURE "bitmaps/p58o.bmp" N58O BITMAP MOVEABLE PURE "bitmaps/n58o.bmp" B58O BITMAP MOVEABLE PURE "bitmaps/b58o.bmp" R58O BITMAP MOVEABLE PURE "bitmaps/r58o.bmp" Q58O BITMAP MOVEABLE PURE "bitmaps/q58o.bmp" K58O BITMAP MOVEABLE PURE "bitmaps/k58o.bmp" P58S BITMAP MOVEABLE PURE "bitmaps/p58s.bmp" N58S BITMAP MOVEABLE PURE "bitmaps/n58s.bmp" B58S BITMAP MOVEABLE PURE "bitmaps/b58s.bmp" R58S BITMAP MOVEABLE PURE "bitmaps/r58s.bmp" Q58S BITMAP MOVEABLE PURE "bitmaps/q58s.bmp" K58S BITMAP MOVEABLE PURE "bitmaps/k58s.bmp" P58W BITMAP MOVEABLE PURE "bitmaps/p58w.bmp" N58W BITMAP MOVEABLE PURE "bitmaps/n58w.bmp" B58W BITMAP MOVEABLE PURE "bitmaps/b58w.bmp" R58W BITMAP MOVEABLE PURE "bitmaps/r58w.bmp" Q58W BITMAP MOVEABLE PURE "bitmaps/q58w.bmp" K58W BITMAP MOVEABLE PURE "bitmaps/k58w.bmp" P64O BITMAP MOVEABLE PURE "bitmaps/p64o.bmp" N64O BITMAP MOVEABLE PURE "bitmaps/n64o.bmp" B64O BITMAP MOVEABLE PURE "bitmaps/b64o.bmp" R64O BITMAP MOVEABLE PURE "bitmaps/r64o.bmp" Q64O BITMAP MOVEABLE PURE "bitmaps/q64o.bmp" K64O BITMAP MOVEABLE PURE "bitmaps/k64o.bmp" P64S BITMAP MOVEABLE PURE "bitmaps/p64s.bmp" N64S BITMAP MOVEABLE PURE "bitmaps/n64s.bmp" B64S BITMAP MOVEABLE PURE "bitmaps/b64s.bmp" R64S BITMAP MOVEABLE PURE "bitmaps/r64s.bmp" Q64S BITMAP MOVEABLE PURE "bitmaps/q64s.bmp" K64S BITMAP MOVEABLE PURE "bitmaps/k64s.bmp" P64W BITMAP MOVEABLE PURE "bitmaps/p64w.bmp" N64W BITMAP MOVEABLE PURE "bitmaps/n64w.bmp" B64W BITMAP MOVEABLE PURE "bitmaps/b64w.bmp" R64W BITMAP MOVEABLE PURE "bitmaps/r64w.bmp" Q64W BITMAP MOVEABLE PURE "bitmaps/q64w.bmp" K64W BITMAP MOVEABLE PURE "bitmaps/k64w.bmp" P72O BITMAP MOVEABLE PURE "bitmaps/p72o.bmp" N72O BITMAP MOVEABLE PURE "bitmaps/n72o.bmp" B72O BITMAP MOVEABLE PURE "bitmaps/b72o.bmp" R72O BITMAP MOVEABLE PURE "bitmaps/r72o.bmp" Q72O BITMAP MOVEABLE PURE "bitmaps/q72o.bmp" K72O BITMAP MOVEABLE PURE "bitmaps/k72o.bmp" P72S BITMAP MOVEABLE PURE "bitmaps/p72s.bmp" N72S BITMAP MOVEABLE PURE "bitmaps/n72s.bmp" B72S BITMAP MOVEABLE PURE "bitmaps/b72s.bmp" R72S BITMAP MOVEABLE PURE "bitmaps/r72s.bmp" Q72S BITMAP MOVEABLE PURE "bitmaps/q72s.bmp" K72S BITMAP MOVEABLE PURE "bitmaps/k72s.bmp" P72W BITMAP MOVEABLE PURE "bitmaps/p72w.bmp" N72W BITMAP MOVEABLE PURE "bitmaps/n72w.bmp" B72W BITMAP MOVEABLE PURE "bitmaps/b72w.bmp" R72W BITMAP MOVEABLE PURE "bitmaps/r72w.bmp" Q72W BITMAP MOVEABLE PURE "bitmaps/q72w.bmp" K72W BITMAP MOVEABLE PURE "bitmaps/k72w.bmp" P80O BITMAP MOVEABLE PURE "bitmaps/p80o.bmp" N80O BITMAP MOVEABLE PURE "bitmaps/n80o.bmp" B80O BITMAP MOVEABLE PURE "bitmaps/b80o.bmp" R80O BITMAP MOVEABLE PURE "bitmaps/r80o.bmp" Q80O BITMAP MOVEABLE PURE "bitmaps/q80o.bmp" K80O BITMAP MOVEABLE PURE "bitmaps/k80o.bmp" P80S BITMAP MOVEABLE PURE "bitmaps/p80s.bmp" N80S BITMAP MOVEABLE PURE "bitmaps/n80s.bmp" B80S BITMAP MOVEABLE PURE "bitmaps/b80s.bmp" R80S BITMAP MOVEABLE PURE "bitmaps/r80s.bmp" Q80S BITMAP MOVEABLE PURE "bitmaps/q80s.bmp" K80S BITMAP MOVEABLE PURE "bitmaps/k80s.bmp" P80W BITMAP MOVEABLE PURE "bitmaps/p80w.bmp" N80W BITMAP MOVEABLE PURE "bitmaps/n80w.bmp" B80W BITMAP MOVEABLE PURE "bitmaps/b80w.bmp" R80W BITMAP MOVEABLE PURE "bitmaps/r80w.bmp" Q80W BITMAP MOVEABLE PURE "bitmaps/q80w.bmp" K80W BITMAP MOVEABLE PURE "bitmaps/k80w.bmp" P87O BITMAP MOVEABLE PURE "bitmaps/p87o.bmp" N87O BITMAP MOVEABLE PURE "bitmaps/n87o.bmp" B87O BITMAP MOVEABLE PURE "bitmaps/b87o.bmp" R87O BITMAP MOVEABLE PURE "bitmaps/r87o.bmp" Q87O BITMAP MOVEABLE PURE "bitmaps/q87o.bmp" K87O BITMAP MOVEABLE PURE "bitmaps/k87o.bmp" P87S BITMAP MOVEABLE PURE "bitmaps/p87s.bmp" N87S BITMAP MOVEABLE PURE "bitmaps/n87s.bmp" B87S BITMAP MOVEABLE PURE "bitmaps/b87s.bmp" R87S BITMAP MOVEABLE PURE "bitmaps/r87s.bmp" Q87S BITMAP MOVEABLE PURE "bitmaps/q87s.bmp" K87S BITMAP MOVEABLE PURE "bitmaps/k87s.bmp" P87W BITMAP MOVEABLE PURE "bitmaps/p87w.bmp" N87W BITMAP MOVEABLE PURE "bitmaps/n87w.bmp" B87W BITMAP MOVEABLE PURE "bitmaps/b87w.bmp" R87W BITMAP MOVEABLE PURE "bitmaps/r87w.bmp" Q87W BITMAP MOVEABLE PURE "bitmaps/q87w.bmp" K87W BITMAP MOVEABLE PURE "bitmaps/k87w.bmp" P95O BITMAP MOVEABLE PURE "bitmaps/p95o.bmp" N95O BITMAP MOVEABLE PURE "bitmaps/n95o.bmp" B95O BITMAP MOVEABLE PURE "bitmaps/b95o.bmp" R95O BITMAP MOVEABLE PURE "bitmaps/r95o.bmp" Q95O BITMAP MOVEABLE PURE "bitmaps/q95o.bmp" K95O BITMAP MOVEABLE PURE "bitmaps/k95o.bmp" P95S BITMAP MOVEABLE PURE "bitmaps/p95s.bmp" N95S BITMAP MOVEABLE PURE "bitmaps/n95s.bmp" B95S BITMAP MOVEABLE PURE "bitmaps/b95s.bmp" R95S BITMAP MOVEABLE PURE "bitmaps/r95s.bmp" Q95S BITMAP MOVEABLE PURE "bitmaps/q95s.bmp" K95S BITMAP MOVEABLE PURE "bitmaps/k95s.bmp" P95W BITMAP MOVEABLE PURE "bitmaps/p95w.bmp" N95W BITMAP MOVEABLE PURE "bitmaps/n95w.bmp" B95W BITMAP MOVEABLE PURE "bitmaps/b95w.bmp" R95W BITMAP MOVEABLE PURE "bitmaps/r95w.bmp" Q95W BITMAP MOVEABLE PURE "bitmaps/q95w.bmp" K95W BITMAP MOVEABLE PURE "bitmaps/k95w.bmp" P108O BITMAP MOVEABLE PURE "bitmaps/p108o.bmp" N108O BITMAP MOVEABLE PURE "bitmaps/n108o.bmp" B108O BITMAP MOVEABLE PURE "bitmaps/b108o.bmp" R108O BITMAP MOVEABLE PURE "bitmaps/r108o.bmp" Q108O BITMAP MOVEABLE PURE "bitmaps/q108o.bmp" K108O BITMAP MOVEABLE PURE "bitmaps/k108o.bmp" P108S BITMAP MOVEABLE PURE "bitmaps/p108s.bmp" N108S BITMAP MOVEABLE PURE "bitmaps/n108s.bmp" B108S BITMAP MOVEABLE PURE "bitmaps/b108s.bmp" R108S BITMAP MOVEABLE PURE "bitmaps/r108s.bmp" Q108S BITMAP MOVEABLE PURE "bitmaps/q108s.bmp" K108S BITMAP MOVEABLE PURE "bitmaps/k108s.bmp" P108W BITMAP MOVEABLE PURE "bitmaps/p108w.bmp" N108W BITMAP MOVEABLE PURE "bitmaps/n108w.bmp" B108W BITMAP MOVEABLE PURE "bitmaps/b108w.bmp" R108W BITMAP MOVEABLE PURE "bitmaps/r108w.bmp" Q108W BITMAP MOVEABLE PURE "bitmaps/q108w.bmp" K108W BITMAP MOVEABLE PURE "bitmaps/k108w.bmp" P116O BITMAP MOVEABLE PURE "bitmaps/p116o.bmp" N116O BITMAP MOVEABLE PURE "bitmaps/n116o.bmp" B116O BITMAP MOVEABLE PURE "bitmaps/b116o.bmp" R116O BITMAP MOVEABLE PURE "bitmaps/r116o.bmp" Q116O BITMAP MOVEABLE PURE "bitmaps/q116o.bmp" K116O BITMAP MOVEABLE PURE "bitmaps/k116o.bmp" P116S BITMAP MOVEABLE PURE "bitmaps/p116s.bmp" N116S BITMAP MOVEABLE PURE "bitmaps/n116s.bmp" B116S BITMAP MOVEABLE PURE "bitmaps/b116s.bmp" R116S BITMAP MOVEABLE PURE "bitmaps/r116s.bmp" Q116S BITMAP MOVEABLE PURE "bitmaps/q116s.bmp" K116S BITMAP MOVEABLE PURE "bitmaps/k116s.bmp" P116W BITMAP MOVEABLE PURE "bitmaps/p116w.bmp" N116W BITMAP MOVEABLE PURE "bitmaps/n116w.bmp" B116W BITMAP MOVEABLE PURE "bitmaps/b116w.bmp" R116W BITMAP MOVEABLE PURE "bitmaps/r116w.bmp" Q116W BITMAP MOVEABLE PURE "bitmaps/q116w.bmp" K116W BITMAP MOVEABLE PURE "bitmaps/k116w.bmp" P129O BITMAP MOVEABLE PURE "bitmaps/p129o.bmp" N129O BITMAP MOVEABLE PURE "bitmaps/n129o.bmp" B129O BITMAP MOVEABLE PURE "bitmaps/b129o.bmp" R129O BITMAP MOVEABLE PURE "bitmaps/r129o.bmp" Q129O BITMAP MOVEABLE PURE "bitmaps/q129o.bmp" K129O BITMAP MOVEABLE PURE "bitmaps/k129o.bmp" P129S BITMAP MOVEABLE PURE "bitmaps/p129s.bmp" N129S BITMAP MOVEABLE PURE "bitmaps/n129s.bmp" B129S BITMAP MOVEABLE PURE "bitmaps/b129s.bmp" R129S BITMAP MOVEABLE PURE "bitmaps/r129s.bmp" Q129S BITMAP MOVEABLE PURE "bitmaps/q129s.bmp" K129S BITMAP MOVEABLE PURE "bitmaps/k129s.bmp" P129W BITMAP MOVEABLE PURE "bitmaps/p129w.bmp" N129W BITMAP MOVEABLE PURE "bitmaps/n129w.bmp" B129W BITMAP MOVEABLE PURE "bitmaps/b129w.bmp" R129W BITMAP MOVEABLE PURE "bitmaps/r129w.bmp" Q129W BITMAP MOVEABLE PURE "bitmaps/q129w.bmp" K129W BITMAP MOVEABLE PURE "bitmaps/k129w.bmp" GALACTIC BITMAP MOVEABLE PURE "bitmaps/galactic.bmp" TIM BITMAP MOVEABLE PURE "bitmaps/tim.bmp" // [HGM] Some fairy symbols: E72O BITMAP MOVEABLE PURE "bitmaps/e72o.bmp" A72O BITMAP MOVEABLE PURE "bitmaps/a72o.bmp" AA72O BITMAP MOVEABLE PURE "bitmaps/as72o.bmp" C72O BITMAP MOVEABLE PURE "bitmaps/c72o.bmp" CV72O BITMAP MOVEABLE PURE "bitmaps/cv72o.bmp" F72O BITMAP MOVEABLE PURE "bitmaps/f72o.bmp" M72O BITMAP MOVEABLE PURE "bitmaps/m72o.bmp" W72O BITMAP MOVEABLE PURE "bitmaps/w72o.bmp" O72O BITMAP MOVEABLE PURE "bitmaps/o72o.bmp" U72O BITMAP MOVEABLE PURE "bitmaps/u72o.bmp" H72O BITMAP MOVEABLE PURE "bitmaps/h72o.bmp" G72O BITMAP MOVEABLE PURE "bitmaps/g72o.bmp" V72O BITMAP MOVEABLE PURE "bitmaps/v72o.bmp" S72O BITMAP MOVEABLE PURE "bitmaps/s72o.bmp" L72O BITMAP MOVEABLE PURE "bitmaps/l72o.bmp" DK72O BITMAP MOVEABLE PURE "bitmaps/dk72o.bmp" LN72O BITMAP MOVEABLE PURE "bitmaps/ln72o.bmp" WP72O BITMAP MOVEABLE PURE "bitmaps/wp72o.bmp" WN72O BITMAP MOVEABLE PURE "bitmaps/wn72o.bmp" WL72O BITMAP MOVEABLE PURE "bitmaps/wl72o.bmp" WS72O BITMAP MOVEABLE PURE "bitmaps/ws72o.bmp" E72S BITMAP MOVEABLE PURE "bitmaps/e72s.bmp" A72S BITMAP MOVEABLE PURE "bitmaps/a72s.bmp" AA72S BITMAP MOVEABLE PURE "bitmaps/as72s.bmp" C72S BITMAP MOVEABLE PURE "bitmaps/c72s.bmp" CV72S BITMAP MOVEABLE PURE "bitmaps/cv72s.bmp" F72S BITMAP MOVEABLE PURE "bitmaps/f72s.bmp" M72S BITMAP MOVEABLE PURE "bitmaps/m72s.bmp" W72S BITMAP MOVEABLE PURE "bitmaps/w72s.bmp" O72S BITMAP MOVEABLE PURE "bitmaps/o72s.bmp" U72S BITMAP MOVEABLE PURE "bitmaps/u72s.bmp" H72S BITMAP MOVEABLE PURE "bitmaps/h72s.bmp" G72S BITMAP MOVEABLE PURE "bitmaps/g72s.bmp" V72S BITMAP MOVEABLE PURE "bitmaps/v72s.bmp" S72S BITMAP MOVEABLE PURE "bitmaps/s72s.bmp" L72S BITMAP MOVEABLE PURE "bitmaps/l72s.bmp" DK72S BITMAP MOVEABLE PURE "bitmaps/dk72s.bmp" LN72S BITMAP MOVEABLE PURE "bitmaps/ln72s.bmp" WP72S BITMAP MOVEABLE PURE "bitmaps/wp72s.bmp" WN72S BITMAP MOVEABLE PURE "bitmaps/wn72s.bmp" WL72S BITMAP MOVEABLE PURE "bitmaps/wl72s.bmp" WS72S BITMAP MOVEABLE PURE "bitmaps/ws72s.bmp" E72W BITMAP MOVEABLE PURE "bitmaps/e72w.bmp" A72W BITMAP MOVEABLE PURE "bitmaps/a72w.bmp" AA72W BITMAP MOVEABLE PURE "bitmaps/as72w.bmp" C72W BITMAP MOVEABLE PURE "bitmaps/c72w.bmp" CV72W BITMAP MOVEABLE PURE "bitmaps/cv72w.bmp" F72W BITMAP MOVEABLE PURE "bitmaps/f72w.bmp" M72W BITMAP MOVEABLE PURE "bitmaps/m72w.bmp" W72W BITMAP MOVEABLE PURE "bitmaps/w72w.bmp" O72W BITMAP MOVEABLE PURE "bitmaps/o72w.bmp" U72W BITMAP MOVEABLE PURE "bitmaps/u72w.bmp" H72W BITMAP MOVEABLE PURE "bitmaps/h72w.bmp" G72W BITMAP MOVEABLE PURE "bitmaps/g72w.bmp" V72W BITMAP MOVEABLE PURE "bitmaps/v72w.bmp" S72W BITMAP MOVEABLE PURE "bitmaps/s72w.bmp" L72W BITMAP MOVEABLE PURE "bitmaps/l72w.bmp" DK72W BITMAP MOVEABLE PURE "bitmaps/dk72w.bmp" LN72W BITMAP MOVEABLE PURE "bitmaps/ln72w.bmp" E49O BITMAP MOVEABLE PURE "bitmaps/e49o.bmp" A49O BITMAP MOVEABLE PURE "bitmaps/a49o.bmp" AA49O BITMAP MOVEABLE PURE "bitmaps/as49o.bmp" C49O BITMAP MOVEABLE PURE "bitmaps/c49o.bmp" CV49O BITMAP MOVEABLE PURE "bitmaps/cv49o.bmp" F49O BITMAP MOVEABLE PURE "bitmaps/f49o.bmp" M49O BITMAP MOVEABLE PURE "bitmaps/m49o.bmp" W49O BITMAP MOVEABLE PURE "bitmaps/w49o.bmp" O49O BITMAP MOVEABLE PURE "bitmaps/o49o.bmp" U49O BITMAP MOVEABLE PURE "bitmaps/u49o.bmp" H49O BITMAP MOVEABLE PURE "bitmaps/h49o.bmp" G49O BITMAP MOVEABLE PURE "bitmaps/g49o.bmp" V49O BITMAP MOVEABLE PURE "bitmaps/v49o.bmp" S49O BITMAP MOVEABLE PURE "bitmaps/s49o.bmp" L49O BITMAP MOVEABLE PURE "bitmaps/l49o.bmp" DK49O BITMAP MOVEABLE PURE "bitmaps/dk49o.bmp" LN49O BITMAP MOVEABLE PURE "bitmaps/ln49o.bmp" WP49O BITMAP MOVEABLE PURE "bitmaps/wp49o.bmp" WN49O BITMAP MOVEABLE PURE "bitmaps/wn49o.bmp" WL49O BITMAP MOVEABLE PURE "bitmaps/wl49o.bmp" WS49O BITMAP MOVEABLE PURE "bitmaps/ws49o.bmp" E49S BITMAP MOVEABLE PURE "bitmaps/e49s.bmp" A49S BITMAP MOVEABLE PURE "bitmaps/a49s.bmp" AA49S BITMAP MOVEABLE PURE "bitmaps/as49s.bmp" C49S BITMAP MOVEABLE PURE "bitmaps/c49s.bmp" CV49S BITMAP MOVEABLE PURE "bitmaps/cv49s.bmp" F49S BITMAP MOVEABLE PURE "bitmaps/f49s.bmp" M49S BITMAP MOVEABLE PURE "bitmaps/m49s.bmp" W49S BITMAP MOVEABLE PURE "bitmaps/w49s.bmp" O49S BITMAP MOVEABLE PURE "bitmaps/o49s.bmp" U49S BITMAP MOVEABLE PURE "bitmaps/u49s.bmp" H49S BITMAP MOVEABLE PURE "bitmaps/h49s.bmp" G49S BITMAP MOVEABLE PURE "bitmaps/g49s.bmp" V49S BITMAP MOVEABLE PURE "bitmaps/v49s.bmp" S49S BITMAP MOVEABLE PURE "bitmaps/s49s.bmp" L49S BITMAP MOVEABLE PURE "bitmaps/l49s.bmp" DK49S BITMAP MOVEABLE PURE "bitmaps/dk49s.bmp" LN49S BITMAP MOVEABLE PURE "bitmaps/ln49s.bmp" WP49S BITMAP MOVEABLE PURE "bitmaps/wp49s.bmp" WN49S BITMAP MOVEABLE PURE "bitmaps/wn49s.bmp" WL49S BITMAP MOVEABLE PURE "bitmaps/wl49s.bmp" WS49S BITMAP MOVEABLE PURE "bitmaps/ws49s.bmp" E49W BITMAP MOVEABLE PURE "bitmaps/e49w.bmp" A49W BITMAP MOVEABLE PURE "bitmaps/a49w.bmp" AA49W BITMAP MOVEABLE PURE "bitmaps/as49w.bmp" C49W BITMAP MOVEABLE PURE "bitmaps/c49w.bmp" CV49W BITMAP MOVEABLE PURE "bitmaps/cv49w.bmp" F49W BITMAP MOVEABLE PURE "bitmaps/f49w.bmp" M49W BITMAP MOVEABLE PURE "bitmaps/m49w.bmp" W49W BITMAP MOVEABLE PURE "bitmaps/w49w.bmp" O49W BITMAP MOVEABLE PURE "bitmaps/o49w.bmp" U49W BITMAP MOVEABLE PURE "bitmaps/u49w.bmp" H49W BITMAP MOVEABLE PURE "bitmaps/h49w.bmp" G49W BITMAP MOVEABLE PURE "bitmaps/g49w.bmp" V49W BITMAP MOVEABLE PURE "bitmaps/v49w.bmp" S49W BITMAP MOVEABLE PURE "bitmaps/s49w.bmp" L49W BITMAP MOVEABLE PURE "bitmaps/l49w.bmp" DK49W BITMAP MOVEABLE PURE "bitmaps/dk49w.bmp" LN49W BITMAP MOVEABLE PURE "bitmaps/ln49w.bmp" A33O BITMAP MOVEABLE PURE "bitmaps/a33o.bmp" AA33O BITMAP MOVEABLE PURE "bitmaps/as33o.bmp" C33O BITMAP MOVEABLE PURE "bitmaps/c33o.bmp" CV33O BITMAP MOVEABLE PURE "bitmaps/cv33o.bmp" V33O BITMAP MOVEABLE PURE "bitmaps/v33o.bmp" E33O BITMAP MOVEABLE PURE "bitmaps/e33o.bmp" F33O BITMAP MOVEABLE PURE "bitmaps/f33o.bmp" H33O BITMAP MOVEABLE PURE "bitmaps/h33o.bmp" G33O BITMAP MOVEABLE PURE "bitmaps/g33o.bmp" L33O BITMAP MOVEABLE PURE "bitmaps/l33o.bmp" W33O BITMAP MOVEABLE PURE "bitmaps/w33o.bmp" M33O BITMAP MOVEABLE PURE "bitmaps/m33o.bmp" O33O BITMAP MOVEABLE PURE "bitmaps/o33o.bmp" DK33O BITMAP MOVEABLE PURE "bitmaps/dk33o.bmp" LN33O BITMAP MOVEABLE PURE "bitmaps/ln33o.bmp" WP33O BITMAP MOVEABLE PURE "bitmaps/wp33o.bmp" WN33O BITMAP MOVEABLE PURE "bitmaps/wn33o.bmp" WL33O BITMAP MOVEABLE PURE "bitmaps/wl33o.bmp" WS33O BITMAP MOVEABLE PURE "bitmaps/ws33o.bmp" A33W BITMAP MOVEABLE PURE "bitmaps/a33w.bmp" AA33W BITMAP MOVEABLE PURE "bitmaps/as33w.bmp" C33W BITMAP MOVEABLE PURE "bitmaps/c33w.bmp" CV33W BITMAP MOVEABLE PURE "bitmaps/cv33w.bmp" V33W BITMAP MOVEABLE PURE "bitmaps/v33w.bmp" E33W BITMAP MOVEABLE PURE "bitmaps/e33w.bmp" F33W BITMAP MOVEABLE PURE "bitmaps/f33w.bmp" H33W BITMAP MOVEABLE PURE "bitmaps/h33w.bmp" G33W BITMAP MOVEABLE PURE "bitmaps/g33w.bmp" L33W BITMAP MOVEABLE PURE "bitmaps/l33w.bmp" W33W BITMAP MOVEABLE PURE "bitmaps/w33w.bmp" M33W BITMAP MOVEABLE PURE "bitmaps/m33w.bmp" O33W BITMAP MOVEABLE PURE "bitmaps/o33w.bmp" DK33W BITMAP MOVEABLE PURE "bitmaps/dk33w.bmp" LN33W BITMAP MOVEABLE PURE "bitmaps/ln33w.bmp" A33S BITMAP MOVEABLE PURE "bitmaps/a33s.bmp" AA33S BITMAP MOVEABLE PURE "bitmaps/as33s.bmp" C33S BITMAP MOVEABLE PURE "bitmaps/c33s.bmp" CV33S BITMAP MOVEABLE PURE "bitmaps/cv33s.bmp" V33S BITMAP MOVEABLE PURE "bitmaps/v33s.bmp" E33S BITMAP MOVEABLE PURE "bitmaps/e33s.bmp" F33S BITMAP MOVEABLE PURE "bitmaps/f33s.bmp" H33S BITMAP MOVEABLE PURE "bitmaps/h33s.bmp" G33S BITMAP MOVEABLE PURE "bitmaps/g33s.bmp" L33S BITMAP MOVEABLE PURE "bitmaps/l33s.bmp" W33S BITMAP MOVEABLE PURE "bitmaps/w33s.bmp" M33S BITMAP MOVEABLE PURE "bitmaps/m33s.bmp" O33S BITMAP MOVEABLE PURE "bitmaps/o33s.bmp" DK33S BITMAP MOVEABLE PURE "bitmaps/dk33s.bmp" LN33S BITMAP MOVEABLE PURE "bitmaps/ln33s.bmp" WP33S BITMAP MOVEABLE PURE "bitmaps/wp33s.bmp" WN33S BITMAP MOVEABLE PURE "bitmaps/wn33s.bmp" WL33S BITMAP MOVEABLE PURE "bitmaps/wl33s.bmp" WS33S BITMAP MOVEABLE PURE "bitmaps/ws33s.bmp" A37O BITMAP MOVEABLE PURE "bitmaps/a37o.bmp" L37O BITMAP MOVEABLE PURE "bitmaps/l37o.bmp" C37O BITMAP MOVEABLE PURE "bitmaps/c37o.bmp" CV37O BITMAP MOVEABLE PURE "bitmaps/cv37o.bmp" A40O BITMAP MOVEABLE PURE "bitmaps/a40o.bmp" L40O BITMAP MOVEABLE PURE "bitmaps/l40o.bmp" C40O BITMAP MOVEABLE PURE "bitmaps/c40o.bmp" CV40O BITMAP MOVEABLE PURE "bitmaps/cv40o.bmp" A45O BITMAP MOVEABLE PURE "bitmaps/a45o.bmp" L45O BITMAP MOVEABLE PURE "bitmaps/l45o.bmp" C45O BITMAP MOVEABLE PURE "bitmaps/c45o.bmp" CV45O BITMAP MOVEABLE PURE "bitmaps/cv45o.bmp" A54O BITMAP MOVEABLE PURE "bitmaps/a54o.bmp" L54O BITMAP MOVEABLE PURE "bitmaps/l54o.bmp" C54O BITMAP MOVEABLE PURE "bitmaps/c54o.bmp" CV54O BITMAP MOVEABLE PURE "bitmaps/cv54o.bmp" A58O BITMAP MOVEABLE PURE "bitmaps/a58o.bmp" L58O BITMAP MOVEABLE PURE "bitmaps/l58o.bmp" C58O BITMAP MOVEABLE PURE "bitmaps/c58o.bmp" CV58O BITMAP MOVEABLE PURE "bitmaps/cv58o.bmp" A64O BITMAP MOVEABLE PURE "bitmaps/a64o.bmp" L64O BITMAP MOVEABLE PURE "bitmaps/l64o.bmp" C64O BITMAP MOVEABLE PURE "bitmaps/c64o.bmp" CV64O BITMAP MOVEABLE PURE "bitmaps/cv64o.bmp" A37W BITMAP MOVEABLE PURE "bitmaps/a37w.bmp" L37W BITMAP MOVEABLE PURE "bitmaps/l37w.bmp" C37W BITMAP MOVEABLE PURE "bitmaps/c37w.bmp" CV37W BITMAP MOVEABLE PURE "bitmaps/cv37w.bmp" A40W BITMAP MOVEABLE PURE "bitmaps/a40w.bmp" L40W BITMAP MOVEABLE PURE "bitmaps/l40w.bmp" C40W BITMAP MOVEABLE PURE "bitmaps/c40w.bmp" CV40W BITMAP MOVEABLE PURE "bitmaps/cv40w.bmp" A45W BITMAP MOVEABLE PURE "bitmaps/a45w.bmp" L45W BITMAP MOVEABLE PURE "bitmaps/l45w.bmp" C45W BITMAP MOVEABLE PURE "bitmaps/c45w.bmp" CV45W BITMAP MOVEABLE PURE "bitmaps/cv45w.bmp" A54W BITMAP MOVEABLE PURE "bitmaps/a54w.bmp" L54W BITMAP MOVEABLE PURE "bitmaps/l54w.bmp" C54W BITMAP MOVEABLE PURE "bitmaps/c54w.bmp" CV54W BITMAP MOVEABLE PURE "bitmaps/cv54w.bmp" A58W BITMAP MOVEABLE PURE "bitmaps/a58w.bmp" L58W BITMAP MOVEABLE PURE "bitmaps/l58w.bmp" C58W BITMAP MOVEABLE PURE "bitmaps/c58w.bmp" CV58W BITMAP MOVEABLE PURE "bitmaps/cv58w.bmp" A64W BITMAP MOVEABLE PURE "bitmaps/a64w.bmp" L64W BITMAP MOVEABLE PURE "bitmaps/l64w.bmp" C64W BITMAP MOVEABLE PURE "bitmaps/c64w.bmp" CV64W BITMAP MOVEABLE PURE "bitmaps/cv64w.bmp" A37S BITMAP MOVEABLE PURE "bitmaps/a37s.bmp" L37S BITMAP MOVEABLE PURE "bitmaps/l37s.bmp" C37S BITMAP MOVEABLE PURE "bitmaps/c37s.bmp" CV37S BITMAP MOVEABLE PURE "bitmaps/cv37s.bmp" A40S BITMAP MOVEABLE PURE "bitmaps/a40s.bmp" L40S BITMAP MOVEABLE PURE "bitmaps/l40s.bmp" C40S BITMAP MOVEABLE PURE "bitmaps/c40s.bmp" CV40S BITMAP MOVEABLE PURE "bitmaps/cv40s.bmp" A45S BITMAP MOVEABLE PURE "bitmaps/a45s.bmp" L45S BITMAP MOVEABLE PURE "bitmaps/l45s.bmp" C45S BITMAP MOVEABLE PURE "bitmaps/c45s.bmp" CV45S BITMAP MOVEABLE PURE "bitmaps/cv45s.bmp" A54S BITMAP MOVEABLE PURE "bitmaps/a54s.bmp" L54S BITMAP MOVEABLE PURE "bitmaps/l54s.bmp" C54S BITMAP MOVEABLE PURE "bitmaps/c54s.bmp" CV54S BITMAP MOVEABLE PURE "bitmaps/cv54s.bmp" A58S BITMAP MOVEABLE PURE "bitmaps/a58s.bmp" L58S BITMAP MOVEABLE PURE "bitmaps/l58s.bmp" C58S BITMAP MOVEABLE PURE "bitmaps/c58s.bmp" CV58S BITMAP MOVEABLE PURE "bitmaps/cv58s.bmp" A64S BITMAP MOVEABLE PURE "bitmaps/a64s.bmp" L64S BITMAP MOVEABLE PURE "bitmaps/l64s.bmp" C64S BITMAP MOVEABLE PURE "bitmaps/c64s.bmp" CV64S BITMAP MOVEABLE PURE "bitmaps/cv64s.bmp" SP58O BITMAP MOVEABLE PURE "shogibitmaps/sp58o.bmp" SN58O BITMAP MOVEABLE PURE "shogibitmaps/sn58o.bmp" SB58O BITMAP MOVEABLE PURE "shogibitmaps/sb58o.bmp" SR58O BITMAP MOVEABLE PURE "shogibitmaps/sr58o.bmp" SL58O BITMAP MOVEABLE PURE "shogibitmaps/sl58o.bmp" SK58O BITMAP MOVEABLE PURE "shogibitmaps/sk58o.bmp" SF58O BITMAP MOVEABLE PURE "shogibitmaps/sf58o.bmp" SW58O BITMAP MOVEABLE PURE "shogibitmaps/sw58o.bmp" SU58O BITMAP MOVEABLE PURE "shogibitmaps/su58o.bmp" SH58O BITMAP MOVEABLE PURE "shogibitmaps/sh58o.bmp" SA58O BITMAP MOVEABLE PURE "shogibitmaps/sa58o.bmp" SC58O BITMAP MOVEABLE PURE "shogibitmaps/sc58o.bmp" SG58O BITMAP MOVEABLE PURE "shogibitmaps/sg58o.bmp" SS58O BITMAP MOVEABLE PURE "shogibitmaps/ss58o.bmp" SP58W BITMAP MOVEABLE PURE "shogibitmaps/sp58w.bmp" SN58W BITMAP MOVEABLE PURE "shogibitmaps/sn58w.bmp" SR58W BITMAP MOVEABLE PURE "shogibitmaps/sr58w.bmp" SL58W BITMAP MOVEABLE PURE "shogibitmaps/sl58w.bmp" SK58W BITMAP MOVEABLE PURE "shogibitmaps/sk58w.bmp" SW58W BITMAP MOVEABLE PURE "shogibitmaps/sw58w.bmp" #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""dlgs.h""\r\n" "\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // WAVE // DING WAVE DISCARDABLE "sounds/ding1.wav" CHING WAVE DISCARDABLE "sounds/ching.wav" CLICK WAVE DISCARDABLE "sounds/click.wav" CYMBAL WAVE DISCARDABLE "sounds/cymbal.wav" DRIP WAVE DISCARDABLE "sounds/drip.wav" GONG WAVE DISCARDABLE "sounds/gong.wav" BEEPBEEP WAVE DISCARDABLE "sounds/honkhonk.wav" LASER WAVE DISCARDABLE "sounds/laser.wav" PENALTY WAVE DISCARDABLE "sounds/penalty.wav" PHONE WAVE DISCARDABLE "sounds/phone.wav" POP WAVE DISCARDABLE "sounds/pop.wav" POP2 WAVE DISCARDABLE "sounds/pop2.wav" SLAP WAVE DISCARDABLE "sounds/slap.wav" SQUEAK WAVE DISCARDABLE "sounds/squeak.wav" SWISH WAVE DISCARDABLE "sounds/swish.wav" THUD WAVE DISCARDABLE "sounds/thud.wav" WHIPCRACK WAVE DISCARDABLE "sounds/whipcrak.wav" MOVE WAVE DISCARDABLE "sounds/move.wav" ALARM WAVE DISCARDABLE "sounds/alarm.wav" CHALLENGE WAVE DISCARDABLE "sounds/challenge.wav" CHANNEL WAVE DISCARDABLE "sounds/channel.wav" CHANNEL1 WAVE DISCARDABLE "sounds/channel1.wav" DRAW WAVE DISCARDABLE "sounds/draw.wav" KIBITZ WAVE DISCARDABLE "sounds/kibitz.wav" LOSE WAVE DISCARDABLE "sounds/lose.wav" REQUEST WAVE DISCARDABLE "sounds/request.wav" SEEK WAVE DISCARDABLE "sounds/seek.wav" SHOUT WAVE DISCARDABLE "sounds/shout.wav" SSHOUT WAVE DISCARDABLE "sounds/sshout.wav" TELL WAVE DISCARDABLE "sounds/tell.wav" UNFINISHED WAVE DISCARDABLE "sounds/unfinished.wav" WIN WAVE DISCARDABLE "sounds/win.wav" ROAR WAVE DISCARDABLE "sounds/roar.wav" ///////////////////////////////////////////////////////////////////////////// // // Version // 1 VERSIONINFO FILEVERSION PACKAGE_FILEVERSION PRODUCTVERSION PACKAGE_FILEVERSION FILETYPE VFT_APP { BLOCK "StringFileInfo" { BLOCK "040904b0" { #ifdef JAWS VALUE "Comments", "Includes support for JAWS screen reader" #endif VALUE "CompanyName", "GNU Project" VALUE "FileVersion", PACKAGE_VERSION VALUE "FileDescription", "Winboard 32-bit GUI for chess" VALUE "InternalName", "Winboard" VALUE "LegalCopyright", "GPLv3 Copyright 2009" VALUE "OriginalFilename", "winboard.exe" VALUE "ProductName", "Winboard" VALUE "ProductVersion", PACKAGE_VERSION #ifdef JAWS VALUE "SpecialBuild", "JAWS (Job Access With Speech) accessiblity build\0" #endif } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409, 1252 } } #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED xboard-4.8.0/winboard/wsnap.h0000644000175000001440000000316712420374633013040 00000000000000/* * Smart "snapping" for window moving and sizing * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #ifndef WSNAP_H_ #define WSNAP_H_ #include #define MAX_SNAP_POINTS 12 #define SNAP_DISTANCE 4 typedef struct { int x_grid[ MAX_SNAP_POINTS ]; int x_grid_len; int y_grid[ MAX_SNAP_POINTS ]; int y_grid_len; } SnapData; LRESULT OnEnterSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ); LRESULT OnMoving( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ); LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ); LRESULT OnExitSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ); #endif // WSNAP_H_ xboard-4.8.0/winboard/wengineoutput.c0000644000175000001440000003655312421746530014625 00000000000000/* * wengineoutput.c - split-off front-end of Engine output (PV) by HGM * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * Enhancements Copyright 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "wsnap.h" #include "engineoutput.h" /* Module variables */ int windowMode = 1; static BOOLEAN engineOutputDialogUp = FALSE; HICON icons[8]; // [HGM] this front-end array translates back-end icon indicator to handle HWND outputField[2][7]; // [HGM] front-end array to translate output field to window handle // front end static HICON LoadIconEx( int id ) { return LoadImage( hInst, MAKEINTRESOURCE(id), IMAGE_ICON, ICON_SIZE, ICON_SIZE, 0 ); } // [HGM] the platform-dependent way of indicating where output should go is now all // concentrated here, where a table of platform-dependent handles are initialized. // This cleanses most other routines of front-end stuff, so they can go into the back end. static void InitializeEngineOutput() { // [HGM] made this into a table, rather than separate global variables icons[nColorBlack] = LoadIconEx( IDI_BLACK_14 ); icons[nColorWhite] = LoadIconEx( IDI_WHITE_14 ); icons[nColorUnknown] = LoadIconEx( IDI_UNKNOWN_14 ); icons[nClear] = LoadIconEx( IDI_TRANS_14 ); icons[nPondering] = LoadIconEx( IDI_PONDER_14 ); icons[nThinking] = LoadIconEx( IDI_CLOCK_14 ); icons[nAnalyzing] = LoadIconEx( IDI_ANALYZE2_14 ); // [HGM] also make a table of handles to output controls // Note that engineOutputDialog must be defined first! outputField[0][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color1 ); outputField[0][nLabel] = GetDlgItem( engineOutputDialog, IDC_EngineLabel1 ); outputField[0][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon1 ); outputField[0][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData1 ); outputField[0][nLabelNPS] = GetDlgItem( engineOutputDialog, IDC_Engine1_NPS ); outputField[0][nMemo] = GetDlgItem( engineOutputDialog, IDC_EngineMemo1 ); outputField[1][nColorIcon] = GetDlgItem( engineOutputDialog, IDC_Color2 ); outputField[1][nLabel] = GetDlgItem( engineOutputDialog, IDC_EngineLabel2 ); outputField[1][nStateIcon] = GetDlgItem( engineOutputDialog, IDC_StateIcon2 ); outputField[1][nStateData] = GetDlgItem( engineOutputDialog, IDC_StateData2 ); outputField[1][nLabelNPS] = GetDlgItem( engineOutputDialog, IDC_Engine2_NPS ); outputField[1][nMemo] = GetDlgItem( engineOutputDialog, IDC_EngineMemo2 ); } // front end static void SetControlPos( HWND hDlg, int id, int x, int y, int width, int height ) { HWND hControl = GetDlgItem( hDlg, id ); SetWindowPos( hControl, HWND_TOP, x, y, width, height, SWP_NOZORDER ); } #define HIDDEN_X 20000 #define HIDDEN_Y 20000 // front end static void HideControl( HWND hDlg, int id ) { HWND hControl = GetDlgItem( hDlg, id ); RECT rc; GetWindowRect( hControl, &rc ); /* Avoid hiding an already hidden control, because that causes many unnecessary WM_ERASEBKGND messages! */ if( rc.left != HIDDEN_X || rc.top != HIDDEN_Y ) { SetControlPos( hDlg, id, 20000, 20000, 100, 100 ); } } // front end, although we might make GetWindowRect front end instead static int GetControlWidth( HWND hDlg, int id ) { RECT rc; GetWindowRect( GetDlgItem( hDlg, id ), &rc ); return rc.right - rc.left; } // front end? static int GetControlHeight( HWND hDlg, int id ) { RECT rc; GetWindowRect( GetDlgItem( hDlg, id ), &rc ); return rc.bottom - rc.top; } static int GetHeaderHeight() { int result = GetControlHeight( engineOutputDialog, IDC_EngineLabel1 ); if( result < ICON_SIZE ) result = ICON_SIZE; return result; } // The size calculations should be backend? If setControlPos is a platform-dependent way of doing things, // a platform-independent wrapper for it should be supplied. static void PositionControlSet( HWND hDlg, int x, int y, int clientWidth, int memoHeight, int idColor, int idEngineLabel, int idNPS, int idMemo, int idStateIcon, int idStateData ) { int label_x = x + ICON_SIZE + H_MARGIN; int label_h = GetControlHeight( hDlg, IDC_EngineLabel1 ); int label_y = y + ICON_SIZE - label_h; int nps_w = GetControlWidth( hDlg, IDC_Engine1_NPS ); int nps_x = clientWidth - H_MARGIN - nps_w; int state_data_w = GetControlWidth( hDlg, IDC_StateData1 ); int state_data_x = nps_x - H_MARGIN - state_data_w; int state_icon_x = state_data_x - ICON_SIZE - 2; int max_w = clientWidth - 2*H_MARGIN; int memo_y = y + ICON_SIZE + LABEL_V_DISTANCE; SetControlPos( hDlg, idColor, x, y, ICON_SIZE, ICON_SIZE ); SetControlPos( hDlg, idEngineLabel, label_x, label_y, state_icon_x - label_x, label_h ); SetControlPos( hDlg, idStateIcon, state_icon_x, y, ICON_SIZE, ICON_SIZE ); SetControlPos( hDlg, idStateData, state_data_x, label_y, state_data_w, label_h ); SetControlPos( hDlg, idNPS, nps_x, label_y, nps_w, label_h ); SetControlPos( hDlg, idMemo, x, memo_y, max_w, memoHeight ); } // Also here some of the size calculations should go to the back end, and their actual application to a front-end routine void ResizeWindowControls( int mode ) { HWND hDlg = engineOutputDialog; // [HGM] used to be parameter, but routine is called from back-end RECT rc; int headerHeight = GetHeaderHeight(); // int labelHeight = GetControlHeight( hDlg, IDC_EngineLabel1 ); // int labelOffset = H_MARGIN + ICON_SIZE + H_MARGIN; // int labelDeltaY = ICON_SIZE - labelHeight; int clientWidth; int clientHeight; int maxControlWidth; int npsWidth; /* Initialize variables */ GetClientRect( hDlg, &rc ); clientWidth = rc.right - rc.left; clientHeight = rc.bottom - rc.top; maxControlWidth = clientWidth - 2*H_MARGIN; npsWidth = GetControlWidth( hDlg, IDC_Engine1_NPS ); /* Resize controls */ if( mode == 0 ) { /* One engine */ PositionControlSet( hDlg, H_MARGIN, V_MARGIN, clientWidth, clientHeight - V_MARGIN - LABEL_V_DISTANCE - headerHeight- V_MARGIN, IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 ); /* Hide controls for the second engine */ HideControl( hDlg, IDC_Color2 ); HideControl( hDlg, IDC_EngineLabel2 ); HideControl( hDlg, IDC_StateIcon2 ); HideControl( hDlg, IDC_StateData2 ); HideControl( hDlg, IDC_Engine2_NPS ); HideControl( hDlg, IDC_EngineMemo2 ); SendDlgItemMessage( hDlg, IDC_EngineMemo2, WM_SETTEXT, 0, (LPARAM) "" ); /* TODO: we should also hide/disable them!!! what about tab stops?!?! */ } else { /* Two engines */ int memo_h = (clientHeight - headerHeight*2 - V_MARGIN*2 - LABEL_V_DISTANCE*2 - SPLITTER_SIZE) / 2; int header1_y = V_MARGIN; int header2_y = V_MARGIN + headerHeight + LABEL_V_DISTANCE + memo_h + SPLITTER_SIZE; PositionControlSet( hDlg, H_MARGIN, header1_y, clientWidth, memo_h, IDC_Color1, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineMemo1, IDC_StateIcon1, IDC_StateData1 ); PositionControlSet( hDlg, H_MARGIN, header2_y, clientWidth, memo_h, IDC_Color2, IDC_EngineLabel2, IDC_Engine2_NPS, IDC_EngineMemo2, IDC_StateIcon2, IDC_StateData2 ); } InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo1), NULL, FALSE ); InvalidateRect( GetDlgItem(hDlg,IDC_EngineMemo2), NULL, FALSE ); } static int currentPV; int highTextStart[2], highTextEnd[2]; extern RECT boardRect; VOID GetMemoLine(HWND hDlg, int x, int y) { // [HGM] pv: translate click to PV line, and load it for display char buf[10000]; int index, start, end, memo; POINT pt; pt.x = x; pt.y = y; memo = currentPV ? IDC_EngineMemo2 : IDC_EngineMemo1; index = SendDlgItemMessage( hDlg, memo, EM_CHARFROMPOS, 0, (LPARAM) &pt ); GetDlgItemText(hDlg, memo, buf, sizeof(buf)); if(LoadMultiPV(x, y, buf, index, &start, &end, currentPV)) { SetCapture(hDlg); SendMessage( outputField[currentPV][nMemo], EM_SETSEL, (WPARAM)start, (LPARAM)end ); highTextStart[currentPV] = start; highTextEnd[currentPV] = end; SetFocus(outputField[currentPV][nMemo]); } } // front end. Actual printing of PV lines into the output field void InsertIntoMemo( int which, char * text, int where ) { SendMessage( outputField[which][nMemo], EM_SETSEL, where, where ); // [HGM] multivar: choose insertion point SendMessage( outputField[which][nMemo], EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text ); if(where < highTextStart[which]) { // [HGM] multiPVdisplay: move highlighting int len = strlen(text); highTextStart[which] += len; highTextEnd[which] += len; SendMessage( outputField[which][nMemo], EM_SETSEL, highTextStart[which], highTextEnd[which] ); } } // front end. Associates an icon with an output field ("control" in Windows jargon). // [HGM] let it find out the output field from the 'which' number by itself void SetIcon( int which, int field, int nIcon ) { if( nIcon != 0 ) { SendMessage( outputField[which][field], STM_SETICON, (WPARAM) icons[nIcon], 0 ); } } // front end wrapper for SetWindowText, taking control number in stead of handle void DoSetWindowText(int which, int field, char *s_label) { SetWindowText( outputField[which][field], s_label ); } void SetEngineOutputTitle(char *title) { SetWindowText( engineOutputDialog, title ); } // This seems pure front end LRESULT CALLBACK EngineOutputProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; switch (message) { case WM_INITDIALOG: if( engineOutputDialog == NULL ) { engineOutputDialog = hDlg; Translate(hDlg, DLG_EngineOutput); RestoreWindowPlacement( hDlg, &wpEngineOutput ); /* Restore window placement */ ResizeWindowControls( windowMode ); SendDlgItemMessage( hDlg, IDC_EngineMemo1, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); SendDlgItemMessage( hDlg, IDC_EngineMemo2, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); /* Set font */ SendDlgItemMessage( engineOutputDialog, IDC_EngineMemo1, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 )); SendDlgItemMessage( engineOutputDialog, IDC_EngineMemo2, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 )); SetEngineState( 0, STATE_IDLE, "" ); SetEngineState( 1, STATE_IDLE, "" ); } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; case WM_MOUSEMOVE: MovePV(LOWORD(lParam) - boardRect.left, HIWORD(lParam) - boardRect.top, boardRect.bottom - boardRect.top); break; case WM_RBUTTONUP: ReleaseCapture(); SendMessage( outputField[currentPV][nMemo], EM_SETSEL, 0, 0 ); highTextStart[currentPV] = highTextEnd[currentPV] = 0; UnLoadPV(); break; case WM_NOTIFY: if( wParam == IDC_EngineMemo1 || wParam == IDC_EngineMemo2 ) { MSGFILTER * lpMF = (MSGFILTER *) lParam; if( lpMF->msg == WM_RBUTTONDOWN && (lpMF->wParam & (MK_CONTROL)) == 0 ) { shiftKey = (lpMF->wParam & MK_SHIFT) != 0; // [HGM] remember last shift status currentPV = (wParam == IDC_EngineMemo2); GetMemoLine(hDlg, LOWORD(lpMF->lParam), HIWORD(lpMF->lParam)); } } break; case WM_GETMINMAXINFO: { MINMAXINFO * mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 160; } break; case WM_CLOSE: EngineOutputPopDown(); break; case WM_SIZE: ResizeWindowControls( windowMode ); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; } // front end void EngineOutputPopUp() { FARPROC lpProc; static int needInit = TRUE; CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_CHECKED); if( engineOutputDialog ) { SendMessage( engineOutputDialog, WM_INITDIALOG, 0, 0 ); if( ! engineOutputDialogUp ) { ShowWindow(engineOutputDialog, SW_SHOW); } } else { lpProc = MakeProcInstance( (FARPROC) EngineOutputProc, hInst ); /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */ CreateDialog( hInst, MAKEINTRESOURCE(DLG_EngineOutput), hwndMain, (DLGPROC)lpProc ); FreeProcInstance(lpProc); } // [HGM] displaced to after creation of dialog, to allow initialization of output fields if( needInit ) { InitializeEngineOutput(); needInit = FALSE; } engineOutputDialogUp = TRUE; } // front end void EngineOutputPopDown() { CheckMenuItem(GetMenu(hwndMain), IDM_ShowEngineOutput, MF_UNCHECKED); if( engineOutputDialog ) { ShowWindow(engineOutputDialog, SW_HIDE); } engineOutputDialogUp = FALSE; } // front end. [HGM] Takes handle of output control from table, so only number is passed void DoClearMemo(int which) { SendMessage( outputField[which][nMemo], WM_SETTEXT, 0, (LPARAM) "" ); } // front end (because only other front-end wants to know) int EngineOutputIsUp() { return engineOutputDialogUp; } // front end, to give back-end access to engineOutputDialog int EngineOutputDialogExists() { return engineOutputDialog != NULL; } xboard-4.8.0/winboard/winboard.rtf0000644000175000001440000173076212420374633014072 00000000000000{\rtf1\ansi\ansicpg1252\uc1 \deff5\deflang1033\deflangfe1043{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;} {\f5\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica{\*\falt Arial};}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier{\*\falt Courier New};}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;} {\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;} {\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York{\*\falt Times New Roman};}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;} {\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f16\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun;} {\f17\froman\fcharset0\fprq0{\*\panose 00000000000000000000}??;}{\f18\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}BookAntiqua-Bold;}{\f19\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}BookAntiqua;} {\f20\froman\fcharset0\fprq0{\*\panose 00000000000000000000}Minion-Regular;}{\f21\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Calibri;}{\f22\froman\fcharset0\fprq0{\*\panose 00000000000000000000}TimesNewRoman;} {\f23\froman\fcharset0\fprq0{\*\panose 00000000000000000000}TimesNewRoman,Italic;}{\f24\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f25\fnil\fcharset129\fprq1{\*\panose 00000000000000000000}Terminal;} {\f26\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Fixedsys;}{\f27\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Small Fonts;}{\f28\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Czec;} {\f29\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Engl;}{\f30\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Fren;}{\f31\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Germ;} {\f32\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Ital;}{\f33\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Span;}{\f34\fdecor\fcharset2\fprq1{\*\panose 00000000000000000000}WST_Swed;} {\f35\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f36\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;} {\f38\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}{\f40\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;} {\f41\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;}{\f42\froman\fcharset0\fprq2{\*\panose 02040502050405020303}Georgia;}{\f43\fswiss\fcharset0\fprq2{\*\panose 020b0603020102020204}Franklin Gothic Medium;} {\f44\froman\fcharset0\fprq2{\*\panose 02040502050505030304}Palatino Linotype;}{\f45\fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS;}{\f46\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;} {\f47\fscript\fcharset0\fprq2 Estrangelo Edessa;}{\f48\fnil\fcharset0\fprq2 Gautami;}{\f49\fnil\fcharset0\fprq2 Latha;}{\f50\fnil\fcharset0\fprq2 Mangal;}{\f51\fnil\fcharset0\fprq2 MV Boli;}{\f52\fnil\fcharset0\fprq2 Raavi;} {\f53\fnil\fcharset0\fprq2 Shruti;}{\f54\fnil\fcharset0\fprq2 Tunga;}{\f55\froman\fcharset0\fprq2{\*\panose 010a0502050306030303}Sylfaen;}{\f56\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Microsoft Sans Serif;} {\f57\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f58\froman\fcharset0\fprq2{\*\panose 02060603020205020403}Rockwell;}{\f59\froman\fcharset0\fprq2{\*\panose 02060903040505020403}Rockwell Extra Bold;} {\f60\fscript\fcharset0\fprq2{\*\panose 03090702030407020403}Mistral;}{\f61\fdecor\fcharset0\fprq2{\*\panose 04020505051007020d02}Blackadder ITC;}{\f62\fscript\fcharset0\fprq2{\*\panose 03070402050302030203}Bradley Hand ITC;} {\f63\fswiss\fcharset0\fprq2{\*\panose 020e0705020206020404}Copperplate Gothic Bold;}{\f64\fswiss\fcharset0\fprq2{\*\panose 020e0507020206020404}Copperplate Gothic Light;}{\f65\fdecor\fcharset0\fprq2{\*\panose 04040404050702020202}Curlz MT;} {\f66\fscript\fcharset0\fprq2{\*\panose 030303020407070d0804}Edwardian Script ITC;}{\f67\froman\fcharset0\fprq2{\*\panose 02090707080505020304}Engravers MT;}{\f68\fswiss\fcharset0\fprq2{\*\panose 020b0805030504020804}Eras Demi ITC;} {\f69\fswiss\fcharset0\fprq2{\*\panose 020b0402030504020804}Eras Light ITC;}{\f70\fswiss\fcharset0\fprq2{\*\panose 020b0504020202050204}Eurostile;}{\f71\fdecor\fcharset0\fprq2{\*\panose 04060505060202020a04}Felix Titling;} {\f72\fswiss\fcharset0\fprq2{\*\panose 020b0503020102020204}Franklin Gothic Book;}{\f73\fswiss\fcharset0\fprq2{\*\panose 020b0703020102020204}Franklin Gothic Demi;}{\f74\fswiss\fcharset0\fprq2{\*\panose 020b0606030402020204}Franklin Gothic Medium Cond;} {\f75\fswiss\fcharset0\fprq2{\*\panose 020b0903020102020204}Franklin Gothic Heavy;}{\f76\fswiss\fcharset0\fprq2{\*\panose 020b0706030402020204}Franklin Gothic Demi Cond;}{\f77\fscript\fcharset0\fprq2{\*\panose 03020402040607040605}French Script MT;} {\f78\fswiss\fcharset0\fprq2{\*\panose 020b0502020202020204}Century Gothic;}{\f79\fscript\fcharset0\fprq2{\*\panose 03050502040202030202}Kristen ITC;}{\f80\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans;} {\f81\fswiss\fcharset0\fprq2{\*\panose 020e0502030308020204}Maiandra GD;}{\f82\fdecor\fcharset0\fprq2{\*\panose 04040403030d02020704}Matisse ITC;}{\f83\fscript\fcharset0\fprq2{\*\panose 03070502060502030205}Papyrus;} {\f84\froman\fcharset0\fprq2{\*\panose 02020502060401020303}Perpetua;}{\f85\fdecor\fcharset0\fprq2{\*\panose 04020404030d07020202}Tempus Sans ITC;}{\f86\fscript\fcharset0\fprq2{\*\panose 03020602050506090804}Vivaldi;} {\f87\froman\fcharset2\fprq2{\*\panose 05020102010507070707}Wingdings 2;}{\f88\froman\fcharset2\fprq2{\*\panose 05040102010807070707}Wingdings 3;}{\f89\fdecor\fcharset0\fprq2{\*\panose 04090605060d06020702}Jokerman;} {\f90\fdecor\fcharset0\fprq2{\*\panose 04040403040a02020202}Juice ITC;}{\f91\fmodern\fcharset0\fprq2{\*\panose 02010509020102010303}OCR A Extended;}{\f92\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Reference 1;} {\f93\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}MS Reference 2;}{\f94\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}MS Reference Sans Serif;}{\f95\fnil\fcharset2\fprq2{\*\panose 05000500000000000000}MS Reference Specialty;} {\f96\froman\fcharset2\fprq2{\*\panose 05050102010205020202}MT Extra;}{\f97\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f98\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;} {\f99\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}Monotype Sorts;}{\f100\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;}{\f101\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Outlook;} {\f102\froman\fcharset0\fprq2{\*\panose 02020503030404060203}Kartika;}{\f103\fnil\fcharset0\fprq2{\*\panose 01010600010101010101}Vrinda;}{\f104\fswiss\fcharset2\fprq2{\*\panose 020b0603050302020204}WinboardF;} {\f105\fswiss\fcharset2\fprq2{\*\panose 020b0603050302020204}Chess Mark;}{\f106\fnil\fcharset0\fprq2{\*\panose 02000500000000000000}Superchess;}{\f107\fswiss\fcharset0\fprq2{\*\panose 020b0603050302020204}Tasc Chess Figurine;} {\f108\fnil\fcharset0\fprq1{\*\panose 02010603010101010101}XIANGQI;}{\f109\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho;}{\f110\fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;} {\f111\froman\fcharset128\fprq2{\*\panose 02020600040205080304}MS PMincho;}{\f112\froman\fcharset128\fprq2{\*\panose 02020600040205080304}@MS PMincho;}{\f113\fmodern\fcharset128\fprq1{\*\panose 020b0609070205080204}MS Gothic;} {\f114\fmodern\fcharset128\fprq1{\*\panose 020b0609070205080204}@MS Gothic;}{\f115\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}MS PGothic;}{\f116\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}@MS PGothic;} {\f117\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}MS UI Gothic;}{\f118\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}@MS UI Gothic;}{\f119\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}Gulim;} {\f120\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}@Gulim;}{\f121\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}GulimChe;}{\f122\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}@GulimChe;} {\f123\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}Dotum;}{\f124\fswiss\fcharset129\fprq2{\*\panose 020b0600000101010101}@Dotum;}{\f125\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}DotumChe;} {\f126\fmodern\fcharset129\fprq1{\*\panose 020b0609000101010101}@DotumChe;}{\f127\froman\fcharset129\fprq2{\*\panose 02030600000101010101}Batang;}{\f128\froman\fcharset129\fprq2{\*\panose 02030600000101010101}@Batang;} {\f129\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}BatangChe;}{\f130\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}@BatangChe;}{\f131\froman\fcharset129\fprq2{\*\panose 02030600000101010101}Gungsuh;} {\f132\froman\fcharset129\fprq2{\*\panose 02030600000101010101}@Gungsuh;}{\f133\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}GungsuhChe;}{\f134\fmodern\fcharset129\fprq1{\*\panose 02030609000101010101}@GungsuhChe;} {\f135\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f136\fmodern\fcharset134\fprq1{\*\panose 02010609030101010101}NSimSun;}{\f137\fmodern\fcharset134\fprq1{\*\panose 02010609030101010101}@NSimSun;} {\f138\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimHei;}{\f139\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimHei;}{\f140\fmodern\fcharset136\fprq1{\*\panose 02020309000000000000}MingLiU;} {\f141\fmodern\fcharset136\fprq1{\*\panose 02020309000000000000}@MingLiU;}{\f142\froman\fcharset136\fprq2{\*\panose 02020300000000000000}PMingLiU;}{\f143\froman\fcharset136\fprq2{\*\panose 02020300000000000000}@PMingLiU;} {\f144\froman\fcharset128\fprq1{\*\panose 00000000000000000000}Mincho{\*\falt ??};}{\f145\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Century;}{\f146\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Angsana New;} {\f147\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Cordia New;}{\f148\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Sendnya;}{\f149\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Estrangella Edessa;} {\f150\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}Arial Unicode MS;}{\f151\fswiss\fcharset0\fprq0{\*\panose 00000000000000000000}Univers (WN);}{\f152\froman\fcharset0\fprq0{\*\panose 00000000000000000000}CG Times (WN);} {\f153\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS;}{\f154\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Book Antiqua;}{\f155\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Monotype Corsiva;} {\f156\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}CA Chess;}{\f157\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}ISDiagram;}{\f158\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}CADiagram;} {\f159\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Alfonso-X;}{\f160\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Adventurer;}{\f161\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Cases;} {\f162\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Marroquin;}{\f163\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Condal;}{\f164\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Harlequin;} {\f165\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Kingdom;}{\f166\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Leipzig;}{\f167\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Line;} {\f168\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Lucena;}{\f169\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Magnetic;}{\f170\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Maya;} {\f171\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Merida Fatx;}{\f172\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Merida;}{\f173\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Millennia-D;} {\f174\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Miscel;}{\f175\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Motif;}{\f176\fswiss\fcharset2\fprq2{\*\panose 00000000000000000000}Chess Mediaeval;} {\f177\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Smart;}{\f178\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Traveller Standard;}{\f179\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess;} {\f180\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Usual;}{\f181\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chess Utrecht;}{\f182\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica1;} {\f183\froman\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica1Mono;}{\f184\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica2;}{\f185\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica2Mono;} {\f186\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica3;}{\f187\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica3Mono;}{\f188\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica4;} {\f189\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica4Mono;}{\f190\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica5;}{\f191\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica5Mono;} {\f192\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica6;}{\f193\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica6Mono;}{\f194\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica7;} {\f195\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Mathematica7Mono;}{\f196\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Bookup;}{\f197\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Chessmaster9000;} {\f198\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}FigurineCB AriesSP;}{\f199\fnil\fcharset0\fprq1{\*\panose 00000000000000000000}FigurineCB LetterSP;}{\f200\froman\fcharset0\fprq2{\*\panose 00000000000000000000}FigurineCB TimeSP;} {\f201\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}DiagramTTFritz;}{\f202\fmodern\fcharset2\fprq1{\*\panose 00000000000000000000}FigurineCrrCB;}{\f203\froman\fcharset2\fprq2{\*\panose 00000000000000000000}FigurineTmsCB;} {\f204\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}HE_TERMINAL;}{\f205\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Digiface;}{\f206\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Sydnie;} {\f207\froman\fcharset177\fprq2{\*\panose 00000000000000000000}Times New Roman (Hebrew);}{\f208\froman\fcharset178\fprq2{\*\panose 00000000000000000000}Times New Roman (Arabic);} {\f209\froman\fcharset163\fprq2{\*\panose 00000000000000000000}Times New Roman (Vietnamese);}{\f210\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Arial (Hebrew);}{\f211\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial (Arabic);} {\f212\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Arial (Vietnamese);}{\f213\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Courier New (Hebrew);}{\f214\fmodern\fcharset178\fprq1{\*\panose 00000000000000000000}Courier New (Arabic);} {\f215\fmodern\fcharset163\fprq1{\*\panose 00000000000000000000}Courier New (Vietnamese);}{\f216\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Helvetica (Hebrew){\*\falt Arial};} {\f217\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Helvetica (Arabic){\*\falt Arial};}{\f218\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Helvetica (Vietnamese){\*\falt Arial};} {\f219\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Hebrew);}{\f220\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Arabic);} {\f221\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Vietnamese);}{\f222\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Thai);} {\f223\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Tahoma (Hebrew);}{\f224\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Tahoma (Arabic);}{\f225\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Tahoma (Vietnamese);} {\f226\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Tahoma (Thai);}{\f227\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Lucida Sans Unicode (Hebrew);} {\f228\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Verdana (Vietnamese);}{\f229\froman\fcharset163\fprq2{\*\panose 00000000000000000000}Palatino Linotype (Vietnamese);} {\f230\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Hebrew);}{\f231\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Arabic);} {\f232\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Vietnames;}{\f233\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}Microsoft Sans Serif (Thai);} {\f234\fswiss\fcharset177\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Hebrew);}{\f235\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Arabic);} {\f236\fswiss\fcharset163\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Vietnamese);}{\f237\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS (Thai);} {\f238\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Haettenschweiler CE;}{\f239\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Haettenschweiler Cyr;} {\f240\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Haettenschweiler Greek;}{\f241\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Haettenschweiler Tur;} {\f242\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Haettenschweiler Baltic;}{\f243\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}CA Chess Cyr;}{\f244\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}CA Chess Tur;} {\f245\fmodern\fcharset238\fprq1{\*\panose 00000000000000000000}HE_TERMINAL CE;}{\f246\fmodern\fcharset204\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Cyr;}{\f247\fmodern\fcharset161\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Greek;} {\f248\fmodern\fcharset162\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Tur;}{\f249\fmodern\fcharset186\fprq1{\*\panose 00000000000000000000}HE_TERMINAL Baltic;}{\f250\fnil\fcharset161\fprq2{\*\panose 00000000000000000000}Sydnie Greek;} {\f251\fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}Gothic{\*\falt ?????};}{\f252\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}News Gothic MT;}{\f253\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Lucida Handwriting;} {\f254\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Calisto MT;}{\f255\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Abadi MT Condensed Light;}{\f256\fdecor\fcharset0\fprq2{\*\panose 00000000000000000000}Westminster;} {\f257\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}OCR-A II;}{\f258\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}OCR B MT;}{\f259\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II;} {\f260\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II Condensed;}{\f261\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}QuickType II Mono;}{\f262\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}QuickType II Pi;} {\f263\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Franklin Gothic Medium Cond Gre;}{\f264\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Franklin Gothic Medium Cond Bal;} {\f265\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Franklin Gothic Demi Cond Balti;}{\f266\froman\fcharset238\fprq0{\*\panose 00000000000000000000}?? CE;}{\f267\froman\fcharset162\fprq0{\*\panose 00000000000000000000}?? Tur;} {\f268\fswiss\fcharset0\fprq2{\*\panose 020b0600000000000000}Shogi;}{\f269\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}SimSun-PUA;}{\f270\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun-PUA;} {\f271\froman\fcharset222\fprq2{\*\panose 00000000000000000000}AngsanaUPC;}{\f272\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}BrowalliaUPC;}{\f273\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Browallia New;} {\f274\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}CordiaUPC;}{\f275\froman\fcharset222\fprq2{\*\panose 00000000000000000000}DilleniaUPC;}{\f276\froman\fcharset222\fprq2{\*\panose 00000000000000000000}EucrosiaUPC;} {\f277\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}FreesiaUPC;}{\f278\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}IrisUPC;}{\f279\froman\fcharset222\fprq2{\*\panose 00000000000000000000}JasmineUPC;} {\f280\froman\fcharset222\fprq2{\*\panose 00000000000000000000}KodchiangUPC;}{\f281\fswiss\fcharset222\fprq2{\*\panose 00000000000000000000}LilyUPC;}{\f282\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Aharoni;} {\f283\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}David;}{\f284\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}David Transparent;}{\f285\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}FrankRuehl;} {\f286\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Levenim MT;}{\f287\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Miriam;}{\f288\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Miriam Transparent;} {\f289\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Miriam Fixed;}{\f290\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Fixed Miriam Transparent;}{\f291\fnil\fcharset177\fprq2{\*\panose 00000000000000000000}Narkisim;} {\f292\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Rod;}{\f293\fmodern\fcharset177\fprq1{\*\panose 00000000000000000000}Rod Transparent;}{\f294\fnil\fcharset178\fprq2{\*\panose 00000000000000000000}Traditional Arabic;} {\f295\fnil\fcharset178\fprq2{\*\panose 00000000000000000000}Arabic Transparent;}{\f296\fnil\fcharset178\fprq2{\*\panose 00000000000000000000}Andalus;}{\f297\fnil\fcharset178\fprq2{\*\panose 00000000000000000000}Simplified Arabic;} {\f298\fmodern\fcharset178\fprq1{\*\panose 00000000000000000000}Simplified Arabic Fixed;}{\f299\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Freestyle Script;}{\f300\fscript\fcharset0\fprq2{\*\panose 00000000000000000000}Pristina;} {\f301\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\f302\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Candara;}{\f303\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Consolas;} {\f304\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Constantia;}{\f305\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Corbel;}{\f306\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Segoe UI;} {\f307\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Calibri CE;}{\f308\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Calibri Cyr;}{\f309\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Calibri Greek;} {\f310\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Calibri Tur;}{\f311\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Calibri Baltic;}{\f312\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Cambria Math CE;} {\f313\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Cambria Math Cyr;}{\f314\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Cambria Math Greek;}{\f315\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Cambria Math Tur;} {\f316\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Cambria Math Baltic;}{\f317\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Century CE;}{\f318\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Century Cyr;} {\f319\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Century Greek;}{\f320\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Century Tur;}{\f321\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Century Baltic;} {\f322\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Arial Unicode MS CE;}{\f323\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Cyr;} {\f324\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Greek;}{\f325\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Tur;} {\f326\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Arial Unicode MS Baltic;}{\f327\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS CE;} {\f328\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Cyr;}{\f329\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Greek;} {\f330\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Tur;}{\f331\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS Baltic;}{\f332\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Book Antiqua CE;} {\f333\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Book Antiqua Cyr;}{\f334\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Book Antiqua Greek;}{\f335\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Book Antiqua Tur;} {\f336\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Book Antiqua Baltic;}{\f337\fscript\fcharset238\fprq2{\*\panose 00000000000000000000}Monotype Corsiva CE;}{\f338\fscript\fcharset204\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Cyr;} {\f339\fscript\fcharset161\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Greek;}{\f340\fscript\fcharset162\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Tur;} {\f341\fscript\fcharset186\fprq2{\*\panose 00000000000000000000}Monotype Corsiva Baltic;}{\f342\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Cambria CE;}{\f343\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Cambria Cyr;} {\f344\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Cambria Greek;}{\f345\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Cambria Tur;}{\f346\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Cambria Baltic;} {\f347\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Candara CE;}{\f348\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Candara Cyr;}{\f349\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Candara Greek;} {\f350\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Candara Tur;}{\f351\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Candara Baltic;}{\f352\fmodern\fcharset238\fprq1{\*\panose 00000000000000000000}Consolas CE;} {\f353\fmodern\fcharset204\fprq1{\*\panose 00000000000000000000}Consolas Cyr;}{\f354\fmodern\fcharset161\fprq1{\*\panose 00000000000000000000}Consolas Greek;}{\f355\fmodern\fcharset162\fprq1{\*\panose 00000000000000000000}Consolas Tur;} {\f356\fmodern\fcharset186\fprq1{\*\panose 00000000000000000000}Consolas Baltic;}{\f357\froman\fcharset238\fprq2{\*\panose 00000000000000000000}Constantia CE;}{\f358\froman\fcharset204\fprq2{\*\panose 00000000000000000000}Constantia Cyr;} {\f359\froman\fcharset161\fprq2{\*\panose 00000000000000000000}Constantia Greek;}{\f360\froman\fcharset162\fprq2{\*\panose 00000000000000000000}Constantia Tur;}{\f361\froman\fcharset186\fprq2{\*\panose 00000000000000000000}Constantia Baltic;} {\f362\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Corbel CE;}{\f363\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Corbel Cyr;}{\f364\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Corbel Greek;} {\f365\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Corbel Tur;}{\f366\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Corbel Baltic;}{\f367\fswiss\fcharset238\fprq2{\*\panose 00000000000000000000}Segoe UI CE;} {\f368\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Segoe UI Cyr;}{\f369\fswiss\fcharset161\fprq2{\*\panose 00000000000000000000}Segoe UI Greek;}{\f370\fswiss\fcharset162\fprq2{\*\panose 00000000000000000000}Segoe UI Tur;} {\f371\fswiss\fcharset186\fprq2{\*\panose 00000000000000000000}Segoe UI Baltic;}{\f372\fnil\fcharset0\fprq2{\*\panose 00000504000000000004}Ultima;}{\f373\froman\fcharset238\fprq2 Times New Roman CE;}{\f374\froman\fcharset204\fprq2 Times New Roman Cyr;} {\f376\froman\fcharset161\fprq2 Times New Roman Greek;}{\f377\froman\fcharset162\fprq2 Times New Roman Tur;}{\f378\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f379\fswiss\fcharset238\fprq2 Arial CE;}{\f380\fswiss\fcharset204\fprq2 Arial Cyr;} {\f382\fswiss\fcharset161\fprq2 Arial Greek;}{\f383\fswiss\fcharset162\fprq2 Arial Tur;}{\f384\fswiss\fcharset186\fprq2 Arial Baltic;}{\f385\fmodern\fcharset238\fprq1 Courier New CE;}{\f386\fmodern\fcharset204\fprq1 Courier New Cyr;} {\f388\fmodern\fcharset161\fprq1 Courier New Greek;}{\f389\fmodern\fcharset162\fprq1 Courier New Tur;}{\f390\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f397\froman\fcharset238\fprq2 Times CE;}{\f398\froman\fcharset204\fprq2 Times Cyr;} {\f400\froman\fcharset161\fprq2 Times Greek;}{\f401\froman\fcharset162\fprq2 Times Tur;}{\f402\froman\fcharset186\fprq2 Times Baltic;}{\f403\fswiss\fcharset238\fprq2 Helvetica CE{\*\falt Arial};} {\f404\fswiss\fcharset204\fprq2 Helvetica Cyr{\*\falt Arial};}{\f406\fswiss\fcharset161\fprq2 Helvetica Greek{\*\falt Arial};}{\f407\fswiss\fcharset162\fprq2 Helvetica Tur{\*\falt Arial};}{\f408\fswiss\fcharset186\fprq2 Helvetica Baltic{\*\falt Arial};} {\f463\fswiss\fcharset238\fprq2 Tahoma CE;}{\f464\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f466\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f467\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f468\fswiss\fcharset186\fprq2 Tahoma Baltic;} {\f471\fnil\fcharset0\fprq2 SimSun;}{\f589\fmodern\fcharset238\fprq1 Lucida Console CE;}{\f590\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f592\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f593\fmodern\fcharset162\fprq1 Lucida Console Tur;} {\f595\fswiss\fcharset238\fprq2 Lucida Sans Unicode CE;}{\f596\fswiss\fcharset204\fprq2 Lucida Sans Unicode Cyr;}{\f598\fswiss\fcharset161\fprq2 Lucida Sans Unicode Greek;}{\f599\fswiss\fcharset162\fprq2 Lucida Sans Unicode Tur;} {\f601\fswiss\fcharset238\fprq2 Verdana CE;}{\f602\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f604\fswiss\fcharset161\fprq2 Verdana Greek;}{\f605\fswiss\fcharset162\fprq2 Verdana Tur;}{\f606\fswiss\fcharset186\fprq2 Verdana Baltic;} {\f607\fswiss\fcharset238\fprq2 Arial Black CE;}{\f608\fswiss\fcharset204\fprq2 Arial Black Cyr;}{\f610\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f611\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f612\fswiss\fcharset186\fprq2 Arial Black Baltic;} {\f613\fscript\fcharset238\fprq2 Comic Sans MS CE;}{\f614\fscript\fcharset204\fprq2 Comic Sans MS Cyr;}{\f616\fscript\fcharset161\fprq2 Comic Sans MS Greek;}{\f617\fscript\fcharset162\fprq2 Comic Sans MS Tur;} {\f618\fscript\fcharset186\fprq2 Comic Sans MS Baltic;}{\f619\fswiss\fcharset238\fprq2 Impact CE;}{\f620\fswiss\fcharset204\fprq2 Impact Cyr;}{\f622\fswiss\fcharset161\fprq2 Impact Greek;}{\f623\fswiss\fcharset162\fprq2 Impact Tur;} {\f624\fswiss\fcharset186\fprq2 Impact Baltic;}{\f625\froman\fcharset238\fprq2 Georgia CE;}{\f626\froman\fcharset204\fprq2 Georgia Cyr;}{\f628\froman\fcharset161\fprq2 Georgia Greek;}{\f629\froman\fcharset162\fprq2 Georgia Tur;} {\f630\froman\fcharset186\fprq2 Georgia Baltic;}{\f631\fswiss\fcharset238\fprq2 Franklin Gothic Medium CE;}{\f632\fswiss\fcharset204\fprq2 Franklin Gothic Medium Cyr;}{\f634\fswiss\fcharset161\fprq2 Franklin Gothic Medium Greek;} {\f635\fswiss\fcharset162\fprq2 Franklin Gothic Medium Tur;}{\f636\fswiss\fcharset186\fprq2 Franklin Gothic Medium Baltic;}{\f637\froman\fcharset238\fprq2 Palatino Linotype CE;}{\f638\froman\fcharset204\fprq2 Palatino Linotype Cyr;} {\f640\froman\fcharset161\fprq2 Palatino Linotype Greek;}{\f641\froman\fcharset162\fprq2 Palatino Linotype Tur;}{\f642\froman\fcharset186\fprq2 Palatino Linotype Baltic;}{\f643\fswiss\fcharset238\fprq2 Trebuchet MS CE;} {\f644\fswiss\fcharset204\fprq2 Trebuchet MS Cyr;}{\f646\fswiss\fcharset161\fprq2 Trebuchet MS Greek;}{\f647\fswiss\fcharset162\fprq2 Trebuchet MS Tur;}{\f648\fswiss\fcharset186\fprq2 Trebuchet MS Baltic;}{\f703\froman\fcharset238\fprq2 Sylfaen CE;} {\f704\froman\fcharset204\fprq2 Sylfaen Cyr;}{\f706\froman\fcharset161\fprq2 Sylfaen Greek;}{\f707\froman\fcharset162\fprq2 Sylfaen Tur;}{\f708\froman\fcharset186\fprq2 Sylfaen Baltic;}{\f709\fswiss\fcharset238\fprq2 Microsoft Sans Serif CE;} {\f710\fswiss\fcharset204\fprq2 Microsoft Sans Serif Cyr;}{\f712\fswiss\fcharset161\fprq2 Microsoft Sans Serif Greek;}{\f713\fswiss\fcharset162\fprq2 Microsoft Sans Serif Tur;}{\f714\fswiss\fcharset186\fprq2 Microsoft Sans Serif Baltic;} {\f715\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f716\fswiss\fcharset204\fprq2 Arial Narrow Cyr;}{\f718\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f719\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f720\fswiss\fcharset186\fprq2 Arial Narrow Baltic;} {\f733\fscript\fcharset238\fprq2 Mistral CE;}{\f734\fscript\fcharset204\fprq2 Mistral Cyr;}{\f736\fscript\fcharset161\fprq2 Mistral Greek;}{\f737\fscript\fcharset162\fprq2 Mistral Tur;}{\f738\fscript\fcharset186\fprq2 Mistral Baltic;} {\f805\fswiss\fcharset238\fprq2 Franklin Gothic Book CE;}{\f806\fswiss\fcharset204\fprq2 Franklin Gothic Book Cyr;}{\f808\fswiss\fcharset161\fprq2 Franklin Gothic Book Greek;}{\f809\fswiss\fcharset162\fprq2 Franklin Gothic Book Tur;} {\f810\fswiss\fcharset186\fprq2 Franklin Gothic Book Baltic;}{\f811\fswiss\fcharset238\fprq2 Franklin Gothic Demi CE;}{\f812\fswiss\fcharset204\fprq2 Franklin Gothic Demi Cyr;}{\f814\fswiss\fcharset161\fprq2 Franklin Gothic Demi Greek;} {\f815\fswiss\fcharset162\fprq2 Franklin Gothic Demi Tur;}{\f816\fswiss\fcharset186\fprq2 Franklin Gothic Demi Baltic;}{\f817\fswiss\fcharset238\fprq2 Franklin Gothic Medium Cond CE;}{\f818\fswiss\fcharset204\fprq2 Franklin Gothic Medium Cond Cyr;} {\f820\fswiss\fcharset161\fprq2 Franklin Gothic Medium Cond Greek;}{\f821\fswiss\fcharset162\fprq2 Franklin Gothic Medium Cond Tur;}{\f822\fswiss\fcharset186\fprq2 Franklin Gothic Medium Cond Baltic;} {\f823\fswiss\fcharset238\fprq2 Franklin Gothic Heavy CE;}{\f824\fswiss\fcharset204\fprq2 Franklin Gothic Heavy Cyr;}{\f826\fswiss\fcharset161\fprq2 Franklin Gothic Heavy Greek;}{\f827\fswiss\fcharset162\fprq2 Franklin Gothic Heavy Tur;} {\f828\fswiss\fcharset186\fprq2 Franklin Gothic Heavy Baltic;}{\f829\fswiss\fcharset238\fprq2 Franklin Gothic Demi Cond CE;}{\f830\fswiss\fcharset204\fprq2 Franklin Gothic Demi Cond Cyr;}{\f832\fswiss\fcharset161\fprq2 Franklin Gothic Demi Cond Greek;} {\f833\fswiss\fcharset162\fprq2 Franklin Gothic Demi Cond Tur;}{\f834\fswiss\fcharset186\fprq2 Franklin Gothic Demi Cond Baltic;}{\f841\fswiss\fcharset238\fprq2 Century Gothic CE;}{\f842\fswiss\fcharset204\fprq2 Century Gothic Cyr;} {\f844\fswiss\fcharset161\fprq2 Century Gothic Greek;}{\f845\fswiss\fcharset162\fprq2 Century Gothic Tur;}{\f846\fswiss\fcharset186\fprq2 Century Gothic Baltic;}{\f937\fswiss\fcharset238\fprq2 MS Reference Sans Serif CE;} {\f938\fswiss\fcharset204\fprq2 MS Reference Sans Serif Cyr;}{\f940\fswiss\fcharset161\fprq2 MS Reference Sans Serif Greek;}{\f941\fswiss\fcharset162\fprq2 MS Reference Sans Serif Tur;}{\f942\fswiss\fcharset186\fprq2 MS Reference Sans Serif Baltic;} {\f961\froman\fcharset238\fprq2 Bookman Old Style CE;}{\f962\froman\fcharset204\fprq2 Bookman Old Style Cyr;}{\f964\froman\fcharset161\fprq2 Bookman Old Style Greek;}{\f965\froman\fcharset162\fprq2 Bookman Old Style Tur;} {\f966\froman\fcharset186\fprq2 Bookman Old Style Baltic;}{\f973\froman\fcharset238\fprq2 Garamond CE;}{\f974\froman\fcharset204\fprq2 Garamond Cyr;}{\f976\froman\fcharset161\fprq2 Garamond Greek;}{\f977\froman\fcharset162\fprq2 Garamond Tur;} {\f978\froman\fcharset186\fprq2 Garamond Baltic;}{\f1013\fnil\fcharset162\fprq2 Superchess Tur;}{\f1029\fmodern\fcharset0\fprq1 MS Mincho;}{\f1027\fmodern\fcharset238\fprq1 MS Mincho CE;}{\f1028\fmodern\fcharset204\fprq1 MS Mincho Cyr;} {\f1030\fmodern\fcharset161\fprq1 MS Mincho Greek;}{\f1031\fmodern\fcharset162\fprq1 MS Mincho Tur;}{\f1032\fmodern\fcharset186\fprq1 MS Mincho Baltic;}{\f1035\fmodern\fcharset0\fprq1 @MS Mincho;}{\f1033\fmodern\fcharset238\fprq1 @MS Mincho CE;} {\f1034\fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f1036\fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f1037\fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f1038\fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\f1041\froman\fcharset0\fprq2 MS PMincho;} {\f1039\froman\fcharset238\fprq2 MS PMincho CE;}{\f1040\froman\fcharset204\fprq2 MS PMincho Cyr;}{\f1042\froman\fcharset161\fprq2 MS PMincho Greek;}{\f1043\froman\fcharset162\fprq2 MS PMincho Tur;}{\f1044\froman\fcharset186\fprq2 MS PMincho Baltic;} {\f1047\froman\fcharset0\fprq2 @MS PMincho;}{\f1045\froman\fcharset238\fprq2 @MS PMincho CE;}{\f1046\froman\fcharset204\fprq2 @MS PMincho Cyr;}{\f1048\froman\fcharset161\fprq2 @MS PMincho Greek;}{\f1049\froman\fcharset162\fprq2 @MS PMincho Tur;} {\f1050\froman\fcharset186\fprq2 @MS PMincho Baltic;}{\f1053\fmodern\fcharset0\fprq1 MS Gothic;}{\f1051\fmodern\fcharset238\fprq1 MS Gothic CE;}{\f1052\fmodern\fcharset204\fprq1 MS Gothic Cyr;}{\f1054\fmodern\fcharset161\fprq1 MS Gothic Greek;} {\f1055\fmodern\fcharset162\fprq1 MS Gothic Tur;}{\f1056\fmodern\fcharset186\fprq1 MS Gothic Baltic;}{\f1059\fmodern\fcharset0\fprq1 @MS Gothic;}{\f1057\fmodern\fcharset238\fprq1 @MS Gothic CE;}{\f1058\fmodern\fcharset204\fprq1 @MS Gothic Cyr;} {\f1060\fmodern\fcharset161\fprq1 @MS Gothic Greek;}{\f1061\fmodern\fcharset162\fprq1 @MS Gothic Tur;}{\f1062\fmodern\fcharset186\fprq1 @MS Gothic Baltic;}{\f1065\fswiss\fcharset0\fprq2 MS PGothic;}{\f1063\fswiss\fcharset238\fprq2 MS PGothic CE;} {\f1064\fswiss\fcharset204\fprq2 MS PGothic Cyr;}{\f1066\fswiss\fcharset161\fprq2 MS PGothic Greek;}{\f1067\fswiss\fcharset162\fprq2 MS PGothic Tur;}{\f1068\fswiss\fcharset186\fprq2 MS PGothic Baltic;}{\f1071\fswiss\fcharset0\fprq2 @MS PGothic;} {\f1069\fswiss\fcharset238\fprq2 @MS PGothic CE;}{\f1070\fswiss\fcharset204\fprq2 @MS PGothic Cyr;}{\f1072\fswiss\fcharset161\fprq2 @MS PGothic Greek;}{\f1073\fswiss\fcharset162\fprq2 @MS PGothic Tur;}{\f1074\fswiss\fcharset186\fprq2 @MS PGothic Baltic;} {\f1077\fswiss\fcharset0\fprq2 MS UI Gothic;}{\f1075\fswiss\fcharset238\fprq2 MS UI Gothic CE;}{\f1076\fswiss\fcharset204\fprq2 MS UI Gothic Cyr;}{\f1078\fswiss\fcharset161\fprq2 MS UI Gothic Greek;}{\f1079\fswiss\fcharset162\fprq2 MS UI Gothic Tur;} {\f1080\fswiss\fcharset186\fprq2 MS UI Gothic Baltic;}{\f1083\fswiss\fcharset0\fprq2 @MS UI Gothic;}{\f1081\fswiss\fcharset238\fprq2 @MS UI Gothic CE;}{\f1082\fswiss\fcharset204\fprq2 @MS UI Gothic Cyr;} {\f1084\fswiss\fcharset161\fprq2 @MS UI Gothic Greek;}{\f1085\fswiss\fcharset162\fprq2 @MS UI Gothic Tur;}{\f1086\fswiss\fcharset186\fprq2 @MS UI Gothic Baltic;}{\f1089\fswiss\fcharset0\fprq2 Gulim;}{\f1087\fswiss\fcharset238\fprq2 Gulim CE;} {\f1088\fswiss\fcharset204\fprq2 Gulim Cyr;}{\f1090\fswiss\fcharset161\fprq2 Gulim Greek;}{\f1091\fswiss\fcharset162\fprq2 Gulim Tur;}{\f1092\fswiss\fcharset186\fprq2 Gulim Baltic;}{\f1095\fswiss\fcharset0\fprq2 @Gulim;} {\f1093\fswiss\fcharset238\fprq2 @Gulim CE;}{\f1094\fswiss\fcharset204\fprq2 @Gulim Cyr;}{\f1096\fswiss\fcharset161\fprq2 @Gulim Greek;}{\f1097\fswiss\fcharset162\fprq2 @Gulim Tur;}{\f1098\fswiss\fcharset186\fprq2 @Gulim Baltic;} {\f1101\fmodern\fcharset0\fprq1 GulimChe;}{\f1099\fmodern\fcharset238\fprq1 GulimChe CE;}{\f1100\fmodern\fcharset204\fprq1 GulimChe Cyr;}{\f1102\fmodern\fcharset161\fprq1 GulimChe Greek;}{\f1103\fmodern\fcharset162\fprq1 GulimChe Tur;} {\f1104\fmodern\fcharset186\fprq1 GulimChe Baltic;}{\f1107\fmodern\fcharset0\fprq1 @GulimChe;}{\f1105\fmodern\fcharset238\fprq1 @GulimChe CE;}{\f1106\fmodern\fcharset204\fprq1 @GulimChe Cyr;}{\f1108\fmodern\fcharset161\fprq1 @GulimChe Greek;} {\f1109\fmodern\fcharset162\fprq1 @GulimChe Tur;}{\f1110\fmodern\fcharset186\fprq1 @GulimChe Baltic;}{\f1113\fswiss\fcharset0\fprq2 Dotum;}{\f1111\fswiss\fcharset238\fprq2 Dotum CE;}{\f1112\fswiss\fcharset204\fprq2 Dotum Cyr;} {\f1114\fswiss\fcharset161\fprq2 Dotum Greek;}{\f1115\fswiss\fcharset162\fprq2 Dotum Tur;}{\f1116\fswiss\fcharset186\fprq2 Dotum Baltic;}{\f1119\fswiss\fcharset0\fprq2 @Dotum;}{\f1117\fswiss\fcharset238\fprq2 @Dotum CE;} {\f1118\fswiss\fcharset204\fprq2 @Dotum Cyr;}{\f1120\fswiss\fcharset161\fprq2 @Dotum Greek;}{\f1121\fswiss\fcharset162\fprq2 @Dotum Tur;}{\f1122\fswiss\fcharset186\fprq2 @Dotum Baltic;}{\f1125\fmodern\fcharset0\fprq1 DotumChe;} {\f1123\fmodern\fcharset238\fprq1 DotumChe CE;}{\f1124\fmodern\fcharset204\fprq1 DotumChe Cyr;}{\f1126\fmodern\fcharset161\fprq1 DotumChe Greek;}{\f1127\fmodern\fcharset162\fprq1 DotumChe Tur;}{\f1128\fmodern\fcharset186\fprq1 DotumChe Baltic;} {\f1131\fmodern\fcharset0\fprq1 @DotumChe;}{\f1129\fmodern\fcharset238\fprq1 @DotumChe CE;}{\f1130\fmodern\fcharset204\fprq1 @DotumChe Cyr;}{\f1132\fmodern\fcharset161\fprq1 @DotumChe Greek;}{\f1133\fmodern\fcharset162\fprq1 @DotumChe Tur;} {\f1134\fmodern\fcharset186\fprq1 @DotumChe Baltic;}{\f1137\froman\fcharset0\fprq2 Batang;}{\f1135\froman\fcharset238\fprq2 Batang CE;}{\f1136\froman\fcharset204\fprq2 Batang Cyr;}{\f1138\froman\fcharset161\fprq2 Batang Greek;} {\f1139\froman\fcharset162\fprq2 Batang Tur;}{\f1140\froman\fcharset186\fprq2 Batang Baltic;}{\f1143\froman\fcharset0\fprq2 @Batang;}{\f1141\froman\fcharset238\fprq2 @Batang CE;}{\f1142\froman\fcharset204\fprq2 @Batang Cyr;} {\f1144\froman\fcharset161\fprq2 @Batang Greek;}{\f1145\froman\fcharset162\fprq2 @Batang Tur;}{\f1146\froman\fcharset186\fprq2 @Batang Baltic;}{\f1149\fmodern\fcharset0\fprq1 BatangChe;}{\f1147\fmodern\fcharset238\fprq1 BatangChe CE;} {\f1148\fmodern\fcharset204\fprq1 BatangChe Cyr;}{\f1150\fmodern\fcharset161\fprq1 BatangChe Greek;}{\f1151\fmodern\fcharset162\fprq1 BatangChe Tur;}{\f1152\fmodern\fcharset186\fprq1 BatangChe Baltic;}{\f1155\fmodern\fcharset0\fprq1 @BatangChe;} {\f1153\fmodern\fcharset238\fprq1 @BatangChe CE;}{\f1154\fmodern\fcharset204\fprq1 @BatangChe Cyr;}{\f1156\fmodern\fcharset161\fprq1 @BatangChe Greek;}{\f1157\fmodern\fcharset162\fprq1 @BatangChe Tur;}{\f1158\fmodern\fcharset186\fprq1 @BatangChe Baltic;} {\f1161\froman\fcharset0\fprq2 Gungsuh;}{\f1159\froman\fcharset238\fprq2 Gungsuh CE;}{\f1160\froman\fcharset204\fprq2 Gungsuh Cyr;}{\f1162\froman\fcharset161\fprq2 Gungsuh Greek;}{\f1163\froman\fcharset162\fprq2 Gungsuh Tur;} {\f1164\froman\fcharset186\fprq2 Gungsuh Baltic;}{\f1167\froman\fcharset0\fprq2 @Gungsuh;}{\f1165\froman\fcharset238\fprq2 @Gungsuh CE;}{\f1166\froman\fcharset204\fprq2 @Gungsuh Cyr;}{\f1168\froman\fcharset161\fprq2 @Gungsuh Greek;} {\f1169\froman\fcharset162\fprq2 @Gungsuh Tur;}{\f1170\froman\fcharset186\fprq2 @Gungsuh Baltic;}{\f1173\fmodern\fcharset0\fprq1 GungsuhChe;}{\f1171\fmodern\fcharset238\fprq1 GungsuhChe CE;}{\f1172\fmodern\fcharset204\fprq1 GungsuhChe Cyr;} {\f1174\fmodern\fcharset161\fprq1 GungsuhChe Greek;}{\f1175\fmodern\fcharset162\fprq1 GungsuhChe Tur;}{\f1176\fmodern\fcharset186\fprq1 GungsuhChe Baltic;}{\f1179\fmodern\fcharset0\fprq1 @GungsuhChe;}{\f1177\fmodern\fcharset238\fprq1 @GungsuhChe CE;} {\f1178\fmodern\fcharset204\fprq1 @GungsuhChe Cyr;}{\f1180\fmodern\fcharset161\fprq1 @GungsuhChe Greek;}{\f1181\fmodern\fcharset162\fprq1 @GungsuhChe Tur;}{\f1182\fmodern\fcharset186\fprq1 @GungsuhChe Baltic;}{\f1185\fnil\fcharset0\fprq2 @SimSun;} {\f1191\fmodern\fcharset0\fprq1 NSimSun;}{\f1197\fmodern\fcharset0\fprq1 @NSimSun;}{\f1215\fmodern\fcharset0\fprq1 MingLiU;}{\f1221\fmodern\fcharset0\fprq1 @MingLiU;}{\f1227\froman\fcharset0\fprq2 PMingLiU;}{\f1233\froman\fcharset0\fprq2 @PMingLiU;} {\f1275\fswiss\fcharset0\fprq2 Arial Unicode MS;}{\f1293\fswiss\fcharset0\fprq2 @Arial Unicode MS;}{\f1981\fswiss\fcharset238\fprq2 Shogi CE;}{\f1982\fswiss\fcharset204\fprq2 Shogi Cyr;}{\f1984\fswiss\fcharset161\fprq2 Shogi Greek;} {\f1985\fswiss\fcharset162\fprq2 Shogi Tur;}{\f1986\fswiss\fcharset186\fprq2 Shogi Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; \red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid \snext0 Normal;}{\s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\adjustright \b\f5\cgrid \sbasedon0 \snext26 heading 1;}{\s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \b\f5\fs20\cgrid \sbasedon0 \snext0 heading 2;}{\s3\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext0 heading 3;}{\s4\fi-245\li360\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \f11\fs20\cgrid \sbasedon2 \snext4 heading 4;}{\s5\li120\sb80\sl-240\slmult0\keepn\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \f5\fs18\up6\lang1033 \sbasedon10 footnote reference;}{ \s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext0 footnote text;}{\s17\li360\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext0 Normal Indent;}{\s18\fi-240\li600\sb60\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid \snext18 Jli;}{\s19\li120\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid \snext19 Ex;}{\s20\li120\sb160\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Sa1;}{\s21\fi-240\li360\sl-240\slmult0\nowidctlpar\tx360\adjustright \f5\fs20\cgrid \snext22 Lb1;}{\s22\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\tx360\adjustright \f5\fs20\cgrid \snext22 Lb2;}{\s23\li360\sb60\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid \snext22 Lp1;}{\s24\fi-1800\li1920\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1920\adjustright \b\f5\fs20\cgrid \snext25 Th;}{ \s25\fi-1800\li1920\sb60\sl-240\slmult0\nowidctlpar\tx1920\adjustright \f5\fs20\cgrid \snext25 Tp;}{\s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext0 Normal 2;}{\s27\li120\sb120\sa120\nowidctlpar\adjustright \f5\fs20\cgrid \snext0 bitmap;}{\s28\li120\sb120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Sa2;}{\s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \snext29 Jl;}{\s30\li120\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \snext30 *body;}{\s31\li120\sa60\nowidctlpar\adjustright \b\f151\fs20\cgrid \snext31 *heading;}{\s32\li120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext32 para;}{\s33\fi-280\li400\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext33 jump;}{\s34\fi-280\li400\sa60\nowidctlpar\tx400\adjustright \f151\fs20\cgrid \sbasedon30 \snext34 list bullet;}{\s35\fi-280\li600\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext35 jump indent;}{ \s36\li120\sa60\sl-40\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \f151\fs20\cgrid \sbasedon30 \snext36 table rule;}{\s37\fi-280\li400\sa60\nowidctlpar\tqr\tx280\tx400\adjustright \f151\fs20\cgrid \sbasedon30 \snext37 list number;}{\s38\li120\sb100\sa60\nowidctlpar\adjustright \b\f151\fs20\cgrid \sbasedon31 \snext33 see also;}{\s39\li400\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext39 para indent;}{\s40\fi-1800\li1920\nowidctlpar \tx1920\adjustright \b\f151\fs20\cgrid \sbasedon31 \snext36 table head;}{\s41\fi-1800\li1920\sa60\nowidctlpar\tx1920\adjustright \f151\fs20\cgrid \sbasedon30 \snext41 table text;}{\s42\li120\sb120\sa60\nowidctlpar\adjustright \f151\fs20\cgrid \sbasedon30 \snext35 see also 2;}{\s43\li120\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid \sbasedon30 \snext43 code;}{\s44\sl-120\slmult0\nowidctlpar\adjustright \f152\fs20\cgrid \snext32 *spacing;}{\s45\sl-120\slmult0 \nowidctlpar\adjustright \f152\fs20\cgrid \sbasedon44 \snext45 s6;}{\s46\qj\li360\nowidctlpar\adjustright \f5\cgrid \sbasedon0 \snext46 Help Text;}{\s47\li115\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \f11\fs20\cgrid \sbasedon24 \snext25 Th2;}{\s48\li115\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \adjustright \b\f11\fs16\cgrid \sbasedon24 \snext25 Th3;}{\s49\li115\sb200\sl-240\slmult0 \nowidctlpar\adjustright \f11\fs20\cgrid \sbasedon0 \snext0 Normal 3;}{\s50\fi-1800\li1915\sb120\sa40\sl-240\slmult0\nowidctlpar\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1915\adjustright \b\f11\fs20\cgrid \sbasedon0 \snext51 Thh;}{ \s51\fi-1800\li1915\sb60\sl-240\slmult0\nowidctlpar\tx1915\adjustright \f11\fs20\cgrid \sbasedon0 \snext51 Tph;}{\s52\li288\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon0 \snext52 unixman1;}{ \s53\li1440\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon0 \snext53 unixman2;}{\s54\li115\ri-432\sb80\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon52 \snext54 unixman0;}{ \s55\li288\ri-432\sb80\sa240\sl-240\slmult0\nowidctlpar\tx288\tx864\tx1440\adjustright \f5\cgrid \sbasedon52 \snext55 unixman1a;}{\s56\li115\sa60\sl-240\slmult0\nowidctlpar\adjustright \b\f5\fs20\cgrid \sbasedon2 \snext56 heading 2a;}{ \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext57 endnote text;}{\*\cs58 \additive \super \sbasedon10 endnote reference;}{\*\cs59 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\*\cs60 \additive \ul\cf12 \sbasedon10 FollowedHyperlink;}{\s61\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \cbpat9 \f15\fs20\cgrid \sbasedon0 \snext61 Document Map;}{\s62\li480\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid \sbasedon0 \snext62 Body Text 2;}{ \s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid \sbasedon0 \snext63 Body Text Indent 2;}{\s64\li120\sb80\sl-240\slmult0\nowidctlpar\tqc\tx4320\tqr\tx8640\adjustright \f5\fs20\cgrid \sbasedon0 \snext64 header;}{ \s65\li120\sb80\sl-240\slmult0\nowidctlpar\tqc\tx4320\tqr\tx8640\adjustright \f5\fs20\cgrid \sbasedon0 \snext65 footer;}{\s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid \sbasedon0 \snext66 Body Text Indent 3;}}{\*\listtable {\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid74976790}{\list\listtemplateid67698703 \listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid349260549}{\list\listtemplateid67698689\listsimple{\listlevel \levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid470094698}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0 \leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid640160996}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0 \levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid768165129}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1 \levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid781152802}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0 {\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid903878531}{\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext \'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1002394966}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1021513731}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers \'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1099714113}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360 \jclisttab\tx360 }{\listname ;}\listid1240552867}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1332292840}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1358388700} {\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid1405952460} {\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2025940873} {\list\listtemplateid67698689\listsimple{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360 }{\listname ;}\listid2044863907}} {\*\listoverridetable{\listoverride\listid2025940873\listoverridecount0\ls1}{\listoverride\listid1002394966\listoverridecount0\ls2}{\listoverride\listid470094698\listoverridecount0\ls3}{\listoverride\listid1099714113\listoverridecount0\ls4} {\listoverride\listid1358388700\listoverridecount0\ls5}{\listoverride\listid2044863907\listoverridecount0\ls6}{\listoverride\listid640160996\listoverridecount0\ls7}{\listoverride\listid768165129\listoverridecount0\ls8}{\listoverride\listid903878531 \listoverridecount0\ls9}{\listoverride\listid781152802\listoverridecount0\ls10}{\listoverride\listid1240552867\listoverridecount0\ls11}{\listoverride\listid640160996\listoverridecount0\ls12}{\listoverride\listid349260549\listoverridecount0\ls13} {\listoverride\listid1021513731\listoverridecount0\ls14}{\listoverride\listid1405952460\listoverridecount0\ls15}{\listoverride\listid1332292840\listoverridecount0\ls16}}{\*\revtbl {Unknown;}{Tim Mann;}}{\info{\title + $ # KWinBoard: Chessboard for Windows}{\author TRIO} {\operator hgm}{\creatim\yr2009\mo9\dy9\hr14\min34}{\revtim\yr2011\mo6\dy9\hr9\min6}{\printim\yr1997\mo4\dy22\hr23\min5}{\version34}{\edmins860}{\nofpages90}{\nofwords22792}{\nofchars129918}{\*\company DEC SRC}{\nofcharsws159548}{\vern73}} \margl1417\margr1417\margt1417\margb1417 \widowctrl\endnotes\aendnotes\hyphhotz425\ftnnrlc\aftnnar\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\viewkind4\viewscale100 \fet1{\*\aftnsep \pard\plain \li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\chftnsep \par }}\sectd \linex0\headery709\footery709\colsx709\sectdefaultcl {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4 \pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (} {\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid { \cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Contents}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Contents}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Contents}}}{\i\f1\fs32 WinBoard}{\f1\fs32 : Chessboard for Windows \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \par }\pard\plain \s2\li119\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1\cf11 An updated description with the release of version 4.2010xxxx. \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\f1\cf11 \tab \tab \tab \ldblquote For the ultimate WinBoard Experience\rdblquote \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 New features since WinBoard 4.2.7 that are implemented in Allessandro Scotti\rquote s Winboard_x are highlighted in red. }{\f1\cf11 New features in the WinBoard 4.3.xx series by H.G. Muller are highlighted in green}{\f1\cf2 , that in the unified 4.4 series in blue. }{\f1\cf5 Additions for the 4.5 series are in purple}{\f1\cf11 .}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Description}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Description}}}{\f1 Description \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\i\f1 WinBoard}{\f1 is a graphical user interface for chess. It displays a chessboa rd on the screen, accepts moves made with the mouse, and loads and saves game files in standard chess notation. WinBoard serves as a front-end for many different services, including: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright \f5\fs20\cgrid {\b\i\f1 Chess engines}{\f1 that run on your PC. You can play a game against an engine, set up arbitrary positions, force variations, or watch a game between two engines. }{\i\f1\cf11 Fairy-Max}{\f1 is supplied with WinBoard }{\f1\cf11 4.3.14}{\f1 , and over 100 other free chess engines are available separately. Of these, Crafty is the most popular. See }{\f1\uldb Installing Chess Engines}{\v\f1 InstallingChessEngines}{\f1 for instructions on installing additional chess engines. \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright {\b\i\f1 Chess servers}{\b\f1 }{\f1 on the Internet. You can play against other Internet Chess Server (ICS) users, observe games they are playing, review games in the ICS libraries, chat, }{\f1\cf2 analyze observed games with a chess program}{\f1 , and more. WinBoard can also be used to run an automated computer player on the ICS, but this feature is for advanced users only and is subject to some caveats; see the separate file zippy.README for information. \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls3\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls3\adjustright {\b\i\f1 The Web}{\f1 and your own saved games. You can use WinBoard as a helper application to view files in your Web browser or the Explorer. You can use it to keep track of email postal games, browse games off the net, or review games you have saved. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Getting Started}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ GettingStarted}}}{\f1 Getting Started \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBo ard starts up in one of three major modes: chess engine mode, ICS client mode, or game viewer mode. You cannot change between ICS and other modes while WinBoard is running, but you can access all the game viewer features directly from the other two modes. You can switch from game viewer mode to chess engine mode by loading an engine through the Load Engine menu dialog, while WinBoard might make the reverse switch spontaneously if a specified engine is not valid. Also, you can start WinBoard several times t o get multiple chessboard windows running in any combination of modes. \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { You will usually run WinBoard by choosing an item from the Windows Start menu that runs it in the mode you want. If you just double-click on WinBoard.exe, you get a startup dialog asking which mode you want. If you choose chess engine mode, you can then select from the installed engines; if you choose ICS client mode, you can then select from a list of known chess servers. More advanced users can }{\uldb customize}{\v icsNames}{ these lists or type in WinBoard }{\uldb command line options}{\v Options}{ directly. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 After starting WinBoard, you can make }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super K}{\f1 move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 move}}}{\f1 moves in several different ways. To move by dragging, press the left mouse button while the cursor is on one of your pieces, move the cursor to another square, and releas e the button. You can also move by clicking the left mouse button once (press and release) over one of your pieces, moving the cursor to another square, and clicking again. You drop new pieces on the board (when applicable) }{\f1\cf2 by similarly dragging them from the holdings displayed next to the board}{\f1\cf5 . The old way of selecting them from a context menu can still be enabled by an option. In that case,}{\f1 press the right mouse button over a square to bring up the menu; no menu will come up in modes where dropping a new piece is not permitted. }{\f1\cf5 Normally pressing the right mouse button will enable you to see the position at the end of the PV given by an active engine as thinking output. Moving the mouse with the right button kept down will allow you to step through this PV.}{\f1\cf2 }{\f1 You can also make moves by typing them in standard algebraic chess notation. Either a dialog box will pop up for you to type into, or in ICS mode, your typing will be redirected into the ICS interaction window. }{\f1\cf2 In the dialog box you can also type a move number, to call up the position of the current game after that move in the display, or (in Edit Position mode) type a FEN. \par }{\f1 When WinBoard}{\i\f1 }{\f1 is iconized, its }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icon}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icon}}}{\f1 icon is a white knight if it is White's turn to move, a black knight if it is Black's turn. \par }{\f1\cf5 Next to the main window, WinBoard does use many auxiliary windows for dedicated tasks. We mention the Engine-Output window (formerly analysis window) for a better display of the thinking output of engines (which you can then right-click to play out the selected P V in the board window), the Game-History window (where the game is displayed in SAN, and where you can double-click a move to call up the corresponding position in the board window), the Evaluation Graph window (where you see a graph of engine scores vs. m o ve number, and can call up the corresponding position in the board window by clicking a point on the graph), the Comment popup (where you can right-click variation comments to play them out on the main board, or add and edit comments), the Game-List windo w (where you see an overview of all games in a game file you loaded, and can select a game for loading by clicking on it, and limit the list to games you are interested in by filtering). These auxiliary windows can be opened or closed as the need arises. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Additional Information \par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb Menus}{\v\f1\uldb Menus}{\f1\uldb \par Shortcut Buttons}{\v\f1\uldb Buttons}{\f1\uldb \par Command Line Options}{\v\f1 Options}{\f1 \par }{\f1\uldb Initialization Files}{\v\f1\uldb Files}{\f1\uldb \par Installing Chess Engines}{\v\f1\uldb InstallingChessEngines}{\f1\uldb \par Firewalls}{\v\f1 Firewalls}{\f1 \par }{\f1\uldb Limitations}{\v\f1 Limitations}{\f1\uldb \par Authors}{\v\f1 Authors}{\f1 \par }{\f1\uldb Copyright}{\v\f1 Copyright}{\f1 \par }{\f1\uldb Frequently Asked Questions}{\v\f1 !ExecFile(FAQ.html)}{\f1 \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Menus}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Menus}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Menus}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 MENUS \par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb File Menu}{\v\f1 FileMenu}{\f1 \par }{\f1\uldb Edit Menu}{\v\f1 EditMenu}{\f1 \par }{\f1\uldb View Menu}{\v\f1 ViewMenu}{\f1 \par }{\f1\uldb Mode Menu}{\v\f1 ModeMenu}{\f1 \par }{\f1\uldb Action Menu}{\v\f1 ActionMenu}{\f1 \par }{\f1\uldb Engine Menu}{\v\f1 EngineMenu}{\f1 \par }{\f1\uldb Options Menu}{\v\f1 OptionsMenu}{\f1 \par }{\f1\uldb Help Menu}{\v\f1 HelpMenu}{\f1 \par }{\f1\uldb ICS Interaction Context Menu}{\v\f1 ICSInteractionContextMenu}{\f1 \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 File Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 FileMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 File Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs18\up6 }{\f1\fs20 File Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 New Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 NewGame}}}{\f1\cf6 New Game (former }{\f1 Reset}{\f1\cf6 ) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Resets WinBoard and the chess engine (if any) to the beginning of a new chess game. In Internet Chess Server mode, clears the current state of WinBoard, then resynchronizes with ICS by sending a }{\b\f1 refresh }{\f1 command. If you want to stop playing, observing, or examining a game on ICS, use an appropriate command from the }{\f1\uldb Action}{\v\f1 ActionMenu}{\f1 menu, not }{\f1\cf6 New Game}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 New Shuffle Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 NewShuffleGame}}}{\f1\cf11 New Shuffle Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Brings you to a dialog box where you can enter the number of an opening setup for shuffle variants like FR C, or ask for a random number. After pressing OK, a new game is set up, using this position. The chosen position will continue to be used on every subsequent \ldblquote New Game\rdblquote , }{\f1\cf11 even if you are playing a variant that normally is not shuffled, until you select a new variant through the \ldblquote New Variant\'85\rdblquote menu.}{\f1\cf6 If you enter \ldblquote -1\rdblquote for the position number, new random number is drawn before every game. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 The type of shuffling that is done in reaction to a given position number obeys restrictions that depend on the selected va riant. In variants that allow castling, Kings remain on the central files, Rooks in the corners. In games with FRC-style castlings, the King starts between the Rooks, but apart from that they could be anywhere. In games without castling, there are no rest rictions on King and Rook placement. Pairs of color-bound pieces (such as Bishops) will be placed on oppositely colored squares. In ICS mode this feature has no effect, as the ICS determines the starting position. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 New Variant}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 NewVariant}}}{\f1\cf11 New Variant \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Select a new variant. There are controls to enter a board width, board height and holdings size, but normally you leave them at \lquote -1\rquote , which means the default value for the selected variant will be used (e.g. 8x8 for normal Chess, 9x10 for xiangqi, 10x8 for capablanca, holdings for 5 pieces in crazyhouse). You can set a deviating value for each of the three parameters (e.g. to play a crazyhouse version of xiangqi or capablanca you would set the holdings to 6 or 7). If the board width deviates from the default, the game will start with an empty board. \par The variant will remain in force until you select a new one; i.e. subsequent \ldblquote New Game\rdblquote commands will start a new game of the same variant. In ICS mode this command has no effect, as the ICS determines which variant will be played. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Load Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 LoadGame}}}{\f1 Load Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Plays a game from a record file. A popup dialog prompts you for the filename. If the file contains more than one game, a second popup dialog displays a list of games (with information drawn from their PGN tags, if any), and you can select the one you want. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The game file parser will accept PGN (portable game notation), or in fact almost any file that contains moves in algebraic notation. Notation of the form }{\i\f1 P@f7}{ \f1 is accepted for piece-drops in bughouse games; this is a nonstandard extension to PGN. If the file includes a PGN position (FEN tag), or a WinBoard position diagram bracketed by "[--" and "--]" before the first move, the game starts from that position. Text enclosed in parentheses, square brackets, or curly braces is assumed to be commentary a nd is displayed in a pop-up window. Any other text in the file is ignored. PGN variations (enclosed in parentheses) }{\f1\cf5 appear in the comment popup amongst genuine comments; to walk the variation tree, you have to right-click them in this window. This will cause WinBoard to load them as the current line. You can revert to the previous line with the }{\f1\uldb\cf5 Revert}{ \v\f1\cf5 variant }{\f1\cf5 command. (Beware! Currently WinBoard\rquote s PGN parser is limited to 3 levels of nesting in variations.)}{\f1 The nonstandard PGN tag }{\f2 [Variant "varname"]}{\f1 functions similarly to the }{\f1\uldb variant}{\v\f1 variant }{\f1 command-line option, allowing games in certain chess variants to be loaded. }{\f1\cf5 Note that it has to appear before any FEN tag!}{\f1 There is also a heuristic to recognize chess variants from the }{\f2 Event}{\f1 tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Load Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 LoadPosition}}}{\f1 Load Position \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets up a position from a position file. A popup dialog prompts you for the filename. Position files must be in FEN (Forsythe-Edwards notation), or in the format that the } {\f1\uldb Save Position}{\f1 command writes when }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 is turned on. }{\f1\cf11 Note that many variants require an extension of the original FEN standard. WinBoard tries to be as universal as possible in understanding FENs when different standards a re raound, but has to make a choice when writing them. In FRC is uses Shredder-FEN (Haha castling notation) , but it understands KQkq as the outermost Rook, so it also reads X-FEN. In Crazyhouse / Bughouse it appends the holdings immediately behind the bo a rd info between brackets [], but on input it also understands bFEN (which puts it behind a slash / as if it were an extra board rank). It uses a tilde ~ behind a piece to indicate it is really a promoted Pawn (like bFEN). In Shogi the holdings are printed like in Crazyhouse, but promoted pieces are represented by a plus sign + before the letter of the original piece. Letters used for the pieces can be set with the /pieceToCharTable command-line option.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Save Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SaveGame}}}{\f1 Save Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Appends a record of the current game to a file. A popup dialog prompts you for the filename. If the game did not begin with the standard starting position, the game file includes the starting position used. Game files are saved in the PGN (portable game notation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 option is True, in which case they are saved in an older format that is specific to WinBoard}{\i\f1 .}{\f1 Both formats are human-readable, and both can be read back by the Load Game command. Notation of the form }{ \i\f1 P@f7}{\f1 is generated for piece-drops in bughouse games; this is a nonstandard extension to PGN. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Save Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SavePosition}}}{\f1 Save Position \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Appends a diagram of the current position to a file. A popup dialog prompts you for the filename. Positions are saved in FEN (Forsythe-Edwards notation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 option is True, in which case they are saved in an older, human-readable format that is specific to WinBoard}{\i\f1 .}{\f1 Both formats can be read back by the Load Position command; however, currently Load Position can load only the first position in a file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Save Diagram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 Save Diagram}}}{\f1\cf11 Save Diagram \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Writes the current board display as a bitmap file. With this command you can use WinBoard as a diagram generator. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Exit}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Exit}}}{\f1 Exit \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Exits from WinBoard. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\f1\super K} {\f1 Edit Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Edit Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Edit Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Copy Ga me To Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 CopyGameToClipboard}}}{\f1 Copy Game To Clipboard \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Copies the record of the current game to the Windows clipboard in PGN (portable game notation) format. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Copy Position Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 CopyPositionToClipboard}}}{\f1 Copy Position To Clipboard \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Places a diagram of the current position (in Forsythe-Edwards notation) into the Windows clipboard. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Paste Game From Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PasteGameFromClipboard}}}{\f1 Paste Game From Clipboard \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Plays a game from the Windows clipboard.}{\f1 See }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 for a discussion of game file format and parser behavior.}{ \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Paste Position Clipboard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PastePositionFromClipboard}}}{\f1 Paste Position From Clipboard \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets up a position from the Windows clipboard. Position must be in FEN (Forsythe-Edwards notation). Puts WinBoard into }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1 mode if it was not there already. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditGame}}}{\f1 Edit Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Allows you to make moves for both Black and White, and to change moves after backing up with the }{\f1\uldb Backward}{\v\f1 Backward}{\f1 command. The clocks do not run, but you can adjust their reading by clicking on them. A left-click subtracts one minute, a right-click adds one minute. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In chess engine mode, the chess engine continues to check moves for legality but does not participate in the game. You can bring the chess engine back into the game by selecting }{\f1\uldb Machine White}{\v\f1 MachineWhite}{\f1 , }{\f1\uldb Machine Black} {\v\f1 MachineBlack}{\f1 , or }{\f1\uldb Two Machines}{\v\f1 TwoMachines}{\f1 . \par In ICS mode, the moves are not sent to the ICS: Edit Game takes WinBoard out of ICS Client mode and lets you edit games locally. If you want to edit a game on ICS in a way that other ICS users can see, use the ICS }{\b\f1 examine}{\f1 command or start an ICS match against yourself. \par }{\f1\cf5 If you edit an existing game locally by playing new moves while not at the end, you will create a new variation. (New moves at the end will simply be appended to the existing game.) WinBoard will then shelve the original variation (\lquote main line\rquote ) from beyond the point where you played a new move. You can later revert to that new line with the }{\f1\uldb\cf5 Revert}{\f1\cf5 or }{\f1\uldb\cf5 Annotate}{\f1\cf5 commands. This will discard the variation you just entered, and restores the moves of the ori ginal main line that you overwrote. This procedure can be applied recursively, so you an make (sub-)variations on variations. Rather than entering variations move by move, you can also recall them from PGN variations in the Comment window, by right-clicki ng those. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditPosition}}}{\f1 Edit Position \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you set up an arbitrary board position. Use the left mouse button to drag pieces to new squares, or to delete a piece by dragging it off the board or dragging an empty square on top of it. To drop a new piece on a square, pre ss the right mouse button over the square. This brings up a menu of pieces. Additional menu choices let you empty the square or clear the board. You can set the side to play next by clicking on the White or Black indicator at the top of the screen. }{ \f1\cf11 The pop-up menu also contains options to \lquote promote\rquote or \lquote demote\rquote the piece currently in the square. (In variants like Crazyhouse a piece has a different representation when it is a promoted Pawn rater than an original piece.) This allows you to create some of the n ot-so-common pieces (e.g. a Unicorn is a promoted King, a Commoner is a demoted King).}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Selecting Edit Position causes WinBoard}{\i\f1 }{\f1 to discard all remembered moves in the current game. \par In ICS mode, change made to the position by Edit Position are not sent to th e ICS: Edit Position takes WinBoard out of ICS Client mode and lets you edit positions locally. If you want to edit positions on ICS in a way that other ICS users can see, use the ICS }{\b\f1 examine}{\f1 command, or start an ICS match against yourself. (See also }{\f1\uldb ICS Client}{\v\f1 ICSClient}{\f1 above.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Tags} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditTags}}}{\f1 Edit Tags \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you edit the PGN (portable game notation) tags for the current game. After editing, the tags must still conform to the PGN tag syntax: \par }\pard\plain \s43\li520\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid {\f2 \line ::= \line \line ::= [ ]\line ::= \line ::= \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 See the PGN Standard for full details. Here is an example: \par }\pard\plain \s43\li520\sa60\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs20\cgrid {\f2 \line [Event "Portoroz Interzonal"]\line [Site "Portoroz, Yugoslavia"]\line [Date "1958.08.16"]\line [Round "8"]\line [White "Rob ert J. Fischer"]\line [Black "Bent Larsen"]\line [Result "1-0"] \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Any characters that do not match this syntax are silently ignored. Note that the PGN standard requires all games to have at least the seven tags shown above. Any that you omit will be filled in by WinBoard with }{\f2 "?"}{\f1 (unknown value) or }{\f2 "-" }{\f1 (inapplicable value). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Comment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditComment}}}{\f1 Edit Comment \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Adds or modifies a comment on the current position. Comments are saved by }{\f1\uldb Save Game}{\v\f1 SaveGame}{\f1 and are displayed by }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 , }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , and }{\f1\uldb Backward}{\v\f1 Backward}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Bookt }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditBook}}}{\f1 Edit Book \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pops up a window listing the moves available in the GUI book (specified in the }{\f1\uldb Common Engine Settings}{\f1 dialog) from the currently displayed position, together with their weights and (optionally in braces) learn info. You can then edit this list, e.g. changing the weights or}{\v\f1 Backward}{\f1 learn info, delete a move (by deleting the line it is on), or even add moves by adding a line. (But be very careful to use the correct format and make sure the move is legal. Invalid lines will result in undefined behavior, which can include loss of all moves listed below it!) On pressing OK the modified info will be written back to the book, replacing the original book contents for that position. Note that the listed percentages are neither used nor updated when you change weigh ts; they are just there to aid interpretation of the weights originally in the book. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Enter Username}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 EnterUsername}}}{\f1\cf11 Enter Username \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 Allows you to type the name of the human player, which will appear in the PGN header and in the window title. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Revert}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Revert}}}{\f1 Revert \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, issues the ICS command }{\b\f1 revert}{\f1 . }{\f1\cf2 In local mode, it reverts to the previous line that was loaded in WinBoard, before you started entering a variation on it in }{\f1\uldb\cf2 Edit Game}{\v\f1\cf2 EditGame}{\f1\cf2 or }{\f1\uldb\cf2 Analyze}{\v\f1\cf2 EditGame}{\f1\cf2 mode. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Annotate}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 Annotate}}}{\f1\cf5 Annotate \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Similar to the }{\f1\uldb\cf5 Revert}{\f1\cf5 command, but in l ocal mode it will add the variation you are abandoning as a comment to the move where it first deviated, in PGN variation format (i.e. in parentheses). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Truncate Game}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TruncateGame}}}{\f1 Truncate Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Discards all remembered moves of the game beyond the current position. Puts WinBoard into }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1 mode if it was not there already. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Backward}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Backward}}}{\f1 Backward \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Steps backward through a series of remembered moves. The }{\b\f1 <}{\f1 button is equivalent to selecting Backward}{\f1\cf2 , as is turning the mouse wheel towards you}{ \f1 . In most modes, Backward only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Backward in any of these situations, you will not be allowed to make a d ifferent move. Use }{\f1\uldb Retract Move}{\v\f1 RetractMove}{\f1 or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1 if you want to change past moves. \par If you are examining a game on the ICS, the behavior of Backward depends on whether WinBoard}{\i\f1 }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 mode. If Pause mode is off, Backward issues the ICS command}{\b\f1 backward}{\f1 , which backs up everyone's view of the game and allows you to make a different move. If Pause mode is on, Backward only backs up your local view. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Forward}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Forward}}}{\f1 Forward \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Steps forward through a series of remembered moves (undoing the effect of }{\f1\uldb Backward}{\v\f1\uldb Backward}{\f1 ) or through a game file. The }{\b\f1 >}{\f1 button is equivalent}{\f1\cf2 , as is turning the mouse wheel away from you}{\f1 . \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, the behavior of Forward depends on whether WinBoard}{\i\f1 }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 mode. If Pause mode is off, Forward issues the ICS command}{\b\f1 forward}{\f1 , which moves everyone's view of the game forward along the current line. If Pause mode is on, Forward only moves your local view forward, and it will not go past the position the game was in when you paused. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Back to Start}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 BacktoStart}}}{\f1 Back to Start \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Jumps backward to the first remembered position in the game. The }{\b\f1 << }{\f1 button is equivalent. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In most modes, Back to Start only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing o r observing a game on the ICS, or loading a game. If you select Back to Start in any of these situations, you will not be allowed to make a different move. Use }{\f1\uldb Retract Move}{\v\f1 RetractMove}{\f1 or }{\f1\uldb Edit Game}{\v\f1 EditGame}{\f1 if you want to change past moves; or use }{\f1\uldb New Game}{\v\f1 NewGame}{\f1 to start a new game. \par If you are examining a game on the ICS, the behavior of Back to Start depends on whether WinBoard}{\i\f1 }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 mode. If Pause mode is off, Backward issues the ICS command }{\b\f1 backward 999999}{\f1 , which backs up everyone's view of the game to the start and allows you to make different moves. If Pause mode is on, Back to Start only backs up your local view. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Forwa rd to End}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ForwardtoEnd}}}{\f1 Forward to End \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Jumps forward to the last position in the game. The }{\b\f1 >>}{\f1 button is equivalent. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are examining a game on the ICS, the behavior of Forward to End depends on whether WinBoard}{\i\f1 }{\f1 is in }{\f1\uldb Pause}{\v\f1 Pause}{\f1 mode. If Pause mode is off, Forward to End issues the ICS command }{\b\f1 forward 999999}{\f1 , which moves everyone's view of the game forward to the end of the current line. If Pause mode is on, Forward to End only moves your local view forward, and it will not go past the position the game was in when you paused. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\f1\super K} {\f1 View Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ViewMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 View Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 View Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Flip View} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 FlipView}}}{\f1 }{\f1\ul Flip View}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inverts your view of the chessboard. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are playing a game on the ICS, the board is always orie nted at the start of the game so that your pawns move from the bottom of the window towards the top. Otherwise, the starting position is determined by the }{\f1\uldb flipView}{\v\f1 flipViewOption}{\f1 command line option. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\ul\cf11 Swap Clocks}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\ul\cf11 SwapClocks}}}{\f1\cf11 }{\f1\ul\cf11 Swap Clocks}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Interchanges the position of the white and black clocks on the screen. Intended for manually-operated computer-computer games, where the monitor is standing to the side of the playing board, to make sure that the operator sees the time of his own machine on his side of the table. Note that it is possible to adjust the clocks in steps of one minute, by left- (decrement) or right-clicking (increment) it with the mouse in \ldblquote Edit Game\rdblquote mode. (Clicking the clocks in other modes is interpreted as claiming the flag.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Show Engine Output}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Show Engine Output}}}{\f1\cf6 Show Engine Output \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to showing the thinking output of the engine(s), as controlled by \ldblquote Show Thinking\rdblquote . }{\cf11 In ICS mode kibitzed info of an opponent engine can appear here as well, under control of the /autoKibitz option. }{\cf5 Right-clicking a line of thinking output will al low you to step through the PV it contains on the main board, by vertically moving the mouse, keeping the right-button pressed. \par WinBoard will display lines of thinking output of the same depth ordered by score, (highest score on top), rather than in the or der the engine produced them. Usually this amounts to the same, as a normal engine search will only find new PV (and emit it as thinking output) when it searches a move with a higher score than the previous variation. But when the engine is in multi-varia t ion mode this needs not always be true, and it is more convenient for someone analyzing games to see the moves sorted by score. The order in which the engine found them is only of interest o the engine author, and can still be deduced from the time or nod e count printed with the line.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Show Move History}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Show Move History}}}{\f1\cf6 Show Move History \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to showing the game currently in progress. Double-clicking on a move selects the corresponding position in the board display. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Show Evaluation Graph}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Show Evaluation Graph}}}{\f1\cf6 Show Evaluation Graph \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Open a new window dedicated to displaying a graph, representing the development of the engine score(s) from the current game over time. (Needs \ldblquote show Thinking \rdblquote to be enabled in order to work). Clicking a point on the graph selects the corresponding position in the board display. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Show Ga me List}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ShowGameList}}}{\f1 Show Game List \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Shows or hides the list of games generated by the last }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 command. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 Open Chat Window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 Open Chat Window}}}{\f1\cf2 Open Chat Window \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf2 Open a new window that in ICS mode can be used to display messages received from ICS tell commands from a specified ICS handle, from a chan nel (when you set the handle to the channel number), }{\cf5 shouts / c-shouts,}{\cf2 or whispers }{\cf5 / kibitzes}{\cf2 from co-observers of a game (when you set the handle to }{\cf5 \ldblquote \rdblquote shouts, \ldblquote c-shouts\rdblquote , \ldblquote whisper\rdblquote or \ldblquote kibitzes\rdblquote }{\cf2 ). You have to press the \ldblquote Change\rdblquote button in the chat window to activate the entered handle}{\cf5 , or type }{\cf2 . Typing into the bottom field of the window will send tell messages to the handle or channel, or whispers to co-observers. You can open up to }{\cf5 five}{\cf2 chat windows. Messages that are diverted to such a chat windo w will not appear in the ICS interaction window. }{\cf5 A window dedicated to shouts will also capture c-shouts (if there is no dedicated c-shout box) and \lquote It\rquote messages, recognizable on the type of brackets used around the shouter name ( [ ], ( ) or < >, respectively).}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Type In Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TypeInMove}}}{\f1 Type In Move \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pops up a dialog box, into which you can type moves in standard algebraic chess notation. (You can also get this dialog box by simply starting to type over the chessboard, except in ICS mode, where such typing is redirected into the ICS interaction window.) }{\f1\cf5 Typing a number will have the same effect as stepping forward or backward to the position after that move. In Edit Position mode you can also type a FEN to set up the position.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tags}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Tags}}}{\f1 Tags \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Shows a window with PGN tags of the current game. Currently a duplicate of Edit Tags in the edit menu. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Comments}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Comments}}}{\f1 Comments \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Shows a window with Comments to the current move. Currently a duplicate of Edit Comment in the Edit menu. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Game List Tags}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 GameListTags}}}{\f1 }{\f1\ul Game List Tags}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you select which information is displayed in the Game List window. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Board Options} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ BoardOptions}}}{\f1\ul Board \par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Board Size}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 BoardSizeCmd}}}{\f1 Board Size \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines how large the board will be and what fonts and piece bitmaps will be used. On a Titanic board the piece bitmaps are 129x129 pixels, on Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x7 2, Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25, and Tiny 21x21. The smaller boards have no system menu, but you can minimize or close them from the File menu. \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 You can also change the board size by dragging the window edges or corners with the mouse. The board will snap to the largest size that fits into the area you outline. \par }{\cf11 Note that only sizes Bulky, Middling and to a lesser extent Petite have built-in bitmaps for the non-FIDE- pieces. Archbishop, Chancellor and the wildcard Lance exist in all sizes from Petite to Bulky, though. In size Moderate, variant shogi uses the traditional Japanese piece representation.}{\f1\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Board Colors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 BoardColors}}}{\f1 Board Colors \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the colors WinBoard is using to draw the board and pieces. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 All White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 AllWhite}}}{\f1\cf11 All White \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Uses the representation of the white pieces (a filled-in black outline) also for the black pieces (where you can fill them with another color to distinguish them). If you do not choose a very dark color for the black pieces, they look very ugly without outline, and using this option can fix that. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Flip Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 FlipBlack}}}{\f1\cf11 Flip Black \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Displays the black pieces upside down (or the white pieces in \ldblquote Flip View\rdblquote ). This is useful in Shogi, when you want to use the traditional Japanese representation of the pieces. \par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Fonts}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Fonts}}}{\f1 }{\f1\ul Fonts}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the fonts WinBoard is using. The clock font, message font and coordinates font are specific to each board size. The tags font, comments font and ICS Interaction font are not dependent on the current size of the board. The \ldblquote Revert to Defaults\rdblquote button will reset the clock font, message font and coordinates font for the current board size, and will set the tags font, message font and Ics Interaction font for all board sizes. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\f1\super K} {\f1 Mode Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ModeMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Mode Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Mode Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Machine White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 MachineWhite}}}{\f1 Machine White \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to play white. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Machine Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 MachineBlack}}}{\f1 Machine Black \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to play black. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Two Machines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TwoMachines}}}{\f1 Two Machines \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Starts a game between two chess engines. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Machine Both}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 Machine Both}}}{\f1\cf11 Machine Both \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 A single chess engine plays itself. Mainly useful for pseudo-engines, that are in fact communication links to another machine, where you want to observe a game that is being played. (E.g. the gothic-chess.com server). This command is not implemented yet (version 4.3.14). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Analysis Mode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AnalysisMode}}}{\f1 Analysis Mode \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In this mode, you can make moves for both sides on the board. After each move, the chess engine will think about possible replies and display its analysis in a separate window. Some engines allow you to request not merely the score and continuation for the best move, but for several moves (\lquote multi-PV\rquote ). With such engines the number of moves that is displayed can be altered by right-clicking on the words \lquote fewer\rquote or \lquote more\rquote displayed above the engine output. Crafty was the first engine to support analysis, but by now there are many others that support it as well. }{\f1\cf5 With respect to playing variations, the same holds as in }{\f1\uldb\cf5 Edit Game}{\f1\cf5 mode.}{ \f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf2 From WinBoard 4.4 on this function can also be invoked in \lquote zippy mode\rquote , i.e. when you are logged on to an ICS with an engine loaded. In that case it is not your own moves that t he engine analyzes, but the moves that are played in a game on the ICS that you are observing. You must start observing before you start the analysis mode! See the file zippy.README for how to connect to an ICS and a chess engine running on your local com puter at the same time. (Basically this amounts to adding the /zp command-line option in addition to all options you would need for connecting to the ICS, as well as those needed for running the chess engine.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Analyze File}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AnalyzeFile}}}{\f1 Analyze File \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In this mode, you can load a ga me from a file, and the chess engine will analyze each move as in Analysis Mode. Crafty was the first engine to support this feature, but by now there are many others that support it as well. }{\f1\cf5 From WinBoard 4.5.0 on the operation of this feature has been sl ightly changed: after loading the file, WinBoard will auto-play the moves while the engine is analyzing, and store the results of the analysis. In particular, it captures the score and depth of the last analysis line for every position (so it will appear as comment in the PGN file when you save the game), and add the PV as a comment on PGN variation format. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditGameMode}}}{\f1 Edit Game \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Duplicate of the item in the Edit menu. Note that Edit Gama is WinBoard\rquote s idle mode, and can be used to switch off other, active modes. (E. g. it it can be used to leave AnalysisMode, stop a game between Two Machines, or leave Edit Position.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Edit Position}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EditPositionMode}}}{\f1 Edit Position \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Duplicate of the item in the Edit menu. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Training}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Training}}}{\f1 Training \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Training mode lets you interactively guess the moves of a game for one of the player s. While in Training mode, the navigation buttons are disabled. You guess the next move of the game by playing the move on the board (or using the }{\uldb Type In Move}{\v\uldb TypeInMove}{ command). If the move played matches the next move of the game, the move is accepted and the opponent\rquote s response is autoplayed. If the move played is incorrect, an error message is displayed. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ICS Client }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ICSClient}}}{\f1 ICS Client \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This is the normal mode when WinBoard is connected to a chess server. If you have moved into Edit Game or Edit Position mode, you can select this option to get out. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 When you run WinBoard in ICS mode, it starts up a console window in which you can type commands and receive text responses from the chess server. You can use the standard Windows editing keys to edit your command line before pressing Enter. The console window keeps a history of the last few commands you typed. Press the up-arrow key to go back to a previous command; press the down-arrow key to go forward again to a later command. Press the right mouse button in the output are a for a }{\f1\uldb context menu}{\v\f1 ICSInteractionContextMenu}{\f1 of editing commands and ICS command shortcuts. \par Some useful ICS commands include }{\b\f1 who}{\f1 to see who is logged on, }{\b\f1 games}{\f1 to see what games are being played, }{\b\f1 match}{\f1 to challenge another player to a game, }{\b\f1 observe}{\f1 to observe an ongoing game, }{\b\f1 examine}{\f1 or }{\b\f1 smoves}{\f1 to review a recently completed game, and of course }{\b\f1 help}{\f1 . \par Whenever you ask to observe an ongoing game, review a completed game, or resume an adjourned game, WinBoard retrieves and parses the list of past moves from the ICS, so you can review them with }{\f1\uldb Forward}{\v\f1 Forward}{\f1 and }{\f1\uldb Backward}{\v\f1 Backward}{\f1 or save them with }{\f1\uldb Save Game}{\v\f1 SaveGame}{\f1 . \par }{\f1\cf5 In ICS mode a graph of players seeking games can be displayed in stead of the chess board, when you are idle (i.e. not playing, observing or examini ng). When this feature is enabled, left-clicking in the board area will switch between board and the seek graph. For details on this, see the }{\f1\uldb\cf5 Seek Graph}{\f1\cf5 command. \par }{\f1 Some special ICS Client features are activated when you are in }{\b\f1 examine}{\f1 or }{\b\f1 bsetup }{\f1 mode on ICS. See the descriptions of the menu commands }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , }{\f1\uldb Backward}{\v\f1 Backward}{\f1 , } {\f1\uldb Pause}{\v\f1 Pause}{\f1 , and }{\f1\uldb Stop Examining}{\v\f1 StopExamining}{\f1 below. You can also issue the ICS position-editing commands with the mouse. Move pieces by dragging with the left mouse button, or by le ft-clicking once on the starting square and once on the ending square. Press the right mouse button over a square for a context menu that lets you drop a new piece, empty the square, or clear the board. Click on the White or Black clock to set the side to play. You cannot set the side to play or drag pieces to arbitrary squares while examining on ICC, but you can do so in bsetup mode on FICS. You can also make moves by typing them into the ICS window; you may have to do this occasionally if you are playing a chess variant whose rules WinBoard does not understand. }{\f1\cf5 (But this list is getting shorter, and Fischer Random is not on it anymore; you can enter castling there with the mouse by dragging the King on top of the Rook.)}{\f1 \par If you are playing a bughouse game on the ICS, a list of the offboard pieces that each player holds is shown in the window title bar, }{\f1\cf2 and graphically in the holdings area next to the board.}{\f1 To drop an offboard piece, }{\f1\cf2 drag it from the holdings to the board.}{\f1 }{\f1\cf5 (Pressing the right mouse button over an empty square to bring up a context menu will still work if you have set the /dropMenu option.)}{\f1 To observe your partner's games, start a second copy of WinBoard, log in as a guest, and use the ICS }{\b\f1 follow}{\f1 or }{\b\f1 pfollow}{\f1 command in the new window. }{\f1\cf5 You can also use the }{\f1\uldb\cf5 Background Observe}{\f1\cf5 or } {\f1\uldb\cf5 Dual Board}{\f1\cf5 features to follow your partner\rquote s game through a single connection on which you are also playing yourself, in the background (peeking at it by pressing the right mouse button), or on side-by-side boards in the board window.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Machine Match}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 MachineMatch}}}{\f1\cf5 Machines Match \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Starts or stops a match between two chess engines. The number of games in the match will be taken from the \ldblquote default match games\rdblquote setting in the Options-> Common Engine dialog. When a match is already running, clicking this menu item will cause it to stop after the current game finishes. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Machine Match}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 MachineMatch}}}{\f1 Machine Match \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Starts or stops a match between two chess programs. The number of games will be taken from the}{\f1\cf1 }{\f1\uldb\cf1 defaultMatchGames}{\f1\cf1 }{\f1 option, which is settable through the }{\f1\uldb\cf1 Common Engine Settings}{\f1 m enu dialog. When a match was already in progress, using this menu item will cause it to stop after the current game finishes. When a tournament file was specified, the match will be run as a tournament with the parameters taken from that file, and the tou rnament file will remain valid after stopping, so that you can resume the tournament using this item. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Pause}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Pause}}}{\f1 Pause \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pauses updates to the board, and if you are playing against a local chess engine, also pauses your clock. To continue, select Pause again, and the display will au tomatically update to the latest position. The }{\b\f1 P}{\f1 (or }{\b\f1 C}{\f1 ) button is equivalent to selecting Pause. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you select Pause when you are playing{\*\bkmkstart WHATSelSavT}{\*\bkmkend WHATSelSavT} {\*\bkmkstart fWHATtopic}against{\*\bkmkend fWHATtopic} a chess engine and it is not your move, the chess engine\rquote s clock will continue to run and it will eventually m ake a move, at which point both clocks will stop. Since board updates are paused, however, you will not see the move until you exit from Pause mode (or select }{\f1\uldb Forward}{\v\f1 Forward}{\f1 ). This behavior is meant to simulate adjournment with a sealed move. \par If you select Pause while you are in }{\b\f1 examine}{\f1 mode on ICS, you can step backward and forward in the current history of the examined game without affecting the other examiners or observers. Select Pause again to reconnect yourself to the current state of the game on ICS. \par If you select Pause while you are loading a game, the game stops loading. You can load more moves one at a time by selecting }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , or resume automatic loading by selecting Pause again. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Action Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ActionMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Action Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Action Menu \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Most of these commands are available in chess server mode only. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Accept}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Accept}}}{\f1 Accept \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Accepts a pending match offer. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Decline}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Decline}}}{\f1 Decline \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Declines a pending offer (match, draw, etc.). If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Rematch}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Rematch}}}{\f1 Rematch \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Issues the ICS }{\b\f1 rematch}{\f1 command, which asks for another game against your last opponent with the same time control and rule set. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Call Flag} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 CallFlag}}}{\f1 Call Flag \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Calls your opponent's flag, claiming a win on time, or claiming a draw if you are both out of time. You can also call your opponent's flag by clicking on his clock. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Draw}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Draw}}}{\f1 Draw \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Offers a draw to your opponent, accepts a pending draw offer from your opponent, or claims a draw by repetition or the 50-move rule, as appropriate. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Adjourn}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Adjourn}}}{\f1 Adjourn \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Asks your opponent to agree to adjourning the current game, or agrees to a pending adjournment offer from your opponent. You continue an adjourned ICS game by challengin g the same player again with the ICS }{\b\f1 match}{\f1 command. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Abort}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Abort}}}{\f1 Abort \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Asks your opponent to agree to abort the current game, or agrees to a pending abort offer from your opponent. An aborted ICS game ends immediately without affecting either player's rating. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Resign}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Resign}}}{\f1 Resign \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Resigns the game to your opponent. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Stop Observing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 StopObserving}}}{\f1 Stop Observing \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Ends your participation in observing a game, by issuing the ICS }{\b\f1 unobserve}{\f1 command. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Stop Examining}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 StopExamining}}}{\f1 Stop Examining \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Ends your participation in observing a game, by issuing the ICS }{\b\f1 unobserve}{\f1 command. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Upload to Examine}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 Upload to Examine}}}{\f1\cf5 Upload to Examine \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Starts an examined game on the ICS, and uploads the game currently loaded in WinBoard (by pasting it, or loading from a file) to it. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Adjudicate To White}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicateToWhite}}}{\f1\cf6 Adjudicate To White \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 End the current game and stop participating engine. The result will appear in the PGN as a win for white. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Adjudicate To Black}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicateToBlack}}}{\f1\cf6 Adjudicate To Black \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but game will appear as a win for black. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Adjudicate Draw}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicateDraw}}}{\f1\cf6 Adjudicate Draw \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but game will appear as a draw. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20\cf6 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super K}{\f1 Engine Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 EngineMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Engine Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Engine Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Hint}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Hint}}}{\f1 Edit Engine List \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This pops up a window where you can edit the list of installe d engines, e.g. to delete or reorder them, or add options that could not be specified in the Load Engine dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Hint}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Hint}}}{\f1 Load Engine \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pops up a dialog where you can select or specify an engine, to be loaded (possibly replacing a previously loaded engine). You wi ll always have to indicate whether you want to load the engine as first or second engine, through the \lquote Load Engine as\rquote combobox in the lower right. You can even replace engines during a game, without disturbing that game, provided the new engine will not f orce a switch of variant. (Beware that after loading an engine, WinBoard will always be in Edit Game mode, so if you want the new engine to continue playing or analyzing, you will have to use the Mode menu to tell it such.) When you select an already inst alled engine from the \lquote Select Engine from List\rquote combobox, all other fields of the dialog will be ignored. In other cases, you have to specify the engine executable, possible engine arguments (if the engine docs say the engine needs any), and the folder (dir ectory) where the engine should look for its files (if this cannot be deduced automatically from the specification of the engine executable). Usually it will be enough to use the browse button to locate the engine executable. But you will also have to tel l WinBoard (with the aid of checkboxes) if the engine is UCI. If \lquote Add to list\rquote is ticked (which it is by default), the engine will be added to the list of installed engines in your settings file, so that next time you can select it from the combobox. You can also specify a \lquote nickname\rquote , under which the engine will then appear in that combobox, and even choose to use that nickname for it in PGN files for engine-engine games. The info you supply with the checkboxes whether the engine should use GUI book, or (for variant engines) automatically switch to the current variant when loaded, will also be included in the list. For obsolete WinBoard engines, that would normally take a long delay to load because WinBoard is waiting for a response they will not give, you c an tick \lquote WB protocol v1\rquote to speed up the loading process. The UCCI / USI checkbox is for engines that need a special adapter (which should be configured through the }{\f1\uldb uxiAdapter}{\f1 option), which in practice is only important for Xiangqi and Shogi engines. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\cf2\super K}{\cf2 } {\f1\ul\cf2 Engine Settings}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\cf2\super #}{\cf2 }{\f1\ul\cf2 Engine Settings}}}{\f1\ul\cf2 Engine #1 Settings }{\f1\cf2 , }{\f1\ul\cf2 Engine #2 Settings \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 This pops up a dialog that allows the user to set engine-defined options of the mentioned engine (if it is in use). What is in the dialog is entirely determined by the engine. Generally, any changes you make to the con trols are only sent to the engine after you press \ldblquote OK\rdblquote . An exception are engine-defined push buttons; the corresponding signal is sent to the engine immediately when you push those. To see the options of UCI engines, you need a Polyglot adapter that supports the recent WB-protocol extensions. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Hint}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Hint}}}{\f1 Hint \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays a move hint from the chess engine. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Book}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Book}}}{\f1 Book \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays a list of possible moves from the chess engine\rquote s opening book. The first column gives moves, the second column gives one possible response for each m ove, and the third column shows the number of lines in the book that include the move from the first column. If you select this option and nothing happens, the engine is out of its book or does not support the book command. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Move Now}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 MoveNow}}}{\f1 Move Now \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Forces the chess engine to move immediately. May not work with all chess engines. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Retract Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 RetractMove}}}{\f1 Retract Move \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Retracts your last move. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In chess engine mode, you can do this only after the chess engine has replied to your move. If the chess engine is still thinking, use }{\f1\uldb Move Now}{\v\f1 MoveNow}{ \f1 first. \par In ICS mode, Retract Move issues the command }{\b\f1 takeback 1 }{\f1 or }{\b\f1 takeback 2}{\f1 , depending on whether it is your opponent's move or yours. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Options Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 OptionsMenu}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Options Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Options Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 }{\f1\ul\cf2 Mute all Sounds}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 }{\f1\ul\cf2 MuteAllSounds}}}{\f1\cf2 }{\f1\ul\cf2 Mute all Sounds}{\f1\cf2 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 Provides a quick way to switch on or off all sounds, without affecting the settings for them. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ General Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ GeneralOptions}}}{\f1\ul General}{\f1 \par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Always On Top}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AlwaysOnTop}}}{\f1 Always On Top \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, WinBoard sets its chessboard to be a }{\i\f1 topmost}{\f1 window, meaning that it always appears on top of all ordinary windows on the screen. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Always Queen}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AlwaysQueen}}}{\f1 Always Queen \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Always Queen is off, WinBoard brings up a dialog box whenever you move a pawn to the last rank, asking what piece you want to promote it to. If the option is on, your pawns are always promoted to queens. Your opponent can still underpromote, however. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Animate Dragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AnimateDragging}}}{\f1 Animate Dragging \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Animate Dragging is on while y ou are dragging a piece with the mouse, an image of the piece follows the mouse cursor. If Animate Dragging is off, there is no visual feedback while you are \par dragging a piece, but if Animate Moving is on, the move will be animated when it is complete. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Animate Moving}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AnimateMoving}}}{\f1 Animate Moving \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Animate Moving is on, all piece moves are animated. An image of the piece is shown moving from the old square to the new square when the move is completed (unless the move was already animated by Animate Dragging). If Animate Moving is of f, a moved piece instantly disappears from its old square and reappears on its new square when the move is complete. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Auto Flag} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AutoflagCmd}}}{\f1 Auto Flag \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on and one player runs out of time before the other, WinBoard will automatically call his flag, claiming a w in on time. In ICS mode, Auto Flag will only call your opponent's flag, not yours, and the ICS may award you a draw instead of a win if you have insufficient mating material. On most chess servers, you can now do}{\b\f1 set autoflag 1 }{\f1 instead and have the server call the flag. In local chess engine mode, WinBoard may call either player's flag and will not take material into account. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Auto Flip View}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ AutoFlipView}}}{\b Auto Flip View \par }{If this option is on when you}{\f1 start a game, the board will be automatically oriented so that your pawns move from the bottom of the window towards the top.}{ \par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Auto Raise Board}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\super #}{ AutoRaiseBoard}}}{\b Auto Raise Board \par }{If this}{\v autoFlipViewOption}{ option is on, whenever a new game begins, the chessboard window will be deiconized (if necessary) and raised to the top of the stack of windows on your screen. \par }\pard\plain \s2\li120\sb80\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Blindfold}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ BlindfoldCmd}}}{Blindfold \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { If Blindfold is on, WinBoard displays a blank board. Moves can still be entered with the mouse, either by dragging the (invisible) piece or clicking the starting and ending square. You can also enter your move by typing it on the keyboard}{\f1 .}{ \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Highlight Dragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 HighlightDragging}}}{\f1 Highlight Dragging \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Highlight Dragging is on while you are dragging a piece with the mouse, the starting square and the square that the mouse cursor is over are highlighted. This option works even if Animate Dragging is off. }{\f1\cf5 Also controls if the option /showTargetSquares, which can cause marking of al squares a piece you \lquote pick up\rquote can legally move to, can be active.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Extended PGN Info}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 ExtendedPGNInfo}}}{\f1\cf6 Extended PGN Info \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The PGN will contain the engine search depth, score and time for each move where the depth is non-zero, as a comment behind the mo ve if this option is on. Works only when \ldblquote Show Thinking\rdblquote is enabled. The recorded time is the time reported by the engine. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Extra Info In Move History}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 ExtraInfoInMoveHistory}}}{\f1\cf6 Extra Info In Move History \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Same as above, but in move-history window. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Highlight Last Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 HighlightLastMove}}}{\f1 Highlight Last Move \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use }{\f1\uldb Backward}{\v\f1 Backward}{\f1 or }{\f1\uldb Back to Start}{\v\f1 BackToStart}{\f1 , the starting and ending squares of the last move to be }{\i\f1 unmade}{\f1 are highlighted. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Periodic Updates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PeriodicUpdatesCmd}}}{\f1 Periodic Updates \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Periodic Upda tes is on, the Analysis window is updated every two seconds. If not, it is updated only when the best move found changes. The Analysis window currently works only with Crafty, and Periodic Updates may not work with all versions of Crafty. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Ponder Next Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 PonderNextMoveCmd}}}{\f1 Ponder Next Move \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is off, the chess engine will think only when it is on move. If the option is on, the engine will also think while waiting for you to make your move. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Popup Exit Message}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PopupExitMessageCmd}}}{\f1 Popup Exit Message \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, when WinBoard wants to display a message jus t before exiting, it brings up a modal dialog box and waits for you to click OK before exiting. If the option is off, WinBoard prints exits immediately without showing the message. If }{\f1\uldb debugMode}{\v\f1 debugMode}{\f1 is on, however, the message will appear in the debug log. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Popup Move Errors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PopupMoveErrorsCmd}}}{\f1 Popup Move Errors \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is off, when you make an error in moving (such as attempting an illegal move or moving the wrong color piece), the error message is displayed in the message area. If the option is on, move errors are displayed in sm all popup windows like other errors. You can dismiss an error popup either by clicking its OK button or by clicking anywhere on the board, including downclicking to start a move. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Show Bu tton Bar}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ShowButtonBarCmd}}}{\f1 Show Button Bar \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Show Button Bar is on, WinBoard displays on-screen }{\f1\uldb buttons}{\v\f1 BUTTONS}{\f1 to step forward, backward, or pause the game. If it is off, the buttons are hidden, making the message line wider. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Show Coords}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ShowCoordsCmd}}}{\f1 Show Coords \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Show Coords is on, WinBoard displays algebraic coordinates along the board's left and bottom edges. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Show Thinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ShowThinkingCmd}}}{\f1 Show Thinking \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard displays the chess engine\rquote s current search depth and its notion of the score and best line of play from the current position as it is thinking. The score indicates how many pawns ahead (or if negative, behind) the engi ne thinks it is. In matches between two machines, the score is prefixed by W or B to indicate whether it is showing White's thinking or Black's. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Test Legality}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TestLegalityCmd}}}{\f1 Test Legality \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Test Legality is on, WinBoard tests whether the moves you enter with the mouse or read from game files are legal, and displays an error if they are not. Turn this option off if you are playing a chess variant that WinBoard does not understand. (Bughouse, suicide, and wild variants where the king may castle after starting on the }{\b\f1 d}{\f1 file are generally supported with Test Legality on. }{\f1\cf11 The same holds for variants with non-FIDE pieces, like shatranj, xangqi, shogi, gothic, capablanca, courier, knightmate: WinBoard knows how all pieces occurring in those variants move. Falcon, cylinder and berolina are only partly supported, though, and the latter two should definitely be played with legality testing off, and falcon uses a wildcard piece for the Falcons, so it considers any move of them legal, but might miss checkmates that involve a Falcon. So you shou ld not play it with claim verification switched on.}{\f1 ) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Hide Thinking From Human}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 HideThinkingFromHuman}}}{\f1\cf6 Hide Thinking From Human \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 An alternative to suppressing the Thinking Output in the display above the board by switching \ldblquote Show Thinking\rdblquote off, but doing it in a way that still allows the extended PGN info to be recorded. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Highlight Move With Arrow}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 HighlightMoveWithArrow}}}{\f1\cf6 Highlight Move With Arrow \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 A big, fat arrow is drawn between the start and target field of the last move, so you cannot possibly miss it. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Display Logos}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 DisplayLogos}}}{\f1\cf5 Display Logos \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Controls the display of engine, user or ICS logos above the board, next to the clocks, by switching on or off the option /autoLogo.. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Time Control}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TimeControlCmd}}}{\f1 }{\f1\ul Time Control}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the time control to be used in games against a chess engine. }{\f1\cf5 Three}{\f1 types of timing are available. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 With conventional chess clocks, each player begins with his clock set to the }{\f1\uldb timeControl}{\v\f1 timeControl}{\f1 period. When both players have made }{ \f1\uldb movesPerSession}{\v\f1 movesPerSession}{\f1 moves, a new time control period begins. The time in the new period is added to whatever time the players have left on their clocks. \par With incremental clocks, each player is given an initial time allotment, and a }{\f1\uldb timeIncrement}{\v\f1 timeIncrement}{\f1 is added to his clock after every move. The increment may be zero, in which case the entire game must be finished within the initial time allotment. \par }{\f1\cf5 With fixed time per move, each player gets a certain (maximum) time to make one move, and any left-over time is not carried to subsequent moves. \par Note that in local modes it is always possible to adjust the clocks during a game by Shift + click on it, where a right-click adds a minute, and a left-click subtracts one. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{ \f1\ul\cf6 Global Settings}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\ul\cf6 Global Settings}}}{\f1\ul\cf5 Common Engine Settings \par }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Polyglot Directory}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 PolyglotDirectory}}}{\f1\cf6 Polyglot Directory \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If WinBoard knows where to find Polyglot, you can install UCI engines as if they were WinBoard engines, and WinBoard will automatically invoke Polyglot as an adapter to run them. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Hash Size}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 HashSize}}}{\f1\cf6 Hash Size, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 EGTB Path}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 EGTBPath}}}{\f1\cf6 EGTB Path, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 EGTB Cache Size}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 EGTBCacheSize}}}{\f1\cf6 EGTB Cache Size, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Opening Book}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 OpeningBook}}}{\f1\cf6 Opening Book, }{ \cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Number of CPUs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Number of CPUs}}}{\f1\cf6 Number of CPUs \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 These are options that UCI engines expect to be specified. }{\f1\cf2 WinBoard protocol now also allows native WinBoard engines to request similar information, so it might be used for these engines as well. The memory size specified by the WinBoard-protocol \lquote memory\rquote command is the sum of the hash and EGTB cache sizes. The specified opening book, when enabled through the \lquote Use Book\rquote check box, will be used as GUI book for engines that d o not have their own book (as indicated by the check boxes). It must be a book in Polyglot format. }{\f1\cf5 The selection of book moves can be controlled by the setting of \lquote Book Depth\rquote and \lquote Book Variation\rquote . The former determines the number of full moves into the ga me where the book is probed. The latter is a number from 0 to 100 that controls the interpretation of the move weights in the book (100 = ignore weights and select randomly from all listed moves; 0 = always play best move). At 50 the playing frequency exa ctly follows the book weight.}{\f1\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Default Match Games}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 DefaultMatchGames}}}{\f1\cf5 Default Match Games \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the number of games that will be played in response to the Mode -> Machine Match menu command. \par }\pard\plain \s5\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\ul\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{ \f1\ul\cf6 Adjudications}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\ul\cf6 Adjudications}}}{\f1\ul\cf6 Adjudications \par }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Ponder Next Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 PonderNextMove}}}{\f1\cf6 Ponder Next Move,}{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super K}{\f1 }{\f1\cf6 Show Thinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 ShowThinking}}}{\f1\cf6 Show Thinking, }{\cs58\f1\cf6\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Hide Thinking From Human}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 HideThinkingFromHuman}}}{\f1\cf6 Hide Thinking from Human and }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{ \f1 }{\f1\cf6 Periodic Updates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 PeriodicUpdates}}}{\f1\cf6 Periodic Updates \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Duplicates of the controls in the \ldblquote General\rdblquote option menu. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Adjudicate Draw Moves}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicateDrawMoves}}}{\f1\cf6 Adjudicate Draw Moves \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Adjudicate a draw after the given number of moves, to prevent games from dragging on forever if two engines in a dead-drawn position, conspire to avoid 50-move draws. This and the folowing options are only active in \ldblquote Two Machines\rdblquote mode. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 Adjudicate Loss Threshold}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicateLossThreshold}}}{\f1\cf6 Adjudicate Loss Threshold \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Adjudicate the game as a loss when both engines agree that the (negative) score is below the given threshold for the duration of 6 consecutive plies. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Verify Claims}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 VerifyClaims}}}{\f1\cf11 Verify Claims \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Verify result claims made by engines when they terminate the game. If needed, correct the results to a loss for the engine making the false claim. Needs \ldblquote Test Legality\rdblquote to be on in order to work. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Detect Mates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 DetectMates}}}{\f1\cf11 Detect Mates \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Let WinBoard detect checkmate and st alemate, even before the engine gets the chance to claim it. Useful with buggy engines, that exit without a claim, or just hang. Needs \ldblquote Test Legality\rdblquote to be on in order to work. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Draw If Insufficient Material}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 DrawIfInsufficientMaterial}}}{\f1\cf11 Draw If Insufficient Material \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is on, WinBoard will recognize KBKB positions with equally colored Bishops, KBK, KNK, and KK positions as draws, even before the engine can claim them. Needs \ldblquote Test Legality\rdblquote to be on in order to work. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 Adjudicate Trivial Draws}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 AdjudicateTrivialDraws}}}{\f1\cf11 Adjudicate Trivial Draws \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is on, KBKB (with B on unlike color), KBKN , KNKN, KNNK, KRKR and KQKQ positions will be adjudicated draw after 6 ply. For KQKQ this is not really sound, and in the future it might be taken out of this option. But as long as tablebase adjudications are not implemented, it seems best to group this end-game with the trivial draws. Needs \ldblquote Test Legality\rdblquote to be on in order to work. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 N-Move Rule}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 N-MoveRule}}}{\f1\cf11 N-Move Rule \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Here you can set the number of reversible moves (non-pawn, non-capture) after which WinBoard should adjudicate a game as draw. Engine draw claims are always con sidered valid after 50 moves (in the context of \ldblquote Verify Claims\rdblquote ), but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to a smaller value if you are impatient. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 N-Fold Repetition Rule}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 N-FoldRepetitionRule}}}{\f1\cf11 N-Fold Repetition Rule \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Here you can set the number of repetitions of the same position that should occur in order for WinBoard to adjudicate the game as draw. Engine draw claims are always considered valid after 3 repetitions (in the context of \ldblquote Verify Claims \rdblquote ) , but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to 2 if you are impatient. (Do not set it to 1!) \par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b \par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ Tournament Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ TournamentOptns}}}{\b Tournament \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tournament File}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TournamentFIle}}}{\f1 Tournament file \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 To run a tournament, WinBoard needs a file to record its progress, so that you can later resume the tournament when it was interrupted, or set other WinBoard instances to work on it in parallel. So when you want to conduct anything more complex than a simple two-player match with the currently loaded engines, (i.e. when you select a list of participants), you must not leave this field blank. When you enter the name of an existing tournament file, WinBoard will ignore all other input specified in the dialog, and will take it f r om that tournament file instead, effectively joining that tournament (switching to match mode as soon as you press OK, starting to play games for it). This could be useful for resuming an interrupted tournament, or increasing the number of games played co n currently in a tournament that was already running through other WinBoard instances. Specifying a not-yet-existing file will cause WinBoard to create one with that name, according to the tournament parameters specified in the rest of the dialog, before it starts the tournament on \lquote OK\rquote . Provided that you specify participants; without participants no tournament file will be made, but other entered values (e.g. for the file with opening positions) will take effect. WinBoard can be configured to propose a filen ame derived from date and time with the }{\f1\uldb defaultTourneyName}{\f1 option, such that it is likely to not yet exist, so that you will start a new tourney every time you OK the dialog without altering the name. Using an existing tournament file can be more conveniently done by clicking the file icon, when WinBoard is properly installed (so that the .TRN extension is associated with WinBoard in tourney mode). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Select Engine}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SelectEngine}}}{\f1 Select Engine / Tourney participants \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 With the Select Engine combobox you can pick an engine from your list of installed engines in the settings file, to be added to the tournament. The engines selected so far will be listed in the \lquote Tourney participants\rquote memo. The latter is a normal text edit, so you can use normal text-editing functions to delete engines you selected by accident, or change their order. Do not type names y ourself there, because names that do not exactly match one of the names from the combobox will lead to undefined behavior. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tourney type}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TourneyType}}}{\f1 Tourney type \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Here you can specify the type of tournament you want. WinBoard\rquote s intrinsic tournament manager support round-robins (t ype = 0), where each participant plays every other participant, and (multi-)gauntlets, where one (or a few) so-called \lquote gauntlet engines\rquote play an independent set of opponents. In the latter case, you specify the number of gauntlet engines. E.g. if you specified 10 engine, and tourney type = 2, the first 2 engines each play the remaining 8. Default:0 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tourney Cycles}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TourneyCycles}}}{\f1 Number of tourney cycles /}{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Games per Pairing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 GamesPerPairing}} }{\f1 Games per pairing \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 You can specify tourneys where every two opponents play each other multiple times. Such multiple games can be played in a row, as specified by the \lquote number of games per pairing\rquote , or by repeating the entire tournament schedule a number of times (specified by the \lquote number of tourney cycles\rquote ). The total number of times two engine meet will be the product of these two. Games will be counted sequentially through different cycles for the purpose of color assignment or selection of starting positions. E.g. with 3 games per pairing, when engine A played B with w, b, w in the first cycle, it will play b, w, b against B in th e second cycle, and the first game in that cycle will be treated exactly as it would be when it was game number 4 of a simple two-player match. Default is 1 cycle; the number of games per pairing is the same as the default number of match games, stored in your settings file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Swiss pairing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SwissPairing}}}{\f1 Use Swiss pairing engine \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard can also run Swiss tournaments, with the aid of an external \lquote pairing engine\rquote that tells it which engine to play against which, depending on previous results. In this case the pairing engine might atta ch significance to the order in which you specified the participants, and use it as seeding number (e.g. for systems that use ratings to determine pairing). Rounds are synonymous with tourney cycles in this case, and the number of games per pairing will b e forced to 1, meaning the actual specification for it (as well as for tourney type) will be ignored. In the standard install, WinBoard is configured (with the aid of the }{\f1\uldb pairingEngine}{\f1 option) to use a simple pairing engine that comes with it, and implements a non-official, but not all that bad approximation to Swiss. Default: no Swiss. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Sync after Round}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SyncAfterRound}}}{\f1 Sync after round / }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Sync after Cycle}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SyncAfterCycle}}}{ \f1 Sync after cycle \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 When multiple instances of WinBoard are used to concurrently run games for the same tourney, the games will be appended to the }{\f1\uldb saveGameFile}{\f1 in the order they finish, so that rounds or cycles could overlap (one starting before the other finishes). This can be inconvenient if you want to derive partial results from the games file, such as standings after each complete round. The sync opt ions, when on, will cause WinBoard to refrain from starting games of the next round or cycle before all games of the previous round or cycle are finished, which guarantees correct ordering in the games file. Default: sync after cycle, but not after round. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 File with Opening Lines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 OpeningLines}}}{\f1 File with Opening Lines / Start Positions \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard can be requested to let games not start from the standard opening position, but from a position (possibly given as a sequence of moves from yet another position) specified in a file. Indeed, each game o f a pairing can start from a different position, or with a different given sequence of moves in such a file. The file, and the game in it can be specified with the command-line options }{\f1\uldb loadGameFile}{\f1 , }{\f1\uldb loadPositionFile}{\f1 , }{ \f1\uldb loadGameIndex}{\f1 , }{\f1\uldb loadPositionIndex}{\f1 , or in the Tournament Options dialog. (At most one of the two files should be given; games in PGN form also specify starting positions as FENs, and thus make the position file redundant, and therefore ignored.) The indexes can be used to specify the sequence nu mber of the game or position in the file to use for all games. To automatically step through all entities in a file, you have to tick \lquote Step through lines / positions in file\rquote . In this case the \lquote Use each line/position twice\rquote checkbox controls if you step aft er one or two games (so that each engine gets to play the position with both black and white). Note that the stepping occurs within a pairing; all pairings of a tourney will start with the first line or position in the file. You can specify that the index should \lquote rewind\rquote to 1 after it reaches a certain value. Default: No game or position file will be used. The default index if such a file is used is 1. \par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Load Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 LoadGameOptns}}}{\f1 }{\f1\ul Load Game}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change options used while loading games (}{\f1\uldb timeDelay}{\v\f1 timeDelay}{\f1 option). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Save Game} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SaveGameOptns}}}{\f1 }{\f1\ul Save Game}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change options used for saving games (}{\f1\uldb autoSaveGames}{\v\f1 autoSaveGames}{\f1 , }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1 , and }{\f1\uldb saveGameFile}{\v\f1 saveGameFile}{\f1 options). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Game List Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 GameListOptions}}}{\f1 }{\f1\ul Game List}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you select which information is displayed in the Game List window. \par }\pard\plain \s5\li115\sb80\sl-240\slmult0\nowidctlpar\outlinelevel4\adjustright \f5\fs20\ul\cgrid {\b \par }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ ICS Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\super #}{ ICSOptions}}}{\b ICS \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Auto Comment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AutoCommentCmd}}}{\f1 Auto Comment \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto C omment is on, any remarks made on ICS while you are observing or playing a game are recorded as a comment on the current move. This includes remarks made with the ICS commands }{\b\f1 say, tell, whisper, }{\f1 and }{\b\f1 kibitz}{\f1 . Limitation: remarks that you type yourself are not \par recognized; WinBoard scans only the output from ICS, not the input you type to it. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Auto Observe}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AutobsCmd}}}{\f1 Auto Observe \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto Observe is on and you add a player to your }{\b\f1 gnotify}{\f1 list on ICS, WinBoard will automatically observe all of that player's games, unless you are do ing something else (such as observing or playing a game of your own) when one starts. On most chess servers, you can now do }{\b\f1 follow }{\b\i\f1 player}{\f1 instead, and the server will automatically observe all of }{\b\i\f1 player\rquote s}{\f1 games. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Auto Kibitz}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 AutoKibitzCmd}}}{\f1\cf5 Auto Kibitz \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf5 Auto Kibitz controls how outp ut of computers playing on an ICS is handled. In many tournaments, computers are obliged to kibitz their thinking output to the ICS, and this option will do that automatically, without the engine having to know it. In addition, such kibitzed output by you r opponent will be kept out of the console window, and will be diverted to the engine-output window. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Get Move List}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 GetMoveListCmd}}}{\f1 Get Move List \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Get Move List is on, whenever WinBoard}{\i\f1 }{\f1 receives the first board of a new ICS game (or a different ICS game from the one it is currently displaying), it retrieves the list of past moves from the server. You can then review the moves with the Forward and Backward commands or save them with Save Game. You might want to turn off this option if you are observing several blitz games at once, to keep from wasting time and network bandwidth fetching the move lists over and over. If you turn this option on while a game is in progress, WinBoard}{\i\f1 }{\f1 immediately fetches the current move list. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Local Line Editing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 LocalLineEditing}}}{\f1 Local Line Editing \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Local Line Editing is }{\b\f1 on}{\f1 , your machine handles echoing, backspacing, etc., for the characters that you type into the ICS Interaction window. Output is forwarded to the ICS only when you hit Enter.The Enter key produces a newline character, also known as Ctrl+J, \\ n, LF, linefeed, or decimal ASCII code 10. In this mode you can force a control character into the edit buffer by preceding it with Ctrl+Q (\ldblquote quote\rdblquote ); however, the edit buffer will not accept certain control characters even when they are quoted in this way. You can force a control character to be sent immediately to ICS, bypassing the edit buffer, by preceding it with Ctrl+S (\ldblquote send \rdblquote ). \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard keeps a history of lines you recently typed in Local Line Editing mode. You can bring back old lines by pressing the cursor up key in the text entry box. Press the cursor down key to go back down to newer lines. \par If Local Line Editing is }{\b\f1 off}{\f1 , all characters are sent to ICS as you type them. The Enter key produces a carriage return character, also known as Ctrl+M, \\r, CR, or decimal ASCII code 13. Use C trl+Backspace if you need the ASCII DEL character. You can enter any character code by holding down the Alt key and typing its decimal value (always beginning with 0) on the numeric keypad; this is a little-known standard feature of Windows. \par In both modes, if WinBoard}{\i\f1 \rquote s }{\f1 internal telnet protocol implementation is active, it translates all \\n characters to the standard telnet end-of-line sequence \\r\\n just before sending them out to ICS; see }{\f1\uldb telnetProgram}{ \v\f1 telnetProgram}{\f1 . \par It is generally not a good idea to turn off this option while connected to ICS. If you are tempted to do so because everything you type is being echoed an extra time, see the paragraph about extra echoes under }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{ \f1 below. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Quiet Play }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 QuietPlayCmd}}}{\f1 Quiet Play \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Quiet Play is on, WinBoard will automatically issue an ICS }{\b\f1 set shout 0}{\f1 command whenever you start a game and a }{\b\f1 set shout 1}{\f1 command whenever you finish one. Thus you will not be distracted by shouts from other ICS users while playing. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Seek Graph}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 SeekGraphCmd}}}{\f1\cf5 Seek Graph, }{\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{\f1\cf5 Auto Refresh}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 AutoRefreshCmd}}}{\f1\cf5 Auto Refresh \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf5 If Seek Graph is on, you can s ummon up a graphical representation of players seeking a game on the ICS in stead of the chess board, by left-clicking the latter when you are not using it. The requested games are separated out by rating and time control. Rated, unrated and wild games ar e displayed in different colors, computers as squares, humans as dots. Hovering the mouse over a dot in the graph will display the details of the corresponding seek ad in the message field above the board. Left-clicking the dot will take up the challenge. Right-clicking dots will \lquote push them to the back\rquote , so you can see seek ads that might have been hidden behind it. Right-clicking off dots will refresh the graph, left-clicking off dots will take the graph down ad display the chess board again. \par In combination with Auto Refresh, the seek graph will be updated automatically. This is only implemented for the FICS and ICC servers. To make switching on of this option effective might require you to log off and on again to the ICS, as it requires changing ICS settin gs that are locked during a session. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Background Observe}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 BackgndobsCmd}}}{\f1\cf5 Background Observe, }{\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{\f1\cf5 Dual Board}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{ \f1\cf5 DualBoardCmd}}}{\f1\cf5 Dual Board \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf5 If Background Observe is on, boards sent to you by the ICS when you are playing, but which are not of your game, (but of games you are observing), will not be displayed automatically. In stead WinBoard will remember the last board it received that way, and display it when you press the right mouse button in stead of the board of your own game. This feature is meant to enable bughouse players a peek at their partner\rquote s game, without the need to log on to the ICS a second time. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf5 If in addition Dual Board is also on, such background games are even displayed on a second board, side by side with your own game, so that it is always in view. This feature is experimental, and largely undeveloped; there is no animation of moves on this second board, while the effets are undefined if the board format of the observed game is not the same as that of your own game. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Premove}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 PremoveCmd}}}{\f1 Premove \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Premove allows you to play a move on the board before you have received your opponent\rquote s move. This move is highlighted on the board using the }{\uldb Premove Highlight }{\v\uldb premoveHighlightColor}{ color, and is sent to the ICS as soon as your opponent\rquote s move is received. To cancel a premove, either click twice on the piece that was premoved or premove an illegal move. \par This group of controls allows you to set the following options: }{\uldb premove}{\v premove}{, }{\uldb premoveWhite}{\v premoveWhite}{, }{\uldb premoveWhiteText}{\v premoveWhiteText}{, }{\uldb premoveBlack}{\v premoveBlack}{, }{\uldb premoveBlackText}{\v premoveBlackText}{. \par }\pard\plain \s2\li120\sb80\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\cf5\super K}{\cf5 One-Click Move}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\cf5\super #}{\cf5 OneClickMoveCmd}}}{\cf5 One-Click Move \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf5 When One-Click Move is set, }{\v\cf5 icsAlarmTime}{\cf5 a click on an own piece will immediately move that piece if it only has a single legal move, without waiting for you to click a to-square. Similarly, clicking an opponent piece or empty square will immediately perform the move to th at square, if only a single legal move to it existed. This is the mouse equivalent of having to type only e4 when you mean e2-e4. Finally, double clicking an own piece (or clicking an already selected piece) will make it execute its only capture, which ca n save you some time if the target square was far away. Legality testing has to be switched on for this to work. \par }\pard\plain \s2\li120\sb80\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ ICS Alarm}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ ICSAlarm}}}{ICS Alarm \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{ is played when your clock counts down to }{\uldb icsAlarmTime}{\v icsAlarmTime}{ seconds . For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the }{\uldb icsAlarmTime}{\v icsAlarmTime}{. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ICS Interaction Colors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ICSInteractionColors}}}{\f1 ICS Interaction Colors \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the colors and type styles that WinBoard uses to distinguish betw een different types of messages in the ICS Interaction window. The types distinguished are: shout, sshout, channel 1 tell, other channel tell, kibitz (or whisper), personal tell (or new message notification), challenge, request (including abort, adjourn, draw, pause, and takeback), seek, and normal (all other messages). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 Startup Chat Boxes}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 StartupChatBoxes}}}{\f1\cf5 Startup Chat Boxes \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 You can put a semicolon-separated list of ICS handles or channel numbers here, WinBoard will open a chat window for each handle at startup in ICS mode. (See the Open Ch at Window command.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Sounds}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Sounds}}}{\f1 }{\f1\ul Sounds}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the sounds that WinBoard plays for various events. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Move Sound}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 MoveSound}}}{\f1 If the Move sound is on, WinBoard alerts you by playing a sound after each of your opponent's moves (or after every move if you are observing a game on the I nternet Chess Server). The sound is not played after moves you make or moves read from a saved game file. If you turn on the Move sound when using WinBoard with the Internet Chess Server, you will probably want to give the }{\b\f1 set bell 0}{\f1 command to the ICS. Ot herwise the ICS will send a bell character after every move (not just yours), causing WinBoard to play the ICS Bell sound too. Alternatively, you could turn off the ICS Bell sound in WinBoard, but that might cause you to miss ICS alerts for other interest ing events. \par The other sound events correspond directly to the types of messages that the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1 option knows how to colorize. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Communications}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Communications}}}{\f1 }{\f1\ul Communications}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Lets you change the communication port parameters when the }{\f1\uldb internetChessServerComPort}{\v\f1 internetChessServerComPort}{\f1 option is in use. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Save Settings Now}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SaveSettings}}}{\f1 }{\f1\ul Save Settings Now}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Save the current option settings to a file, along with the current window sizes and positions, to be automatically reloaded next time WinBoard is run. See }{\f1\uldb Settings}{\v\f1 Settings}{\f1 for the fine points. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Save Settings on Exit}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SaveSettingsOnExit}}}{\f1 }{\f1\ul Save Settings on Exit}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on, the current settings are automatically saved when WinBoard exits, as with Save Settings Now. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Help Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 HelpMenu}}}{\b0\f1\fs18\up6 }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Help Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Help Menu \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Help Contents}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 HelpContents}}}{\f1 Help Contents \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up this help file, starting at the Contents page. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Search for Help on}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 SearchHelp}}}{\f1 Help Index \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up this help file, starting at the Index/Find dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 How to Use Help}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 HelpHelp}}}{\f1 How to Use Help \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Brings up the standard help file that explains how to use Windows Help. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 About WinBoard}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 AboutWinBoard}}}{\f1 About WinBoard \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Displays the WinBoard version number. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ICS Interaction Context Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ICSInteractionContextMenu}}}{\b0\f1\fs18\up6 }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 ICS Interaction Context Menu}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +} {\f1 main}}}{\f1\fs20 ICS Interaction Context Menu \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 To see this m enu, press the right mouse button anywhere in the output (upper) pane of the ICS Interaction window. Pressing the right mouse button in the input (lower) pane gives a standard editing context menu, not described here. Use the }{\b\f1 help}{\f1 command on ICS to learn what these commands mean. \par You can customize the lower part of this menu (below the Paste option) by setting the }{\f1\uldb icsMenu}{\v\f1 icsMenu}{\f1 option. The easiest way to accomplish this is to edit your }{\f1\uldb settings file}{\v\f1 settings}{\f1 with Notepad or another plain text editor. Sorry, there is no graphical user interface for customizing the menu. \par }{\f1\cf5 Note that the menu will pop up under the mouse pointer on the down-click, and that you can already select an item from it on the up-click. The item that is configured to pop up under the mouse pointer can thus be selected by a \lquote blind \rquote static click. If you don\rquote t want that, but rather wants the menu to stay up after the first static click, you should configure an inactive menu item under the pointer. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Copy and Paste}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 CopyAndPaste}}}{\f1 Copy and Paste \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copies the current selection to the clipboard, then pastes it to the input box. As a shortcut to this function, you can press the middle mouse button (if you have one), or Shift plus the right mouse button. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Copy}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Copy}}}{\f1 Copy \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copies the current selection to the clipboard. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Paste}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Paste}}}{\f1 Paste \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Pastes the clipboard contents to the input box. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Who}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 Who}}}{\f1 Who \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote who\rdblquote }{\b\i\f1 }{\f1 to ICS. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Players}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 Players}}}{\f1 Players \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote players\rdblquote }{\b\i\f1 }{\f1 to ICS. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Games}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 Games}}}{\f1 Games \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote games\rdblquote }{\b\i\f1 }{\f1 to ICS. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Sought}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 Sought}}}{\f1 Sought \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote sought\rdblquote }{\b\i\f1 }{\f1 to ICS. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tell}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Tell}}}{\f1 Tell (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inserts \ldblquote tell }{\i\f1 name }{\f1 \rdblquote }{\b\i\f1 }{\f1 into the input box. The string }{\i\f1 name }{\f1 is the current selection if it is not empty. Otherwise }{\i\f1 name }{\f1 is the word surrounding the mouse position, where a \ldblquote word\rdblquote is a string of letters, digits, or hyphens (-), such as an ICS user handle or game number. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\cf5\revised\super\revauth1\revdttm-1506646559 K}{\f1\cf5\revised\revauth1\revdttm-1506646559 }{\f1\cf5 Open Chat Box}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\cf5\revised\super\revauth1\revdttm-1506646559 #}{\f1\cf5\revised\revauth1\revdttm-1506646559 }{\f1\cf5 OpenChatbox}}}{\f1\cf5 Open Chat Box (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Causes WinBoard to open a new Chat Window, with }{\i\f1\cf5 name}{\f1\cf5 in the chat Partner field, where }{\i\f1\cf5 name}{\f1\cf5 is as defined above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Message}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Message}}}{\f1 Message (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Inserts \ldblquote message }{\i\f1 name }{\f1 \rdblquote }{\b\i\f1 }{\f1 into the input box, where }{\i\f1 name}{\f1 is as defined above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Finger}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Finger}}}{\f1 Finger (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote finger }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1 }{\f1 to ICS, where }{\i\f1 name}{\f1 is as defined above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Vars}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Vars}}}{\f1 Vars (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote vars }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1 }{\f1 to ICS, where }{\i\f1 name}{\f1 is as defined above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Observe}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Observe}}}{\f1 Observe (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote observe }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1 }{\f1 to ICS, where }{\i\f1 name}{\f1 is as defined above. Here }{\i\f1 name}{\f1 can be either a user handle or a game number. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Match}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Match}}}{\f1 Match (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote match }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1 }{\f1 to ICS, where }{\i\f1 name}{\f1 is as defined above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 Play}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 Play}}}{\f1 Play (name) \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sends the command \ldblquote play }{\i\f1 name}{\f1 \rdblquote }{\b\i\f1 }{\f1 to ICS, where }{\i\f1 name}{\f1 is as defined above. Here }{\i\f1 name}{\f1 can be either a user handle or a seek ad number. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Buttons}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Buttons}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Buttons}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\b0\f1\fs18\up6 }{\f1\fs20 BUTTONS \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Back to Start}}}{\f1 << \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Back to Start}{\v\f1 BacktoStart}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Backward}} }{\f1 < \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Backward}{\v\f1 Backward}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Pause}}}{ \f1 P \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Pause}{\v\f1 Pause}{\f1 . The button label changes to }{\b\f1 C}{\f1 while WinBoard is pausing. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Forward}}} {\f1 > \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Forward}{\v\f1 Forward}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Forward to End}}}{\f1 >> \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Same as }{\f1\uldb Forward to End}{\v\f1 ForwardtoEnd}{\f1 . \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \par }{\cf2 Note that using the mouse wheel has the same effect as using the < or > button. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Command Line Options}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Options}}}{\f1\fs20 }{\cs58\f1\fs20\super #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Options}}}{\f1\fs20 }{\cs58\f1\fs20\super ${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $ }{\f1 Command Line Options}}}{\f1\fs20 }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 COMMAND LINE OPTIONS \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 All WinBoard options can be set either on the command line (if you start WinBoard by typing into an MSDOS Prompt box), in the Properties/Shortcut/Target box of a Windows s hortcut, in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 , or in the Additional Options box of the WinBoard startup dialog. Exactly the same syntax is used in all four places. Most options can also be set from the menus and saved using }{\f1\uldb Save Settings Now}{\v\f1 SaveSettings}{\f1 or }{\f1\uldb Save Settings on Exit}{\v\f1 SaveSettingsOnExit}{\f1 , so most people will not need to read this section. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Most options have two names, a long one that is easy to read and a short one that is easy to type. To turn on a boolean (true/false) option }{\i\f1 opt}{\f1 , you can just give its short name preceded by a minus sign or slash (-}{\i\f1 opt}{\f1 or /}{\i\f1 opt}{\f1 ); to turn one off, prefix the short name by an \ldblquote x\rdblquote or an extra minus sign (-x}{\i\f1 opt}{\f1 or /-}{\i\f1 opt}{\f1 ). To set any other kind of option, or to set a boolean option using its long name, give the value after the name, separated by a space, colon, or equal sign. (-}{\i\f1 opt}{\f1 23 or /}{\i\f1 option}{\f1 :true). If a string option contains spaces or special characters, enclose it in double quotes and use the \\ quoting convention of C to name the special characters. Alternatively, you can enclose a string value in curly braces (/opt=\{string\} ), as long as the value does not contain a closing curly brace. If a filename option contains spaces, enclose it in either single or double quotes. In filename options, the \\ character is not treated speciall y, so use single quotes around the outside of the value if it has double quotes inside (and vice versa). \par When you start WinBoard, it will pop up the Startup dialog box unless you provide sufficient options on the command line for WinBoard to determine whic h major mode to be in and what engines to use or chess server to connect to. To bypass this box, you must at minimum give one of the three options }{\f1\uldb /cp}{\v\f1 cp}{\f1 , /}{\f1\uldb ics}{\v\f1 ics}{\f1 , or /}{\f1\uldb ncp}{\v\f1 ncp}{\f1 . If you give the /cp option, you must also give the /}{\f1\uldb fcp}{\v\f1 fcp}{\f1 and /}{\f1\uldb scp}{\v\f1 scp}{\f1 options. If you give the /ics option, you must also give the /}{\f1\uldb icshost}{\v\f1 icshost}{\f1 option. \par }\pard\plain \s29\fi-240\li360\sb60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\uldb Chess Engine Options}{\v\f1 ChessEngineOptions}{\f1 \par }{\f1\uldb UCI Engine Support !NEW!}{\v\f1 UCIEngineSupport}{\f1 \par }{\f1\uldb Internet Chess Server Options}{\v\f1 InternetChessServerOptions}{\f1 \par }{\f1\uldb Load and Save Options}{\v\f1 LoadAndSaveOptions}{\f1 \par }{\f1\uldb User Interface Options}{\v\f1 UserInterfaceOptions}{\f1 \par }{\f1\uldb Adjudication Options !NEW!}{\v\f1 AdjudicationOptions}{\f1 \par }{\f1\uldb Other Options}{\v\f1 OtherOptions}{\f1 \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Chess Engine Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Chess Engine Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ChessEngineOptions}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 Chess Engine Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 cp}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 cp}}}{\f1 /cp}{\b0\f1 or}{\f1 /xcp}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 chessProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 chessProgram}}}{\f1 /chessProgram }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If true, puts WinBoard in chess engine mode. In this mode, you can play against a chess program running on your PC or use it as an analysis partner. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tc}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tc}}}{\f1 /tc }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 timeControl}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 timeControl}}}{\f1 /timeControl }{\i\f1 minutes[:seconds] \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Each player begins with his clock set to the timeControl period. Default: 5 minutes. The additional options movesPerSession and timeIncrement are mutually exclusive. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 mps}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 mps}}}{\f1 /mps }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 movesPerSession}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 movesPerSession}}}{\f1 /movesPerSession }{\i\f1 moves}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 When both players have made movesPerSession moves, a new timeControl period is added to both clocks. Default: 40 moves. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 inc}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 inc}}}{\f1 /inc }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 timeIncrement}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 timeIncrement}}}{\f1 /timeIncrement }{\i\f1 seconds \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is specified, movesPerSession is ignored. Instead, after each player's move, timeIncrement seconds are added to his clock. Use -timeIncrement 0 if you want to require the entire game to be played in one timeControl period, with no increment. D efault: -1, which specifies movesPerSession mode. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 clock }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 clock }}}{\f1 /clock }{\b0\f1 or }{\f1 /xclock}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 clockMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 clockMode}}}{\f1 /clockMode }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines whether or not to display the chess clocks. If clockMode is False, the clocks are not shown, but the side that is to play next is still highlighte d. Also, unless searchTime is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 st}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 st}}}{\f1 /st }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 searchTime }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 searchTime }}}{\f1 /searchTime }{\i\f1 minutes[:seconds]}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Tells the chess engine to spend at most the given amount of time searchi ng for each of its moves. Without this option, the engine chooses its search time based on the number of moves and amount of time remaining until the next time control. Setting this option also sets clockMode to False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 sd}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 sd}}}{\f1 /depth }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 searchDepth}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 searchDepth}}}{\f1 /searchDepth }{\i\f1 number}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 T ells the chess engine to look ahead at most the given number of moves when searching for a move to make. Without this option, the engine chooses its search depth based on the number of moves and amount of time remaining until the next time control. With t he option, the engine will cut off its search early if it reaches the specified depth. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 firstNPS}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 firstNPS}}}{\f1\cf11 /firstNPS }{\i\f1\cf11 number}{\f1\cf11 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf11 secondNPS}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 secondNPS}}}{\f1\cf11 /secondNPS }{\i\f1\cf11 number}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Tells the chess engine to use an internal time standard based on its node count, rather then wall-clock time, to make its time de cisions. The time in virtual seconds should be obtained by dividing the node count through the given }{\i\f1\cf11 number}{\f1\cf11 , like the number was a rate in nodes per second. WinBoard will manage the clocks in accordance with this, relying on the number of nodes reported by the engine in its thinking output. If }{\i\f1\cf11 number}{\f1\cf11 equals zero, it can obviously not be used to convert nodes to seconds, and the time reported by the engine is used to decrement the WinBoard clock. The engine is supposed to report in CPU time it uses, rather t han wall-clock time in this mode. This option can provide fairer conditions for engine-engine matches on heavily loaded machines, or with very fast games (where the wall clock is too inaccurate). \ldblquote Show Thinking\rdblquote must be on for this option to work. Not many engines might support this yet! \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 firstTimeOdds}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 firstTimeOdds}}}{\f1\cf11 /firstTimeOdds }{\i\f1\cf11 factor}{\f1\cf11 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf11 secondTimeOdds}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 secondTimeOdds}}}{\f1\cf11 /secondTimeOdds }{\i\f1\cf11 factor}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Reduces the time given to the mentioned engine by the given }{\i\f1\cf11 factor}{\f1\cf11 . If pondering is off, the effect is indistinguishable from what would happen if the engine was running on a }{\i\f1\cf11 factor}{\f1\cf11 times slower machine. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 }{\f1\cf11 timeOddsMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 }{\f1\cf11 timeOddsMode}}}{\f1\cf11 /timeOddsMode }{\i\f1\cf11 mode \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 This option determines how the case is handled when both engines have a time-odds handicap. If mode=1, the engine that gets the most time will always get the nominal time, as specified by the time-control options, and its opponent\rquote s time is normalized similarly. If mode=0, both play with reduced time. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 ponder}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid { \cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 ponder}}}{\f1 /ponder}{\b0\f1 or }{\f1 /xponder}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {\cs58\f1\revised\super\revauth1\revdttm-1506646559 K}{\f1\revised\revauth1\revdttm-1506646559 ponderNextMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\pnrnot1\adjustright \f5\fs20\cgrid {\cs58\f1\revised\super\revauth1\revdttm-1506646559 #}{\f1\revised\revauth1\revdttm-1506646559 ponderNextMove}}}{\f1 /ponderNextMove }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Ponder Next Move}{\v\f1 ponderNextMoveCmd}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 thinking}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 thinking}}}{\f1 /thinking}{\b0\f1 or }{\f1 /xthinking}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 showThinking}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 showThinking}}}{\f1 /showThinking }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Show Thinking}{\v\f1 showThinkingCmd}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 periodic } }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 periodic}}}{\f1 /periodic }{\b0\f1 or }{\f1 /xperiodic}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 periodicUpdates}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 periodicUpdates}}}{ \f1 /periodicUpdates }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Periodic Updates}{\v\f1 periodicUpdatesCmd}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 mg }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 mg }}}{\f1 /mg }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 matchGames }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 matchGames}}}{\f1 /matchGames }{\i\f1 n \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Automatically runs an }{\b\i\f1 n}{\i\f1 -}{\f1 game match between two chess engines, with alternating colors. If the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile}{\f1 or } {\f1\uldb loadPositionFile}{\v\f1 loadPositionFile}{\f1 option is set, WinBoard will start each game with the given opening moves or the given position; otherwise, the games will start with the standard initial chess position. If the }{\f1\uldb saveGameFile}{\v\f1 saveGameFile}{\f1 option is set, a move record for the match will be appended to the specified file. If the }{\f1\uldb savePositionFile}{\v\f1 savePositionFile}{\f1 option is set, the final position reached in each game of the match will be appended to the specified file. When the match is over, WinBoard will display the match score and exit. Default: 0 (do not run a match). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 mm }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 mm }}}{\f1 /mm }{\b0\f1 or }{\f1 /xmm}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 matchMode }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 matchMode }}}{\f1 /matchMode }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Provided for backward compatibility. If true and matchGames=0, sets matchGames=1. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 matchPause}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 matchPause}}}{\f1\cf11 /matchPause }{\i\f1\cf11 number}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Sets the length of the pause between games in match mode to }{\i\f1\cf11 number}{\f1\cf11 msec. Default value is 10000, i.e. 10 sec. (If this pause is too short, engines not implementing \lquote ping\rquote will sometimes send th e last move of their previous game only when a new game has started, at which time the move is illegal, and causes them to forfeit the game.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 fd}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 fd }}}{\f1 /fd }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 firstDirectory}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 firstDirectory}}}{\f1 /firstDirectory }{\i\f1 dir \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 sd}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 sd }}}{\f1 /sd }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondDirectory}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondDirectory}}}{\f1 /secondDirectory }{\i\f1 dir}{\cs58\f1\super }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf11 fcp }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11 fcp }}}{\f1 /fcp }{\b0\f1 or}{\f1 }{ \cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11 firstChessProgram }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11 firstChessProgram }}}{\f1 /firstChessProgram }{\i\f1 command\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11 scp }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11 scp }}}{\f1 /scp }{\b0\f1 or}{\f1 }{\cs58\f1\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super K}{\f1\cf11 secondChessProgram }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf11\super #}{\f1\cf11 secondChessProgram}{\f1 }}}{\f1 /secondChessProgram }{\i\f1 command}{\cs58\f1\super }{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Names of the chess engines and working directories in which they are to be run. The second chess engine is started only in Two Machines (match) mode. These arguments are parsed as filenames; that is, the \\ character is interpreted literally, not as a C-style escape. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The }{\i\f1 dir}{\f1 argument specifies the initial working directory for the chess engine. It should usually be the directory where the engine and its working files are installed. If }{\i\f1 dir}{\f1 is not an absolute pathname, it is interpreted relative to the directory from which WinBoard.exe itself was loaded. The }{\i\f1 dir}{\f1 argument is ignored if the chess engine is being run on a remote machine (see firstHost and secondHost below). The default value for }{\i\f1 dir }{ \f1 "", meaning that the chess engine is expected to be installed in the same directory as WinBoard. \par The }{\i\f1 command}{\f1 argument is actually the command line to the chess engine, so if the engine itself needs command line arguments, you can include them by enclosing }{\i\f1 command}{\f1 in single or double quotes. If the engine name or an engine argument has a space in it, use single quotes around the whole }{\i\f1 command, }{\f1 and inside them use double quotes around each item that contains spaces. If the engine name has more than one period in it (for example, }{\f2 QChess1.5.exe}{\f1 ), you must include the "}{\f2 .exe}{\f1 " extension; otherwise you can leave it out. The default value for }{\i\f1 command}{\f1 is "", which brings up the startup dialog to ask which engines you want. \par Examples: \par }\pard\plain \s19\fi-518\li1036\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 WinBoard /cp /fd="C:\\Program Files\\Crafty" /fcp=WCrafty-15.12.exe /scp=GNUChess \par WinBoard /cp /fd="C:\\Miracle Games" /fcp='"Miracle Chess.exe" /wow' /scp=GNUChess \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 The basic rule is thus that what is inside the quotes delimiting the argument to /fcp and /scp, all goes to the engine, and is ignored by WinBoard. WinBoard 4.3.13 and later, however, knows an exception to this: If, within the quotes, the word WBopt appears, everything that follows this word will be interpreted as a WinBoard argument, in stead of being passed to the engine on startup of the latter. (The WBop t itself is also not passed to the engine.) This possibility of hiding WinBoard arguments in the engine command is provided in order to create options that follow the engine in a tournament, when a tournament manager like PSWBTM is used to invoke WinBoard. Because, in order to apply to a given engine, some options need to know if they apply to first or second engine, which might vary during the tournament, options hidden inside the engine command-line can contain \lquote %s\rquote which will be replaced at the time the option is used by \lquote first\rquote or \lquote second\rquote , as applicable. \par Examples: \par }\pard\plain \s19\fi-518\li1036\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\cf11 WinBoard /cp /fd="C:\\Engines\\Crafty" /fcp=\rdblquote WCrafty-15.12 WBopt /%sTimeOdds=2\rdblquote /scp=GNUChess \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Meaning that Crafty will have to play with half the time GNUChess will get. \par }\pard\plain \s19\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 fh }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 fh }}}{\f1 /fh }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 firstHost }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 firstHost }}}{\f1 /firstHost }{\i\f1 host\line }{ \cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 sh }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 sh }}}{\f1 /sh }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondHost }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondHost }}}{\f1 /secondHost }{\i\f1 host}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Hosts on which the chess engines are to run. The default for each is "localhost". If you specify another host, WinBoard}{\i\f1 }{\f1 uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 to run the chess program there. The /fd and /sd flags do not work in conjunction with the se flags; if you need a remote chess engine to run somewhere other than your default login directory on the remote machine, you will have to include a "cd" command in the argument to /fcp or /scp. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 initString }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 initString}}}{\f1 /firstInitString }{\b0\f1 or }{\f1 /initString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondInitString}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondInitString}}}{\f1 /secondInitString }{\i\f1 string}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The strings that are sent to initialize the chess engines. Default: "new\\nrandom\\n". The "\\n" sequences represent newlines. You can type "\\ n" on the command line or in a }{\f1\uldb settings file}{\v\f1 settings}{\f1 , and WinBoard will convert it to a newline. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 All chess engines require the "new" command to start a new game. \par You can remove the "random" command if you like; including it causes engines that implement this command (e.g. GNU Chess) to randomize their move selection slightly so that it doesn't play the same mo ves in every game. Even without "random", many engines randomize their choice of moves from their opening book. You can also try adding other commands to the initString; see the applicable engine documentati{\*\bkmkstart _Hlt386545814}o {\*\bkmkstart _Hlt386567280}{\*\bkmkend _Hlt386545814}n{\*\bkmkend _Hlt386567280} for details. Crafty ignores the "random" command; see its documentation for the commands it accepts. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 initString }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 initString}}}{\f1 /firstComputerString }{\i\f1 string\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondInitString}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondInitString}} }{\f1 /secondComputerString }{\i\f1 string}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If the chess engine is playing against another computer program (whether locally or on a chess server), by default the command "computer\\n " is sent to it. Some chess engines change their playing style when they receive this command. If you do not want the engine to know when it is playing another computer, you can set the string to "". \par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {Note that the computer string is sent to the engine afte r most other initialization commands, and is thus ideal for hiding a WinBoard-protocol command in that should be sent only to one engine, when the WinBoard option that normally specifies this command cannot be differentiated by engine, but is always sent to both engines. E.g. if you want one of the engines to ponder, and the other not. Because it is sent last, it can overrule earlier commands. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 fb }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 fb }}}{\f1 /fb }{\b0\f1 or }{\f1 /xfb}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 firstPlaysBlack }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 firstPlaysBlack}}} {\f1 /firstPlaysBlack }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In games between two chess programs, the firstChessProgram normal ly plays white. (This is a change from earlier versions of WinBoard.) If this option is True, firstChessProgram plays black. In a multi-game match, this option affects the colors only for the first game; they still alternate in subsequent games. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 reuse}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 reuse}}}{\f1 /reuse}{\cs58\f1\super }{\b0\f1 or }{\f1 /xreuse}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 reuseFirst}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 reuseFirst}}}{\f1 /reuseFirst}{\i\f1 true|false\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 reuse2}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 reuse2}}}{\f1 /reuse2}{\cs58\f1\super }{\b0\f1 or }{\f1 /xreuse2}{\b0\f1 , or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 reuseSecond}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 reuseSecond}}}{\f1 /reuseSecond}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is True (the default), WinBoard}{\i\f1 }{\f1 uses the same chess engine process repeatedly when playing multiple games. If the option is False, WinBoard kills off the chess engine after every game and starts a fresh one for the next game. Starting a fresh chess engine can be slow, so it is not recommended. However, some chess engines may not work properly when reused, such as versions of Crafty earlier than 12.0. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 firstProtocolVersion}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 firstProtocolVersion}}}{\f1 /firstProtocolVersion }{\i\f1 ver\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondProtocolVersion}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondProtocolVersion}}}{\f1 /secondProtocolVersion }{\i\f1 ver}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option specifies which version of the chess engine communication protocol to use. By default, version-number is 2. In version 1, the "protover" command is not sent to the engine; since version 1 i s a subset of version 2, nothing else changes. Other values for version-number are not supported. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 firstScoreAbs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 firstScoreAbs}}}{\f1\cf6 /firstScoreAbs}{\i\f1\cf6 true|false\line }{\cs58\f1\cf6\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 secondScoreAbs}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 }{\f1\cf6 secondScoreAbs}}}{\f1\cf6 /secondScoreAbs}{\i\f1\cf6 true|false \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is true, the score reported by the engine is taken to be that in favor of white, even when the engine plays black. Important when winboard uses the score for adjudications, or in PGN reporting. This can be a useful option in combination with WBopt in the engine command-line, see under /fcp.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 absoluteAnalysisScore}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 absoluteAnalysisScore}}}{\f1 /absoluteAnalysisScore }{\i\f1 true|false \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 When this opti on is switched on, scores will be reported in the Engine Output window from the white point of view during analysis. When off, and in other modes, it will be reported from the point of view of the side to move. (Note that many engines violate this rule wh ile pondering!) Default: true.}{ \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 niceEngines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 niceEngines}}}{\f1\cf2 /niceEngines}{\i\f1\cf2 priority \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 This option allows you to lower the priority of the engine processes, so that the generally insatiable hunger for CPU time of chess engines does not interfere so much with smooth operation of WinBoard ( or the rest of your system). Try priority = 10 or even 20 to lower the priority of the engines. Negative values could increase the engine priority, which is not recommended.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 firstOptions}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 firstOptions}}}{\f1\cf2 /firstOptions}{\i\f1\cf2 string\line }{\cs58\f1\cf2\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 secondOptions}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\cf2\super #}{\f1\cf2 secondOptions}}}{\f1\cf2 /secondOptions}{\i\f1\cf2 string \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 The given string is a comma-separated list of (option name, option value) pairs, like the following example: \ldblquote style=Karpov,blunder rate=0\rdblquote . If the options announced by the engine at startup through the feature commands of WinBoard protocol matches one of the option names (i.e. \ldblquote style\rdblquote or \ldblquote blunder rate\rdblquote ), it would be set to the given value (i.e. \ldblquote Karpov\rdblquote or 0) through a corresponding option command to the engine. This provided that the type of the value (text or numeric) matches as well.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 firstNeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 firstNeedsNoncompliantFEN}}}{\f1\cf2 /firstNeedsNoncompliantFEN}{\i\f1\cf2 string \line }{\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 secondNeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 secondNeedsNoncompliantFEN}}}{\f1\cf2 /secondNeedsNoncompliantFEN}{\i\f1\cf2 string \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 The castling rights and e.p. fields of the FEN sent to the mentioned engine with the setboard command will be replaced by the given string. This can for instance be used to run engines that do not understand Chess960 FENs in variant fisch erandom, to make them at least understand the opening position, through setting the string to \ldblquote KQkq -\rdblquote . (Note you also have to give the e.p. field!) Other possible applications are to provide work-arounds for engines that want to see castling and e.p. fiel ds in variants that do not have castling or e.p. (shatranj, courier, xiangqi, shogi) so that WinBoard would normally omit them (string = \ldblquote - -\ldblquote , or to add variant-specific fields that are not yet supported by WinBoard (e.g. to indicate the number of checks in 3check). \par }{ \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Tournament Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Tournament Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 TournamentOptions}}}{\f1\fs20 Tournament Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tf}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tf}}}{\f1 /tf }{\i\f1 filename}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tourneyFile}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tourneyFile}}}{\f1 /tourneyFile }{\i\f1 filename}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Specifies the name of the tournament file used in match mode to conduct a multi-player tournament}{\v\f1 ICSLogon}{\f1 . This file is a special settings file, which stores the description of the tournament (including progress info), through normal options (e.g. for time control, load and save files), and through some special-purpose options listed below. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tt }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tt }}}{\f1 /tt }{\i\f1 number}{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tourneyType }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tourneyType }}}{\f1 /tourneyType }{\i\f1 number}{ \f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Specifies the type of tourney: 0 = round-robin, N>0 = (multi-)gauntlet with N gauntlet engines, -1 = Swiss through external pairing engine}{\v\f1 ICSLogon}{\f1 . Volatile option, but stored in tourney file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 cy }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 cy }}}{\f1 /cy }{\i\f1 number}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tourneyCycles }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tourneyCycles }}}{ \f1 /tourneyCycles }{\i\f1 number}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Specifies the number of cycles in a tourney}{\v\f1 ICSLogon}{\f1 . Volatile option, but stored in tourney file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 participants }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 participants}}}{\f1 /participants }{\i\f1 list}{\f1 \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The list is a multi-line text string that specifies engines occurring in the /firstChesProgramNames list in the settings file by their (implied or explicitly given) nickname, one engine per line. The ment ioned engines will play in the tourney. Volatile option, but stored in tourney file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 results }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 results}}}{\f1 /results }{\i\f1 string}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The string of +=- characters lists the result of all played games in a toruney. Games currently playing are listed as *, while a space indicates a game that is not yet played or playing (usually because it was playing, and the aborted). Volatile option, but stored in tourney file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 defaultTourneyName }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 defaultTourneyName}}}{\f1 /defaultTourneyName }{\i\f1 string}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Specifies the name of the tournament file WinBoard should propose when the Tournament Options di alog is opened. Any %y, %M, %d, %h, %m, %s in the string are replaced by the current year, month, day of the month, hours, minutes, seconds of the current time, respectively, as two-digit number. A %Y would be replaced by the year as 4-digit number. Defau lt: empty string. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 pairingEngine}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 pairingEngine}}}{\f1 /pairingEngine }{\i\f1 filename}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Specifies the external program to be used to pair the participants in Swiss tourneys. WinBoard communicates with this engine in the same way as it communicates with Chess engines. The only commands sent to the pairing engine are \ldblquote results }{ \i\f1 N string}{\f1 \rdblquote , where }{\i\f1 N}{\f1 is the number of participants, and }{\i\f1 string}{\f1 the results so far in the format of the results option, and \ldblquote pairing }{\i\f1 N}{\f1 \rdblquote , where N is the number of the tourney game. To the latter the pairing engine should answer with \ldblquote A-B\rdblquote , where A and B are participant numbers (in the range 1-N). (There should be no reply to the results command.) Default: empty string. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\cf6\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 UCI Engine Support}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 }{\f1\cf6 UCI Engine Support}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 UCIEngineSupport}}}{ \f1\fs20\cf6 UCI Engine Support \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 fUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fUCI}{\f1 }}}{\f1\cf6 /fUCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 firstIsUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 firstIsUCI}}}{\f1\cf6 /firstIsUCI}{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 sUCI}{\f1 }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 sUCI}{\f1 }}}{\f1\cf6 /sUCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 secondIsUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 secondIsUCI}}}{\f1\cf6 /secondIsUCI}{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Indicates if the mentioned engine executable file is an UCI engine,}{\v\cf6 ICSLogon}{\cf6 and should be run with the aid of a protocol adapter rather than directly. The adapterCommand option specifies wchich adapter to use, and which info to pass to it on the command line. In a normal WinBoard install, this will invoke Polyglot. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 fUCCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fUCCI}{\f1 }}}{\f1\cf6 /fUCCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 fUSI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fUSI}}}{ \f1\cf6 /fUSI \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 sUCCI}{\f1 }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 sUCCI}{\f1 }}}{\f1\cf6 /sUCCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 sUSI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 sUSI}}}{ \f1\cf6 /sUSI \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Similar to the fUCI and sUCI options, but invoking a secondary adapter, specified through he uxiAdapter option. Useful in environments where engines of several alien protocols are around, e.g. for Xiangqi, where UCI and UCCI engines need different adapters.}{\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 PolyglotDir}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 PolyglotDir}{\f1 }}}{\f1\cf6 /PolyglotDir }{\i\f1\cf6 filename}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the name of the folder in which Polyglot is installed}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 adapterCommand}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 adapteCommand}{\f1 }}}{\f1\cf6 /adapterCommand }{\i\f1\cf6 command}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 uxiAdapter}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 uxiAdapter}{\f1 }}}{\f1\cf6 /uxiAdapter }{\i\f1\cf6 command}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies the comma nds to use in stead of the engine command when the fUCI / sUCI (or for uxiAdapter fUCCI and sUCCI) are in force. The command line can contain words of the form %xxx, where xxx is the name of a WinBoard option, such as fcp, fd, cacheSizeEGTB, which will th e n automatically be replaced by the value of that option. (For the second engine the leading f or first will automatically be replaced by s or second.) This allows the engine name and directory, as well as other info known to WinBoard, to be passed to the adapter on its command line}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par Default adapterCommand is \{polyglot \endash noini \endash ec \ldblquote %fcp\rdblquote \endash ed \ldblquote %fd\rdblquote \} \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 usePolyglotBook}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 usePolyglotBook}{\f1 }}}{\f1\cf6 /usePolyglotBook }{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies if the Polygot book should be used}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 PolyglotBook}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 PolyglotBook}{\f1 }}}{\f1\cf6 /PolyglotBook }{\i\f1\cf6 filename}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the filename of the opening book that Polyglot should use}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 bookDepth }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 bookDepth}}}{\f1\cf5 /bookDepth }{\i\f1\cf5 number}{\f1\cf5 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Restricts the use of the GUI book to the first }{\i\f1\cf5 number}{\f1\cf5 full moves of the game. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 bookVariation }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 bookVariation}}}{\f1\cf5 /bookVariation }{\i\f1\cf5 number}{\f1\cf5 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Controls the selection of book moves. The default setting of 50 would play the moves with a frequency proportional to the weight listed in the book. Useful settings vary from 0 (always play best move) to 100 (select completely randomly from all listed moves). \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 fNoOwnBookUCI}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fNoOwnBookUCI}{\f1 }}}{\f1\cf6 /fNoOwnBookUCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 firstXBook}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 }{\f1\cf6 firstXBook}{\f1 }}}{\f1\cf6 /firstXBook }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 firstHasOwnBookUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 firstHasOwnBookUCI}}}{\f1\cf6 /firstHasOwnBookUCI}{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 sNoOwnBookUCI}{\f1 }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 sNoOwnBookUCI}{\f1 }}}{\f1\cf6 /sNoOwnBookUCI }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 secondXBook}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #} {\f1 }{\f1\cf6 secondXBook}{\f1 }}}{\f1\cf6 /secondXBook }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 secondHasOwnBookUCI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 secondHasOwnBookUCI}}}{\f1\cf6 /secondHasOwnBookUCI}{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Indicates if the mentioned engine lacks an opening book or not}{\cf6 . }{\cf2 Engines that have an own opening book will not use the GUI book (as given by /polyglotBook) even if /usePolyglotBook is set to true.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 defaultHashSize}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 defaultHashSize}{\f1 }}}{\f1\cf6 /defaultHashSize }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the size of the hash table to }{\i\f1\cf6 number}{\f1\cf6 MegaBytes}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 defaultCacheSizeEGTB}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 defaultCacheSizeEGTB}{\f1 }}}{\f1\cf6 /defaultCacheSizeEGTB }{\i\f1\cf6 number}{ \f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the size of the EGTB cache to }{\i\f1\cf6 number}{\f1\cf6 MegaBytes}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 defaultPathEGTB}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 defaultPathEGTB}{\f1 }}}{\f1\cf6 /defaultPathEGTB }{\i\f1\cf6 filename}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Gives the name of the folder where the end-game tablebases are installed}{\v\f1\cf6 ICSLogon}{\f1\cf6 . \par }{ \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Internet Chess Server Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Internet Chess Server Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 InternetChessServerOptions}}}{ \f1\fs20 Internet Chess Server Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ics }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ics }}}{\f1 /ics }{\b0\f1 or }{\f1 /xics}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 internetChessServerMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 internetCh essServerMode}}}{\f1 /internetChessServerMode}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Connect with an Internet Chess Server to play chess against its other users, observe games they are playing, or review games that have recently finished. See }{\f1\uldb ICS Client}{\v\f1 ICSClient}{\f1 Default: False. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 You can create a script file containing ICS commands that WinBoard will type in for you whenever you connect to the ICS. See }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icshost }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icshost }}}{\f1 /icshost }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 internetChessServerHost }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 internetChessServerHost }}}{\f1 /internetChessServerHost }{\i\f1 hostname}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The host name or numeric address of the Internet Chess Server to connect to when in ICS mode. The default is the empty string, which causes WinBoard to pop up a menu of known ICS sites. The file ics-address{\*\bkmkstart _Hlt386546221}e {\*\bkmkend _Hlt386546221}s.txt in the WinBoard distribution gives slightly more information on these sites. It includes their numeric addresses, which you can use if your site does not have a working name server. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icsport }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icsport }}}{\f1 /icsport }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 internetChessServerPort }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 internetChessServerPort }}}{\f1 /internetChessServerPort }{\i\f1 portnumber}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The port number to use when connecting to a chess server in ICS mode. Default: 5000. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 via }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 via }}}{\f1 /icshelper }{\i\f1 program}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 An external helper program used to communicate with the chess server. Typically }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 timestamp}}}{\i\f1 timestamp}{\f1 for the ICC (chessclub.com) or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super K}{\f1 timeseal}}}{\i\f1 timeseal}{\f1 for FICS (freechess.org, eics.daimi.aau.dk, etc.). This option is shorthand for \ldblquote /useTelnet /telnetProgram }{\i\f1 program}{\f1 \rdblquote }{\b\f1 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 telnet}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 telnet}}}{\f1 /telnet}{\b0\f1 or }{\f1 /xtelnet}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 useTelnet}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 useTelnet}}}{\f1 /useTelnet}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option is poorly named; it should be called }{\b\f1 /useHelper}{\f1 . If set to True, it instructs WinBoard to use an external helper program to communicate with the ICS, as spe cified by the telnetProgram option. The external program must be a pure console application that can communicate with WinBoard through pipes; the Windows telnet application is not suitable. If the option is False (the default), WinBoard communicates with the ICS by opening a Winsock TCP socket and using its own internal implementation of the telnet protocol. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 gateway}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 gateway}}}{\f1 /gateway }{\i\f1 hostname}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set to a host name, WinBoard uses }{\f1\uldb rsh}{\v\f1 rsh}{\f1 to run the telnetProgram remotely on the given host to communicate with the Internet Chess Server instead of using its own internal implementation of the telnet protocol. See the }{\f1\uldb FIREWALLS}{\v\f1 FIREWALLS}{\f1 section below for an explanation of when this option is useful. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 telnetProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 telnetProgram}}}{\f1 /telnetProgram }{\i\f1 program}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option is poorly named; it should be called }{\b\f1 /helperProgram}{\f1 . It gives the name of the remote or external helper program to be used with the gateway or useTelnet option. The default is "telnet". The telnet program is invoked with the value of internetChessServer as the first argument and the v alue of internetChessServerPort as the second argument on its command line. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icscom }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icscom }}}{\f1 /icscom }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 internetChessServerComPort }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 internetChessServerComPort }}}{\f1 /internetChessServerComPort }{\i\f1 name}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard communicates with the Internet Chess Server using a serial communication port instead of a network c onnection. Use this option if your machine is not connected to a network (not even via SLIP or PPP), but you do have Internet access through another machine by dialing in using a modem or by connecting directly to a serial terminal port. Example: \par }\pard\plain \s19\li120\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 WinBoard /ics /icscom:com1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 After you start WinBoard in this way, type whatever modem commands are necessary to dial out to your Internet provider and log in. You may need to turn off }{\f1\uldb Local Line Editing}{\v\f1 LocalLineEditing}{\f1 on the Options menu while typing commands to the modem, but turn it on again afterwards. Then telnet to the ICS, using a command like "telnet chessclub.com 5000". Important: See the paragraph in the }{ \f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1 section below about extra echoes. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 comPortSettings }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 comPortSettings }}}{\f1 /comPortSettings}{\b0\f1 }{\i\f1 \ldblquote dataRate,dataBits,parity,stopBits,flow \rdblquote \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option allows serial port parameters to be set from the command line or a settings file. The values are simply filled in to the }{\f1\uldb Communications}{\v\f1 Communications}{\f1 dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icslogon } }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icslogon }}}{\f1 /icslogon }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 internetChessServerLogonScript }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 internetChessServerLogonScript }} }{\f1 /internetChessServerLogonScript }{\i\f1 filename \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you change the name used for the }{\f1\uldb ICS Logon}{\v\f1 ICSLogon}{\f1 file. Default: "ICS.ini". The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autocomm } }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autocomm }}}{\f1 /autocomm }{\b0\f1 or }{\f1 /xautocomm}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autoComment }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autoComment }}}{\f1 /autoComment}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Comment}{\v\f1 AutoCommentCmd}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autoflag } }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autoflag }}}{\f1 /autoflag}{\b0\f1 or }{\f1 /xautoflag}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autoCallFlag }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autoCallFlag }}}{\f1 /autoCallFlag}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Flag}{\v\f1\uldb AutoFlag}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autobs }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autobs }}}{\f1 /autobs}{\b0\f1 or }{\f1 /xautobs}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autoObserve }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autoObserveCmd }}}{\f1 /autoObserve}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Observe}{\v\f1 autoObserveCmd}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 autoKibitz}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 autoKibitz}{\f1 }}}{\f1\cf11 /autoKibitz \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Kibitzes the engines last thinking output (depth, score, time, speed, PV) to the ICS in zippy mode. Show Thinking must be on for this option to work. }{\f1\cf2 Also diverts similar kibitz information of an opponent engine that is playing you through the ICS to the engine-output window, as if the engine was playing locally.}{\f1\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 moves }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 moves }}}{\f1 /moves}{\b0\f1 or }{\f1 /xmoves}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 getMoveList }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 getMoveList }}}{\f1 /getMoveList}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Get Move List}{\v\f1 getMoveListCmd}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 edit}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 edit}}}{\f1 /edit}{\cs58\f1\super }{\b0\f1 or }{\f1 /xedit}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 localLineEditing}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 localLineEditingOption}}}{\f1 /localLineEditing}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 quiet }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 quiet }}}{\f1 /quiet }{\b0\f1 or }{\f1 /xquiet}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 quietPlay }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 quietPlay }}}{\f1 /quietPlay}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Quiet Play}{\v\f1 quietPlayCmd}{\f1 option. Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 seekGraph (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_seekGraph }}}{\f1\cf5 /seekGraph }{\i\f1\cf5 true|false}{\b0\f1\cf5 , or }{ \cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{\f1\cf5 sg (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_sg}}}{\f1\cf5 /sg \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Enables summoning up of the }{\f1\uldb\cf5 Seek Graph}{\f1\cf5 by left-clicking the board. Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 autoRefresh (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_autoRefresh }}}{\f1\cf5 /autoRefresh }{\i\f1\cf5 true|false}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the }{\f1\uldb\cf5 Auto Refresh}{\v\f1\cf5 BlindfoldCmd}{\f1\cf5 option of the }{\f1\uldb\cf5 Seek Graph}{\f1\cf5 . Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 backgroundObserve (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_backgroundObserve }}}{\f1\cf5 /backgroundObserve }{\i\f1\cf5 true|false}{ \f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the }{\f1\uldb\cf5 Background Observe}{\v\f1\cf5 BlindfoldCmd}{\f1\cf5 option for observing other games during play. Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 dualBoard (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_dualBoard }}}{\f1\cf5 /dualBoard }{\i\f1\cf5 true|false}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the }{\f1\uldb\cf5 Dual Board}{\v\f1\cf5 BlindfoldCmd}{\f1\cf5 option for observing your partner\rquote s bughouse game. Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 blindfold (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 opt_blindfold }}}{\f1 /blindfold }{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Blindfold}{\v\f1 BlindfoldCmd}{\f1 option. Default: False \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ pre}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ pre}}}{\f1 /pre }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ xpre}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpre}}}{\f1 /xpre}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premove (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premove}}}{\f1 /p remove}{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 option. If set to True, the premove feature is enabled. If set to False, premove is disabled and the other }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 settings are ignored. Default: False. \par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ preWhite}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ preWhite}}}{\f1 /prewhite }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ xpreWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpreWhite}}}{\f1 /xprewhite}{\b0\f1 , or }{\cs58\f1\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premoveWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premoveWhite}}}{\f1 /premoveWhite}{\i\f1 true|false \par }\pard \s2\li115\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premoveWhiteText}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premoveWhiteText}}}{\f1 /premoveWhiteText}{\i\f1 movetext \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If }{\b\f1 premoveWhite}{\f1 is set to True and you are playing white in an ICS game, the text specified by the }{\b\f1 premoveWhiteText}{\f1 option is sent to the ICS as soon as the game starts. These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 section of the }{\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1 dialog box. The default for }{\b\f1 premoveWhite}{\f1 is False. \par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ preBlack}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ preBlack}}}{\f1 /preblack }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ xpreBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xpreBlack}}}{\f1 /xpreblack}{\b0\f1 , or }{\cs58\f1\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premoveBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premoveBlack}}}{\f1 /premoveBlack}{\i\f1 true|false \par }\pard \s2\li115\sa120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premoveBlackText}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premoveBlackText}}}{\f1 /premoveBlackText}{\i\f1 movetext \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If }{\b\f1 premoveBlack}{\f1 is set to True and you are playing black in an ICS game, the text specified by the }{\b\f1 premoveBlackText}{\f1 option is sent to the ICS as soon as the first move is received from your opponent, even if you make a different premove on the board before the first white move is received. These options can be set from the }{\f1\uldb Premove}{\v\f1 PremoveCmd}{\f1 section of the }{\f1\uldb ICS Options}{\v\f1\uldb ICSOptions}{\f1 dialog box. The default for }{\b\f1 premoveBlack}{\f1 is False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 \'f2neClickMove (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_oneClickMove }}}{\f1\cf5 /oneClickMove }{\i\f1\cf5 true|false}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the }{\f1\uldb\cf5 One-ClickMove}{\v\f1\cf5 BlindfoldCmd}{\f1\cf5 option. Default: False \par }\pard\plain \li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ alarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ alarm}}}{\b /alarm }{or}{\b }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\super K}{ xalarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ xalarm}}}{\b /xalarm}{, or }{\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ icsAlarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ icsAlarm}}}{\b /icsAlarm }{\b\i true|false}{\b \par }\pard \li115\sa120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ icsAlarmTime}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ icsAlarmTime}}}{\b /icsAlarmTime }{\b\i milliseconds \par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright {When }{\b icsAlarm}{ is set to True, the }{\uldb alarm sound}{\v soundIcsAlarm}{ is played when your clock counts down to }{\b icsAlarmTime}{ seconds. For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the }{\b icsAlarmTime}{. The }{\b icsAlarmTime}{ can be set by selecting }{\uldb ICS Alarm}{\v ICSAlarm}{ from the }{\uldb ICS options}{\v\uldb ICSOptions}{ dialog. The default is 5 seconds. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 keepAlive }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 keepAlive }}}{\f1\cf2 /keepAlive }{\i\f1\cf2 time}{\f1\cf2 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 When }{\i\f1\cf2 time}{\f1\cf2 is non-zero, send a \ldblquote date\rdblquote command every }{\i\f1\cf2 time}{\f1\cf2 minutes after your last move to the ICS, to prevent it from logging you off. (Do not use frivolously! The ICS operator might ban you.) Default: 0.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 chatBoxes (option)}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 opt_chatBoxes }}}{\f1\cf5 /chatBoxes }{\i\f1\cf5 handles}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 Sets the list of }{\f1\uldb\cf5 Chat Windows}{\v\f1\cf5 BlindfoldCmd}{\f1\cf5 to be opened at startup. The given string }{\i\f1\cf5 handles}{\f1\cf5 should be a semicolon-separated list, like \ldblquote shouts;53;Johnny\rdblquote to open 3 chat boxes, to capture all shouts (including c-shouts and \lquote it\rquote messages), the traffic on channel 53, and for a player named Johnny. Default: no chat windows. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20\cf5 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Load and Save Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Load and Save Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 LoadandSaveOptions}}}{\b0\f1\fs18\up6 }{ \f1\fs20 Load and Save Options \par }\pard\plain \s2\li115\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 lgf }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 lgf }}}{\f1 /lgf }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 loadGameFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 loadGameFile }}}{\f1 /loadGameFile }{\i\f1 filena me}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 lgi }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 lgi }}}{\f1 /lgi }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 loadGameIndex }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 loadGameIndex }}}{\f1 /loadGameIndex }{\i\f1 N}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If loadGameFile is set, WinBoard reads the specified game file at startup. You can leave out the name of this option and give just the file name, which is handy if you want to configure WinBoard as a game viewer with a bro wser such as the Windows Explorer or Netscape. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard input. If there is more than one game in the file, WinBoard pops up a menu of the availabl e games, with entries based on their PGN tags. If loadGameIndex is set to }{\i\f1 N, }{\f1 the menu is suppressed and the }{\i\f1 N}{\f1 th game found in the file is loaded immediately. An index value of \endash 1 will cause automatic stepping through the games in match mode, a value of \endash 2 will use each game twice before stepping to the next. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 td }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 td }}}{\f1 /td }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 timeDelay }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 timeDelay }}}{\f1 /timeDelay }{\i\f1 seconds}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Time delay between moves during }{\f1\uldb Load Game}{\v\f1 LoadGame}{\f1 . Fractional seconds are allowed; try 0.4. A time delay value of -1 tells WinBoard not to step through game files automatically. Default: 1 second. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 sgf }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 sgf }}}{\f1 /sgf }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 saveGameFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 saveGameFile }}}{\f1 /saveGameFile }{\i\f1 filename}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard appends a record of every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard output. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autosave } }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autosave }}}{\f1 /autosave}{\b0\f1 or }{\f1 /xautosave}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 autoSaveGames }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 autoSaveGames }}}{\f1 /autoSaveGames}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is True, at the end of every game WinBoard prompts you for a filename and appends a record of the game to the file you specify. Ignored if saveGameFile is set. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 lpf}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 lpf}}}{\f1 /lpf }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 loadPositionFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 loadPositionFile }}}{\f1 /loadPositionFile }{ \i\f1 filename}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 lpi }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 lpi }}}{\f1 /lpi }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 loadPositionIndex }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 loadPositionIndex }}}{\f1 /loadPositionIndex }{\i\f1 N}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If loadPositionFile is set, WinBoard loads the specified position file at startup. The filename is interpreted relative to WinBoard's initial working directory . The filename "-" specifies the standard input. If loadPositionIndex is set to }{\i\f1 N}{\f1 , the }{\i\f1 N}{\f1 th position found in the file is loaded; otherwise the first is loaded. An index value of \endash 1 will cause automatic stepping through the positions in math mode, a value of \endash 2 will use each position twice before stepping to the next. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 spf }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 spf }}}{\f1 /spf }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 savePositionFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 savePositionFile }}}{\f1 /savePositionFile }{ \i\f1 filename}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, WinBoard appends the final position reached in every game played to the specified file. The filename is interpreted relative to W inBoard's initial working directory. The file name "-" specifies the standard output. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 pgnExtendedInfo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 pgnExtendedInfo}{\f1 }}}{\f1\cf6 /pgnExtendedInfo }{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is set, WinBoard saves depth, score and time used for each move that the engine found as a comment in the PGN file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 pgnEventHeader}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 pgnEventHeader}{\f1 }}}{\f1\cf6 /pgnEventHeader }{\i\f1\cf6 string}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the name used in the PGN event tag to }{\i\f1\cf6 string}{\f1\cf6 . \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 saveOutOfBookInfo}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 saveOutOfBookInfo}}}{\f1\cf6 /saveOutOfBookInfo }{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Include the information on how the engine(s) game out of its opening book in a special \lquote annotator\rquote tag with the PGN file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 oldsave }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 oldsave }}}{\f1 /oldsave }{\b0\f1 or }{\f1 /xoldsave}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 oldSaveStyle }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 oldSaveStyle }}}{\f1 /oldSaveStyle}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is False (the default), WinBoard saves games in PGN (portable game notation) and positions in FEN (Forsythe-Edwards notation). If the option is True, a save style that is compatible with older versions of WinBoard (a nd of xboard) is used instead. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 debug}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 debug}}}{\f1 /debug}{\b0\f1 or }{\f1 /xdebug}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 debugMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 debugMode}}}{\f1 /debugMode}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Writes debugging information to the file \ldblquote WinBoard.debug\rdblquote , including all commands sent to the chess engine, all output received from it, and all commands sent to ICS. You can press Ctrl+Alt+F12 to turn this option on or off while WinBoard is running. Each time you turn it on, any existing debug file is overwritten. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 debugFile}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 debugFile}{\f1 }}}{\f1\cf6 /debugFile}{\cs58\f1\cf6\super }{\f1\cf6 }{\i\f1\cf6 filename}{ \f1\cf6 }{\b0\f1\cf6 or}{\f1\cf6 }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 nameOfDebugFile}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 nameOfDebugFile}{\f1 }}}{\f1\cf6 /nameOfDebugFile}{\i\f1\cf6 filename}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the name of the file to which WinBoard saves debug information (including all communication to and from the engines). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 engineDebugOutput}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 engineDebugOutput}{\f1 }}}{\f1\cf11 /engineDebugOutput}{\cs58\f1\cf11\super }{ \f1\cf11 }{\i\f1\cf11 number}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Specifies how WinBoard should handle unsolicited output from the engine, with respect to saving it in the debug file. The output is further (hopefully) ignored. If }{ \i\f1\cf11 number}{\f1\cf11 =0, WinBoard refrains from writing such spurious output to the debug file. If}{\i\f1\cf11 number}{\f1\cf11 =1, all engine output is written faithfully to the debug file. If }{\i\f1\cf11 number}{\f1\cf11 =2, any protocol-violating line is prefixed with a \lquote #\rquote character, as the engine itself should have done if it wanted to submit info for inclusion in the debug file. }{\f1\cf5 The case }{\i\f1\cf5 number}{\f1\cf5 =3 is similar, but now marks non-compliant engine output with a more conspicuous prefix.}{\f1\cf11 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 This option is provided for the benefit of applications that use the debug fi le as a source of information, such as the broadcaster of live games TLCV / TLCS. Such applications can be protected from spurious engine output that might otherwise confuse them. \par }{ \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 User Interface Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 User Interface Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 UserInterfaceOptions}}}{\b0\f1\fs18\up6 }{\f1\fs20 User Interface Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 language}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 language}}}{\f1\cf5 /language}{\i\f1\cf5 filename}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 This persistent option lets WinBoard load a \lquote language file\rquote with the given }{\i\f1\cf5 filename}{\f1\cf5 , which can contain translation lines of the form \ldblquote english text\rdblquote === \ldblquote translated text\rdblquote . WinBoard will then perform the indicated substitutions in its menus, dialogs, and displayed messages. If the }{\i\f1\cf5 filename}{\f1\cf5 does not contain a period, the extension \ldblquote .lng\rdblquote will be appended to it before use. If a file of the given }{\i\f1\cf5 filename}{\f1\cf5 does not exist, no translation will take place, which can be used to switch WinBoard back to English. A full Spanish translation is available through the file espa\'f1 ol.lng. More translation are expected to become available soon, and of course you could make your own by changing the translations in an existing one to the language of your choice. Default: no translation. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 firstLogo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 firstLogo}}}{\f1\cf2 /firstLogo }{\i\f1\cf2 filename}{\f1\cf2 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 secondLogo}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 secondLogo}}}{\f1\cf2 /secondLogo }{\i\f1\cf2 filename}{\f1\cf2 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 The appearance of either of these options causes WinBoard to reserve space for displaying logos on both sides of the clocks. Normally the first logo goes left, the second right, unless the option \lquote swap clocks\rquote is in effect. The }{\i\f1\cf2 filename}{\f1\cf2 must refer to a bitmap file (.bmp) containing a logo for the particular player (usually a 130x65 or 100x50 bitmap, which will be scaled to the height of two clock lines.) \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 autoLogo}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 autoLogo}}}{\f1\cf2 /autoLogo}{\i\f1\cf2 true|false}{\f1\cf2 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 When true, causes WinBoard to automatically supply a logo for the first and second chess program, by looking for a file named logo.bmp in the engine directory (as specified by the /fd or /sd option), and then displays it like this file was given as an argument to the /firstLogo or /secondLogo option. In this mode it will also look in a sub-folder of its installation folder called \ldblquote logos\rdblquote , for finding logos with names corresponding to the ICS (e.g. \ldblquote chessclub.com.bmp\rdblquote ) or to the human user, should they be involved in a game. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 hideThinkingFromHuman}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 hideThinkingFromHuman}}}{\f1\cf6 /hideThinkingFromHuman}{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Prevents the engine thinking output to appear in the display, without necessitating to suppress the sending of this information altogether (so it can still appear in the PGN). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{ \f1\cf2 noGUI}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 noGUI}}}{\f1\cf2 /noGUI \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 Suppresses all GUI functions of WinBoard (to speed up automated ultra-fast engine-engine games, which you don\rquote t want to watch). There will be no board or clock updates, no printing of moves, and no update of the icon on the task bar in this mode.}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 pieceNickNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 pieceNickNames}}}{\f1\cf5 /pieceNickNames }{\i\f1\cf5 string}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 A volatile option that allows the user to set al ternative characters by which the pieces could be recognized in FEN or SAN. Does not affect FEN or SAN output. This can be useful to load games and positions given in other languages. Piece indicators in FEN and SAN are first matched to the letters in the given }{\i\f1\cf5 string}{\f1\cf5 ; when this match fails, they are matched against the default names. The format of string is the same as that of the /pieceToCharTable option; you can only set a single alternative for each piece. Will only be applied in the variant active when WinBoard was started up. Default value: no nicknames. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 colorNickNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 colorNickNames}}}{\f1\cf5 /colorNickNames }{\i\f1\cf5 string}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 A volatile option that allows the user to set alternative characters by which the side to move could be indicated in FEN. Does not affect FEN output. This can be useful to loa d positions given in other languages, or for variants using non-compliant color indicators. The color field in a FEN is first matched to the letters in the given }{\i\f1\cf5 string}{\f1\cf5 ; when this match fails, they are matched against the default names. The first character of }{\i\f1\cf5 string}{\f1\cf5 will be recognized as white, the second as black. Default value: no nicknames. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 top}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 top}}}{\f1 /top }{\b0\f1 or }{\f1 /xtop}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 alwaysOnTop}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 alwaysOnTopOpt}}}{\f1 /alwaysOnTop}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Always On Top}{\v\f1 AlwaysOnTop}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 queen}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 queen}}}{\f1 /queen}{\b0\f1 or }{\f1 /xqueen}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 alwaysPromoteToQueen}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 alwaysPromoteToQueen}}}{\f1 /alwaysPromoteToQueen}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Always Queen}{\v\f1 AlwaysQueen}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 drag}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 drag}}}{\f1 /drag}{\b0\f1 or }{\f1 /xdrag}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 animateDragging}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 animateDraggingOpt} }}{\f1 /animateDragging}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Animate Dragging}{\v\f1 animateDragging}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 animate}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 animate}}}{\f1 /animate }{\b0\f1 or }{\f1 /xanimate}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 animateMoving}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 animateMovingOpt}}}{ \f1 /animateMoving}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Animate Moving}{\v\f1 animateMoving}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 flip}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 flip}}}{\f1 /flip }{\b0\f1 or }{\f1 /xflip}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 flipView}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 flipViewOption}}}{\f1 /flipView}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Auto Flip View is not set, or if you are observing but not participating in a game, then the positioning of the board at the start of each game depends on the flipView opti on. If flipView is False (the default), the board is positioned so that the white pawns move from the bottom to the top; if True, the black pawns move from the bottom to the top. In any case, the }{\f1\uldb Flip View}{\v\f1 FlipView}{\f1 menu command can be used to flip the board after the game starts \par }\pard\plain \li115\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoflip}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoflip}}}{\b /autoflip}{ or }{\b /xautoflip}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoFlipView}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoFlipViewOption}}}{\b /autoFlipView }{\b\i true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Flip View}{\v\f1 AutoFlipView}{\f1 option. Default: True. \par }\pard\plain \li115\sb120\sa60\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\b\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoraise}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoraise}}}{\b /autoraise}{ or }{\b /xautoraise}{, or }{\cs58\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ autoRaiseBoardOption}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ autoRaiseBoardOption}}}{\b /autoRaiseBoard }{\b\i true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Auto Raise Board}{\v\f1 AutoFlipView}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 highdrag}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 highdrag}}}{\f1 /highdrag }{\b0\f1 or }{\f1 /xhighdrag}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 highlightDragging\tab \tab }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 highlightDraggingOpt}}}{\f1 /highlightDragging }{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Highlight Dragging}{\v\f1 highlightDragging}{\f1 option. }{\f1\cf5 Must be on for /showTargetSquares to work.}{\f1 Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 showTargetSquares\tab \tab }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 showTargetSquaresOpt}}}{\f1\cf5 /showTargetSquares }{\i\f1\cf5 true|false}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 When set, causes WinBoard to mark all squares the piece you \lquote pick up\rquote can legally move to with big fat dot, in different colors for captures and non-captures. }{\f1\uldb\cf5 Highlight Dragging}{\v\f1\cf5 highlightDragging}{\f1\cf5 must be on for this to work. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 dropMenu\tab \tab }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 dropMenuOpt}}}{\f1\cf5 /dropMenu }{\i\f1\cf5 true|false}{\f1\cf5 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 When set, the right mouse button use d on the board will call up a context menu, (old behavior) rather than allowing you to walk the latest engine PV (new behavior). Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 highlight} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 highlight}}}{\f1 /highlight }{\b0\f1 or }{\f1 /xhighlight}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 highlightLastMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 highlightLastMoveOpt}}}{\f1 /highlightLastMove}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Highlight Last Move}{\v\f1 highlightLastMoveOpt}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 popup}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 popup}}}{\f1 /exit}{\b0\f1 or }{\f1 /xexit}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 popupMoveErrors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 popupMoveErrorsOpt} }}{\f1 /popupExitMessage}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Popup Exit Message}{\v\f1 popupExitMessageCmd}{\f1 menu option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 popup}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 popup}}}{\f1 /popup}{\b0\f1 or }{\f1 /xpopup}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 popupMoveErrors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 popupMoveErrorsOpt} }}{\f1 /popupMoveErrors}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Popup Move Errors}{\v\f1 popupMoveErrorsCmd}{\f1 menu option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 coords }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 coords }}}{\f1 /coords }{\b0\f1 or }{\f1 /xcoords}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 showCoords}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 showCoords}}}{\f1 /showCoords}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Show Coords}{\v\f1 showCoords}{\f1 option. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 legal }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 legal }}}{\f1 /legal }{\b0\f1 or }{\f1 /xlegal}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 testLegality }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 testLegality }}}{\f1 /testLegality}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Test Legality}{\v\f1 testLegalityCmd}{\f1 option. Default: True. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 size }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 size }}}{\f1 /size }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 boardSize }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 boardSize }}}{\f1 /boardSize }{\i\f1 sizename}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the }{\f1\uldb Board Size}{\v\f1 BoardSizeCmd}{\f1 option. Also chooses which board size any following Font options will affect. The default is the largest size that will fit on your screen. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ wpc}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ wpc}}}{\f1 /wpc}{\b0\f1 or }{\cs58\b0\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 whitePieceColor}}}{\cs58\f1\super #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 whitePieceColor}}}{\f1 /whitePieceColor }{\i\f1 color \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ bpc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\super #}{ bpc}}}{\f1 /bpc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 blackPieceColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 blackPieceColor}}}{\f1 /blackPieceColor }{\i\f1 color\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ lsc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ lsc}}}{\f1 /lsc }{\b0\f1 or}{\i\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 lightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 lightSquareColor}}}{\f1 /lightSquareColor }{\i\f1 color}{\cs58\f1\super }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ dsc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ dsc}}}{\f1 /dsc }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super K}{\f1 darkSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 darkSquareColor}}}{\f1 /darkSquareColor }{\i\f1 color}{\cs58\f1\super }{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Color specifications for white pieces, black pieces, light squares, and dark squares. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{ \i\f1 #rrggbb}{\f1 ) or in decimal (as }{\i\f1 rrr,ggg,bbb}{\f1 ). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFFCC, #202020, #C8C365, and #77A26D. Available on the }{\f1\uldb Board Colors}{\v\f1 BoardColors}{\f1 section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\f1 dialog. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you are using a }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 grayscale} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 grayscale}}}{\f1 grayscale monitor, try setting the colors to: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 -whitePieceColor:#FFFFFF\line -blackPieceColor:#000000\line -lightSquareColor:#CCCCCC\line -darkSquareColor:#999999 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ hsc}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ hsc}}}{\f1 /hsc }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 highlightSquareColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 highlightSquareColor}}}{\f1 /highlightSquareColor }{\i\f1 color}{ \cs58\f1\super }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ phc}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ phc}}}{\f1 /phc }{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 premoveHighlightColor}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 premoveHighlightColor}}}{\f1 /premoveHighlightColor }{\i\f1 color}{\cs58\f1\super }{\f1 \par }{\b0\f1 Color specifications for the }{\b0\f1\uldb Highlight Last Move}{\b0\v\f1 HighlightLastMove}{\b0\f1 and }{\b0\f1\uldb Premove}{\b0\v\f1 PremoveCmd}{\b0\f1 options, respectively. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as }{\b0\i\f1 #rrggbb}{\b0\f1 ) or in decimal (as }{\b0\i\f1 rrr,ggg,bbb}{\b0\f1 ). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFF00 and #FF0000, respectively. \par }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 mono }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 mono }}}{\f1 /mono}{\b0\f1 or }{\f1 /xmono}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 monoMode}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 monoMode}}}{\f1 /monoMode}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Determines whether WinBoard displays its pieces and squares in black and white (True) or color (False, the default). Available in the }{\f1\uldb Board Colors}{\v\f1 BoardColors}{\f1 section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\f1 dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 flipBlack}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 flipBlack}{\f1 }}}{\f1\cf11 /flipBlack}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Determines whether Win Board displays the black pieces upside down (or the white pieces in Flip View). Useful with Shogi with the traditional Japanese pieces, which are not distinguished by color but by orientation. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 allWhite}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 allWhite}{\f1 }}}{\f1\cf11 /allWhite}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Determines whether the white piece bitm aps will be used to display black pieces. The white pieces have a dark outline, which the black pieces lack. This makes the latter look vague if the color you give them is not very dark. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 renderPiecesWithFont}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 renderPiecesWithFont}{\f1 }}}{\f1\cf6 /renderPiecesWithFont }{\i\f1\cf6 fontname} {\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Uses the named true-type font to re nder the pieces, rather than the built-in bitmaps. The font must be installed on your computer. If the name starts with a * it is ignored, allowing you to easily disable a font temporarily in the whinboard.ini file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 fontPieceToCharTable}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fontPieceToCharTable}{\f1 }}}{\f1\cf6 /fontPieceToCharTable }{\i\f1\cf6 characterstring}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If font-based rendering of the pieces is used, this table specifies which character of the font alphabet should be used for which piece. The format of the character strings is the same as that of the argument of /pieceToCharTable. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 fontPieceSize}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 fontPieceSize}{\f1 }}}{\f1\cf6 /fontPieceSize }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The number gives the size of the piece, as a percentage of the square size. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceBackColorWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceBackColorWhite}}}{\f1\cf6 /fontPieceBackColorWhite }{\i\f1\cf6 color\line }{ \cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceForeColorWhite}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceForeColorWhite}}}{\f1\cf6 /fontPieceForeColorWhite }{\i\f1\cf6 color\line }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceBackColorBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceBackColorBlack}}}{\f1\cf6 /fontPieceBackColorBlack }{\i\f1\cf6 color\line }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super K}{ }{\f1\cf6 fontPieceForeColorBlack}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\super #}{ }{\f1\cf6 fontPieceForeColorBlack}}}{\f1\cf6 /fontPieceForeColorBlack }{\i\f1\cf6 color}{\cs58\f1\cf6\super }{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Color specifications for white pieces, black pieces that are generated with font-based rendering. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 liteBackTextureFile}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 liteBackTextureFile}{\f1 }}}{\f1\cf6 /liteBackTextureFile }{\i\f1\cf6 filename}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 darkBackTextureFile}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 darkBackTextureFile}{\f1 }}}{\f1\cf6 /darkBackTextureFile }{\i\f1\cf6 filename}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The filename indicates a bitmap file that should be used to display the light or dark squares, allowing you to make boards that look like wood, marble, etc. A filename starting with * is ignored. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 liteBackTextureMode}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 liteBackTextureMode}{\f1 }}}{\f1\cf6 /liteBackTextureMode }{\i\f1\cf6 number}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 darkBackTextureMode}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 darkBackTextureMode}{\f1 }}}{\f1\cf6 /darkBackTextureMode }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 The number indicates the way the files given in the background-texture options should be used to fill in the squares.}{\cf6\lang1043\cgrid0 Valid texture mod es are 1 (default) and 2. In mode 1 the squares are taken from portions of the texture bitmap and copied without further processing. In mode 2, squares can also be rotated, mirrored and so on in order to provide a little more variety to the texture. The o perations are selected at random so the board will look slightly different every time the program is run.\line }{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 overideLineGap}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 overideLineGap}{\f1 }}}{\f1\cf6 /overideLineGap }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The number specifies the width, in pixels, of the grid lines used to separate the squares. If it is very small (like a singl e pixel), it becomes vey hard to see which squares are highlighted (to indicate the last move), as this highlighting is a color change of these grid lines. Highlighting the moves with an arrow is then recommended. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 highlightMovesWithArrow}{\f1 }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 highlightMovesWithArrow}{\f1 }}}{\f1\cf6 /highlightMovesWithArrow }{ \i\f1\cf6 true|false}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If this option is true, a big, fat arrow is drawn to indicate the last move. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 highlightArrowColor}{\f1 }} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 highlightArrowColor}{\f1 }}}{\f1\cf6 /highlightArrowColor }{\i\f1\cf6 color}{ \f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies the color of the arrow that highlights the moves. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 evalHistoColorWhite}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 evalHistoColorWhite}{\f1 }}}{\f1\cf6 /evalHistoColorWhite }{\i\f1\cf6 color}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 evalHistoColorBlack}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 evalHistoColorBlack}{\f1 }}}{\f1\cf6 /evalHistoColorBlack }{\i\f1\cf6 color}{\f1\cf6 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf6 Specifies the colors to be used to plot the white and black scores in the evaluation graph}{\cf6\lang1043\cgrid0 .\line }{ \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorShout }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorShout}}}{\f1 /colorShout}{\i\f1 \ldblquote effects color\rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorSShout}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorSShout}}}{\f1 /colorSShout }{\i\f1 \ldblquote effects color\rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorChannel1}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorChannel1}}}{\f1 /colorChannel1 }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorChannel}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorChannel}}}{\f1 /colorChannel }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorKibitz}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorKibitz}}}{\f1 /colorKibitz }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorTell}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorTell}}}{\f1 /colorTell }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorChallenge}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorChallenge}}}{\f1 /colorChallenge }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorRequest}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorRequest}}}{\f1 /colorRequest }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorSeek}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorSeek}}}{\f1 /colorSeek }{\i\f1 \ldblquote effects color\rdblquote }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorNormal}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorNormal}}}{\f1 /colorNormal }{\i\f1 \ldblquote effects color\rdblquote \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Select colors and effects to colorize messages in the ICS Interaction window. The effects may be any combination of }{\b\f1 b}{\f1 old, }{\b\f1 i}{\f1 talic, }{\b\f1 u}{ \f1 nderline, and }{\b\f1 s}{\f1 trikeout. Colors are specified as for squares and pieces. Available on the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1 section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1 dialog. Limitation: On 256 color displays, Windows chooses the nearest solid color from the system palette, which will not always be close to the color you selected. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorBackground}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorBackground}}}{\f1 /colorBackground }{\i\f1 color \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the background color for the ICS Interaction window. Available on the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1 section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1 dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorize}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorize}}}{\f1 /colorize}{\cs58\f1\super }{\b0\f1 or }{\f1 /xcolorize}{\b0\f1 , or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 colorizeMessages}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 colorizeMessages}}}{\f1 /colorizeMessages}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If True, WinBoard colorizes messages in the ICS Interaction window with the colors listed above. Default: True. Available in the }{\f1\uldb ICS Interaction Colors}{\v\f1 ICSInteractionColors}{\f1 section of the }{\f1\uldb ICS Options}{\v\f1 ICSOptions}{\f1 dialog. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 clockFont} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 clockFont}}}{\f1 /clockFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 messageFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 messageFont }}}{\f1 /messageFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 coordFont}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 coordFont}}}{\f1 /coordFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 tagsFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 tagsFont}}}{ \f1 /tagsFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 commentFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 commentFont}}}{\f1 /commentFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icsFont}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icsFont}}}{\f1 /icsFont \ldblquote }{\i\f1 fontname:size effects}{\f1 \rdblquote \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The fonts used respectively for the clocks, the message display line, rank and file coordinate labels, the Edit Tags dialog, the Edit Comment dialog, and the ICS Interaction window. These options may be given more than once. Each occurrence a ffects the fonts for the current board size; that is, the size given in the last preceding /boardSize option, if any, or else the default size. The font size may contain a decimal point, and the effects may be any combination of }{\b\f1 b}{\f1 old, }{ \b\f1 i}{\f1 talic, }{\b\f1 u}{\f1 nderline, and }{\b\f1 s}{\f1 trikeout. Example: }{\f2\fs16 /clockFont="Arial:20.0 bi".}{\f1 Available on the }{\f1\uldb Fonts}{\v\f1 Fonts}{\f1 menu.}{\f2\fs16 \par }\pard\plain \s2\li115\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundShout}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundShout}}}{ /soundShout}{\i sound\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundSShout}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundSShout}}}{ /soundSShout }{\i sound\line }{ \cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundChannel1}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundChannel1}}}{ /soundChannel1 }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundChannel}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundChannel}}}{ /soundChannel }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundKibitz}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundKibitz}}}{ /soundKibitz }{\i sound}{\line }{ \cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundTell}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super #}{\f1 soundTell}}}{ /soundTell }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundChallenge}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundChallenge}}}{ /soundChallenge }{\i sound}{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundRequest}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundRequest}}}{ /soundRequest }{\i sound}{\line }{\cs58\f1\super K {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundMove}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{ \f1 soundMove}}}{ /soundMove }{\i sound}{\cs58\f1\super }{\line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundBell}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundBell}}}{ /soundBell }{\i sound}{\cs58\f1\super }{ \par }\pard \s2\li115\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundIcsWin}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundIcsWin}}}{\f1 /soundIcsWin }{\i\f1 sound}{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundIcsLoss}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundIcsLoss}}}{\f1 /soundIcsLoss }{\i\f1 sound}{\cs58\f1\super }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundIcsDraw}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundIcsDraw}}}{\f1 /soundIcsDraw }{\i\f1 sound}{\cs58\f1\super }{\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{ \f1 soundIcsUnfinished}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundIcsUnfinished}}}{\f1 /soundIcsUnfinished }{\i\f1 sound}{\cs58\f1\super }{\f1 \par }\pard \s2\li115\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 soundIcsAlarm}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 soundIcsAlarm}}}{\f1 /soundIcsAlarm }{\i\f1 sound}{\cs58\f1\super }{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Associate sounds with WinBoard events. Most of the events are the same ones that cause text colorization. In addition, }{\b\f1 soundMove}{\f1 is played if a chess engine or another player makes a move. }{\b\f1 SoundBell}{\f1 is played if the chess server sends an ASCII BEL character (Ctrl+G). Available on the }{\f1\uldb Sounds}{\v\f1 Sounds}{\f1 menu. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\b SoundIcsWin}{, }{\b soundIcsLoss}{, }{\b soundIcsDraw}{ and }{\b soundIcsUnfinished}{ are played at the conclusion of an ICS game. The result of the game determines which sound is played. \par }{\b SoundIcsAlarm}{ is played when your game clock counts down to }{\uldb icsAlarmTime}{\v\uldb icsAlarmTime}{. \par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480\adjustright {\f1 The }{\i\f1 sound}{\f1 argument may be one of the following: \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f1 The name of a }{\f2 .wav}{\f1 file. The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe). \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 $}{ \f1 , indicating the default system sound. \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 !}{ \f1 followed by the name of a built-in WinBoard wave resource. \par {\pntext\pard\plain\f3\fs20\lang1033\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\ls2\adjustright {\f2 !}{ \f1 alone, or \ldblquote \rdblquote (empty string), indicating silence. \par }\pard \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright {\f1 The default for soundMove and soundBell is }{\f2 $}{\f1 , while the others default to silence. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icsMenu}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icsMenu}}}{\f1 /icsMenu=\{}{\i\f1 entries}{\f1 \} }{\b0\f1 or }{\f1 /icsMenu=@}{\i\f1 filename \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the right-button }{\f1\uldb context menu}{\v\f1 ICSInteractionContextMenu}{\f1 that is available in the upper (output) pane of the ICS Interaction window. It consists of a list of menu entries, one per line. If the option value starts with an @ sign, it is the name of a file that contains the entries. Each entry contains either f our fields separated by commas or the single character }{\f2 "-"}{\f1 . The fields are: \par {\pntext\pard\plain\f5\fs20\lang1033\cgrid \hich\af5\dbch\af0\loch\f5 1.\tab}}\pard\plain \fi-360\li480\sb80\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright \f5\fs20\cgrid {The menu text. If this field begins with }{\f2 "|"}{, the item begins a new column in the menu and the }{\f2 "|"}{ is not shown. If this field contains an }{\f2 "&"}{, the character after the ampersand is underlined in the menu and acts as a keyboard shortcut for the item when the menu is displayed. Do not assign the same shortcut key to two different menu items. \par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 2.\tab}}\pard\plain \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright \f5\fs20\cgrid {\f1 Text to insert into the input pane. The text cannot include a comma. You can use ICS aliases to get around this limitation. \par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 3.\tab}}\pard \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright {\f1 A flag (1 or 0) saying whether to insert a space and }{\i\f1 name }{\f1 (see }{\f1\uldb above}{\v\f1 Tell}{\f1 ) after the text. If you set this flag, you might also want to put "(name)" into the menu text as a memory aid. \par {\pntext\pard\plain\s26 \f1\fs20\lang1033\cgrid \hich\af1\dbch\af0\loch\f1 4.\tab}}\pard \s26\fi-360\li480\sl-240\slmult0\nowidctlpar\jclisttab\tx480{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\ls14\adjustright {\f1 A flag (1 or 0) saying whether the result should be sent immediately to ICS or left in the input pane for further editing. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 You can now use two special insert texts \ldblquote chat\rdblquote and \ldblquote none\rdblquote in the entry definitions. In stead of being sent to the ICS, WinBoard will recognize them as special cases (they are not valid ICS commands anyway). \ldblquote Chat\rdblquote will open a chat box for the handle you clicked on, \ldblquote none\rdblquote will define a disabled entry (usually used with an item name of spaces), which you could put in the position of the menu that pops up under your mouse pointer, so there would be no default action when you up-click without moving the mouse first. \par }{The entry }{\f2 "-"}{ produces a separator line in the menu. The top three menu entries are always }{\b Copy and Paste}{, }{\b Copy}{, and }{\b Paste}{, but you have full control over the rest of the menu. \par }{\f1 The default menu is: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 \endash \line &Who,who,0,1\line Playe&rs,players,0,1\line &Games,games,0,1\line &Sought,sought,0,1\line |}{\f2\fs20\cf5 ,none,0,0 \par Open Chat Box (name),chat,1,0}{\f2\fs20 \par &Tell (name),tell,1,0\line M&essage (name),message,1,0\line \endash \line &Finger (name),finger,1,1\line &Vars (name),vars,1,1\line &Observe (name),observe,1,1\line &Match (name),match,1,1\line Pl&ay (name),play,1,1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1 file with a plain text editor such as Notepad. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 icsNames}} #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 icsNames}}}{\f1 /icsNames=\{}{\i\f1 names}{\f1 \} }{\b0\f1 or }{\f1 /icsNames=@}{\i\f1 filename \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the drop-down list of ICS names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \rdblquote /ics /icsHost=\rdblquote and adds the result to the command-line options. There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings} {\v\f1 settings}{\f1 file with a plain text editor such as Notepad. \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 firstChessProgramNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 firstChessProgramNames}}}{\f1 /firstChessProgramNames=\{}{\i\f1 names}{\f1 \} }{\b0\f1 or }{\f1 /firstChessProgramNames="@}{\i\f1 filename}{\f1 " \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the first drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \rdblquote /cp /firstChessProgram=\rdblquote and adds the result to the command-line options. \par \par There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1 file with a plain text editor such as Notepad. Example: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2 /firstChessProgramNames=\{GNUChess\line WCrafty-15_11 /fd="C:\\Program Files\\Crafty"\line ArasanX /fd="C:\\Program Files\\Arasan \\Arasan 4.1"\line "EXchess xb" /fd=C:\\EXchess\line Comet-WB /fd=C:\\Comet\line \} \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 secondChessProgramNames}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 secondChessProgramNames}}}{\f1 /secondChessProgramNames=\{}{\i\f1 names}{\f1 \}}{\b0\f1 or }{\f1 /secondChessProgramNames="@}{\i\f1 filename}{\f1 "}{\i\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 This option lets you customize the second drop-down list of chess engine names that appears in the W inBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text \rdblquote /cp /secondChessProgram=\rdblquote and adds the result to the command-line options. \par \par There is no graphical user interface to set this option. To change it, edit your }{\f1\uldb settings}{\v\f1 settings}{\f1 file with a plain text editor such as Notepad. Example: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {/secondChessProgramNames=\{GNUChess\line WCrafty-15_11 /sd="C:\\\\Program Files\\\\Crafty\\"\line ArasanX /sd="C:\\Program Files\\ Arasan\\Arasan 4.1"\line "EXchess xb" /sd=C:\\EXchess\line Comet-WB /sd=C:\\Comet\line \}}{\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 singleEngineList}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 singleEngineList}}}{\f1 /singleEngineList }{\i\f1 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set to true, the }{\f1\uldb secondChessProgramNames}{\f1 option will be ignored, and the value of the }{\f1\uldb firstChessProgramNames}{\f1 option will be used in its place with the required modifications (every option referring to the first engine being replaced by the corresponding one referring to the second). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xy coordinates of board}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xy}}}{\f1 /x=}{\i\f1 xcoord }{\f1 /y=}{\i\f1 ycoord \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location of the board window, giving the screen coordinates of the upper left-hand corner. Both arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Analysis window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1 /analysisX=}{\i\f1 xcoord }{\f1 /analysisY=}{\i\f1 ycoord}{\f1 /analysisW=}{ \i\f1 width}{\f1 /analysisH=}{\i\f1 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 These options have been deprecated, as the analysis window is replaced by the more general engine-output window. They are recognized, but ignored, and no longer saved in the winboard.ini file. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Comment window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1 /commentX=}{\i\f1 xcoord }{\f1 /commentY=}{\i\f1 ycoord}{\f1 /commentW=}{ \i\f1 width}{\f1 /commentH=}{\i\f1 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Comment window, giving the screen coordinates of the upper left-hand corner }{\f1\cf2 (relative to the main window)}{\f1 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Game List window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1 /gameListX=}{\i\f1 xcoord }{\f1 /gameListY=}{\i\f1 ycoord}{\f1 /gameListW=}{ \i\f1 width}{\f1 /gameListH=}{\i\f1 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Game List window, giving the screen coordinates of the upper left-hand corner }{\f1\cf2 (relative to the main window), }{\f1 the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of ICS Interaction window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1 /icsX=}{\i\f1 xcoord }{\f1 /icsY=}{\i\f1 ycoord}{\f1 /icsW=}{\i\f1 width}{\f1 /icsH=}{\i\f1 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the ICS Interaction window, giving the screen coordinates of the upper left-hand corner }{\f1\cf2 (relative to the main window)}{\f1 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Tags window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1 /tagsX=}{\i\f1 xcoord }{\f1 /tagsY=}{\i\f1 ycoord}{\f1 /tagsW=}{\i\f1 width}{\f1 /tagsH=}{\i\f1 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Sets the initial location and size of the Tags window, giving the screen coordinates of the upper left-hand corner }{\f1\cf2 (relative to the main window)}{\f1 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Move History window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1\cf6 /moveHistoryX=}{\i\f1\cf6 xcoord }{\f1\cf6 moveHistoryY=}{\i\f1\cf6 ycoord}{\f1\cf6 /moveHistoryW=}{\i\f1\cf6 width}{\f1\cf6 /moveHistoryH=}{\i\f1\cf6 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the move-history window, giving the screen coordinates of the upper left-hand corner}{\f1 }{\f1\cf2 (relative to the main window) }{\f1\cf6 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Evaluation Graph window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1\cf6 /evalGraphX=}{\i\f1\cf6 xcoord }{\f1\cf6 /evalGraphY=}{\i\f1\cf6 ycoord}{\f1\cf6 /evalGraphW=}{\i\f1\cf6 width}{\f1\cf6 /evalGraphH=}{\i\f1\cf6 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the evaluation-graph window, giving the screen coordinates of the upper left-hand corner}{\f1 }{\f1\cf2 (relative to the main window)}{\f1\cf6 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 xywh coordinates of Engine Output window}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 xywh}}}{\f1\cf6 /engineOutputX=}{\i\f1\cf6 xcoord }{\f1\cf6 /engineOutputY=}{ \i\f1\cf6 ycoord}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\f1\cf6 /engineOutputW=}{\i\f1\cf6 width}{\f1\cf6 /engineOutputH=}{\i\f1\cf6 height \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Sets the initial location and size of the engine-output window, giving the screen coordinates of the upper left-hand corner}{\f1 }{\f1\cf2 (relative to the main window)}{\f1\cf6 , the width, and the height. All four arguments must be given together. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 engineOutputUp}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Window Up}}}{\f1\cf6 /engineOutputUp }{\i\f1\cf6 true|false \par }\pard \s2\li119\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 evalGraphUp}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Window Up}}}{\f1\cf6 /evalGraphUp }{\i\f1\cf6 true|false}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 moveHistoryUp}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 Window Up}}}{\f1\cf6 /moveHistoryUp }{\i\f1\cf6 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If set to True, the corresponding window is displayed, if False, the window is absent. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 stickyWindows}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 stickyWindows}}}{\f1\cf6 /stickyWindows }{\i\f1\cf6 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Auxiliary windows touching the main window will stay attached to the latter when you move it. \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 autoDisplayComment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 autoDisplayComment}}}{\f1\cf6 /autoDisplayComment }{\i\f1\cf6 true|false \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 autoDisplayTags}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 autoDisplayTags}}}{\f1\cf6 /autoDisplayTags }{\i\f1\cf6 true|false \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If set to True, these options cause the window with the move comments, and the window with PGN tags, respectively, to pop up automatically when such tags or comments are encountered during the replaying a stored or loaded game. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 gameListTags}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 gameListTags}{\f1 }}}{\f1\cf6 /gameListTags }{\i\f1\cf6 string}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 The }{\i\f1\cf6 string}{\f1\cf6 contains single-character codes specifying the PGN tags that have to be listed for each game in the game-list window, and their order. The meaning of the characters is a=out-of-book info, b=black Elo, e=event, d=date, o=round, p=players, r=result, }{ \f1\cf2 c=result comment, }{\f1\cf6 w=white Elo, s=site, t=time control and v=variant, Default: \ldblquote eprd\rdblquote . \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\cf6\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 Adjudication Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 }{\f1\cf6 Adjudication Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 AdjudicationOptions}}}{ \b0\f1\fs18\cf6\up6 }{\f1\fs20\cf6 Adjudication Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 adjudicateLossThreshold}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 adjudicateLossThreshold}{\f1 }}}{\f1\cf6 /adjudicateLossThreshold }{\i\f1\cf6 scorethreshold}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If the given value is non-zero, WinBoard adjudicates the game as a lo ss if both engines agree for a duration of 6 consecutive ply that the score is below the given score threshold for that engine. Make sure the score is interpreted properly by WinBoard, using /firstScoreAbs and /secondScoreAbs if needed.}{\cf6 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 adjudicateDrawMoves}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 adjudicateDrawMoves}{\f1 }}}{\f1\cf6 /adjudicateDrawMoves }{\i\f1\cf6 number}{ \f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 If the given value is non-zero, WinBoard adjudicates the game as a draw if after the given }{\i\f1\cf6 number}{\f1\cf6 of moves it was not yet decided. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 checkMates}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 checkMates}{\f1 }}}{\f1\cf11 /checkMates}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard detects all checkmates and stalemates, and ends the game as soon as they occur. Legality-testing must be on for this option to work.} { \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 testClaims}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 testClaims}{\f1 }}}{\f1\cf11 /testClaims}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard verifies all result claims made by engines, and those who send false claims will forfeit the game because of it. Legal ity-testing must be on for this option to work.}{\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 materialDraws}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 materialDraws}{\f1 }}}{\f1\cf11 /materialDraws}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard adjudicates games as draws when there is no sufficient material left to create a checkmate. This applies to KBKB with like bishops, and to KBK, KNK and KK. Legality-testing must be on for this option to work.}{\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 trivialDraws}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 trivialDraws}{\f1 }}}{\f1\cf11 /trivialDraws}{\i\f1\cf11 true|false}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard adjudicates games as draws that cannot be usualy won without opponent assistance. This applies to KBKB with unlike bishops, and to K BKN, KNKN, KNNK, KRKR and KQKQ. The draw is called after 6 ply into these end-games, to allow quick mates that can occur in some positions. KQKQ does not really belong in this category, and might be taken out in the future. (When bitbase-based adjudicatio ns are implemented.) Legality-testing must be on for this option to work.}{\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 ruleMoves}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 ruleMoves}{\f1 }}}{\f1\cf11 /ruleMoves }{\i\f1\cf11 number}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If the given value is non-zero, WinBoard adjudicates the game as a draw after the given }{\i\f1\cf11 number}{\f1\cf11 of consecutive reversible moves. Engines can claim draws after 50 moves, irrespective of the value of }{\i\f1\cf11 number}{\f1\cf11 .}{\cf11 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 repeatsToDraw}{\f1 }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 repeatsToDraw}{\f1 }}}{\f1\cf11 /repeatsToDraw }{\i\f1\cf11 number}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If the given value is non-zero, WinBoard adjudicates the game as a draw if a position is repeated the given }{\i\f1\cf11 number}{\f1\cf11 of times. Engines can claim draws after 3 repeats, (on the 3rd occurrence, actually), irrespective of the value of }{\i\f1\cf11 number}{\f1\cf11 . Beware that positions that have different castling or en-passant rights do not count as repeats, WinBoard is fully e.p. and castling aware!}{\cf11 \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20\cf11 \page }{\cs58\f1\fs20\super +{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super +}{\f1 main}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Other Options}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Other Options}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 OtherOptions}}}{\b0\f1\fs18\up6 }{\f1\fs20 Other Options \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ncp }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ncp }}}{\f1 /ncp}{\b0\f1 or }{\f1 /xncp}{\b0\f1 ,}{\f1 }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 noChessProgram}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 noChessProgram}}}{ \f1 /noChessProgram}{\i\f1 true|false}{\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is True, WinBoard acts as a passive chessboard; it does not start a chess program or connect to ICS. This option also sets clockMode to False. Default: False. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 mode}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 mode}}}{\f1 /mode}{\b0\f1 or }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 initialMode}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 initialMode}}}{\f1 /initialMode }{\i\f1 modename \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is given, WinBoard selects the given }{\i\f1 modename}{\f1 from the }{\f1\uldb Mode menu}{\v\f1 ModeMenu }{\f1 after starting and (if applicable) processing the }{\f1\uldb loadGameFile}{\v\f1 loadGameFile }{\f1 or }{\f1\uldb loadPositionFile}{\v\f1 loadPositionFile }{\f1 option. Default: "". Other supported values are TwoMachines, AnalyzeFile, Analysis, MachineWhite, MachineBlack, EditGame, EditPosition, and Training. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 variant}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 variant}}}{\f1 /variant}{\b0\f1 }{\i\f1 varname}{\f1 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { Activates preliminary, partial support for playing chess variants against a local engine or editing variant games. This flag is not needed in ICS mode. Recognized variant names are: \par }\pard\plain \s20\li119\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {normal\tab \tab Normal chess\line wildcastle\tab Shuffle chess, king can castle from d file\line nocastle\tab Shuffle chess, no castling allowed\line fischerandom\tab Fischer Random shuffle chess\line bughouse\tab Bughouse, ICC/FICS rules\line crazyhouse\tab Crazyhouse, ICC/FICS rules\line losers \tab Lose all pieces or get mated (ICC wild 17)\line suicide\tab Lose all pieces including king (FICS)\line giveaway\tab Try to have no legal moves (ICC wild 26)\line twokings\tab Weird ICC wild 9\line kriegspiel\tab Opponent's pieces are invisible\line atomic \tab Capturing piece explodes (ICC wild 27)\line 3check\tab Win by giving check 3 times (ICC wild 25) \par }\pard\plain \s66\li119\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {xiangqi\tab Chinese Chess (on a 9x10 board)\line shogi\tab \tab Japanese Chess (on a 9x9 board, with piece drops) \line capablanca\tab Capablanca Chess (10x8 board, with Archbishop and Chancellor pieces)\line gothic\tab \tab similar, with a better initial position\line caparandom\tab An FRC-like version of Capablanca Chess (10x8 board) \line janus\tab \tab A game with two Archbishops (10x8 board)\line shatranj\tab Ancient Arabic Chess, with Elephants and General replacing B and Q.\line courier\tab Medieval intermedite between shatranj and modern Chess (on 12x8 board) \line falcon\tab \tab A patented Chess variant with two Falcon pieces (10x8) board \line berolina\tab Pawns capture straight ahead, and move diagonal (legality testing off!)\line cylinder\tab Pieces wrap around the board, as if it were a cylinder (legality testing off!) \line fairy\tab \tab A variant in which all pieces known to WinBoard can participate\line knightmate\tab King moves a Knight, and vice versa \par }{\cf2 makruk\tab Thai Chess (shatranj-like, pawns promote on 6th rank)\line super\tab \tab Superchess, a shuffle variant with B+N, R+N, K+N and Q+N compound\line great\tab \tab Great Shatranj, variant without sliders, on 10x8 board (legality testing off!)\line }{ \par }\pard \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright {In the shuffle variants, WinBoard does now shuffle the pieces, although you can still do it by hand using Edit Position. }{\cf0 Some variants are supported only in ICS mode, in cluding bughouse, and kriegspiel.}{ }{\cf0 The winning/drawing conditions in crazyhouse (off-board interposition on mate) are not fully understood}{\cf2 , but losers, suicide, giveaway, atomic, and 3check this should be OK.}{\cf0 In crazyhouse}{\cf2 , WinBoard now does keep track of off-board pieces.In shatranj it does implement the baring rule when mate detection is switched on}{. }{\cf2 In xiangqi it does implement the rules for perpetual checking and chasing (in Two-Machines mode).}{ \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf5\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super K}{ \f1\cf5 shuffleOpenings}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf5\super #}{\f1\cf5 shuffleOpenings}}}{\f1\cf5 /shuffleOpenings \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf5 This volatile option will cause shufflin g of all pieces on the back rank, even in variants that normally have a fixed opening setup, according to the setting of the /defaultFrcPosition. It will remain in effect untill you select a new variant. In variants with normal castling, corner Rooks and King will be exempted from shuffling. Color-bound pieces such as Bishops will be kept on differently colored squares. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 boardHeight}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 boardHeight}}}{\f1\cf11 /boardHeight }{\i\f1\cf11 height}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard number of board ranks in any variant. If the height is given as \lquote -1\rquote , the default height for the variant is used. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 boardWidth}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 boardWidth}}}{\f1\cf11 /boardWidth }{\i\f1\cf11 width}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard number of board files in any variant. If the width is given as \lquote -1\rquote , the default width for the variant is used. Width a non-standard width, the initial position will always be an empty board, as the usual opening array will not fit. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 holdingsSize}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 holdingsSize}}}{\f1\cf11 /holdingsSize }{\i\f1\cf11 size}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Allows you to set a non-standard size for the holdings in any variant. If the size is given as \lquote -1\rquote , the default holdings size for the variant is used. The first }{\i\f1\cf11 size}{\f1\cf11 piece types will go into the holdings on capture, and you will be able to drop them on the board in stead of making a normal move. If }{\i\f1\cf11 size}{\f1\cf11 equals 0, there will be no holdings. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf6 defaultFrcPosition}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 defaultFrcPosition}}}{\f1\cf6 /defaultFrcPosition }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Specifies the number of the opening position in shuffle games like FRC. A value of \lquote -1\rquote means the position is randomly generated by WinBoard. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 pieceToCharTable}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 pieceToCharTable}}}{\f1\cf11 /pieceToCharTable }{\i\f1\cf11 characterstring}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 The characters that are used to represent the piece types WinBoard knows in FEN diagrams and SAN moves. The string argument has to h ave an even length (or it will be ignored), as white and black pieces have to be given separately (in that order). The last letter for each color will be the King. The letters before that will be PNBRQ and then a whole host of fairy pieces in an order tha t has not fully crystallized yet (currently FEACWMOHIJGDVSLU, F=Ferz, Elephant, A=Archbishop, C=Chancellor, W=Wazir, M=Commoner, O=Cannon, H=Nightrider). You should list at least all pieces that occur in the variant you are playing. If you have less than 4 4 characters in the string, the pieces not mentioned will get assigned a period, and you will not be able to distinguish them in FENs. You can also explicitly assign pieces a period, in which case they will not be counted in deciding which captured pieces can go into the holdings. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cf11 A tilde as a piece name does mean this piece is used to represent a promoted Pawn in Crazyhouse-like games, i.e. on capture it turns back onto a Pawn. A + similarly indicate the piece is a Shogi-style promoted piece, that should re vert to its non-promoted version on capture (rather than to a Pawn). \par Note that promoted pieces are represented by pieces 11 further in the list. \par You should not have to use this option often: each variant has its own default setting for the piece representation in FEN, which should be sufficient in normal use. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 rsh }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 rsh }}}{\f1 /rsh }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 remoteShell }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 remoteShell }}}{\f1 /remoteShell }{\i\f1 shellname} {\f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Name of the command used to run programs remotely. If this option is not given, WinBoard}{\i\f1 }{\f1 uses its own built-in implementation of the Unix }{\i\f1 rcmd}{\f1 protocol (the protocol used by }{\i\f1 rsh}{\f1 ). \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ruser }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ruser }}}{\f1 /ruser }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 remoteUser }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 remoteUser }}}{\f1 /remoteUser }{\i\f1 username}{ \f1 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 User name on the remote system when running programs with the remoteShell. The default is your local user name. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf11\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{ \f1\cf11 userName}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf11 userName}}}{\f1\cf11 /userName }{\i\f1\cf11 username}{\f1\cf11 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Name under which the Human player will be listed in the PGN file. (Default is the login name on your local computer.) \par }\pard\plain \s2\li119\sb120\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 delayBeforeQuit}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 delayBeforeQuit}}}{\f1\cf6 /delayBeforeQuit }{\i\f1\cf6 number}{\f1\cf6 \par }\pard \s2\li119\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright {\cs58\f1\cf6\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 }{\f1\cf6 delayAfterQuit}}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 }{\f1\cf6 delayAfterQuit}}}{\f1\cf6 /delayAfterQuit }{\i\f1\cf6 number}{\f1\cf6 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 These options specify how long WinBoard has to wait before sending a termination signal to rogue engine processes, that do not want to react to the \lquote quit\rquote command. The second one determines the pause after killing the engine, to make sure it dies. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ini }}# {\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ini }}}{\f1 /ini }{\b0\f1 or}{\f1 }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 settingsFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 settingsFile }}}{\f1 /settingsFile }{\i\f1 filename\line }{\cs58\f1\cf2\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super K}{\f1\cf2 saveSettingsFile }}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2 saveSettingsFile }}}{\f1\cf2 /saveSettingsFile }{\i\f1\cf2 filename}{\i\f1 \line }{\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 at sign}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 atsign }}}{\f1 @ }{\i\f1 file-name \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 See }{\f1\uldb Settings}{\v\f1 Settings}{\f1 . \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Initialization files}}K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Files}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Files}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Files}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 INITIALIZATION FILES \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Settings } }}{\f1\fs18\up6 }{\cs58\f1\super #{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Settings }}}{\f1 Settings \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {When WinBoard starts up, it reads option settings from a file named }{\i winboard.ini }{ in its installation directory (the directory containing winboard.exe). Options in this file have the same format as }{\uldb command line options}{\v Options}{, except that they do not all have to be on a sing le line. You can put a comment in a settings file by preceding it with a semicolon (}{\f2 ;}{). \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {The winboard.ini file is read before the command line is processed, so any options you give on the command line override options in the file. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If WinBoard encounters a /}{\f1\uldb settingsFile}{\v\f1 settingsFile}{\f1 }{\i\f1 filename }{\f1 or }{\f1\uldb @}{\v\f1 atsign}{\i\f1 filename }{\f1 option while reading settings (whether from the command line or a file), it reads more settings from the given file before reading the next option. \par The }{\f1\uldb Save Settings Now}{\v\f1 SaveSettings}{\f1 menu command writes the current values of most options to a file. In addition, settings are saved automatically when WinBoard exits if }{\f1\uldb Save Settings on Exit}{\v\f1 SaveSettingsOnExit}{ \f1 is checked. The settings are written to the last file named in a /settingsFile command }{\f1\cf2 that could be s uccessfully read, or in a /saveSettingsFile command (where no attempt is made to read it at all, making it work even if the mentioned file did not exist yet),}{\f1 if any; otherwise to winboard.ini}{\i\f1 .}{\f1 The @ option does not affect which file settings are saved to. \par Warning: Because Save Settings overwrites the last settings file (usually winboard.ini) and only saves a subset of WinBoard's options, you should not add settings of more options to such a file with a text editor. If you do this, your additional options w ill be lost on the next Save Settings. You can change the values of existing settings freely, using Notepad or any plain text editor. Be careful not to do this while WinBoard is running, however, unless you know that Save Settings on Exit is off. Otherwis e all your changes will be overwritten and lost when WinBoard exits. \par }{\f1\cf11 Notice that tournament managers, like PSWBTM, usually call WinBoard with the option not to save settings on exit, so that the entire tournament uses the same settings. So it does make sense to edit \lquote volatile\rquote options, such as /variant, into the settings file before such a tournament.}{\f1 }{\f1\cf2 Also note that a settings file that contains a /settingsFile or /saveSettingsFile option to redirect later saving to another file effectively protects its own contents against being overwritten by saving settings.}{\f1 \par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\cs58\f1\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 ICS Logon} }#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 ICSLogon}}}{\f1 ICS Logon \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Whenever WinBoard connects to the Internet Chess Server, if it finds a file called }{\i\f1 ICS.ini }{\f1 in its installation directory}{\i\f1 ,}{\f1 it feeds the file's contents to the ICS as commands. Usually the first two lines of the file should be your ICS user name and password. You can specify a different name instead of }{\i\f1 ICS.ini}{\f1 by using the }{\f1\uldb icslogon}{\v\f1 icslogon}{ \f1 command line option. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Installing Chess Engines}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Installing Chess Engines}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 InstallingChessEngines}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs20 INSTALLING CHESS ENGINES \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Introduction \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard is capable of operating with many different chess engines. You can play chess against a compatible engine, set up matches between two engines, or (advanced users only) run an automated computer player on an ICS. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Typically, the main difficulty in installing a new chess engine for use b y WinBoard comes in getting the engine itself running and setting its options appropriately. The connection to WinBoard is relatively straightforward. \par WinBoard-compatible chess engines are Win32 command line programs that you can run by hand in an MS-DOS P rompt box and type human-readable commands to. WinBoard connects to an engine simply by starting the engine up in the background and communicating with it through a pair of pipes. Therefore the basic procedure for installing an engine is: \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 1. Get a copy of the engine and any supporting files it needs. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 2. Install and configure the engine as a command-line program by following the instructions that come with it. Try it out by running it from the command line in an MS-DOS Prompt box and make sure it works. \par 3. Optional, but recommended: Try out the WinBoard plus engine combination by running WinBoard with the proper command line arguments in an MS-DOS Prompt box. \par 4. Create a shortcut on your desktop or Start menu to run the engine with WinBoard. \par 5. Optionally edit your WinBoard.ini file to add the engine to the drop-down lists on WinBoard's startup dialog. \par This document cannot explain steps 1 and 2 in detail for all engines, but we will take you through all five steps in outline, using Crafty as an example. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 Example: Crafty \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 1. Choose a directory to put Crafty in. We'll use }{\f2 C:\\Program Files\\Crafty}{\f1 in this example. Download your copy of Crafty into this directory from its author's FTP site, }{\f2 ftp://ftp.cis.uab.edu/pub/hyatt}{\f1 . At this writing, you will need at least the following files: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 read.me\line v15/crafty.doc\line v15/crafty.faq\line v15/wcrafty-15.*.exe}{\f1\fs20 (where * is replaced by the largest number there)\line }{\f2\fs20 common/start.zip}{\fs20 \line }{\f2\fs20 common/medium.zip}{\fs20 }{\f1\fs20 (or another book). \par }\pard\plain \s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 2. The first three files are documentation that you can read with a text edit or. Read the read.me file first and follow the instructions carefully. This will take some time. Do not write to the author of WinBoard if you have trouble with the instructions in the Crafty read.me. Try running Crafty from an MS-DOS Prompt box and make sure it works before you go on. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 3. Optional, but recommended: In an MS-DOS Prompt box,}{ }{\f2 cd }{\f1 to the directory where WinBoard is installed, typically }{\f2 "C:\\Program Files\\WinBoard"}{\f1 . Then type the following command line. Use the actual name of the wcrafty file you downloaded, not an }{\f2 *}{\f1 , and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too. \par }\pard\plain \s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid {WinBoard /cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\Crafty" /scp=WCrafty-15.* /sd="C:\\Program Files\\Crafty" \par }\pard\plain \s16\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard should start up, with Crafty running as its chess engine. Check that you can play chess against Crafty. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 4. To make a shortcut or Start menu entry for Crafty: Right-click on the desktop and select New/Shortcut. Use the Browse button to fin d your winboard.exe file and get its name into the Command Line box. (It usually will be "C:\\Program Files\\WinBoard\\winboard.exe".) Click in the Command Line box and hit the End key to go to the end. Add the following to the end of the command line, }{ \i\f1 after}{\f1 the closing quotation mark. Use the actual name of the wcrafty file you downloaded, not an }{\f2 *}{\f1 , and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too. \par }\pard\plain \s63\fi-720\li1440\sb80\sl-240\slmult0\nowidctlpar\adjustright \f2\fs20\cgrid {/cp /fcp=WCrafty-15.* /fd="C:\\Program Files\\Crafty" \line /scp=WCrafty-15.* /sd="C:\\Program Files\\Crafty" \par }\pard\plain \s62\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Press Next, choose a name for the shortcut, and press Finish. You can now use this shortcut to run WinBoard with Crafty. Double-click it to check that it works. You can drag or copy the shortcut into your Start menu if you like. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 5. To add Crafty as an option in the WinBoard Startup dialog, edit your }{\f1\uldb WinBoard.ini file}{\v\f1 Settings}{\f1 with Notepad or another plain text editor, carefully following the example shown under }{\f1\uldb /firstChessProgramNames}{\v\f1 firstChessProgramNames}{\f1 above. \par }\pard\plain \s2\li120\sb120\sa60\sl-240\slmult0\nowidctlpar\outlinelevel1\adjustright \b\f5\fs20\cgrid {\f1 For more information \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If you would like to run an automated computer player on the ICS, see the separate file }{\f2 zippy.README}{\f1 . If you would like to write your own engine to interface to WinBoard, see the separate file }{\f2 engine-intf.html}{\f1 , and join the mailing list mentioned there. Both files are included in the WinBoard distribution. You might also want to get the source code for WinBoard. It is available from the author's Web page, http://www.tim-mann.org/chess.html}{\f2 .}{\f1 \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Firewalls}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Firewalls}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Firewalls}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs18\up6 }{\f1\fs20 FIREWALLS \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 By default, "WinBoard /ics"}{\i\f1 }{\f1 communicates with an Internet Chess Server by opening a TCP socket directly from the machine it is running on to the ICS. If there is a firewall between your machine and the ICS, this won't work. Here are some recipes for getting around common kinds of firewalls using special options to WinBoard}{\i\f1 .}{\f1 Important: See the paragraph in the }{\f1\uldb LIMITATIONS}{\v\f1 LIMITATIONS}{\f1 section below about extra echoes. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Suppose that you can't telnet directly to ICS, but you can telnet to a firewall host, log in, a nd then telnet from there to ICS. Let's say the firewall is called fire.wall.com. Set command-line options as follows: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 WinBoard -ics -icshost fire.wall.com -icsport 23 \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Then when you run WinBoard}{\i\f1 }{\f1 in ICS mode, you will be prompted to log in to the firewall host. (This works because port 23 is the standard telnet login service.) Do so, then telnet to ICS, using a command like "telnet chessclub.com 5000", or whatever command the firewall provides for telnetting to port 5000. \par If your firewall lets you telnet (o r rlogin) to remote hosts, but doesn't let you telnet to port 5000, you will have to find some other host outside the firewall that does let you do this, and hop through it. For instance, suppose you have an account at foo.edu. Follow the recipe above, bu t instead of typing "telnet chessclub.com 5000" to the firewall, type "telnet foo.edu" (or "rlogin foo.edu"), log in there, and then type "telnet chessclub.com 5000". \par Exception: chessclub.com itself lets you connect to the chess server on the default telnet port (23), which is what you get if you don\rquote t specify a port to the telnet program. But the other chess servers don\rquote t allow this. \par Suppose that you can't telnet directly to ICS, but you can use rsh to run programs on a firewall host, and that host can telnet to ICS. Let's say the firewall is called rsh.wall.com. Set command-line options as follows: \par }\pard\plain \s19\li520\sb60\sl-240\slmult0\keep\nowidctlpar\tx520\tx920\tx1320\tx1720\tx2120\adjustright \f6\fs16\cgrid {\f2\fs20 WinBoard -ics -gateway rsh.wall.com -icshost chessclub.com \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Then when you run WinBoard}{\i\f1 }{\f1 in ICS mode, it will connect to the ICS by using rsh to run the command "telnet chessclub.com 5000" on host rsh.wall.com. \par ICC timestamp and FICS timeseal do not work through many}{\b\f1 }{\f1 firewalls. You can use them only if your firewall gives a clean TCP connection with a full 8-bit wide path. If your firewall allows you to get out only by running a special telnet program, you can't use timestamp or timeseal across it. But if you have access to a computer just outside your firewall, and you have much lower netlag when talking to that computer than to the ICS, it might be worthwhile runn ing timestamp there. Follow the instructions above for hopping through a host outside the firewall (foo.edu in the example), but run timestamp or timeseal on that host instead of telnet. \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Suppose that you have a SOCKS firewall that requires you to go through some extra level of authentication, but after that will give you a clean 8-bit wide TCP connection to the chess server. In that case, if you are using timestamp or timeseal, you need to somehow socksify it; if not, you need to socksify WinBoard itself. S ocksification is beyond the scope of this document, but see the SOCKS Web site at http://www.socks.nec.com/how2socksify.html. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Limitations}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Limitations}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Limitations}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs18\up6 }{\f1\fs20 LIMITATIONS }{\f1\fs20\cf11 AND NON-LIMITATIONS}{\f1\fs20 \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard}{\i\f1 }{\f1 is a Win32 application. It runs only on Windows NT and Windows 95. It does not work on Windows 3.11 or earlier, even with the Win32s compatibility package. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\i\f1 CMail, }{\f1 the companion program to xboard for playing electronic mail correspondence chess, has not been ported to Win32. \par There is no way for two people running copies of WinBoard}{\i\f1 }{\f1 to play each other without going through the Internet Chess Server. \par Under some circumstances, your ICS password may be echoed when you log on. \par If you are connecting to the ICS by running telnet, timestamp, or timeseal on an Internet provider host, you may find th at each line you type is echoed back an extra time after you hit Enter. You can probably turn this echo off. If your Internet provider is a Unix system, type "}{\f2 stty -echo}{\f1 " after you log in to the provider but before you run telnet, timestamp, or timeseal. In addition, you may need to type the sequence \ldblquote }{\f2 Ctrl+Q Ctrl+E Enter}{\f1 \ldblquote after you have finished logging in to ICS. On VMS, type \ldblquote } {\f2 set terminal /noecho /nowrap}{\f1 \rdblquote , and after you telnet to the ICS, type \ldblquote }{\f2 Ctrl+Q Ctrl+] Enter set mode char Enter Enter}{\f1 \rdblquote . It is a good idea to turn off the extra remote echo if you can, because otherwise it can get interleaved with output from the ICS and confuse WinBoard's parsing routines. Don\rquote t just turn off }{\f1\uldb Local Line Editing}{\v\f1 localLineEditing}{\f1 so that you see only the remote echo and not the local one; that will make the interleaving problem worse. \par The game parser recognizes only algebraic notation (SAN). \par The }{\f1\uldb ICS logon}{\v\f1 ICSLogon}{\f1 file does not work properly when you connect to ICS through a Unix gateway host by setting }{\f1\uldb icsPort}{\v\f1 icsPort}{\f1 to 23. The Unix login process apparently discards type-ahead. \par Some WinBoard functions may not work with versions of GNU Chess earlier than 4.0, patchlevel 77. The current version of WinBoard}{\i\f1 }{\f1 works best with Crafty version 15.11 or later. \par }{\f1\cf11 Many of the following points used to be limitations in WinBoard 4.2.7 and earlier, but are now fixed: \par The internal move legality tester in WinBoard 4.3.xx does look at the game history, and is fully aware of castling or en passant-capture rights. }{\f1 It permits castling with the king on the }{\b\f1 d}{\f1 file because this is possible in some "wild 1" games on ICS. The piece-drop menu does not check piece drops in bughouse to see if you actually hold the piece you are trying to drop.}{\f1\cf11 But this way of dropping pieces should be considered an obsolete feature, now that pieces can be dropped by dragging them from the holdings to the board. }{\f1 Anyway, if you would attempt an illegal move when using a chess engine or the ICS,}{\f1\cf11 }{\f1 WinBoard will accept the error message that comes back, undo the move, and let you try another. \par }{\f1\cf11 FEN positions saved by WinBoard}{\i\f1\cf11 }{\f1\cf11 do include correct information about whether castling or en passant are legal, and also handle the 50-move counter. \par }\pard\plain \s20\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The mate detector does not understand that non-contact mate is not really mate in bughouse.}{\f1\cf11 }{\f1 The only problem this causes while playing is minor: a "#" (mate indicator) character will show up after a non-contact mating move in the move list. WinBoard will not assume the game is over at that point,}{\f1\cf11 not even when the option Detect Mates is on. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Edit Gam e mode always uses the rules of the selected variant, which can be a variant that uses piece drops. You can load and edit games that contain piece drops. The (obsolete) piece menus are not active, but you can perform piece drops by dragging pieces from t he holdings. \par Edit Position mode does not allow you to edit the Crazyhouse holdings properly. You cannot drag pieces to the holding, and using the popup menu to put pieces there does not adapt the holding counts and leads to an inconsistent state. Set up Cra zyhouse positions by loading / pasting a bFEN, from there you can set the holdings. \par Fischer Random castling is fully understood. You can enter castlings by dragging the King on top of your Rook. You can probably also play Fischer Random successfully on ICS by typing castling moves into the ICS Interaction window. \par }{\f1 Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Authors}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Authors}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid { \cs58\f1\super $}{\f1 Authors}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs18\up6 }{\f1\fs20 AUTHORS AND CONTRIBUTORS \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 WinBoard is partly based on }{\i\f1 xboard}{\f1 , a chessboard program for Unix and the X Window System. Tim Mann has been responsible for all versions of WinBoard,}{ \i\f1 }{\f1 and for xboard versions 1.3 and beyond. }{\f1\cf11 H.G.Muller is responsible for version 4.3.}{\f1 \par Mark Williams added many features to Wi nBoard 4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training mode, auto raise, and blindfold. Hugh Fischer added piece animation to xboard, and Henrik Gram added it to WinBoard. Frank McIngvale contributed many xboard}{\i\f1 }{\f1 user interface improvements and improved Crafty support. Jochen Wiedmann ported xboard}{\i\f1 }{\f1 to the Amiga, creating }{\i\f1 AmyBoard}{\f1 , and converted the documentation to texinfo. Elmar Bartel contributed the new piece bitmaps for version 3.2. Evan Welsh wrote }{\i\f1 CMail. }{\f1 John Chanak contributed t he initial implementation of ICS mode. The default color scheme was adapted from Wayne Christopher's }{\i\f1 XChess }{\f1 program. Chris Sears and Dan Sears wrote the original xboard}{\i\f1 . }{\f1 They were responsible for xboard}{\i\f1 }{\f1 versions 1.0 through 1.2. }{\f1\cf6 Allessandro Scotti added ma ny elements to the user interface, including the board textures and font-based rendering, the evaluation-graph, move-history and engine-output window. He was also responsible for adding the UCI support.}{\f1 }{\f1\cf11 H.G. Muller made WinBoard castling- and e.p.-aware, a dded variant support with adjustable board sizes, the Crazyhouse holdings, and the fairy pieces. In addition he added most of the adjudication options, made WinBoard ore robust in dealing with buggy and crashing engines, and extended time control with a t ime-odds and node-count-based modes.}{\f1 \par Send bug reports to . Please run WinBoard with the /debug option and include the output from the resulting WinBoard.debug file in your message. \par }\pard\plain \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 The WinBoard 4.3.xx line is being developed by H.G. Mull er independently of the GNU Savannah xboard project. Bug reports on this version, and suggestions for improvements and additions, are best posted in the WinBoard forum, development section (}{\field{\*\fldinst {\f1 HYPERLINK http://www.open-aurec.com/wbforum) }{\f1 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b02000000170000002300000068007400740070003a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d0029000000e0c9ea79f9bace118c8200aa004ba90b460000006800740074007000 3a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d00290000000000000000000000000000000000000000000000000000}}}{\fldrslt {\cs59\ul\cf2 http://www.open-aurec.com/wbforum)}}}{\f1 . \par }{\f1\cf2 Michel van den Bergh provided the code for reading Polyglot opening books. \par Arun Persaud worked with H.G. Muller to combine all the features of the never-released WinBoard 4.2.8 of the Savannah project (mainly by Daniel Mehrmann), and th e never-released 4.3.16 into a unified WinBoard 4.4, which is now available both from the Savannah web site and the WinBoard forum. \par }\pard\plain \s1\li120\sb280\sa120\sl-320\slmult0\nowidctlpar\outlinelevel0\adjustright \b\f5\cgrid {\f1\fs20 \page }{\cs58\f1\fs20\super K{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super K}{\f1 Copyright}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1 Copyright}}${\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super $}{\f1 Copyright}}+{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super +}{\f1 main}}}{\f1\fs18\up6 }{\f1\fs20 COPYRIGHT \par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. \line Enhancements Copyright 1992-2009 Free Software Foundation, Inc. \par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 The following terms apply to Digital Equipment Corporation's copyright interest in WinBoard: \par All Rights Reserved \par Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without f ee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity per taining to distribution of the software without specific, written prior permission. \par DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY S PECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOF TWARE. \par The following terms apply to the enhanced version of WinBoard distributed by the Free Software Foundation: \par 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 3 of the License, or (at your option) any later version. \par 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. \par 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. \par }}xboard-4.8.0/winboard/woptions.h0000644000175000001440000000275512420374633013574 00000000000000/* * woptions.h -- Options dialog box routines for WinBoard * * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include VOID GeneralOptionsPopup(HWND hwnd); VOID BoardOptionsPopup(HWND hwnd); VOID IcsOptionsPopup(HWND hwnd); VOID FontsOptionsPopup(HWND hwnd); VOID SoundOptionsPopup(HWND hwnd); VOID CommPortOptionsPopup(HWND hwnd); VOID LoadOptionsPopup(HWND hwnd); VOID SaveOptionsPopup(HWND hwnd); VOID TimeControlOptionsPopup(HWND hwnd); VOID EnginePlayOptionsPopup(HWND hwnd); VOID UciOptionsPopup(HWND hwnd); xboard-4.8.0/winboard/wsnap.c0000644000175000001440000002172712421746530013035 00000000000000/* * Smart "snapping" for window moving and sizing * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "wsnap.h" /* Imports from winboard.c */ extern HINSTANCE hInst; extern HWND hwndMain; extern HWND moveHistoryDialog; extern HWND evalGraphDialog; extern HWND engineOutputDialog; extern HWND gameListDialog; static BOOL SnappingEnabled = TRUE; static void AddSnapPoint( int * grid, int * grid_len, int value ) { int len = *grid_len; if( len < MAX_SNAP_POINTS ) { int i; for( i=0; ix_grid, &sd->x_grid_len, rc->left ); AddSnapPoint( sd->x_grid, &sd->x_grid_len, rc->right ); AddSnapPoint( sd->y_grid, &sd->y_grid_len, rc->top ); AddSnapPoint( sd->y_grid, &sd->y_grid_len, rc->bottom ); } static RECT activeRect, mainRect; static int side, loc; // code for edge we were dragging, and its latest coordinate static void AddSnapWindow( HWND hWndCaller, SnapData * sd, HWND hWndSnapWindow ) { if( hWndSnapWindow != NULL && IsWindowVisible(hWndSnapWindow) ) { RECT rc; GetWindowRect( hWndSnapWindow, &rc ); if(hWndSnapWindow == hwndMain) mainRect = rc; if(hWndCaller != hWndSnapWindow) { AddSnapRectangle( sd, &rc ); } else { activeRect = rc; // [HGM] glue: remember original geometry of dragged window } } } static BOOL AdjustToSnapPoint( int * grid, int grid_len, int value, int * snap_size, int * delta ) { BOOL result = FALSE; int i; for( i=0; ix_grid_len = 0; snapData->y_grid_len = 0; side = 0; /* Add desktop area */ if( SystemParametersInfo( SPI_GETWORKAREA, 0, &rc, 0 ) ) { AddSnapRectangle( snapData, &rc ); } if( hWnd != hwndMain ) { /* Add other windows */ AddSnapWindow( hWnd, snapData, hwndMain ); AddSnapWindow( hWnd, snapData, moveHistoryDialog ); AddSnapWindow( hWnd, snapData, evalGraphDialog ); AddSnapWindow( hWnd, snapData, engineOutputDialog ); AddSnapWindow( hWnd, snapData, gameListDialog ); } return 0; } LRESULT OnMoving( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ) { LPRECT lprc = (LPRECT) lParam; int delta_x = 0; int delta_y = 0; int snap_size_x = SNAP_DISTANCE; int snap_size_y = SNAP_DISTANCE; if( ! SnappingEnabled ) { return FALSE; } AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x ); AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x ); AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y ); AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y ); OffsetRect( lprc, delta_x, delta_y ); return TRUE; } LRESULT OnSizing( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ) { LPRECT lprc = (LPRECT) lParam; int delta_x = 0; int delta_y = 0; int snap_size_x = SNAP_DISTANCE; int snap_size_y = SNAP_DISTANCE; if( ! SnappingEnabled ) { return FALSE; } switch( wParam ) { case WMSZ_BOTTOM: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y ); lprc->bottom += delta_y; side = 4; loc = lprc->bottom; break; case WMSZ_BOTTOMLEFT: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y ); lprc->bottom += delta_y; AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x ); lprc->left += delta_x; break; case WMSZ_BOTTOMRIGHT: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->bottom, &snap_size_y, &delta_y ); lprc->bottom += delta_y; AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x ); lprc->right += delta_x; break; case WMSZ_LEFT: AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x ); lprc->left += delta_x; side = 1; loc = lprc->left; break; case WMSZ_RIGHT: AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x ); lprc->right += delta_x; side = 2; loc = lprc->right; break; case WMSZ_TOP: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y ); lprc->top += delta_y; side = 3; loc = lprc->top; break; case WMSZ_TOPLEFT: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y ); lprc->top += delta_y; AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->left, &snap_size_x, &delta_x ); lprc->left += delta_x; break; case WMSZ_TOPRIGHT: AdjustToSnapPoint( snapData->y_grid, snapData->y_grid_len, lprc->top, &snap_size_y, &delta_y ); lprc->top += delta_y; AdjustToSnapPoint( snapData->x_grid, snapData->x_grid_len, lprc->right, &snap_size_x, &delta_x ); lprc->right += delta_x; break; default: return FALSE; } return TRUE; } static int Adjust( LONG *data, int new, int old , int vertical) { // protect edges that also touch main window if(!vertical && (old == mainRect.left || old == mainRect.right)) return 0; if( vertical && (old == mainRect.top || old == mainRect.bottom)) return 0; // if the coordinate was the same as the old, now make it the same as the new edge position if(*data == old) { *data = new; return 1; } return 0; } static void KeepTouching( int side, int new, int old, HWND hWnd ) { // if the mentioned window was touching on the moved edge, move its touching edge too if( IsWindowVisible(hWnd) ) { RECT rc; int i = 0; GetWindowRect( hWnd, &rc ); switch(side) { // figure out which edge we might need to drag along (if any) case 1: i = Adjust(&rc.right, new, old, 0); break; case 2: i = Adjust(&rc.left, new, old, 0); break; case 3: i = Adjust(&rc.bottom, new, old, 1); break; case 4: i = Adjust(&rc.top, new, old, 1); break; } if(i) { // the correct edge was touching, and is adjusted SetWindowPos(hWnd, HWND_TOP, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER ); } } } LRESULT OnExitSizeMove( SnapData * snapData, HWND hWnd, WPARAM wParam, LPARAM lParam ) { if(side && hWnd != hwndMain) { // [HGM] glue: we have been sizing, by dragging an edge int *grid = (side > 2 ? snapData->y_grid : snapData->x_grid); int i, pos = -1, len = (side > 2 ? snapData->y_grid_len : snapData->x_grid_len); switch(side) { case 1: pos = activeRect.left; break; case 2: pos = activeRect.right; break; case 3: pos = activeRect.top; break; case 4: pos = activeRect.bottom; break; } for(i=0; i #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "evalgraph.h" #include "wsnap.h" #define WM_REFRESH_GRAPH (WM_USER + 1) /* Module globals */ static BOOLEAN evalGraphDialogUp; static COLORREF crWhite = RGB( 0xFF, 0xFF, 0xB0 ); static COLORREF crBlack = RGB( 0xAD, 0x5D, 0x3D ); static HDC hdcPB = NULL; static HBITMAP hbmPB = NULL; static HPEN pens[PEN_ANY+1]; // [HGM] put all pens in one array static HBRUSH hbrHist[3] = { NULL, NULL, NULL }; Boolean EvalGraphIsUp() { return evalGraphDialogUp; } // [HGM] front-end, added as wrapper to avoid use of LineTo and MoveToEx in other routines (so they can be back-end) void DrawSegment( int x, int y, int *lastX, int *lastY, int penType ) { POINT stPt; if(penType == PEN_NONE) MoveToEx( hdcPB, x, y, &stPt ); else { HPEN hp = SelectObject( hdcPB, pens[penType] ); LineTo( hdcPB, x, y ); SelectObject( hdcPB, hp ); } if(lastX != NULL) { *lastX = stPt.x; *lastY = stPt.y; } } // front-end wrapper for drawing functions to do rectangles void DrawRectangle( int left, int top, int right, int bottom, int side, int style ) { HPEN hp = SelectObject( hdcPB, pens[PEN_BLACK] ); RECT rc; rc.top = top; rc.left = left; rc.bottom = bottom; rc.right = right; if(style == FILLED) FillRect( hdcPB, &rc, hbrHist[side] ); else { SelectObject( hdcPB, hbrHist[side] ); Rectangle( hdcPB, left, top, right, bottom ); } SelectObject( hdcPB, hp ); } // front-end wrapper for putting text in graph void DrawEvalText(char *buf, int cbBuf, int y) { SIZE stSize; SetBkMode( hdcPB, TRANSPARENT ); GetTextExtentPoint32( hdcPB, buf, cbBuf, &stSize ); TextOut( hdcPB, MarginX - stSize.cx - 2, y - stSize.cy / 2, buf, cbBuf ); } // front-end static HBRUSH CreateBrush( UINT style, COLORREF color ) { LOGBRUSH stLB; stLB.lbStyle = style; stLB.lbColor = color; stLB.lbHatch = 0; return CreateBrushIndirect( &stLB ); } // front-end. Create pens, device context and buffer bitmap for global use, copy result to display // The back-end part n the middle has been taken out and moed to PainEvalGraph() static VOID DisplayEvalGraph( HWND hWnd, HDC hDC ) { RECT rcClient; int width; int height; /* Get client area */ GetClientRect( hWnd, &rcClient ); width = rcClient.right - rcClient.left; height = rcClient.bottom - rcClient.top; /* Create or recreate paint box if needed */ if( hbmPB == NULL || width != nWidthPB || height != nHeightPB ) { if( pens[PEN_DOTTED] == NULL ) { pens[PEN_BLACK] = GetStockObject(BLACK_PEN); pens[PEN_DOTTED] = CreatePen( PS_DOT, 0, RGB(0xA0,0xA0,0xA0) ); pens[PEN_BLUEDOTTED] = CreatePen( PS_DOT, 0, RGB(0x00,0x00,0xFF) ); pens[PEN_BOLDWHITE] = CreatePen( PS_SOLID, 2, crWhite ); pens[PEN_BOLDBLACK] = CreatePen( PS_SOLID, 2, crBlack ); hbrHist[0] = CreateBrush( BS_SOLID, crWhite ); hbrHist[1] = CreateBrush( BS_SOLID, crBlack ); hbrHist[2] = CreateBrush( BS_SOLID, GetSysColor( COLOR_3DFACE ) ); // background } if( hdcPB != NULL ) { DeleteDC( hdcPB ); hdcPB = NULL; } if( hbmPB != NULL ) { DeleteObject( hbmPB ); hbmPB = NULL; } hdcPB = CreateCompatibleDC( hDC ); nWidthPB = width; nHeightPB = height; hbmPB = CreateCompatibleBitmap( hDC, nWidthPB, nHeightPB ); SelectObject( hdcPB, hbmPB ); } // back-end painting; calls back front-end primitives for lines, rectangles and text PaintEvalGraph(); SetWindowText(hWnd, MakeEvalTitle(differentialView ? T_("Blunder Graph") : T_("Evaluation Graph"))); /* Copy bitmap into destination DC */ BitBlt( hDC, 0, 0, nWidthPB, nHeightPB, hdcPB, 0, 0, SRCCOPY ); } // Note: Once the eval graph is opened, this window-proc lives forever; een closing the // eval-graph window merely hides it. On opening we re-initialize it, though, so it could // as well hae been destroyed. While it is open it processes the REFRESH_GRAPH commands. LRESULT CALLBACK EvalGraphProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; PAINTSTRUCT stPS; HDC hDC; switch (message) { case WM_INITDIALOG: Translate(hDlg, DLG_EvalGraph); if( evalGraphDialog == NULL ) { evalGraphDialog = hDlg; RestoreWindowPlacement( hDlg, &wpEvalGraph ); /* Restore window placement */ } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; case WM_ERASEBKGND: return TRUE; case WM_PAINT: hDC = BeginPaint( hDlg, &stPS ); DisplayEvalGraph( hDlg, hDC ); EndPaint( hDlg, &stPS ); break; case WM_MOUSEWHEEL: if((short)HIWORD(wParam) < 0) appData.zoom++; if((short)HIWORD(wParam) > 0 && appData.zoom > 1) appData.zoom--; goto paint; case WM_RBUTTONDOWN: differentialView = !differentialView; case WM_REFRESH_GRAPH: paint: hDC = GetDC( hDlg ); DisplayEvalGraph( hDlg, hDC ); ReleaseDC( hDlg, hDC ); break; case WM_LBUTTONDOWN: if( wParam == 0 || wParam == MK_LBUTTON ) { int index = GetMoveIndexFromPoint( LOWORD(lParam), HIWORD(lParam) ); if( index >= 0 && index < currLast ) { ToNrEvent( index + 1 ); } } return TRUE; case WM_SIZE: InvalidateRect( hDlg, NULL, FALSE ); break; case WM_GETMINMAXINFO: { MINMAXINFO * mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; } break; /* Support for captionless window */ case WM_CLOSE: EvalGraphPopDown(); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; } // creates the eval graph, or unhides it. VOID EvalGraphPopUp() { FARPROC lpProc; CheckMenuItem(GetMenu(hwndMain), IDM_ShowEvalGraph, MF_CHECKED); if( evalGraphDialog ) { SendMessage( evalGraphDialog, WM_INITDIALOG, 0, 0 ); if( ! evalGraphDialogUp ) { ShowWindow(evalGraphDialog, SW_SHOW); } } else { crWhite = appData.evalHistColorWhite; crBlack = appData.evalHistColorBlack; lpProc = MakeProcInstance( (FARPROC) EvalGraphProc, hInst ); /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */ CreateDialog( hInst, MAKEINTRESOURCE(DLG_EvalGraph), hwndMain, (DLGPROC)lpProc ); FreeProcInstance(lpProc); } evalGraphDialogUp = TRUE; } // Note that this hides the window. It could as well have destroyed it. VOID EvalGraphPopDown() { CheckMenuItem(GetMenu(hwndMain), IDM_ShowEvalGraph, MF_UNCHECKED); if( evalGraphDialog ) { ShowWindow(evalGraphDialog, SW_HIDE); } evalGraphDialogUp = FALSE; } // This function is the interface to the back-end. It is currently called through the front-end, // though, where it shares the HistorySet() wrapper with MoveHistorySet(). Once all front-ends // support the eval graph, it would be more logical to call it directly from the back-end. VOID EvalGraphSet( int first, int last, int current, ChessProgramStats_Move * pvInfo ) { /* [AS] Danger! For now we rely on the pvInfo parameter being a static variable! */ currFirst = first; currLast = last; currCurrent = current; currPvInfo = pvInfo; if( evalGraphDialog ) { SendMessage( evalGraphDialog, WM_REFRESH_GRAPH, 0, 0 ); } } xboard-4.8.0/winboard/wgamelist.c0000644000175000001440000003601012421747466013701 00000000000000/* * wgamelist.c -- Game list window for WinBoard * * Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "wsnap.h" #define _(s) T_(s) /* Module globals */ static BOOLEAN gameListUp = FALSE; static FILE* gameFile; static char* gameFileName = NULL; /* [AS] Setup the game list according to the specified filter */ int GameListToListBox( HWND hDlg, BOOL boReset, char * pszFilter, struct GameListStats * stats, BOOL byPos, BOOL narrow ) { ListGame * lg = (ListGame *) gameList.head; int nItem; char buf[MSG_SIZ]; BOOL hasFilter = FALSE; int count = 0; struct GameListStats dummy; if(!hDlg) hDlg = gameListDialog; // [HGM] to allow calling from Game List Options dialog if(!hDlg) return 0; /* Initialize stats (use a dummy variable if caller not interested in them) */ if( stats == NULL ) { stats = &dummy; } stats->white_wins = 0; stats->black_wins = 0; stats->drawn = 0; stats->unfinished = 0; if( boReset ) { SendDlgItemMessage(hDlg, OPT_GameListText, LB_RESETCONTENT, 0, 0); } if( pszFilter != NULL ) { if( strlen( pszFilter ) > 0 ) { hasFilter = TRUE; } } if(byPos) InitSearch(); for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){ char * st = NULL; BOOL skip = FALSE; int pos = -1; if(nItem % 2000 == 0) { snprintf(buf, MSG_SIZ, _("Scanning through games (%d)"), nItem); SetWindowText(hwndMain, buf); DoEvents(); } if(!narrow || lg->position >= 0) { if( hasFilter ) { st = GameListLine(lg->number, &lg->gameInfo); if( !SearchPattern( st, pszFilter) ) skip = TRUE; } if( !skip && byPos) { if( (pos = GameContainsPosition(gameFile, lg)) < 0) skip = TRUE; } if( ! skip ) { if(!st) st = GameListLine(lg->number, &lg->gameInfo); SendDlgItemMessage(hDlg, OPT_GameListText, LB_ADDSTRING, 0, (LPARAM) st); count++; /* Update stats */ if( lg->gameInfo.result == WhiteWins ) stats->white_wins++; else if( lg->gameInfo.result == BlackWins ) stats->black_wins++; else if( lg->gameInfo.result == GameIsDrawn ) stats->drawn++; else stats->unfinished++; if(!byPos) pos = 0; } } lg->position = pos; if(st) free(st); lg = (ListGame *) lg->node.succ; } SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, 0, 0); SetWindowText(hwndMain, "WinBoard"); return count; } /* [AS] Show number of visible (filtered) games and total on window caption */ static int GameListUpdateTitle( HWND hDlg, char * pszTitle, int item_count, int item_total, struct GameListStats * stats ) { char buf[256]; snprintf( buf, sizeof(buf)/sizeof(buf[0]),_("%s - %d/%d games"), pszTitle, item_count, item_total ); if( stats != 0 ) { sprintf( buf+strlen(buf), " (%d-%d-%d)", stats->white_wins, stats->black_wins, stats->drawn ); } SetWindowText( hDlg, buf ); return 0; } #define MAX_FILTER_LENGTH 128 LRESULT CALLBACK GameListDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static char szDlgTitle[64]; static HANDLE hwndText; int nItem; RECT rect; static int sizeX, sizeY; int newSizeX, newSizeY; MINMAXINFO *mmi; static BOOL filterHasFocus = FALSE; int count; struct GameListStats stats; static SnapData sd; switch (message) { case WM_INITDIALOG: Translate(hDlg, DLG_GameList); GetWindowText( hDlg, szDlgTitle, sizeof(szDlgTitle) ); szDlgTitle[ sizeof(szDlgTitle)-1 ] = '\0'; if (gameListDialog) { SendDlgItemMessage(hDlg, OPT_GameListText, LB_RESETCONTENT, 0, 0); } /* Initialize the dialog items */ hwndText = GetDlgItem(hDlg, OPT_TagsText); /* Set font */ SendDlgItemMessage( hDlg, OPT_GameListText, WM_SETFONT, (WPARAM)font[boardSize][GAMELIST_FONT]->hf, MAKELPARAM(TRUE, 0 )); count = GameListToListBox( hDlg, gameListDialog ? TRUE : FALSE, NULL, &stats, FALSE, FALSE ); SendDlgItemMessage( hDlg, IDC_GameListFilter, WM_SETTEXT, 0, (LPARAM) "" ); SendDlgItemMessage( hDlg, IDC_GameListFilter, EM_SETLIMITTEXT, MAX_FILTER_LENGTH, 0 ); filterHasFocus = FALSE; /* Size and position the dialog */ if (!gameListDialog) { gameListDialog = hDlg; GetClientRect(hDlg, &rect); sizeX = rect.right; sizeY = rect.bottom; if (wpGameList.x != CW_USEDEFAULT && wpGameList.y != CW_USEDEFAULT && wpGameList.width != CW_USEDEFAULT && wpGameList.height != CW_USEDEFAULT) { WINDOWPLACEMENT wp; EnsureOnScreen(&wpGameList.x, &wpGameList.y, 0, 0); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = SW_SHOW; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpGameList.x; wp.rcNormalPosition.right = wpGameList.x + wpGameList.width; wp.rcNormalPosition.top = wpGameList.y; wp.rcNormalPosition.bottom = wpGameList.y + wpGameList.height; SetWindowPlacement(hDlg, &wp); GetClientRect(hDlg, &rect); newSizeX = rect.right; newSizeY = rect.bottom; ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; } else GetActualPlacement( gameListDialog, &wpGameList ); } GameListUpdateTitle( hDlg, _("Game List"), count, ((ListGame *) gameList.tailPred)->number, &stats ); // [HGM] always update title GameListHighlight(lastLoadGameNumber); return FALSE; case WM_SIZE: newSizeX = LOWORD(lParam); newSizeY = HIWORD(lParam); ResizeEditPlusButtons(hDlg, GetDlgItem(hDlg, OPT_GameListText), sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); case WM_GETMINMAXINFO: /* Prevent resizing window too small */ mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; break; case WM_COMMAND: /* [AS] If is pressed while editing the filter, it's better to apply the filter rather than selecting the current game. */ if( LOWORD(wParam) == IDC_GameListFilter ) { switch( HIWORD(wParam) ) { case EN_SETFOCUS: filterHasFocus = TRUE; break; case EN_KILLFOCUS: filterHasFocus = FALSE; break; } } if( filterHasFocus && (LOWORD(wParam) == IDOK) ) { wParam = IDC_GameListDoFilter; } /* [AS] End command replacement */ switch (LOWORD(wParam)) { case OPT_GameListLoad: LoadOptionsPopup(hDlg); return TRUE; case IDOK: nItem = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0); if (nItem < 0) { /* is this possible? */ DisplayError(_("No game selected"), 0); return TRUE; } break; /* load the game*/ case OPT_GameListNext: nItem = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0); nItem++; if (nItem >= ((ListGame *) gameList.tailPred)->number) { /* [AS] Removed error message */ /* DisplayError(_("Can't go forward any further"), 0); */ return TRUE; } SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, nItem, 0); break; /* load the game*/ case OPT_GameListPrev: #if 0 nItem = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0); nItem--; if (nItem < 0) { /* [AS] Removed error message, added return */ /* DisplayError(_("Can't back up any further"), 0); */ return TRUE; } SendDlgItemMessage(hDlg, OPT_GameListText, LB_SETCURSEL, nItem, 0); break; /* load the game*/ #endif /* [AS] */ case OPT_GameListFind: case IDC_GameListDoFilter: { char filter[MAX_FILTER_LENGTH+1]; if( GetDlgItemText( hDlg, IDC_GameListFilter, filter, sizeof(filter) ) >= 0 ) { filter[ sizeof(filter)-1 ] = '\0'; count = GameListToListBox( hDlg, TRUE, filter, &stats, LOWORD(wParam)!=IDC_GameListDoFilter, LOWORD(wParam)==OPT_GameListNarrow ); GameListUpdateTitle( hDlg, _("Game List"), count, ((ListGame *) gameList.tailPred)->number, &stats ); } } return FALSE; break; case IDCANCEL: case OPT_GameListClose: GameListPopDown(); return TRUE; case OPT_GameListText: switch (HIWORD(wParam)) { case LBN_DBLCLK: nItem = SendMessage((HWND) lParam, LB_GETCURSEL, 0, 0); break; /* load the game*/ default: return FALSE; } break; default: return FALSE; } /* Load the game */ { /* [AS] Get index from the item itself, because filtering makes original order unuseable. */ int index = SendDlgItemMessage(hDlg, OPT_GameListText, LB_GETCURSEL, 0, 0); char * text; LRESULT res; if( index < 0 ) { return TRUE; } res = SendDlgItemMessage( hDlg, OPT_GameListText, LB_GETTEXTLEN, index, 0 ); if( res == LB_ERR ) { return TRUE; } text = (char *) malloc( res+1 ); res = SendDlgItemMessage( hDlg, OPT_GameListText, LB_GETTEXT, index, (LPARAM)text ); index = atoi( text ); nItem = index - 1; free( text ); /* [AS] End: nItem has been "patched" now! */ if (cmailMsgLoaded) { CmailLoadGame(gameFile, nItem + 1, gameFileName, TRUE); } else { LoadGame(gameFile, nItem + 1, gameFileName, TRUE); SetFocus(hwndMain); // [HGM] automatic focus switch } } return TRUE; default: break; } return FALSE; } VOID GameListPopUp(FILE *fp, char *filename) { FARPROC lpProc; gameFile = fp; if (gameFileName != filename) { if (gameFileName) free(gameFileName); gameFileName = StrSave(filename); } CheckMenuItem(GetMenu(hwndMain), IDM_ShowGameList, MF_CHECKED); EnableMenuItem(GetMenu(hwndMain), IDM_SaveSelected, MF_ENABLED); if (gameListDialog) { SendMessage(gameListDialog, WM_INITDIALOG, 0, 0); if (!gameListUp) ShowWindow(gameListDialog, SW_SHOW); else SetFocus(gameListDialog); } else { lpProc = MakeProcInstance((FARPROC)GameListDialog, hInst); CreateDialog(hInst, MAKEINTRESOURCE(DLG_GameList), hwndMain, (DLGPROC)lpProc); FreeProcInstance(lpProc); } gameListUp = TRUE; } FILE *GameFile() { return gameFile; } VOID GameListPopDown(void) { CheckMenuItem(GetMenu(hwndMain), IDM_ShowGameList, MF_UNCHECKED); EnableMenuItem(GetMenu(hwndMain), IDM_SaveSelected, MF_GRAYED); if (gameListDialog) ShowWindow(gameListDialog, SW_HIDE); gameListUp = FALSE; } VOID GameListHighlight(int index) { char buf[MSG_SIZ]; int i, j, k, n, res = 0; if (gameListDialog == NULL) return; for(i=64; ; i+=i) { res = SendDlgItemMessage( gameListDialog, OPT_GameListText, LB_GETTEXT, i, (LPARAM)buf ); if(res == LB_ERR || index < atoi( buf )) break; } j = i/2; while(i-j > 1) { n = (i + j) >> 1; res = SendDlgItemMessage( gameListDialog, OPT_GameListText, LB_GETTEXT, n, (LPARAM)buf ); if(res == LB_ERR || index < (k = atoi( buf ))) i = n; else { j = n; if(index == k) break; } } SendDlgItemMessage(gameListDialog, OPT_GameListText, LB_SETCURSEL, j, 0); } VOID GameListDestroy() { GameListPopDown(); if (gameFileName) { free(gameFileName); gameFileName = NULL; } } VOID ShowGameListProc() { if (gameListUp) { if(gameListDialog) SetFocus(gameListDialog); // GameListPopDown(); } else { if (gameFileName) { GameListPopUp(gameFile, gameFileName); } else { DisplayError(_("No game list"), 0); } } } HGLOBAL ExportGameListAsText() { HGLOBAL result = NULL; LPVOID lpMem = NULL; ListGame * lg = (ListGame *) gameList.head; int nItem; DWORD dwLen = 0; if( ! gameFileName || ((ListGame *) gameList.tailPred)->number <= 0 ) { DisplayError(_(_("Game list not loaded or empty")), 0); return NULL; } /* Get list size */ for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){ char * st = GameListLineFull(lg->number, &lg->gameInfo); dwLen += strlen(st) + 2; /* Add extra characters for "\r\n" */ free(st); lg = (ListGame *) lg->node.succ; } /* Allocate memory for the list */ result = GlobalAlloc(GHND, dwLen+1 ); if( result != NULL ) { lpMem = GlobalLock(result); } /* Copy the list into the global memory block */ if( lpMem != NULL ) { char * dst = (char *) lpMem; size_t len; lg = (ListGame *) gameList.head; for (nItem = 0; nItem < ((ListGame *) gameList.tailPred)->number; nItem++){ char * st = GameListLineFull(lg->number, &lg->gameInfo); len = sprintf( dst, "%s\r\n", st ); dst += len; free(st); lg = (ListGame *) lg->node.succ; } GlobalUnlock( result ); } return result; } xboard-4.8.0/winboard/winboard.h0000644000175000001440000001766612421747466013537 00000000000000/* * WinBoard.h -- Definitions for Windows NT front end to XBoard * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "resource.h" #include /* Types */ typedef struct { char faceName[LF_FACESIZE]; float pointSize; BYTE bold, italic, underline, strikeout; BYTE charset; } MyFontParams; typedef struct { char *def; MyFontParams mfp; LOGFONT lf; HFONT hf; } MyFont; typedef enum { SizeTiny, SizeTeeny, SizeDinky, SizePetite, SizeSlim, SizeSmall, SizeMediocre, SizeMiddling, SizeAverage, SizeModerate, SizeMedium, SizeBulky, SizeLarge, SizeBig, SizeHuge, SizeGiant, SizeColossal, SizeTitanic, NUM_SIZES } BoardSize; typedef struct { COLORREF color; int effects; char *name; } MyColorizeAttribs; typedef struct { char* name; void* data; int flag; // [HGM] needed to indicate if data was malloc'ed or not } MySound; typedef struct { COLORREF color; int effects; MySound sound; } MyTextAttribs; /* Functions */ BOOL InitApplication(HINSTANCE); BOOL InitInstance(HINSTANCE, int, LPSTR); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK BoardSizeDlg(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM); VOID InitAppData(LPSTR); VOID InitDrawingColors(VOID); VOID InitDrawingSizes(BoardSize boardSize, int flags); VOID InitMenuChecks(VOID); int ICSInitScript(VOID); BOOL CenterWindow(HWND hwndChild, HWND hwndParent); VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY); VOID PromotionPopup(HWND hwnd); FILE *OpenFileDialog(HWND hWnd, char *write, char *defName, char *defExt, char *nameFilt, char *dlgTitle, UINT *number, char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]); VOID InputEvent(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); DWORD InputThread(LPVOID arg); DWORD NonOvlInputThread(LPVOID arg); DWORD SocketInputThread(LPVOID arg); BOOL ChangeColor(HWND hwnd, COLORREF *which); VOID ChangeBoardSize(BoardSize newSize); BOOL APIENTRY MyCreateFont(HWND hwnd, MyFont *font); VOID ErrorPopDown(VOID); VOID EnsureOnScreen(int *x, int *y, int minX, int minY); HBITMAP DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix); COLORREF ParseColorName(char *name); void ParseAttribs(COLORREF *color, int *effects, char* argValue); VOID CreateFontInMF(MyFont *mf); VOID ChangedConsoleFont(); VOID ParseFontName(char *name, MyFontParams *mfp); void InitComboStrings(HANDLE hwndCombo, char **cd); BOOLEAN MyLoadSound(MySound *ms); BOOLEAN MyPlaySound(MySound *ms); VOID ExitArgError(char *msg, char *badArg, Boolean quit); void SaveSettings(char* name); BOOL BrowseForFolder( const char * title, char * path ); VOID TourneyPopup(); VOID LoadEnginePopUp(); VOID LoadOptionsPopup(HWND hDlg); VOID InitTextures(); void ThemeOptionsPopup(HWND hwnd); /* Constants */ #define CLOCK_FONT 0 #define MESSAGE_FONT 1 #define COORD_FONT 2 #define CONSOLE_FONT 3 #define COMMENT_FONT 4 #define EDITTAGS_FONT 5 #define MOVEHISTORY_FONT 6 #define GAMELIST_FONT 7 #define NUM_FONTS 8 /* Positions of some menu items. Origin is zero and separator lines count. */ /* It's gross that these are needed. */ #define ACTION_POS 4 /* Posn of "Action" on menu bar */ #define OPTIONS_POS 6 /* Posn of "Options" on menu bar */ /* end grossness */ extern MyFont *font[NUM_SIZES][NUM_FONTS]; #define WM_USER_Input (WM_USER + 4242) #define WM_USER_Mouseleave (WM_USER + 4243) #define WM_USER_GetConsoleBackground (WM_USER + 4244) #define CLOCK_TIMER_ID 51 #define LOAD_GAME_TIMER_ID 52 #define ANALYSIS_TIMER_ID 53 #define MOUSE_TIMER_ID 54 #define DELAYED_TIMER_ID 55 #define SOLID_PIECE 0 #define OUTLINE_PIECE 1 #define WHITE_PIECE 2 #define COPY_TMP "wbcopy.tmp" #define PASTE_TMP "wbpaste.tmp" /* variables */ extern HINSTANCE hInst; extern HWND hwndMain; extern BoardSize boardSize; // [HGM] Some stuff to allo a platform-independent reference to windows // This should be moved to frontend.h in due time typedef enum { W_Main, W_Console, W_Comment, W_Tags, W_GameList, W_MoveHist, W_EngineOut, NUM_WINDOWS } WindowID; extern WindowPlacement placementTab[NUM_WINDOWS]; extern HWND hwndTab[NUM_WINDOWS]; // this remains pure front-end. void Translate( HWND hDlg, int id); VOID InitWindowPlacement( WindowPlacement * wp ); VOID RestoreWindowPlacement( HWND hWnd, WindowPlacement * wp ); VOID ReattachAfterMove( LPRECT lprcOldPos, int new_x, int new_y, HWND hWndChild, WindowPlacement * pwpChild ); VOID ReattachAfterSize( LPRECT lprcOldPos, int new_w, int new_h, HWND hWndChild, WindowPlacement * pwpChild ); BOOL GetActualPlacement( HWND hWnd, WindowPlacement * wp ); VOID MoveHistoryPopUp(); VOID MoveHistoryPopDown(); extern HWND moveHistoryDialog; VOID EvalGraphPopUp(); VOID EvalGraphPopDown(); extern HWND evalGraphDialog; extern HWND engineOutputDialog; struct GameListStats { int white_wins; int black_wins; int drawn; int unfinished; }; int GameListToListBox( HWND hDlg, BOOL boReset, char * pszFilter, struct GameListStats * stats, BOOL byPos, BOOL narrow ); VOID ShowGameListProc(void); extern HWND gameListDialog; VOID EditTagsProc(void); extern HWND editTagsDialog; extern int screenWidth, screenHeight; extern RECT screenGeometry; // Top-left coordiate of the screen can be different from (0,0) xboard-4.8.0/winboard/language.txt0000644000175000001440000007717312420374633014073 00000000000000## WinBoard language file ## ## LANGUAGE NAME IN ENGLISH / TRANSLATED ## v1.0 beta 1 ## ## Translation by NAME (DATE) ## SAME AS ABOVE, TRANSLATED ## WEB ADDRESS OF TRANSLATOR ## ## If you revise this, please insert your date, name and description. ## TRANSLATION OF MESSAGE ABOVE ## ## For example: ## TRANSLATION OF FOR EXAMPLE ## 24-ago-2010. Juan Prez (j@xyz.p). Corrected translation for xyzzy. ## Notes for translators (can be deleted from he file after translation): ## Just write the translations between the second pair of quotes ## Things like %s, %d and %c must be preserved in the original order ## Empty translated strings will be ignored, so there is no reason ## to delete those for which you don't know a translation, ## and you can start testing everything immediately. ## Simply rename this file to LANGUAGE.lng, and WinBoard should see it, ## and allow you to use the option /language=LANGUAGE. ## You are encouraged to call up the corresponding WinBoard dialog while ## working on the translation, to see in which context the strings are used. ## This is why the strings below are sorted by dialog ## ## Of duplicats, only the first occurrence will be used, even if it was in ## a different dialog! For this reason you will only see an 'OK' in the ## About Box. After you translated it there, this translation will be used ## for all other dialogs as well. ## o Use ## for comments, to make iteasy to find them scattered throughout the translation ## o Careful with temptation of direct translation, by example 'movimiento' for 'move' when 'jugada' is better. ## o Try to use short phrases, more text doesn't imply more clearness. ## o Check that your translation is right, does it mean what it does? ## o Test your translation, check every dialog. ## o For standard chess names check Wikipedia for confirmation. ## o For menus, assign shortcuts (character &) until you finish the translation. ## preferably it should be unique in the applicable menu, so it depends on translation of other items! winboard.rc MENUS: ## Pleace keep the accelerator-key indications on the menu items, and keep ## the keystrokes the same (for now). (Alt, Ctrl and Shift can be translated.) "&New Game\tCtrl-N" === "" "New Sh&uffle Game..." === "" "New &Variant...\tAlt+Shift+V" === "" "&Load Game...\tCtrl-O" === "" "&Save Game...\tCtrl-S" === "" "L&oad Position...\tCtrl+Shift+O" === "" "S&ave Position...\tCtrl+Shift+S" === "" "Save as &Diagram..." === "" "&Quit" === "" ## Next six currently not used "Load &Next Game\tAlt+PgDn" === "" "Load &Previous Game\tAlt+PgUp" === "" "&Reload Same Game" === "" "Load N&ext Position\tAlt+Shift+PgDn" === "" "Load Pre&vious Position\tAlt+Shift+PgUp" === "" "Reload Sa&me Position" === "" "&Copy Game To Clipboard\tCtrl+C" === "" "C&opy Position To Clipboard\tCtrl+Shift+C" === "" "Copy Game List to Clipboard" === "" "&Paste Game From Clipboard\tCtrl+V" === "" "P&aste Position From Clipboard\tCtrl+Shift+V" === "" "&Edit Game\tCtrl+E" === "" "E&dit Position\tCtrl+Shift+E" === "" "Edit Ta&gs..." === "" "Edit Co&mment..." === "" "Enter &Username..." === "" "&Revert\tHome" === "" "&Annotate" === "" "&Truncate Game\tEnd" === "" "&Backward\tAlt+Left" === "" "&Forward\tAlt+Right" === "" "Back to &Start\tAlt+Home" === "" "For&ward to End\tAlt+End" === "" "Flip &View\tF2" === "" "&Swap Clocks" === "" "Engine &Output\tAlt+Shift+O" === "" "Move &History\tAlt+Shift+H" === "" "Evaluation &Graph\tAlt+Shift+E" === "" "Game &List\tAlt+Shift+G" === "" "Open &New Chat Window" === "" "Type In &Move...\tAlt+I" === "" "&Tags" === "" "&Comments" === "" "&Game List Tags..." === "" "&Board..." === "" "&Fonts..." === "" "Machine &White\tCtrl+W" === "" "Machine &Black\tCtrl+B" === "" "&Two Machines\tCtrl+T" === "" "Machine Both" === "" "&Analysis Mode\tCtrl+A" === "" "Analyze &File\tCtrl+F" === "" "&Edit Game\tCtrl+E" === "" "E&dit Position\tCtrl+Shift+E" === "" "Trai&ning" === "" "&ICS Client" === "" "&Machine Match" === "" "&Pause\tPause" === "" "&Accept\tF3" === "" "D&ecline\tF4" === "" "Re&match\tF12" === "" "Call &Flag\tF5" === "" "&Draw\tF6" === "" "Ad&journ\tF7" === "" "A&bort\tF8" === "" "&Resign\tF9" === "" "Stop &Observing\tF10" === "" "Stop E&xamining\tF11" === "" "&Upload to Examine" === "" "Adjudicate to &White" === "" "Adjudicate to &Black" === "" "Adjudicate &Draw" === "" "Install 1st..." === "" "Install 2nd..." === "" "Engine #&1 Settings..." === "" "Engine #&2 Settings..." === "" "&Hint..." === "" "&Book..." === "" "&Move Now\tCtrl+M" === "" "&Retract Move\tCtrl+X" === "" "&Mute all Sounds" === "" "&General..." === "" "&Time Control...\tAlt+Shift+T" === "" "Common &Engine...\tAlt+Shift+U" === "" "Ad&judications...\tAlt+Shift+J" === "" "&Load Game...\tAlt+Shift+L" === "" "&Save Game...\tAlt+Shift+S" === "" "G&ame List..." === "" "Soun&ds..." === "" "&ICS..." === "" "Add ICS..." === "" "Comm&unications..." === "" "Save Settings &Now" === "" "Save Settings on E&xit" === "" "Help &Contents\tF1" === "" "Help &Index" === "" "How to &Use Help" === "" "&About WinBoard" === "" "White" === "" "Promote" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "King" === "" ## The next 2 are pieces for Capablanca Chess. Use the names from the Wikipedia entry for this, ## rather than litteral translations of the English names! "Archbishop" === "" "Chancellor" === "" ## Next 2 Xiangqi (Chinese Chess) pieces. Google for 'Xiangqi' in the target language to get the standard translation. "Elephant" === "" "Cannon" === "" "Empty Square" === "" "Black" === "" "Demote" === "" "Clear Board " === "" ## Next 3: Shogi pieces. "Gold" === "" "Silver" === "" "Lance" === "" "Drop" === "" "Cop&y and Paste" === "" "&Copy" === "" "&Paste" === "" "&Undo" === "" "Cu&t" === "" "&Copy" === "" "&Paste" === "" "Select &All" === "" DIALOGS: ABOUTBOX ## Pehaps copyright notices best left untranslated? "About WinBoard" === "" "OK" === "" "Chessboard for Windows" === "" "Copyright 1991 Digital Equipment Corporation" === "" "Enhancements Copyright 1992-2014 Free Software Foundation" === "" "Enhancements Copyright 2005\r\nAlessandro Scotti" === "" ## What happened with H.G.Muller? [He sold his copyrights to FSF for $1] ## The following string of 6 spaces can be translated to an acknowledgement of the translator, ## like "Traduccin por scar Toledo G.". " " === "" "WinBoard 0.0.0" === "" ABOUTBOX2 ## Weird, it is needed? [Normally not. It is a built-in 'Easter Egg' joke.] "galactic" === "" TIME CONTROL DIALOG "Time Control" === "" "Conventional chess clock" === "" "Incremental clock" === "" "Cancel" === "" ## Next is there really only for the benefit of blind users of the JAWS version... "Use arrow keys to specify which clock setting type, then press tab to alter values." === "" "Fixed time per move" === "" "Number of moves:" === "" "Within number of minutes:" === "" "Initial number of minutes:" === "" "Plus number of seconds per move:" === "" "Maximum seconds per move:" === "" "Time-Odds Factors:" === "" "Engine #1:" === "" "Engine #2:" === "" LOAD OPTIONS DIALOG "Load Game Options" === "" "Load games with &automatic stepping" === "" "&seconds per move" === "" "when filtering game list on position, use thresholds:" === "" "Search Mode: " === "" "Match exact &position" === "" "Match if position is s&ubset" === "" "Match material with e&xact pawn structure" === "" "Match &material" === "" "Material &range (upper board-half is optional)" === "" "Material &difference (optional material balanced)" === "" "Also match reversed &colors" === "" "Also match &left-right mirror image" === "" "minimum Elo for &best player" === "" "minimum Elo for &weakest players" === "" "or later &year" === "" "co&nsecutive positions" === "" SAVE OPTIONS DIALOG "Save Game Options" === "" "Save As: " === "" "Save games automatically" === "" "Prompt for filename" === "" "To file:" === "" "PGN" === "" "Old" === "" "Browse..." === "" "Save out of book info in PGN" === "" 1536 ## This dialog is only used in some older Windows versions, so you might not be ableto test it. "Open" === "" "File &Name:" === "" "&Directories:" === "" "List Files of &Type:" === "" "Dri&ves:" === "" "&Help" === "" "&Index number:" === "" COMMPORT ## Always disabled if you are not actually using an ICS through a comport, so difficult to test. "Communication Port Settings" === "" "Net&work..." === "" "&Port:" === "" "Data &Rate:" === "" "Data &Bits:" === "" "P&arity:" === "" "&Stop Bits:" === "" "F&low:" === "" EDIT COMMENT "Edit Comment" === "" "&Clear" === "" "&Edit" === "" PROMOTION POPUP "Promote to:" === "" ## next used in Shogi as promotion-popup header "Promote?" === "" "Promotion" === "" "&Queen" === "" "&Rook" === "" "&Bishop" === "" "K&night" === "" "&King" === "" "&Cancel" === "" "Chance&llor" === "" "&Archbishop" === "" "YES" === "" "NO" === "" "C&entaur" === "" GAME LIST "Game List" === "" "&Load" === "" "&Prev" === "" "&Next" === "" "&Close" === "" "Filter" === "" EDIT TAGS "Edit Tags" === "" ERROR "ICS Interaction" === "" "Dialog" === "" "Error" === "" ## I don't think the next will really appear ever. "Sorry Charlie" === "" COLORIZE "I C S Interaction Colors" === "" "Interaction Colors" === "" "Premove" === "" "Alarm" === "" "Colors" === "" "&Choose Color..." === "" "&Bold" === "" "&Italic" === "" "&Underline" === "" "&Strikeout" === "" QUESTION ## next one seems only a placeholder, and never appears? [might also be just a programmer's joke...] "Enter a chess engine command or just type something stupid that will completely screw things up." === "" "Question" === "" "Enter" === "" STARTUP DIALOG "WinBoard Startup" === "" "What would you like to do?" === "" "&Play against a chess engine or match two engines" === "" "&Use an Internet Chess Server" === "" "Just &view or edit game files" === "" "Specify Chess &Engines:" === "" "Specify Chess &Server:" === "" "&Additional options" === "" INDEX (IN FILE-BROWSE DIALOG) "Inde&x number:" === "" MOVE TYPE-IN "Type in a move" === "" USER-NAME TYPE-IN "Type in your name" === "" SOUND DIALOG "Sounds" === "" "&Event:" === "" "&No sound" === "" "&Default beep" === "" "&Built-in sound:" === "" "&WAV file:" === "" "B&rowse..." === "" "&Play" === "" "&Defaults" === "" GENERAL OPTIONS DIALOG ## pleace keep the indication of the accelerator keys for the same keystroke ## Note: finely tuned spaces to align keys at right "General Options" === "" "Always on &Top" === "" "Always &Queen Ctrl+Shift+Q" === "" "Animate &Dragging" === "" "&Animate Moving Ctrl+Shift+A" === "" "Auto &Flag Ctrl+Shift+F" === "" "Auto Flip &View" === "" "Auto &Raise Board" === "" "&Blindfold" === "" "Highlight Dra&gging" === "" "Highlight Last &Move" === "" "Periodic &Updates" === "" "Ponder &Next Move Ctrl+Shift+P" === "" "&Popup Exit Message" === "" "Popup Move &Errors" === "" "Show Butt&on Bar" === "" "Show &Coordinates" === "" "&Show Thinking" === "" "Test &Legality Ctrl+Shift+L" === "" "&Hide Thinking Ctrl+Shift+H" === "" "&Info in Move History Ctrl+Shift+I" === "" "&Send Engine Think" === "" "E&xtended PGN Info Ctrl+Shift+X" === "" "Highlight with Arro&w" === "" "Displa&y Logos" === "" "One-Click Move" === "" ICS OPTIONS "ICS Options" === "" "&Auto Comment" === "" "Auto &Observe" === "" "&Get Move List" === "" "&Local Line Editing" === "" "&Quiet Play" === "" "&Premove" === "" "&White first move" === "" "&Black first move" === "" "&Sound alarm at" === "" "seconds" === "" "Choose..." === "" "Do ¬ colorize messages" === "" "&Auto Kibitz" === "" "Auto Kibit&z" === "" "See&k Graph" === "" "auto-&Refresh" === "" "Bckgnd Obser&ve" === "" "&Dual Board" === "" "One-Click &Move" === "" "Background..." === "" "&Defaults..." === "" "Startup &Chat Boxes:" === "" "General" === "" BOARD OPTIONS ## (NOTE: AllWhite uses the white (outline-style) piece bitmaps for both sides ## FlipBlack draws the black pieces upside down) "Board Options" === "" "Defaults" === "" "Light Squares" === "" "Dark Squares" === "" "White Pieces" === "" "Black Pieces" === "" "Square Highlights" === "" "Premove Highlights" === "" "Monochrome" === "" "All White" === "" "Flip Black" === "" "Use Board Textures" === "" "Use Piece Font" === "" "Suppress Grid" === "" "Size" === "" BOARD SIZES (translate as number?) ## Don't put numbers, or nobody will translate them. [True. But do we really want them translated?] ## This is a space for imagination! "&Tiny" === "" "T&eeny" === "" "&Dinky" === "" "&Petite" === "" "Sl&im" === "" "&Small" === "" "Medi&ocre" === "" "&Middling" === "" "&Average" === "" "Mode&rate" === "" "Medi&um" === "" "Bul&ky" === "" "&Large" === "" "&Big" === "" "&Huge" === "" "&Giant" === "" "&Colossal" === "" "Tita&nic" === "" FONTS "Fonts" === "" "Current Board Size" === "" "All Board Sizes" === "" "&Revert to Defaults" === "" "Clocks" === "" "Messages" === "" "Coordinates" === "" "Tags" === "" "Comments" === "" "I C S Interaction" === "" "Piece font" === "" "&Color..." === "" "Move History, Engine Output" === "" ADJUDICATIONS DIALOG "Adjudications" === "" "Ponder Next Move" === "" "Enable and Show Thinking (recommended)" === "" "Hide Thinking when Playing against Human" === "" "Periodic Updates (for Analysis Mode)" === "" "Adjudications in non-ICS games" === "" "Adjudicate draw after:" === "" "moves" === "" "Win/loss adjudication threshold:" === "" "centipawns" === "" "&Verify Engine Claims" === "" "Detect &Mates" === "" "Draw if &Insufficient Material" === "" "Adjudicate &Trivial Draws" === "" "Apply" === "" ## next 2 are suffixed to a text-edit containing a number (50 or 3) "-move rule" === "" "-fold repeats" === "" "Engine #1 Score is Absolute" === "" "Engine #2 Score is Absolute" === "" COMMON ENGINE DIALOG "Common Engine Settings" === "" "Polyglot Directory:" === "" "Hash Size (MB):" === "" "EGTB Path:" === "" "EGTB Size (MB):" === "" "Use Book:" === "" "Max nr of CPUs:" === "" "First has Own Book" === "" "Second has Own Book" === "" "Book Depth:" === "" "Book Variation:" === "" "Default Match Games:" === "" NEW-VARIANT DIALOG ## (NOTE: the 'holdings' are the pieces standing next to the board ('in hand') "Variants" === "" "Variant" === "" "Board size:" === "" "ranks" === "" "files" === "" "Holdings with room for:" === "" "pieces" === "" "('-1' means defaults for selected variant)" === "" VARIANT NAMES: "&normal" === "" "&FRC" === "" "&wildcastle" === "" "&nocastle" === "" "&losers" === "" "&giveaway" === "" "s&uicide" === "" "&3Check" === "" "&twokings" === "" "&atomic" === "" "cra&zyhouse" === "" "&bughouse" === "" "&Twilight" === "" "Sp&artan" === "" "&shogi" === "" "su&per" === "" "&knightmate" === "" "&Berolina" === "" "c&ylinder" === "" "&fairy" === "" "&makruk" === "" "&gothic" === "" "&capablanca" === "" "&Janus" === "" "&CRC" === "" "&Falcon" === "" "cou&rier" === "" "&Great" === "" "&Shatranj" === "" "&xiangqi" === "" NEW SHUFFLE GAME "New Shuffle Game" === "" "&Start Position Number:" === "" "Random" === "" GAME-LIST OPTIONS DIALOG "Game List Options" === "" "PGN &Tags:" === "" "&Up" === "" "&Down" === "" "Default" === "" "Factory" === "" "Restore to:" === "" MOVE HISTORY WINDOW "Move History" === "" EVALUATION GRAPH "Evaluation Graph" === "" ENGINE OUTPUT WINDOW "Engine Output" === "" "%s (%d reversible plies)" === "" "Engine #1" === "" "NPS" === "" "Engine #2" === "" CHAT BOXES "Chat Window" === "" "Chat partner:" === "" "Clear" === "" "Send" === "" winboard.c "&File" === "" "&Edit" === "" "&View" === "" "&Mode" === "" "&Action" === "" "&Step" === "" "E&ngine" === "" "&Options" === "" "&Help" === "" "You can only start a match from the initial position." === "" "Font name too long:" === "" "Font point size missing:" === "" "Can't parse color name %s" === "" "Unrecognized board size value" === "" "Unrecognized argument" === "" "No value provided for argument" === "" "Incomplete \\ escape in value for" === "" "Failed to open indirection file" === "" "Unrecognized boolean argument value" === "" "Unrecognized argument" === "" "Too many colors" === "" "&Minimize\tCtrl+F4" === "" "White: %s" === "" "We only care about the height here" === "" "Cannot build game list" === "" "Load Game from File" === "" "Load Position from File" === "" "Save Game to File" === "" "Save Diagram to File" === "" "Save Position to File" === "" "%s does not support analysis" === "" "Analyze Game from File" === "" "Unable to activate help" === "" "Send to chess program:" === "" "Send to second chess program:" === "" "Direct Command" === "" "Error loading sound %s" === "" "Error playing sound %s" === "" "File open failed" === "" "Internal error in file dialog box" === "" "Option Error" === "" "Choose an option, or cancel to exit" === "" "Unable to activate help" === "" "Displayed move is not current" === "" "Could not parse move" === "" "%s:\nError code %d" === "" "Error" === "" "Fatal Error" === "" "Exiting" === "" "%s:\nError code %d" === "" "Note" === "" "Error writing to chess program" === "" "User" === "" "Unknown" === "" "White" === "" "Black" === "" "Save Game to File" === "" "Not implemented" === "" "Shout Text" === "" "SShout/CShout" === "" "Channel 1 Text" === "" "Channel Text" === "" "Kibitz Text" === "" "Tell Text" === "" "Challenge Text" === "" "Request Text" === "" "Seek Text" === "" "Normal Text" === "" "None" === "" "Pawn" === "" "Knight" === "" "Bishop" === "" "Rook" === "" "Queen" === "" "Information" === "" wclipbrd.c "Unable to convert position to FEN." === "" "Unable to copy FEN to clipboard." === "" "Cannot create temporary file name." === "" "Cannot open temporary file." === "" "Cannot write to temporary file." === "" "Cannot reopen temporary file." === "" "Cannot determine size of file." === "" "Cannot allocate clipboard buffer." === "" "Cannot read from temporary file." === "" "Error reading from temporary file." === "" "Cannot copy text to clipboard" === "" "Unable to allocate memory for clipboard." === "" "Unable to lock clipboard memory." === "" "Cannot unlock clipboard memory." === "" "Cannot open clipboard." === "" "Cannot empty clipboard." === "" "Cannot copy text to clipboard." === "" "Cannot close clipboard." === "" "Unable to paste FEN from clipboard." === "" "Unable to create temporary file." === "" "Error writing to temporary file." === "" "Unable to open clipboard." === "" "No text in clipboard." === "" "Unable to lock clipboard memory." === "" "Unable to allocate memory for text string." === "" "Unable to unlock clipboard memory." === "" "Unable to close clipboard." === "" woptions.c ## For now, do NOT translate sound names, because WinBoard will no longer recognize them "Move" === "" "Bell" === "" "ICS Alarm" === "" "ICS Win" === "" "ICS Loss" === "" "ICS Draw" === "" "ICS Unfinished" === "" "Shout" === "" "SShout/CShout" === "" "Channel 1" === "" "Channel" === "" "Kibitz" === "" "Tell" === "" "Challenge" === "" "Request" === "" "Seek" === "" ## end of sound names "Browse for Sound File" === "" "Can't parse com port settings" === "" "Option Error" === "" "Invalid data rate" === "" "Option Error" === "" "Failed to set comm port state;\r\ninvalid options?" === "" "Failed to set comm port state" === "" "Invalid load game step rate" === "" "Invalid save game file name" === "" "Browse for Auto Save File" === "" "Invalid moves per time control" === "" "Invalid minutes per time control" === "" "Invalid increment" === "" "Invalid initial time" === "" "Changing time control during a game is not implemented" === "" "Variant %s not supported by %s" === "" "Warning: second engine (%s) does not support this!" === "" "Invalid ICS Alarm Time" === "" "Invalid max time per move" === "" "Invalid time-odds factor" === "" "Choose Folder" === "" "Choose Book" === "" "Choose Polyglot Directory" === "" "Choose EGTB Directory:" === "" "Polyglot was not found in the specified folder!" === "" wgamelist.c "No game selected" === "" "Can't go forward any further" === "" "Can't back up any further" === "" "No game list" === "" "Game List" === "" "Game list not loaded or empty" === "" "%s - %d/%d games" === "" wedittags.c "Edit Tags" === "" "Tags" === "" "Error replacing tags." === "" wsettings.c "%s Engine Settings (%s)" === "" "OK" === "" "Cancel" === "" wchat.c "Chat Window %s" === "" backend.c "bad timeControl option %s" === "" "bad searchTime option %s" === "" ## following to will appear in combinationslike "first engine" "first" === "" "second" === "" "protocol version %d not supported" === "" "Variant %s supported only in ICS mode" === "" "Unknown variant name %s" === "" "Starting chess program" === "" "Could not open comm port %s" === "" "Could not connect to host %s, port %s" === "" "Unknown initialMode %s" === "" "Can't have a match with no chess programs" === "" "Bad game file" === "" "Bad position file" === "" "AnalyzeFile mode requires a game file" === "" "Analysis mode requires a chess engine" === "" "Analysis mode does not work with ICS mode" === "" "MachineWhite mode requires a chess engine" === "" "MachineWhite mode does not work with ICS mode" === "" "MachineBlack mode requires a chess engine" === "" "MachineBlack mode does not work with ICS mode" === "" "TwoMachines mode does not work with ICS mode" === "" "TwoMachines mode requires a chess engine" === "" "Training mode requires a game file" === "" "Error writing to ICS" === "" "Error reading from keyboard" === "" "Got end of file from keyboard" === "" "Error writing to ICS" === "" "Error writing to display" === "" "Error gathering move list: two headers" === "" "Error gathering move list: nested" === "" "Connection closed by ICS" === "" "Error reading from ICS" === "" "Failed to parse board string:\n\"%s\"" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Error gathering move list: extra board" === "" "Illegal move \"%s\" from ICS" === "" "Couldn't parse move \"%s\" from ICS" === "" ## The leading 'say' is used as ICS command here, and should NOT be translated. Only the message behind it. "say Internal error; bad moveType %d (%d,%d-%d,%d)" === "" "You are playing Black" === "" "You are playing White" === "" "It is White's turn" === "" "It is Black's turn" === "" "Displayed position is not current" === "" "Illegal move" === "" "End of game" === "" "Incorrect move" === "" ## next 6: Second (first 3) or first (other) '%s' will be substituted for 'first' or 'second'. "Illegal move \"%s\" from %s machine" === "" "Illegal move \"%s\" (rejected by %s chess program)" === "" "Failed to start %s chess program %s on %s: %s\n" === "" "Error writing to %s chess program" === "" "Error: %s chess program (%s) exited unexpectedly" === "" "Error reading from %s chess program (%s)" === "" "Forfeit due to illegal move" === "" "%s does not support analysis" === "" "Hint: %s" === "" "Machine accepts your draw offer" === "" "Machine offers a draw\nSelect Action / Draw to agree" === "" "%s (only move)" === "" "Ambiguous move in ICS output: \"%s\"" === "" "Illegal move in ICS output: \"%s\"" === "" "Gap in move list" === "" "Game too long; increase MAX_MOVES and recompile" === "" "Variant %s not supported by %s" === "" "Startup failure on '%s'" === "" "Waiting for first chess program" === "" "Waiting for second chess program" === "" "Match %s vs. %s: final score %d-%d-%d" === "" "Stalemate" === "" "Illegal move: %d.%s%s" === "" "Ambiguous move: %d.%s%s" === "" "Can't open \"%s\"" === "" "Cannot build game list" === "" "No more games in this message" === "" "No game has been loaded yet" === "" "Can't back up any further" === "" "Game number out of range" === "" "Can't seek on game file" === "" "Game not found in file" === "" "Bad FEN position in file" === "" "No moves in game" === "" "No position has been loaded yet" === "" "Can't back up any further" === "" "Can't open \"%s\"" === "" "Can't seek on position file" === "" "Position not found in file" === "" "Bad FEN position in file" === "" "Black to play" === "" "White to play" === "" "Can't open \"%s\"" === "" "You have edited the game history.\nUse Reload Same Game and make your move again." === "" "You have entered too many moves.\nBack up to the correct position and try again." === "" "Displayed position is not current.\nStep forward to the correct position and try again." === "" "You have not made a move yet" === "" "The cmail message is not loaded.\nUse Reload CMail Message and make your move again." === "" "No unfinished games" === "" "You have already mailed a move.\nWait until a move arrives from your opponent.\nTo resend the same move, type\n\"cmail -remail -game %s\"\non the command line." === "" "Failed to invoke cmail" === "" "Waiting for reply from opponent\n" === "" "Still need to make move for game\n" === "" "Still need to make moves for both games\n" === "" "Still need to make moves for all %d games\n" === "" "Still need to make a move for game %s\n" === "" "No unfinished games\n" === "" "Ready to send mail\n" === "" "Still need to make moves for games %s\n" === "" "Edit comment" === "" "Edit comment on %d.%s%s" === "" "Starting analysis mode...\nIf this message stays up, your chess program does not support analysis." === "" "It is not White's turn" === "" "It is not Black's turn" === "" "Wait until your turn,\nor select Move Now" === "" "Starting second chess program" === "" "Training mode off" === "" "Training mode on" === "" "Already at end of game" === "" "Warning: You are still playing a game" === "" "Warning: You are still observing a game" === "" "Warning: You are still examining a game" === "" "It is Black's turn" === "" "It is White's turn" === "" "That square is occupied" === "" "There is no pending offer on this move" === "" "Your opponent is not out of time" === "" "Black offers a draw" === "" "White offers a draw" === "" "You must make your move before offering a draw" === "" "You are not examining a game" === "" "You can't revert while pausing" === "" "Wait until your turn,\nor select Move Now" === "" "It is your turn" === "" "Wait until your turn" === "" "No hint available" === "" "Analysis (%s)" === "" "Comment" === "" "Comment on %d.%s%s" === "" "Both flags fell" === "" "White's flag fell" === "" "Black's flag fell" === "" "Bad FEN position in clipboard" === "" "No response from ICS" === "" "You cannot do this while you are playing or observing" === "" "Click in holdings to choose piece" === "" "failed writing PV" === "" "Bad Seek" === "" "vs." === "" "%s (%d reversible plies)" === "" "Reading game file (%d)" === "" "Click clock to clear board" === "" "Pull pawn backwards to under-promote" === "" END-OF-GAME MESSAGES (should they be translated?) ## I think that only for visualization and not for PGN, as PGN files are shared all around the world ## [OK, I adapted the source that way. So please translate.] "Game aborted" === "" "White wins on time" === "" "Black wins on time" === "" "Both players ran out of time" === "" "White resigns" === "" "Black resigns" === "" "White mates" === "" "Black mates" === "" "Draw" === "" "Draw agreed" === "" "Xboard adjudication: King destroyed" === "" "Xboard adjudication: Bare king" === "" "Xboard adjudication: 3rd check" === "" "Xboard adjudication: Stalemate" === "" "Xboard adjudication: Checkmate" === "" "Xboard adjudication: Insufficient mating material" === "" "Xboard adjudication: Trivial draw" === "" "XBoard adjudication: repetition draw" === "" "Xboard adjudication: perpetual checking" === "" "Xboard adjudication: perpetual chasing" === "" "%Xboard adjudication: perpetual chasing of" === "" "Xboard adjudication: 50-move rule" === "" "Draw claim: 50-move rule" === "" "Draw claim: 3-fold repetition" === "" "Draw claim: insufficient mating material" === "" "Xboard adjudication: long game" === "" "Xboard: Forfeit due to invalid move: %s (%c%c%c%c) res=%d" === "" "Xboard: Forfeit due to illegal move: %s (%c%c%c%c)%c" === "" "Xboard adjudication" === "" "User adjudication" === "" "False win claim: '%s'" === "" "False draw claim: '%s'" === "" "xboard exit" === "" # NEW STRINGS FOR EXPERIMENTAL TM VERSION: # MENU "Edit Boo&k..." === "" "Edit Engine List..." === "" "Load Engine..." === "" "Tournament..." === "" # LOAD ENGINE DIALOG "First" === "" "Second" === "" "Choose File" === "" "Choose Folder:" === "" "Select engine from list:" === "" "or specify one below:" === "" "Nickname (optional):" === "" "Use nickname in PGN tag" === "" "Engine (*.exe):" === "" "command-line parameters:" === "" "directory:" === "" "(Directory will be derived from engine path when left empty)" === "" "Add this engine to the list" === "" "Must not use GUI book" === "" "UCI" === "" "WB protocol v1 (skip waiting for features)" === "" "UCCI / USI (uses specified /uxiAdapter)" === "" "Force current variant with this engine" === "" "Load mentioned engine as" === "" "Load Engine" === "" "You did not specify the engine executable" === "" "Select single engine from the group" === "" # TOURNAMENT OPTIONS DIALOG "Tournament file:" === "" "If you specify an existing file, the rest of this dialog will be ignored." === "" "Otherwise, the file will be created, with the settings you specify below:" === "" "Select Engine:" === "" "Use Swiss pairing engine (cycles = rounds)" === "" "Tourney type (0=RR, 1=gauntlet):" === "" "Sync after cycle" === "" "Number of tourney cycles:" === "" "Sync after round" === "" "Games per Match / Pairing:" === "" "File for saving tourney games:" === "" "Game File with Opening Lines:" === "" "Game Number:" === "" "File with Start Positions:" === "" "Position Number:" === "" "Step through lines/positions in file" === "" "Rewind after (0 = never):" === "" "Use each line/position twice" === "" "Pause between Games (ms):" === "" "Tournament and Match Options" === "" "Tourney participants:" === "" "Replace Engine" === "" "Upgrade Engine" === "" "Time Control..." === "" "Common Engine..." === "" "Clone Tourney" === "" "Make all use GUI book by default" === "" "You must supply a tournament file,\nfor storing the tourney progress" === "" "Not enough participants" === "" "Continue Later" === "" "First you must specify an existing tourney file to clone" === "" "No engine %s is installed" === "" # THEMES DIALOG "Board themes" === "" "Select theme from list:" === "" "or specify new theme below:" === "" "Theme name:" === "" "Use board textures" === "" "Light-square texture:" === "" "Dark-square texture:" === "" "Dark reorientation mode:" === "" "Light reorientation mode:" === "" "Draw border around board" === "" "Optional border bitmap:" === "" " Beware: a specified piece font will prevail over piece bitmaps" === "" "Directory with piece bitmaps:" === "" "Use piece font" === "" "Font size (%):" === "" "Font name:" === "" "Font piece to char:" === "" "Delete Theme" === "" "Select single theme from the group" === "" # book.c "Could not create book" === "" "Polyglot book not valid" === "" "Hash keys are different" === "" "Book Fault" === "" "Book file exists! Try again for overwrite." === "" # NEW MENU ITEMS IN 4.7 "Save Games to &Book" === "" "Colo&rs..." === "" "Load &First Engine..." === "" "Load &Second Engine..." === "" "&Board Themes..." === "" "Auto &Create Logon" === "" xboard-4.8.0/winboard/metascript.txt0000644000175000001440000000025312420374633014444 000000000000001,$g/""/d 1,$g/^[^"]*$/d 1,$g/\\/s//&&/g 1,$g/\//s//\\&/g 1,$g/&[^"]*"$/s//\\&/ 1,$s/===/\/s\/\// 1,$s/$/\/gp/ 1,$s/^/1,$g\// $a w tmp.rc q . w script.txt q xboard-4.8.0/winboard/whistory.c0000644000175000001440000002215412420374633013570 00000000000000/* * Move history for WinBoard * * Author: Alessandro Scotti (Dec 2005) * front-end code split off by HGM * * Copyright 2005 Alessandro Scotti * * Enhancements Copyright 2009, 2010, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * ------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include #include /* required for all Windows applications */ #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "wsnap.h" // templates for calls into back-end void RefreshMemoContent P((void)); void MemoContentUpdated P((void)); void FindMoveByCharIndex P(( int char_index )); #define DEFAULT_COLOR 0xFFFFFFFF #define H_MARGIN 2 #define V_MARGIN 2 static BOOLEAN moveHistoryDialogUp = FALSE; // ------------- low-level front-end actions called by MoveHistory back-end ----------------- // low-level front-end, after calculating from & to is left to caller // it task is to highlight the indicated characters. (In WinBoard it makes them bold and blue.) void HighlightMove( int from, int to, Boolean highlight ) { CHARFORMAT cf; HWND hMemo = GetDlgItem( moveHistoryDialog, IDC_MoveHistory ); SendMessage( hMemo, EM_SETSEL, from, to); /* Set style */ ZeroMemory( &cf, sizeof(cf) ); cf.cbSize = sizeof(cf); cf.dwMask = CFM_BOLD | CFM_COLOR; if( highlight ) { cf.dwEffects |= CFE_BOLD; cf.crTextColor = RGB( 0x00, 0x00, 0xFF ); } else { cf.dwEffects |= CFE_AUTOCOLOR; } SendMessage( hMemo, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf ); } // low-level front-end, but replace Windows data types to make it callable from back-end // its task is to clear the contents of the move-history text edit void ClearHistoryMemo() { SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_SETTEXT, 0, (LPARAM) "" ); } // low-level front-end, made callable from back-end by passing flags and color numbers // its task is to append the given text to the text edit // the bold argument says 0 = normal, 1 = bold typeface // the colorNr argument says 0 = font-default, 1 = gray int AppendToHistoryMemo( char * text, int bold, int colorNr ) { CHARFORMAT cf; DWORD flags = bold ? CFE_BOLD :0; DWORD color = colorNr ? GetSysColor(COLOR_GRAYTEXT) : DEFAULT_COLOR; HWND hMemo = GetDlgItem( moveHistoryDialog, IDC_MoveHistory ); /* Select end of text */ int cbTextLen = (int) SendMessage( hMemo, WM_GETTEXTLENGTH, 0, 0 ); SendMessage( hMemo, EM_SETSEL, cbTextLen, cbTextLen ); /* Set style */ ZeroMemory( &cf, sizeof(cf) ); cf.cbSize = sizeof(cf); cf.dwMask = CFM_BOLD | CFM_ITALIC | CFM_COLOR | CFM_UNDERLINE; cf.dwEffects = flags; if( color != DEFAULT_COLOR ) { cf.crTextColor = color; } else { cf.dwEffects |= CFE_AUTOCOLOR; } SendMessage( hMemo, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf ); /* Append text */ SendMessage( hMemo, EM_REPLACESEL, (WPARAM) FALSE, (LPARAM) text ); /* Return offset of appended text */ return cbTextLen; } // low-level front-end; wrapper for the code to scroll the mentioned character in view (-1 = end) void ScrollToCurrent(int caretPos) { if(caretPos < 0) caretPos = (int) SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_GETTEXTLENGTH, 0, 0 ); SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETSEL, caretPos, caretPos ); SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SCROLLCARET, 0, 0 ); } // ------------------------------ call backs -------------------------- // front-end. Universal call-back for any event. Recognized vents are dialog creation, OK and cancel button-press // (dead code, as these buttons do not exist?), mouse clicks on the text edit, and moving / sizing LRESULT CALLBACK HistoryDialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { static SnapData sd; switch (message) { case WM_INITDIALOG: if( moveHistoryDialog == NULL ) { moveHistoryDialog = hDlg; Translate(hDlg, DLG_MoveHistory); /* Enable word wrapping and notifications */ SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETTARGETDEVICE, 0, 0 ); SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS ); /* Set font */ SendDlgItemMessage( moveHistoryDialog, IDC_MoveHistory, WM_SETFONT, (WPARAM)font[boardSize][MOVEHISTORY_FONT]->hf, MAKELPARAM(TRUE, 0 )); /* Restore window placement */ RestoreWindowPlacement( hDlg, &wpMoveHistory ); } /* Update memo */ RefreshMemoContent(); MemoContentUpdated(); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; case WM_NOTIFY: if( wParam == IDC_MoveHistory ) { MSGFILTER * lpMF = (MSGFILTER *) lParam; if( lpMF->msg == WM_LBUTTONDBLCLK && (lpMF->wParam & (MK_CONTROL | MK_SHIFT)) == 0 ) { POINTL pt; LRESULT index; pt.x = LOWORD( lpMF->lParam ); pt.y = HIWORD( lpMF->lParam ); index = SendDlgItemMessage( hDlg, IDC_MoveHistory, EM_CHARFROMPOS, 0, (LPARAM) &pt ); FindMoveByCharIndex( index ); // [HGM] also does the actual moving to it, now /* Zap the message for good: apparently, returning non-zero is not enough */ lpMF->msg = WM_USER; return TRUE; } } break; case WM_SIZE: SetWindowPos( GetDlgItem( moveHistoryDialog, IDC_MoveHistory ), HWND_TOP, H_MARGIN, V_MARGIN, LOWORD(lParam) - 2*H_MARGIN, HIWORD(lParam) - 2*V_MARGIN, SWP_NOZORDER ); break; case WM_GETMINMAXINFO: { MINMAXINFO * mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; } break; case WM_CLOSE: MoveHistoryPopDown(); break; case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return FALSE; } // ------------ standard entry points into MoveHistory code ----------- // front-end VOID MoveHistoryPopUp() { FARPROC lpProc; CheckMenuItem(GetMenu(hwndMain), IDM_ShowMoveHistory, MF_CHECKED); if( moveHistoryDialog ) { SendMessage( moveHistoryDialog, WM_INITDIALOG, 0, 0 ); if( ! moveHistoryDialogUp ) { ShowWindow(moveHistoryDialog, SW_SHOW); } } else { lpProc = MakeProcInstance( (FARPROC) HistoryDialogProc, hInst ); /* Note to self: dialog must have the WS_VISIBLE style set, otherwise it's not shown! */ CreateDialog( hInst, MAKEINTRESOURCE(DLG_MoveHistory), hwndMain, (DLGPROC)lpProc ); FreeProcInstance(lpProc); } moveHistoryDialogUp = TRUE; // Note that in WIndows creating the dialog causes its call-back to perform // RefreshMemoContent() and MemoContentUpdated() immediately after it is realized. // To port this to X we might have to do that from here. } // front-end VOID MoveHistoryPopDown() { CheckMenuItem(GetMenu(hwndMain), IDM_ShowMoveHistory, MF_UNCHECKED); if( moveHistoryDialog ) { ShowWindow(moveHistoryDialog, SW_HIDE); } moveHistoryDialogUp = FALSE; } // front-end Boolean MoveHistoryIsUp() { return moveHistoryDialogUp; } // front-end Boolean MoveHistoryDialogExists() { return moveHistoryDialog != NULL; } xboard-4.8.0/winboard/WB4Jaws.dev0000644000175000001440000001000112420374633013441 00000000000000[Project] FileName=WB4Jaws.dev Name=Winboard UnitCount=27 Type=0 Ver=1 ObjFiles= Includes= Libs= PrivateResource=Winboard_private.rc ResourceIncludes=.. MakeIncludes= Compiler=-I.._@@_-I._@@_-DNDEBUG_@@_-DJAWS_@@_ CppCompiler= Linker=-fpic_@@_-s_@@_-mwindows_@@_-lwsock32_@@_-lwinmm_@@_-lcomctl32_@@_ IsCpp=0 Icon= ExeOutput= ObjectOutput=.\objs OverrideOutput=1 OverrideOutputName=Winboard.exe HostApplication= Folders= CommandLine= UseCustomMakefile=0 CustomMakefile=makefile.gcc IncludeVersionInfo=0 SupportXPThemes=0 CompilerSet=0 CompilerSettings=0000000000001000000100 [Unit1] FileName=wsockerr.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit2] FileName=..\parser.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit3] FileName=wclipbrd.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit4] FileName=wedittags.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit5] FileName=wevalgraph.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit6] FileName=wgamelist.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit7] FileName=whistory.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit8] FileName=winboard.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit9] FileName=wlayout.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit10] FileName=woptions.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit11] FileName=wsnap.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit12] FileName=..\uci.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit13] FileName=..\backend.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit14] FileName=..\book.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit15] FileName=..\gamelist.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit16] FileName=..\lists.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit17] FileName=..\moves.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit18] FileName=..\pgntags.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit19] FileName=winboard.rc CompileCpp=0 Folder=Winboard Compile=1 Link=0 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit20] FileName=..\zippy.c Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= CompileCpp=0 [Unit21] FileName=help.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit22] FileName=wsettings.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit23] FileName=wchat.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit24] FileName=..\engineoutput.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit25] FileName=..\evalgraph.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit26] FileName=wengineoutput.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= [Unit27] FileName=..\history.c CompileCpp=0 Folder=Winboard Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 BuildCmd= xboard-4.8.0/winboard/winboard.c0000644000175000001440000116322212421747466013521 00000000000000/* * WinBoard.c -- Windows NT front end to XBoard * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * XBoard borrows its colors and the bitmaps.xchess bitmap set from XChess, * which was written and is copyrighted by Wayne Christopher. * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __GNUC__ #include #include #endif #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "moves.h" #include "wclipbrd.h" #include "woptions.h" #include "wsockerr.h" #include "defaults.h" #include "help.h" #include "wsnap.h" #define SLASH '/' #define DATADIR "~~" //void InitEngineUCI( const char * iniDir, ChessProgramState * cps ); int myrandom(void); void mysrandom(unsigned int seed); extern int whiteFlag, blackFlag; Boolean flipClock = FALSE; extern HANDLE chatHandle[]; extern enum ICS_TYPE ics_type; int MySearchPath P((char *installDir, char *name, char *fullname)); int MyGetFullPathName P((char *name, char *fullname)); void DisplayHoldingsCount(HDC hdc, int x, int y, int align, int copyNumber); VOID NewVariantPopup(HWND hwnd); int FinishMove P((ChessMove moveType, int fromX, int fromY, int toX, int toY, /*char*/int promoChar)); void DisplayMove P((int moveNumber)); void ChatPopUp P((char *s)); typedef struct { ChessSquare piece; POINT pos; /* window coordinates of current pos */ POINT lastpos; /* window coordinates of last pos - used for clipping */ POINT from; /* board coordinates of the piece's orig pos */ POINT to; /* board coordinates of the piece's new pos */ } AnimInfo; static AnimInfo animInfo = { EmptySquare, {-1,-1}, {-1,-1}, {-1,-1} }; typedef struct { POINT start; /* window coordinates of start pos */ POINT pos; /* window coordinates of current pos */ POINT lastpos; /* window coordinates of last pos - used for clipping */ POINT from; /* board coordinates of the piece's orig pos */ ChessSquare piece; } DragInfo; static DragInfo dragInfo = { {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, EmptySquare }; typedef struct { POINT sq[2]; /* board coordinates of from, to squares */ } HighlightInfo; static HighlightInfo highlightInfo = { {{-1, -1}, {-1, -1}} }; static HighlightInfo premoveHighlightInfo = { {{-1, -1}, {-1, -1}} }; static HighlightInfo partnerHighlightInfo = { {{-1, -1}, {-1, -1}} }; static HighlightInfo oldPartnerHighlight = { {{-1, -1}, {-1, -1}} }; typedef struct { // [HGM] atomic int fromX, fromY, toX, toY, radius; } ExplodeInfo; static ExplodeInfo explodeInfo; /* Window class names */ char szAppName[] = "WinBoard"; char szConsoleName[] = "WBConsole"; /* Title bar text */ char szTitle[] = "WinBoard"; char szConsoleTitle[] = "I C S Interaction"; char *programName; char *settingsFileName; Boolean saveSettingsOnExit; char installDir[MSG_SIZ]; int errorExitStatus; BoardSize boardSize; Boolean chessProgram; //static int boardX, boardY; int minX, minY; // [HGM] placement: volatile limits on upper-left corner int squareSize, lineGap, minorSize; static int winW, winH; static RECT messageRect, whiteRect, blackRect, leftLogoRect, rightLogoRect; // [HGM] logo static int logoHeight = 0; static char messageText[MESSAGE_TEXT_MAX]; static int clockTimerEvent = 0; static int loadGameTimerEvent = 0; static int analysisTimerEvent = 0; static DelayedEventCallback delayedTimerCallback; static int delayedTimerEvent = 0; static int buttonCount = 2; char *icsTextMenuString; char *icsNames; char *firstChessProgramNames; char *secondChessProgramNames; #define PALETTESIZE 256 HINSTANCE hInst; /* current instance */ Boolean alwaysOnTop = FALSE; RECT boardRect; COLORREF lightSquareColor, darkSquareColor, whitePieceColor, blackPieceColor, highlightSquareColor, premoveHighlightColor; COLORREF markerColor[8] = { 0x00FFFF, 0x0000FF, 0x00FF00, 0xFF0000, 0xFFFF00, 0xFF00FF, 0xFFFFFF, 0x000000 }; HPALETTE hPal; ColorClass currentColorClass; static HWND savedHwnd; HWND hCommPort = NULL; /* currently open comm port */ static HWND hwndPause; /* pause button */ static HBITMAP pieceBitmap[3][(int) BlackPawn]; /* [HGM] nr of bitmaps referred to bP in stead of wK */ static HBRUSH lightSquareBrush, darkSquareBrush, blackSquareBrush, /* [HGM] for band between board and holdings */ explodeBrush, /* [HGM] atomic */ markerBrush[8], /* [HGM] markers */ whitePieceBrush, blackPieceBrush, iconBkgndBrush /*, outlineBrush*/; static POINT gridEndpoints[(BOARD_RANKS + BOARD_FILES + 2) * 2]; static DWORD gridVertexCounts[BOARD_RANKS + BOARD_FILES + 2]; static HPEN gridPen = NULL; static HPEN highlightPen = NULL; static HPEN premovePen = NULL; static NPLOGPALETTE pLogPal; static BOOL paletteChanged = FALSE; static HICON iconWhite, iconBlack, iconCurrent; static int doingSizing = FALSE; static int lastSizing = 0; static int prevStderrPort; static HBITMAP userLogo; static HBITMAP liteBackTexture = NULL; static HBITMAP darkBackTexture = NULL; static int liteBackTextureMode = BACK_TEXTURE_MODE_PLAIN; static int darkBackTextureMode = BACK_TEXTURE_MODE_PLAIN; static int backTextureSquareSize = 0; static struct { int x; int y; int mode; } backTextureSquareInfo[BOARD_RANKS][BOARD_FILES]; #if __GNUC__ && !defined(_winmajor) #define oldDialog 0 /* cygwin doesn't define _winmajor; mingw does */ #else #if defined(_winmajor) #define oldDialog (_winmajor < 4) #else #define oldDialog 0 #endif #endif #define INTERNATIONAL #ifdef INTERNATIONAL # define _(s) T_(s) # define N_(s) s #else # define _(s) s # define N_(s) s # define T_(s) s # define Translate(x, y) # define LoadLanguageFile(s) #endif #ifdef INTERNATIONAL Boolean barbaric; // flag indicating if translation is needed // list of item numbers used in each dialog (used to alter language at run time) #define ABOUTBOX -1 /* not sure why these are needed */ #define ABOUTBOX2 -1 int dialogItems[][42] = { { ABOUTBOX, IDOK, OPT_MESS, 400 }, { DLG_TimeControl, IDC_Babble, OPT_TCUseMoves, OPT_TCUseInc, OPT_TCUseFixed, OPT_TCtext1, OPT_TCtext2, OPT_TCitext1, OPT_TCitext2, OPT_TCftext, GPB_Factors, IDC_Factor1, IDC_Factor2, IDOK, IDCANCEL }, { DLG_LoadOptions, OPT_Autostep, OPT_AStext1, OPT_Exact, OPT_Subset, OPT_Struct, OPT_Material, OPT_Range, OPT_Difference, OPT_elo1t, OPT_elo2t, OPT_datet, OPT_Stretch, OPT_Stretcht, OPT_Reversed, OPT_SearchMode, OPT_Mirror, OPT_thresholds, OPT_Ranget, IDOK, IDCANCEL }, { DLG_SaveOptions, OPT_Autosave, OPT_AVPrompt, OPT_AVToFile, OPT_AVBrowse, 801, OPT_PGN, OPT_Old, OPT_OutOfBookInfo, IDOK, IDCANCEL }, { 1536, 1090, IDC_Directories, 1089, 1091, IDOK, IDCANCEL, 1038, IDC_IndexNr, 1037 }, { DLG_CommPort, IDOK, IDCANCEL, IDC_Port, IDC_Rate, IDC_Bits, IDC_Parity, IDC_Stop, IDC_Flow, OPT_SerialHelp }, { DLG_EditComment, IDOK, OPT_CancelComment, OPT_ClearComment, OPT_EditComment }, { DLG_PromotionKing, PB_Chancellor, PB_Archbishop, PB_Queen, PB_Rook, PB_Bishop, PB_Knight, PB_King, IDCANCEL, IDC_Yes, IDC_No, IDC_Centaur }, { ABOUTBOX2, IDC_ChessBoard }, { DLG_GameList, OPT_GameListLoad, OPT_GameListPrev, OPT_GameListNext, OPT_GameListClose, IDC_GameListDoFilter }, { DLG_EditTags, IDOK, OPT_TagsCancel, OPT_EditTags }, { DLG_Error, IDOK }, { DLG_Colorize, IDOK, IDCANCEL, OPT_ChooseColor, OPT_Bold, OPT_Italic, OPT_Underline, OPT_Strikeout, OPT_Sample }, { DLG_Question, IDOK, IDCANCEL, OPT_QuestionText }, { DLG_Startup, IDC_Welcome, OPT_ChessEngine, OPT_ChessServer, OPT_View, IDC_SPECIFY_ENG_STATIC, IDC_SPECIFY_SERVER_STATIC, OPT_AnyAdditional, IDOK, IDCANCEL, IDM_HELPCONTENTS }, { DLG_IndexNumber, IDC_Index }, { DLG_TypeInMove, IDOK, IDCANCEL }, { DLG_TypeInName, IDOK, IDCANCEL }, { DLG_Sound, IDC_Event, OPT_NoSound, OPT_DefaultBeep, OPT_BuiltInSound, OPT_WavFile, OPT_BrowseSound, OPT_DefaultSounds, IDOK, IDCANCEL, OPT_PlaySound }, { DLG_GeneralOptions, IDOK, IDCANCEL, OPT_AlwaysOnTop, OPT_HighlightLastMove, OPT_AlwaysQueen, OPT_PeriodicUpdates, OPT_AnimateDragging, OPT_PonderNextMove, OPT_AnimateMoving, OPT_PopupExitMessage, OPT_AutoFlag, OPT_PopupMoveErrors, OPT_AutoFlipView, OPT_ShowButtonBar, OPT_AutoRaiseBoard, OPT_ShowCoordinates, OPT_Blindfold, OPT_ShowThinking, OPT_HighlightDragging, OPT_TestLegality, OPT_SaveExtPGN, OPT_HideThinkFromHuman, OPT_ExtraInfoInMoveHistory, OPT_HighlightMoveArrow, OPT_AutoLogo ,OPT_SmartMove }, { DLG_IcsOptions, IDOK, IDCANCEL, OPT_AutoComment, OPT_AutoKibitz, OPT_AutoObserve, OPT_GetMoveList, OPT_LocalLineEditing, OPT_QuietPlay, OPT_SeekGraph, OPT_AutoRefresh, OPT_BgObserve, OPT_DualBoard, OPT_Premove, OPT_PremoveWhite, OPT_PremoveBlack, OPT_SmartMove, OPT_IcsAlarm, IDC_Sec, OPT_ChooseShoutColor, OPT_ChooseSShoutColor, OPT_ChooseChannel1Color, OPT_ChooseChannelColor, OPT_ChooseKibitzColor, OPT_ChooseTellColor, OPT_ChooseChallengeColor, OPT_ChooseRequestColor, OPT_ChooseSeekColor, OPT_ChooseNormalColor, OPT_ChooseBackgroundColor, OPT_DefaultColors, OPT_DontColorize, IDC_Boxes, GPB_Colors, GPB_Premove, GPB_General, GPB_Alarm, OPT_AutoCreate }, { DLG_BoardOptions, IDOK, IDCANCEL, OPT_SizeTiny, OPT_SizeTeeny, OPT_SizeDinky, OPT_SizePetite, OPT_SizeSlim, OPT_SizeSmall, OPT_SizeMediocre, OPT_SizeMiddling, OPT_SizeAverage, OPT_SizeModerate, OPT_SizeMedium, OPT_SizeBulky, OPT_SizeLarge, OPT_SizeBig, OPT_SizeHuge, OPT_SizeGiant, OPT_SizeColossal, OPT_SizeTitanic, OPT_ChooseLightSquareColor, OPT_ChooseDarkSquareColor, OPT_ChooseWhitePieceColor, OPT_ChooseBlackPieceColor, OPT_ChooseHighlightSquareColor, OPT_ChoosePremoveHighlightColor, OPT_Monochrome, OPT_AllWhite, OPT_UpsideDown, OPT_DefaultBoardColors, GPB_Colors, IDC_Light, IDC_Dark, IDC_White, IDC_Black, IDC_High, IDC_PreHigh, GPB_Size, OPT_Bitmaps, OPT_PieceFont, OPT_Grid }, { DLG_NewVariant, IDOK, IDCANCEL, OPT_VariantNormal, OPT_VariantFRC, OPT_VariantWildcastle, OPT_VariantNocastle, OPT_VariantLosers, OPT_VariantGiveaway, OPT_VariantSuicide, OPT_Variant3Check, OPT_VariantTwoKings, OPT_VariantAtomic, OPT_VariantCrazyhouse, OPT_VariantBughouse, OPT_VariantTwilight, OPT_VariantShogi, OPT_VariantSuper, OPT_VariantKnightmate, OPT_VariantBerolina, OPT_VariantCylinder, OPT_VariantFairy, OPT_VariantMakruk, OPT_VariantGothic, OPT_VariantCapablanca, OPT_VariantJanus, OPT_VariantCRC, OPT_VariantFalcon, OPT_VariantCourier, OPT_VariantGreat, OPT_VariantSChess, OPT_VariantShatranj, OPT_VariantXiangqi, GPB_Variant, GPB_Board, IDC_Height, IDC_Width, IDC_Hand, IDC_Pieces, IDC_Def }, { DLG_Fonts, IDOK, IDCANCEL, OPT_ChooseClockFont, OPT_ChooseMessageFont, OPT_ChooseCoordFont, OPT_ChooseTagFont, OPT_ChooseCommentsFont, OPT_ChooseConsoleFont, OPT_ChooseMoveHistoryFont, OPT_DefaultFonts, OPT_ClockFont, OPT_MessageFont, OPT_CoordFont, OPT_EditTagsFont, OPT_ChoosePieceFont, OPT_MessageFont8, OPT_SampleGameListFont, OPT_ChooseGameListFont, OPT_MessageFont7, OPT_CommentsFont, OPT_MessageFont5, GPB_Current, GPB_All, OPT_MessageFont6 }, { DLG_NewGameFRC, IDC_NFG_Label, IDC_NFG_Random, IDOK, IDCANCEL }, { DLG_GameListOptions, IDC_GLT, IDC_GLT_Up, IDC_GLT_Down, IDC_GLT_Restore, IDC_GLT_Default, IDOK, IDCANCEL, IDC_GLT_RestoreTo }, { DLG_MoveHistory }, { DLG_EvalGraph }, { DLG_EngineOutput, IDC_EngineLabel1, IDC_Engine1_NPS, IDC_EngineLabel2, IDC_Engine2_NPS }, { DLG_Chat, IDC_Partner, IDC_Clear, IDC_Send, }, { DLG_EnginePlayOptions, IDC_EpPonder, IDC_EpShowThinking, IDC_EpHideThinkingHuman, IDC_EpPeriodicUpdates, GPB_Adjudications, IDC_Draw, IDC_Moves, IDC_Threshold, IDC_Centi, IDC_TestClaims, IDC_DetectMates, IDC_MaterialDraws, IDC_TrivialDraws, GPB_Apply, IDC_Rule, IDC_Repeats, IDC_ScoreAbs1, IDC_ScoreAbs2, IDOK, IDCANCEL }, { DLG_OptionsUCI, IDC_PolyDir, IDC_BrowseForPolyglotDir, IDC_Hash, IDC_Path, IDC_BrowseForEGTB, IDC_Cache, IDC_UseBook, IDC_BrowseForBook, IDC_CPU, IDC_OwnBook1, IDC_OwnBook2, IDC_Depth, IDC_Variation, IDC_DefGames, IDOK, IDCANCEL }, { 0 } }; static char languageBuf[70000], *foreign[1000], *english[1000], *languageFile[MSG_SIZ]; static int lastChecked; static char oldLanguage[MSG_SIZ], *menuText[10][30]; extern int tinyLayout; extern char * menuBarText[][10]; void LoadLanguageFile(char *name) { //load the file with translations, and make a list of the strings to be translated, and their translations FILE *f; int i=0, j=0, n=0, k; char buf[MSG_SIZ]; if(!name || name[0] == NULLCHAR) return; snprintf(buf, MSG_SIZ, "%s%s", name, strchr(name, '.') ? "" : ".lng"); // auto-append lng extension appData.language = oldLanguage; if(!strcmp(buf, oldLanguage)) { barbaric = 1; return; } // this language already loaded; just switch on if((f = fopen(buf, "r")) == NULL) return; while((k = fgetc(f)) != EOF) { if(i >= sizeof(languageBuf)) { DisplayError("Language file too big", 0); return; } languageBuf[i] = k; if(k == '\n') { if(languageBuf[n] == '"' && languageBuf[i-1] == '"') { char *p; if(p = strstr(languageBuf + n + 1, "\" === \"")) { if(p > languageBuf+n+2 && p+8 < languageBuf+i) { if(j >= sizeof(english)) { DisplayError("Too many translated strings", 0); return; } english[j] = languageBuf + n + 1; *p = 0; foreign[j++] = p + 7; languageBuf[i-1] = 0; //if(appData.debugMode) fprintf(debugFP, "translation: replace '%s' by '%s'\n", english[j-1], foreign[j-1]); } } } n = i + 1; } else if(i > 0 && languageBuf[i-1] == '\\') { switch(k) { case 'n': k = '\n'; break; case 'r': k = '\r'; break; case 't': k = '\t'; break; } languageBuf[--i] = k; } i++; } fclose(f); barbaric = (j != 0); safeStrCpy(oldLanguage, buf, sizeof(oldLanguage)/sizeof(oldLanguage[0]) ); } char * T_(char *s) { // return the translation of the given string // efficiency can be improved a lot... int i=0; static char buf[MSG_SIZ]; //if(appData.debugMode) fprintf(debugFP, "T_(%s)\n", s); if(!barbaric) return s; if(!s) return ""; // sanity while(english[i]) { if(!strcmp(s, english[i])) return foreign[i]; if(english[i][0] == '%' && strstr(s, english[i]+1) == s) { // allow translation of strings with variable ending snprintf(buf, MSG_SIZ, "%s%s", foreign[i], s + strlen(english[i]+1)); // keep unmatched portion return buf; } i++; } return s; } void Translate(HWND hDlg, int dialogID) { // translate all text items in the given dialog int i=0, j, k; char buf[MSG_SIZ], *s; if(!barbaric) return; while(dialogItems[i][0] && dialogItems[i][0] != dialogID) i++; // find the dialog description if(dialogItems[i][0] != dialogID) return; // unknown dialog, should not happen GetWindowText( hDlg, buf, MSG_SIZ ); s = T_(buf); if(strcmp(buf, s)) SetWindowText(hDlg, s); // replace by translated string (if different) for(j=1; k=dialogItems[i][j]; j++) { // translate all listed dialog items GetDlgItemText(hDlg, k, buf, MSG_SIZ); if(strlen(buf) == 0) continue; s = T_(buf); if(strcmp(buf, s)) SetDlgItemText(hDlg, k, s); // replace by translated string (if different) } } HMENU TranslateOneMenu(int i, HMENU subMenu) { int j; static MENUITEMINFO info; info.cbSize = sizeof(MENUITEMINFO); info.fMask = MIIM_STATE | MIIM_TYPE; for(j=GetMenuItemCount(subMenu)-1; j>=0; j--){ char buf[MSG_SIZ]; info.dwTypeData = buf; info.cch = sizeof(buf); GetMenuItemInfo(subMenu, j, TRUE, &info); if(i < 10) { if(menuText[i][j]) safeStrCpy(buf, menuText[i][j], sizeof(buf)/sizeof(buf[0]) ); else menuText[i][j] = strdup(buf); // remember original on first change } if(buf[0] == NULLCHAR) continue; info.dwTypeData = T_(buf); info.cch = strlen(buf)+1; SetMenuItemInfo(subMenu, j, TRUE, &info); } return subMenu; } void TranslateMenus(int addLanguage) { int i; WIN32_FIND_DATA fileData; HANDLE hFind; #define IDM_English 1970 if(1) { HMENU mainMenu = GetMenu(hwndMain); for (i=GetMenuItemCount(mainMenu)-1; i>=0; i--) { HMENU subMenu = GetSubMenu(mainMenu, i); ModifyMenu(mainMenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP|EnableMenuItem(mainMenu, i, MF_BYPOSITION), (UINT) subMenu, T_(menuBarText[tinyLayout][i])); TranslateOneMenu(i, subMenu); } DrawMenuBar(hwndMain); } if(!addLanguage) return; if((hFind = FindFirstFile("*.LNG", &fileData)) != INVALID_HANDLE_VALUE) { HMENU mainMenu = GetMenu(hwndMain); HMENU subMenu = GetSubMenu(mainMenu, GetMenuItemCount(mainMenu)-1); AppendMenu(subMenu, MF_SEPARATOR, (UINT_PTR) 0, NULL); AppendMenu(subMenu, MF_ENABLED|MF_STRING|(barbaric?MF_UNCHECKED:MF_CHECKED), (UINT_PTR) IDM_English, (LPCTSTR) "English"); i = 0; lastChecked = IDM_English; do { char *p, *q = fileData.cFileName; int checkFlag = MF_UNCHECKED; languageFile[i] = strdup(q); if(barbaric && !strcmp(oldLanguage, q)) { checkFlag = MF_CHECKED; lastChecked = IDM_English + i + 1; CheckMenuItem(mainMenu, IDM_English, MF_BYCOMMAND|MF_UNCHECKED); } *q = ToUpper(*q); while(*++q) *q = ToLower(*q); p = strstr(fileData.cFileName, ".lng"); if(p) *p = 0; AppendMenu(subMenu, MF_ENABLED|MF_STRING|checkFlag, (UINT_PTR) IDM_English + ++i, (LPCTSTR) fileData.cFileName); } while(FindNextFile(hFind, &fileData)); FindClose(hFind); } } #endif #define IDM_RecentEngines 3000 void RecentEngineMenu (char *s) { if(appData.icsActive) return; if(appData.recentEngines > 0 && *s) { // feature is on, and list non-empty HMENU mainMenu = GetMenu(hwndMain); HMENU subMenu = GetSubMenu(mainMenu, 5); // Engine menu int i=IDM_RecentEngines; recentEngines = strdup(appData.recentEngineList); // remember them as they are in menu AppendMenu(subMenu, MF_SEPARATOR, (UINT_PTR) 0, NULL); while(*s) { char *p = strchr(s, '\n'); if(p == NULL) return; // malformed! *p = NULLCHAR; AppendMenu(subMenu, MF_ENABLED|MF_STRING|MF_UNCHECKED, (UINT_PTR) i++, (LPCTSTR) s); *p = '\n'; s = p+1; } } } typedef struct { char *name; int squareSize; int lineGap; int smallLayout; int tinyLayout; int cliWidth, cliHeight; } SizeInfo; SizeInfo sizeInfo[] = { { "tiny", 21, 0, 1, 1, 0, 0 }, { "teeny", 25, 1, 1, 1, 0, 0 }, { "dinky", 29, 1, 1, 1, 0, 0 }, { "petite", 33, 1, 1, 1, 0, 0 }, { "slim", 37, 2, 1, 0, 0, 0 }, { "small", 40, 2, 1, 0, 0, 0 }, { "mediocre", 45, 2, 1, 0, 0, 0 }, { "middling", 49, 2, 0, 0, 0, 0 }, { "average", 54, 2, 0, 0, 0, 0 }, { "moderate", 58, 3, 0, 0, 0, 0 }, { "medium", 64, 3, 0, 0, 0, 0 }, { "bulky", 72, 3, 0, 0, 0, 0 }, { "large", 80, 3, 0, 0, 0, 0 }, { "big", 87, 3, 0, 0, 0, 0 }, { "huge", 95, 3, 0, 0, 0, 0 }, { "giant", 108, 3, 0, 0, 0, 0 }, { "colossal", 116, 4, 0, 0, 0, 0 }, { "titanic", 129, 4, 0, 0, 0, 0 }, { NULL, 0, 0, 0, 0, 0, 0 } }; #define MF(x) {x, {{0,}, 0. }, {0, }, 0} MyFont fontRec[NUM_SIZES][NUM_FONTS] = { { MF(CLOCK_FONT_TINY), MF(MESSAGE_FONT_TINY), MF(COORD_FONT_TINY), MF(CONSOLE_FONT_TINY), MF(COMMENT_FONT_TINY), MF(EDITTAGS_FONT_TINY), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_TEENY), MF(MESSAGE_FONT_TEENY), MF(COORD_FONT_TEENY), MF(CONSOLE_FONT_TEENY), MF(COMMENT_FONT_TEENY), MF(EDITTAGS_FONT_TEENY), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_DINKY), MF(MESSAGE_FONT_DINKY), MF(COORD_FONT_DINKY), MF(CONSOLE_FONT_DINKY), MF(COMMENT_FONT_DINKY), MF(EDITTAGS_FONT_DINKY), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_PETITE), MF(MESSAGE_FONT_PETITE), MF(COORD_FONT_PETITE), MF(CONSOLE_FONT_PETITE), MF(COMMENT_FONT_PETITE), MF(EDITTAGS_FONT_PETITE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_SLIM), MF(MESSAGE_FONT_SLIM), MF(COORD_FONT_SLIM), MF(CONSOLE_FONT_SLIM), MF(COMMENT_FONT_SLIM), MF(EDITTAGS_FONT_SLIM), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_SMALL), MF(MESSAGE_FONT_SMALL), MF(COORD_FONT_SMALL), MF(CONSOLE_FONT_SMALL), MF(COMMENT_FONT_SMALL), MF(EDITTAGS_FONT_SMALL), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_MEDIOCRE), MF(MESSAGE_FONT_MEDIOCRE), MF(COORD_FONT_MEDIOCRE), MF(CONSOLE_FONT_MEDIOCRE), MF(COMMENT_FONT_MEDIOCRE), MF(EDITTAGS_FONT_MEDIOCRE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_MIDDLING), MF(MESSAGE_FONT_MIDDLING), MF(COORD_FONT_MIDDLING), MF(CONSOLE_FONT_MIDDLING), MF(COMMENT_FONT_MIDDLING), MF(EDITTAGS_FONT_MIDDLING), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_AVERAGE), MF(MESSAGE_FONT_AVERAGE), MF(COORD_FONT_AVERAGE), MF(CONSOLE_FONT_AVERAGE), MF(COMMENT_FONT_AVERAGE), MF(EDITTAGS_FONT_AVERAGE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_MODERATE), MF(MESSAGE_FONT_MODERATE), MF(COORD_FONT_MODERATE), MF(CONSOLE_FONT_MODERATE), MF(COMMENT_FONT_MODERATE), MF(EDITTAGS_FONT_MODERATE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_MEDIUM), MF(MESSAGE_FONT_MEDIUM), MF(COORD_FONT_MEDIUM), MF(CONSOLE_FONT_MEDIUM), MF(COMMENT_FONT_MEDIUM), MF(EDITTAGS_FONT_MEDIUM), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_BULKY), MF(MESSAGE_FONT_BULKY), MF(COORD_FONT_BULKY), MF(CONSOLE_FONT_BULKY), MF(COMMENT_FONT_BULKY), MF(EDITTAGS_FONT_BULKY), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_LARGE), MF(MESSAGE_FONT_LARGE), MF(COORD_FONT_LARGE), MF(CONSOLE_FONT_LARGE), MF(COMMENT_FONT_LARGE), MF(EDITTAGS_FONT_LARGE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_BIG), MF(MESSAGE_FONT_BIG), MF(COORD_FONT_BIG), MF(CONSOLE_FONT_BIG), MF(COMMENT_FONT_BIG), MF(EDITTAGS_FONT_BIG), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_HUGE), MF(MESSAGE_FONT_HUGE), MF(COORD_FONT_HUGE), MF(CONSOLE_FONT_HUGE), MF(COMMENT_FONT_HUGE), MF(EDITTAGS_FONT_HUGE), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_GIANT), MF(MESSAGE_FONT_GIANT), MF(COORD_FONT_GIANT), MF(CONSOLE_FONT_GIANT), MF(COMMENT_FONT_GIANT), MF(EDITTAGS_FONT_GIANT), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_COLOSSAL), MF(MESSAGE_FONT_COLOSSAL), MF(COORD_FONT_COLOSSAL), MF(CONSOLE_FONT_COLOSSAL), MF(COMMENT_FONT_COLOSSAL), MF(EDITTAGS_FONT_COLOSSAL), MF(MOVEHISTORY_FONT_ALL), MF (GAMELIST_FONT_ALL) }, { MF(CLOCK_FONT_TITANIC), MF(MESSAGE_FONT_TITANIC), MF(COORD_FONT_TITANIC), MF(CONSOLE_FONT_TITANIC), MF(COMMENT_FONT_TITANIC), MF(EDITTAGS_FONT_TITANIC), MF(MOVEHISTORY_FONT_ALL), MF(GAMELIST_FONT_ALL) }, }; MyFont *font[NUM_SIZES][NUM_FONTS]; typedef struct { char *label; int id; HWND hwnd; WNDPROC wndproc; } MyButtonDesc; #define BUTTON_WIDTH (tinyLayout ? 16 : 32) #define N_BUTTONS 5 MyButtonDesc buttonDesc[N_BUTTONS] = { {"<<", IDM_ToStart, NULL, NULL}, {"<", IDM_Backward, NULL, NULL}, {"P", IDM_Pause, NULL, NULL}, {">", IDM_Forward, NULL, NULL}, {">>", IDM_ToEnd, NULL, NULL}, }; int tinyLayout = 0, smallLayout = 0; #define MENU_BAR_ITEMS 9 char *menuBarText[2][MENU_BAR_ITEMS+1] = { { N_("&File"), N_("&Edit"), N_("&View"), N_("&Mode"), N_("&Action"), N_("E&ngine"), N_("&Options"), N_("&Help"), NULL }, { N_("&F"), N_("&E"), N_("&V"), N_("&M"), N_("&A"), N_("&N"), N_("&O"), N_("&H"), NULL }, }; MySound sounds[(int)NSoundClasses]; MyTextAttribs textAttribs[(int)NColorClasses]; MyColorizeAttribs colorizeAttribs[] = { { (COLORREF)0, 0, N_("Shout Text") }, { (COLORREF)0, 0, N_("SShout/CShout") }, { (COLORREF)0, 0, N_("Channel 1 Text") }, { (COLORREF)0, 0, N_("Channel Text") }, { (COLORREF)0, 0, N_("Kibitz Text") }, { (COLORREF)0, 0, N_("Tell Text") }, { (COLORREF)0, 0, N_("Challenge Text") }, { (COLORREF)0, 0, N_("Request Text") }, { (COLORREF)0, 0, N_("Seek Text") }, { (COLORREF)0, 0, N_("Normal Text") }, { (COLORREF)0, 0, N_("None") } }; static char *commentTitle; static char *commentText; static int commentIndex; static Boolean editComment = FALSE; char errorTitle[MSG_SIZ]; char errorMessage[2*MSG_SIZ]; HWND errorDialog = NULL; BOOLEAN moveErrorMessageUp = FALSE; BOOLEAN consoleEcho = TRUE; CHARFORMAT consoleCF; COLORREF consoleBackgroundColor; char *programVersion; #define CPReal 1 #define CPComm 2 #define CPSock 3 #define CPRcmd 4 typedef int CPKind; typedef struct { CPKind kind; HANDLE hProcess; DWORD pid; HANDLE hTo; HANDLE hFrom; SOCKET sock; SOCKET sock2; /* stderr socket for OpenRcmd */ } ChildProc; #define INPUT_SOURCE_BUF_SIZE 4096 typedef struct _InputSource { CPKind kind; HANDLE hFile; SOCKET sock; int lineByLine; HANDLE hThread; DWORD id; char buf[INPUT_SOURCE_BUF_SIZE]; char *next; DWORD count; int error; InputCallback func; struct _InputSource *second; /* for stderr thread on CPRcmd */ VOIDSTAR closure; } InputSource; InputSource *consoleInputSource; DCB dcb; /* forward */ VOID ConsoleOutput(char* data, int length, int forceVisible); VOID ConsoleCreate(); LRESULT CALLBACK ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); VOID ColorizeTextPopup(HWND hwnd, ColorClass cc); VOID PrintCommSettings(FILE *f, char *name, DCB *dcb); VOID ParseCommSettings(char *arg, DCB *dcb); LRESULT CALLBACK StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); VOID APIENTRY MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def); void ParseIcsTextMenu(char *icsTextMenuString); VOID PopUpNameDialog(char firstchar); VOID UpdateSampleText(HWND hDlg, int id, MyColorizeAttribs *mca); /* [AS] */ int NewGameFRC(); int GameListOptions(); int dummy; // [HGM] for obsolete args HWND hwndMain = NULL; /* root window*/ HWND hwndConsole = NULL; HWND commentDialog = NULL; HWND moveHistoryDialog = NULL; HWND evalGraphDialog = NULL; HWND engineOutputDialog = NULL; HWND gameListDialog = NULL; HWND editTagsDialog = NULL; int commentUp = FALSE; WindowPlacement wpMain; WindowPlacement wpConsole; WindowPlacement wpComment; WindowPlacement wpMoveHistory; WindowPlacement wpEvalGraph; WindowPlacement wpEngineOutput; WindowPlacement wpGameList; WindowPlacement wpTags; VOID EngineOptionsPopup(); // [HGM] settings VOID GothicPopUp(char *title, VariantClass variant); /* * Setting "frozen" should disable all user input other than deleting * the window. We do this while engines are initializing themselves. */ static int frozen = 0; static int oldMenuItemState[MENU_BAR_ITEMS]; void FreezeUI() { HMENU hmenu; int i; if (frozen) return; frozen = 1; hmenu = GetMenu(hwndMain); for (i=0; i 4 && IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE); if(currentElement < 5 && IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE); // all open together SetFocus(h); return; // this message now has been processed } } if (!(commentDialog && IsDialogMessage(commentDialog, &msg)) && !(moveHistoryDialog && IsDialogMessage(moveHistoryDialog, &msg)) && !(evalGraphDialog && IsDialogMessage(evalGraphDialog, &msg)) && !(engineOutputDialog && IsDialogMessage(engineOutputDialog, &msg)) && !(editTagsDialog && IsDialogMessage(editTagsDialog, &msg)) && !(gameListDialog && IsDialogMessage(gameListDialog, &msg)) && !(errorDialog && IsDialogMessage(errorDialog, &msg)) && !(!frozen && TranslateAccelerator(hwndMain, hAccelMain, &msg)) && JAWS_ACCEL !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoICS, &msg)) && !(!hwndConsole && TranslateAccelerator(hwndMain, hAccelNoAlt, &msg))) { int done = 0, i; // [HGM] chat: dispatch cat-box messages for(i=0; i screenGeometry.right - 32) *x = screenGeometry.left; if (*y > screenGeometry.bottom - 32) *y = screenGeometry.top; if (*x < screenGeometry.left + minX) *x = screenGeometry.left + minX; if (*y < screenGeometry.top + minY) *y = screenGeometry.top + minY; } VOID LoadLogo(ChessProgramState *cps, int n, Boolean ics) { char buf[MSG_SIZ], dir[MSG_SIZ]; GetCurrentDirectory(MSG_SIZ, dir); SetCurrentDirectory(installDir); if( appData.logo[n] && appData.logo[n][0] != NULLCHAR) { cps->programLogo = LoadImage( 0, appData.logo[n], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); if (cps->programLogo == NULL && appData.debugMode) { fprintf( debugFP, "Unable to load logo bitmap '%s'\n", appData.logo[n] ); } } else if(appData.autoLogo) { if(ics) { // [HGM] logo: in ICS mode second can be used for ICS char *opponent = ""; if(gameMode == IcsPlayingWhite) opponent = gameInfo.black; if(gameMode == IcsPlayingBlack) opponent = gameInfo.white; sprintf(buf, "logos\\%s\\%s.bmp", appData.icsHost, opponent); if(!*opponent || !(cps->programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ))) { sprintf(buf, "logos\\%s.bmp", appData.icsHost); cps->programLogo = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); } } else if(appData.directory[n] && appData.directory[n][0]) { SetCurrentDirectory(appData.directory[n]); cps->programLogo = LoadImage( 0, "logo.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); } } SetCurrentDirectory(dir); /* return to prev directory */ } VOID InitTextures() { ZeroMemory( &backTextureSquareInfo, sizeof(backTextureSquareInfo) ); backTextureSquareSize = 0; // kludge to force recalculation of texturemode if( appData.liteBackTextureFile && appData.liteBackTextureFile[0] != NULLCHAR && appData.liteBackTextureFile[0] != '*' ) { if(liteBackTexture) DeleteObject(liteBackTexture); liteBackTexture = LoadImage( 0, appData.liteBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); liteBackTextureMode = appData.liteBackTextureMode; if (liteBackTexture == NULL && appData.debugMode) { fprintf( debugFP, "Unable to load lite texture bitmap '%s'\n", appData.liteBackTextureFile ); } } if( appData.darkBackTextureFile && appData.darkBackTextureFile[0] != NULLCHAR && appData.darkBackTextureFile[0] != '*' ) { if(darkBackTexture) DeleteObject(darkBackTexture); darkBackTexture = LoadImage( 0, appData.darkBackTextureFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); darkBackTextureMode = appData.darkBackTextureMode; if (darkBackTexture == NULL && appData.debugMode) { fprintf( debugFP, "Unable to load dark texture bitmap '%s'\n", appData.darkBackTextureFile ); } } } #ifndef SM_CXVIRTUALSCREEN #define SM_CXVIRTUALSCREEN 78 #endif #ifndef SM_CYVIRTUALSCREEN #define SM_CYVIRTUALSCREEN 79 #endif #ifndef SM_XVIRTUALSCREEN #define SM_XVIRTUALSCREEN 76 #endif #ifndef SM_YVIRTUALSCREEN #define SM_YVIRTUALSCREEN 77 #endif VOID InitGeometry() { screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); if( !screenHeight ) screenHeight = GetSystemMetrics(SM_CYSCREEN); screenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); if( !screenWidth ) screenWidth = GetSystemMetrics(SM_CXSCREEN); screenGeometry.left = GetSystemMetrics(SM_XVIRTUALSCREEN); screenGeometry.top = GetSystemMetrics(SM_YVIRTUALSCREEN); screenGeometry.right = screenGeometry.left + screenWidth; screenGeometry.bottom = screenGeometry.top + screenHeight; } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine) { HWND hwnd; /* Main window handle. */ int ibs; WINDOWPLACEMENT wp; char *filepart; hInst = hInstance; /* Store instance handle in our global variable */ programName = szAppName; if (SearchPath(NULL, "WinBoard.exe", NULL, MSG_SIZ, installDir, &filepart)) { *filepart = NULLCHAR; SetCurrentDirectory(installDir); } else { GetCurrentDirectory(MSG_SIZ, installDir); } gameInfo.boardWidth = gameInfo.boardHeight = 8; // [HGM] won't have open window otherwise InitGeometry(); InitAppData(lpCmdLine); /* Get run-time parameters */ /* xboard, and older WinBoards, controlled the move sound with the appData.ringBellAfterMoves option. In the current WinBoard, we always turn the option on (so that the backend will call us), then let the user turn the sound off by setting it to silence if desired. To accommodate old winboard.ini files saved by old versions of WinBoard, we also turn off the sound if the option was initially set to false. [HGM] taken out of InitAppData */ if (!appData.ringBellAfterMoves) { sounds[(int)SoundMove].name = strdup(""); appData.ringBellAfterMoves = TRUE; } if (appData.debugMode) { debugFP = fopen(appData.nameOfDebugFile, "w"); setbuf(debugFP, NULL); } LoadLanguageFile(appData.language); InitBackEnd1(); // InitEngineUCI( installDir, &first ); // [HGM] incorporated in InitBackEnd1() // InitEngineUCI( installDir, &second ); /* Create a main window for this application instance. */ hwnd = CreateWindow(szAppName, szTitle, (WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX), CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); hwndMain = hwnd; /* If window could not be created, return "failure" */ if (!hwnd) { return (FALSE); } /* [HGM] logo: Load logos if specified (must be done before InitDrawingSizes) */ LoadLogo(&first, 0, FALSE); LoadLogo(&second, 1, appData.icsActive); SetUserLogo(); iconWhite = LoadIcon(hInstance, "icon_white"); iconBlack = LoadIcon(hInstance, "icon_black"); iconCurrent = iconWhite; InitDrawingColors(); InitPosition(0); // to set nr of ranks and files, which might be non-default through command-line args for (ibs = (int) NUM_SIZES - 1; ibs >= 0; ibs--) { /* Compute window size for each board size, and use the largest size that fits on this screen as the default. */ InitDrawingSizes((BoardSize)(ibs+1000), 0); if (boardSize == (BoardSize)-1 && winH <= screenHeight - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYCAPTION) - 10 && winW <= screenWidth) { boardSize = (BoardSize)ibs; } } InitDrawingSizes(boardSize, 0); RecentEngineMenu(appData.recentEngineList); InitMenuChecks(); buttonCount = GetSystemMetrics(SM_CMOUSEBUTTONS); /* [AS] Load textures if specified */ InitTextures(); mysrandom( (unsigned) time(NULL) ); /* [AS] Restore layout */ if( wpMoveHistory.visible ) { MoveHistoryPopUp(); } if( wpEvalGraph.visible ) { EvalGraphPopUp(); } if( wpEngineOutput.visible ) { EngineOutputPopUp(); } /* Make the window visible; update its client area; and return "success" */ EnsureOnScreen(&wpMain.x, &wpMain.y, minX, minY); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = nCmdShow; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpMain.x; wp.rcNormalPosition.right = wpMain.x + wpMain.width; wp.rcNormalPosition.top = wpMain.y; wp.rcNormalPosition.bottom = wpMain.y + wpMain.height; SetWindowPlacement(hwndMain, &wp); InitBackEnd2(); // [HGM] moved until after all windows placed, to save correct position if fatal error on engine start if(!appData.noGUI) SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); if (hwndConsole) { #if AOT_CONSOLE SetWindowPos(hwndConsole, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); #endif ShowWindow(hwndConsole, nCmdShow); SetActiveWindow(hwndConsole); } if(!appData.noGUI) UpdateWindow(hwnd); else ShowWindow(hwnd, SW_MINIMIZE); if(gameListDialog) SetFocus(gameListDialog); // [HGM] jaws: for if we clicked multi-game game file return TRUE; } VOID InitMenuChecks() { HMENU hmenu = GetMenu(hwndMain); (void) EnableMenuItem(hmenu, IDM_CommPort, MF_BYCOMMAND|((appData.icsActive && *appData.icsCommPort != NULLCHAR) ? MF_ENABLED : MF_GRAYED)); (void) CheckMenuItem(hmenu, IDM_SaveSettingsOnExit, MF_BYCOMMAND|(saveSettingsOnExit ? MF_CHECKED : MF_UNCHECKED)); EnableMenuItem(hmenu, IDM_SaveSelected, MF_GRAYED); } //--------------------------------------------------------------------------------------------------------- #define ICS_TEXT_MENU_SIZE (IDM_CommandXLast - IDM_CommandX + 1) #define XBOARD FALSE #define OPTCHAR "/" #define SEPCHAR "=" #define TOPLEVEL 0 #include "args.h" // front-end part of option handling VOID LFfromMFP(LOGFONT* lf, MyFontParams *mfp) { HDC hdc = CreateDC("DISPLAY", NULL, NULL, NULL); lf->lfHeight = -(int)(mfp->pointSize * GetDeviceCaps(hdc, LOGPIXELSY) / 72.0 + 0.5); DeleteDC(hdc); lf->lfWidth = 0; lf->lfEscapement = 0; lf->lfOrientation = 0; lf->lfWeight = mfp->bold ? FW_BOLD : FW_NORMAL; lf->lfItalic = mfp->italic; lf->lfUnderline = mfp->underline; lf->lfStrikeOut = mfp->strikeout; lf->lfCharSet = mfp->charset; lf->lfOutPrecision = OUT_DEFAULT_PRECIS; lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; lf->lfQuality = DEFAULT_QUALITY; lf->lfPitchAndFamily = DEFAULT_PITCH|FF_DONTCARE; safeStrCpy(lf->lfFaceName, mfp->faceName, sizeof(lf->lfFaceName)/sizeof(lf->lfFaceName[0]) ); } void CreateFontInMF(MyFont *mf) { LFfromMFP(&mf->lf, &mf->mfp); if (mf->hf) DeleteObject(mf->hf); mf->hf = CreateFontIndirect(&mf->lf); } // [HGM] This platform-dependent table provides the location for storing the color info void * colorVariable[] = { &whitePieceColor, &blackPieceColor, &lightSquareColor, &darkSquareColor, &highlightSquareColor, &premoveHighlightColor, NULL, &consoleBackgroundColor, &appData.fontForeColorWhite, &appData.fontBackColorWhite, &appData.fontForeColorBlack, &appData.fontBackColorBlack, &appData.evalHistColorWhite, &appData.evalHistColorBlack, &appData.highlightArrowColor, }; /* Command line font name parser. NULL name means do nothing. Syntax like "Courier New:10.0 bi" or "Arial:10" or "Arial:10b" For backward compatibility, syntax without the colon is also accepted, but font names with digits in them won't work in that case. */ VOID ParseFontName(char *name, MyFontParams *mfp) { char *p, *q; if (name == NULL) return; p = name; q = strchr(p, ':'); if (q) { if (q - p >= sizeof(mfp->faceName)) ExitArgError(_("Font name too long:"), name, TRUE); memcpy(mfp->faceName, p, q - p); mfp->faceName[q - p] = NULLCHAR; p = q + 1; } else { q = mfp->faceName; while (*p && !isdigit(*p)) { *q++ = *p++; if (q - mfp->faceName >= sizeof(mfp->faceName)) ExitArgError(_("Font name too long:"), name, TRUE); } while (q > mfp->faceName && q[-1] == ' ') q--; *q = NULLCHAR; } if (!*p) ExitArgError(_("Font point size missing:"), name, TRUE); mfp->pointSize = (float) atof(p); mfp->bold = (strchr(p, 'b') != NULL); mfp->italic = (strchr(p, 'i') != NULL); mfp->underline = (strchr(p, 'u') != NULL); mfp->strikeout = (strchr(p, 's') != NULL); mfp->charset = DEFAULT_CHARSET; q = strchr(p, 'c'); if (q) mfp->charset = (BYTE) atoi(q+1); } void ParseFont(char *name, int number) { // wrapper to shield back-end from 'font' ParseFontName(name, &font[boardSize][number]->mfp); } void SetFontDefaults() { // in WB we have a 2D array of fonts; this initializes their description int i, j; /* Point font array elements to structures and parse default font names */ for (i=0; idef, &font[j][i]->mfp); } } } void CreateFonts() { // here we create the actual fonts from the selected descriptions int i, j; for (i=0; iargLoc]->mfp; fprintf(f, "/size=%s ", sizeInfo[bs].name); fprintf(f, "/%s=\"%s:%g%s%s%s%s%sc%d\"\n", ad->argName, mfp->faceName, mfp->pointSize, mfp->bold || mfp->italic || mfp->underline || mfp->strikeout ? " " : "", mfp->bold ? "b" : "", mfp->italic ? "i" : "", mfp->underline ? "u" : "", mfp->strikeout ? "s" : "", (int)mfp->charset); } } void ExportSounds() { // [HGM] copy the names from the internal WB variables to appData ColorClass cc; SoundClass sc; for (cc = (ColorClass)0; cc < ColorNormal; cc++) (&appData.soundShout)[cc] = textAttribs[cc].sound.name; for (sc = (SoundClass)0; sc < NSoundClasses; sc++) (&appData.soundMove)[sc] = sounds[sc].name; } void SaveAttribsArg(FILE *f, ArgDescriptor *ad) { // here the "argLoc" defines a table index. It could have contained the 'ta' pointer itself, though MyTextAttribs* ta = &textAttribs[(ColorClass)ad->argLoc]; fprintf(f, "/%s=\"%s%s%s%s%s#%02lx%02lx%02lx\"\n", ad->argName, (ta->effects & CFE_BOLD) ? "b" : "", (ta->effects & CFE_ITALIC) ? "i" : "", (ta->effects & CFE_UNDERLINE) ? "u" : "", (ta->effects & CFE_STRIKEOUT) ? "s" : "", (ta->effects) ? " " : "", ta->color&0xff, (ta->color >> 8)&0xff, (ta->color >> 16)&0xff); } void SaveColor(FILE *f, ArgDescriptor *ad) { // in WinBoard the color is an int and has to be converted to text. In X it would be a string already? COLORREF color = *(COLORREF *)colorVariable[(int)ad->argLoc]; fprintf(f, "/%s=#%02lx%02lx%02lx\n", ad->argName, color&0xff, (color>>8)&0xff, (color>>16)&0xff); } void SaveBoardSize(FILE *f, char *name, void *addr) { // wrapper to shield back-end from BoardSize & sizeInfo fprintf(f, "/%s=%s\n", name, sizeInfo[*(BoardSize *)addr].name); } void ParseCommPortSettings(char *s) { // wrapper to keep dcb from back-end ParseCommSettings(s, &dcb); } void GetWindowCoords() { // wrapper to shield use of window handles from back-end (make addressible by number?) GetActualPlacement(hwndMain, &wpMain); GetActualPlacement(hwndConsole, &wpConsole); GetActualPlacement(commentDialog, &wpComment); GetActualPlacement(editTagsDialog, &wpTags); GetActualPlacement(gameListDialog, &wpGameList); GetActualPlacement(moveHistoryDialog, &wpMoveHistory); GetActualPlacement(evalGraphDialog, &wpEvalGraph); GetActualPlacement(engineOutputDialog, &wpEngineOutput); } void PrintCommPortSettings(FILE *f, char *name) { // wrapper to shield back-end from DCB PrintCommSettings(f, name, &dcb); } int MySearchPath(char *installDir, char *name, char *fullname) { char *dummy, buf[MSG_SIZ], *p = name, *q; if(name[0]== '%') { fullname[0] = 0; // [HGM] first expand any environment variables in the given name while(*p == '%' && (q = strchr(p+1, '%'))) { // [HGM] recognize %*% as environment variable safeStrCpy(buf, p+1, sizeof(buf)/sizeof(buf[0]) ); *strchr(buf, '%') = 0; strcat(fullname, getenv(buf)); p = q+1; while(*p == '\\') { strcat(fullname, "\\"); p++; } } strcat(fullname, p); // after environment variables (if any), take the remainder of the given name if(appData.debugMode) fprintf(debugFP, "name = '%s', expanded name = '%s'\n", name, fullname); return (int) strlen(fullname); } return (int) SearchPath(installDir, name, NULL, MSG_SIZ, fullname, &dummy); } int MyGetFullPathName(char *name, char *fullname) { char *dummy; return (int) GetFullPathName(name, MSG_SIZ, fullname, &dummy); } int MainWindowUp() { // [HGM] args: allows testing if main window is realized from back-end return hwndMain != NULL; } void PopUpStartupDialog() { FARPROC lpProc; LoadLanguageFile(appData.language); lpProc = MakeProcInstance((FARPROC)StartupDialog, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_Startup), NULL, (DLGPROC)lpProc); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * GDI board drawing routines * \*---------------------------------------------------------------------------*/ /* [AS] Draw square using background texture */ static void DrawTile( int dx, int dy, int dw, int dh, HDC dst, HDC src, int mode, int sx, int sy ) { XFORM x; if( mode == 0 ) { return; /* Should never happen! */ } SetGraphicsMode( dst, GM_ADVANCED ); switch( mode ) { case 1: /* Identity */ break; case 2: /* X reflection */ x.eM11 = -1.0; x.eM12 = 0; x.eM21 = 0; x.eM22 = 1.0; x.eDx = (FLOAT) dw + dx - 1; x.eDy = 0; dx = 0; SetWorldTransform( dst, &x ); break; case 3: /* Y reflection */ x.eM11 = 1.0; x.eM12 = 0; x.eM21 = 0; x.eM22 = -1.0; x.eDx = 0; x.eDy = (FLOAT) dh + dy - 1; dy = 0; SetWorldTransform( dst, &x ); break; case 4: /* X/Y flip */ x.eM11 = 0; x.eM12 = 1.0; x.eM21 = 1.0; x.eM22 = 0; x.eDx = (FLOAT) dx; x.eDy = (FLOAT) dy; dx = 0; dy = 0; SetWorldTransform( dst, &x ); break; } BitBlt( dst, dx, dy, dw, dh, src, sx, sy, SRCCOPY ); x.eM11 = 1.0; x.eM12 = 0; x.eM21 = 0; x.eM22 = 1.0; x.eDx = 0; x.eDy = 0; SetWorldTransform( dst, &x ); ModifyWorldTransform( dst, 0, MWT_IDENTITY ); } /* [AS] [HGM] Make room for more piece types, so all pieces can be different */ enum { PM_WP = (int) WhitePawn, PM_WN = (int) WhiteKnight, PM_WB = (int) WhiteBishop, PM_WR = (int) WhiteRook, PM_WQ = (int) WhiteQueen, PM_WF = (int) WhiteFerz, PM_WW = (int) WhiteWazir, PM_WE = (int) WhiteAlfil, PM_WM = (int) WhiteMan, PM_WO = (int) WhiteCannon, PM_WU = (int) WhiteUnicorn, PM_WH = (int) WhiteNightrider, PM_WA = (int) WhiteAngel, PM_WC = (int) WhiteMarshall, PM_WAB = (int) WhiteCardinal, PM_WD = (int) WhiteDragon, PM_WL = (int) WhiteLance, PM_WS = (int) WhiteCobra, PM_WV = (int) WhiteFalcon, PM_WSG = (int) WhiteSilver, PM_WG = (int) WhiteGrasshopper, PM_WK = (int) WhiteKing, PM_BP = (int) BlackPawn, PM_BN = (int) BlackKnight, PM_BB = (int) BlackBishop, PM_BR = (int) BlackRook, PM_BQ = (int) BlackQueen, PM_BF = (int) BlackFerz, PM_BW = (int) BlackWazir, PM_BE = (int) BlackAlfil, PM_BM = (int) BlackMan, PM_BO = (int) BlackCannon, PM_BU = (int) BlackUnicorn, PM_BH = (int) BlackNightrider, PM_BA = (int) BlackAngel, PM_BC = (int) BlackMarshall, PM_BG = (int) BlackGrasshopper, PM_BAB = (int) BlackCardinal, PM_BD = (int) BlackDragon, PM_BL = (int) BlackLance, PM_BS = (int) BlackCobra, PM_BV = (int) BlackFalcon, PM_BSG = (int) BlackSilver, PM_BK = (int) BlackKing }; static HFONT hPieceFont = NULL; static HBITMAP hPieceMask[(int) EmptySquare]; static HBITMAP hPieceFace[(int) EmptySquare]; static int fontBitmapSquareSize = 0; static char pieceToFontChar[(int) EmptySquare] = { 'p', 'n', 'b', 'r', 'q', 'n', 'b', 'p', 'n', 'b', 'r', 'b', 'r', 'q', 'k', 'k', 'o', 'm', 'v', 't', 'w', 'v', 't', 'o', 'm', 'v', 't', 'v', 't', 'w', 'l', 'l' }; extern BOOL SetCharTable( char *table, const char * map ); /* [HGM] moved to backend.c */ static void SetPieceBackground( HDC hdc, COLORREF color, int mode ) { HBRUSH hbrush; BYTE r1 = GetRValue( color ); BYTE g1 = GetGValue( color ); BYTE b1 = GetBValue( color ); BYTE r2 = r1 / 2; BYTE g2 = g1 / 2; BYTE b2 = b1 / 2; RECT rc; /* Create a uniform background first */ hbrush = CreateSolidBrush( color ); SetRect( &rc, 0, 0, squareSize, squareSize ); FillRect( hdc, &rc, hbrush ); DeleteObject( hbrush ); if( mode == 1 ) { /* Vertical gradient, good for pawn, knight and rook, less for queen and king */ int steps = squareSize / 2; int i; for( i=0; i= (int)BlackPawn && appData.fontBackColorBlack != appData.fontForeColorBlack ) { backColor = appData.fontBackColorBlack; foreColor = appData.fontForeColorBlack; } /* Mask */ hbm = CreateCompatibleBitmap( hdc_window, squareSize, squareSize ); hbm_old = SelectObject( hdc, hbm ); rc.left = 0; rc.top = 0; rc.right = squareSize; rc.bottom = squareSize; /* Step 1: background is now black */ FillRect( hdc, &rc, GetStockObject(BLACK_BRUSH) ); GetTextExtentPoint32( hdc, &pieceToFontChar[index], 1, &sz ); pt.x = (squareSize - sz.cx) / 2; pt.y = (squareSize - sz.cy) / 2; SetBkMode( hdc, TRANSPARENT ); SetTextColor( hdc, chroma ); /* Step 2: the piece has been drawn in purple, there are now black and purple in this bitmap */ TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 ); SelectObject( hdc, GetStockObject(WHITE_BRUSH) ); /* Step 3: the area outside the piece is filled with white */ // FloodFill( hdc, 0, 0, chroma ); ExtFloodFill( hdc, 0, 0, 0, FLOODFILLSURFACE ); ExtFloodFill( hdc, 0, squareSize-1, 0, FLOODFILLSURFACE ); // [HGM] fill from all 4 corners, for if piece too big ExtFloodFill( hdc, squareSize-1, 0, 0, FLOODFILLSURFACE ); ExtFloodFill( hdc, squareSize-1, squareSize-1, 0, FLOODFILLSURFACE ); SelectObject( hdc, GetStockObject(BLACK_BRUSH) ); /* Step 4: this is the tricky part, the area inside the piece is filled with black, but if the start point is not inside the piece we're lost! There should be a better way to do this... if we could create a region or path from the fill operation we would be fine for example. */ // FloodFill( hdc, squareSize / 2, squareSize / 2, RGB(0xFF,0xFF,0xFF) ); ExtFloodFill( hdc, squareSize / 2, squareSize / 2, RGB(0xFF,0xFF,0xFF), FLOODFILLBORDER ); { /* [HGM] shave off edges of mask, in an attempt to correct for the fact that FloodFill does not work correctly under Win XP */ HDC dc2 = CreateCompatibleDC( hdc_window ); HBITMAP bm2 = CreateCompatibleBitmap( hdc_window, squareSize, squareSize ); SelectObject( dc2, bm2 ); BitBlt( dc2, 0, 0, squareSize, squareSize, hdc, 0, 0, SRCCOPY ); // make copy BitBlt( hdc, 0, 1, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT ); BitBlt( hdc, 2, 1, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT ); BitBlt( hdc, 1, 0, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT ); BitBlt( hdc, 1, 2, squareSize-2, squareSize-2, dc2, 1, 1, SRCPAINT ); DeleteDC( dc2 ); DeleteObject( bm2 ); } SetTextColor( hdc, 0 ); /* Step 5: some fonts have "disconnected" areas that are skipped by the fill: draw the piece again in black for safety. */ TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 ); SelectObject( hdc, hbm_old ); if( hPieceMask[index] != NULL ) { DeleteObject( hPieceMask[index] ); } hPieceMask[index] = hbm; /* Face */ hbm = CreateCompatibleBitmap( hdc_window, squareSize, squareSize ); SelectObject( hdc, hbm ); { HDC dc1 = CreateCompatibleDC( hdc_window ); HDC dc2 = CreateCompatibleDC( hdc_window ); HBITMAP bm2 = CreateCompatibleBitmap( hdc_window, squareSize, squareSize ); SelectObject( dc1, hPieceMask[index] ); SelectObject( dc2, bm2 ); FillRect( dc2, &rc, GetStockObject(WHITE_BRUSH) ); BitBlt( dc2, 0, 0, squareSize, squareSize, dc1, 0, 0, SRCINVERT ); /* Now dc2 contains the inverse of the piece mask, i.e. a mask that preserves the piece background and deletes (makes transparent) the rest. Thanks to that mask, we are free to paint the background with the greates freedom, as we'll be able to mask off the unwanted parts when finished. We use this, to make gradients and give the pieces a "roundish" look. */ SetPieceBackground( hdc, backColor, 2 ); BitBlt( hdc, 0, 0, squareSize, squareSize, dc2, 0, 0, SRCAND ); DeleteDC( dc2 ); DeleteDC( dc1 ); DeleteObject( bm2 ); } SetTextColor( hdc, foreColor ); TextOut( hdc, pt.x, pt.y, &pieceToFontChar[appData.allWhite && index >= (int)BlackPawn ? index - (int)BlackPawn : index], 1 ); SelectObject( hdc, hbm_old ); if( hPieceFace[index] != NULL ) { DeleteObject( hPieceFace[index] ); } hPieceFace[index] = hbm; } static int TranslatePieceToFontPiece( int piece ) { switch( piece ) { case BlackPawn: return PM_BP; case BlackKnight: return PM_BN; case BlackBishop: return PM_BB; case BlackRook: return PM_BR; case BlackQueen: return PM_BQ; case BlackKing: return PM_BK; case WhitePawn: return PM_WP; case WhiteKnight: return PM_WN; case WhiteBishop: return PM_WB; case WhiteRook: return PM_WR; case WhiteQueen: return PM_WQ; case WhiteKing: return PM_WK; case BlackAngel: return PM_BA; case BlackMarshall: return PM_BC; case BlackFerz: return PM_BF; case BlackNightrider: return PM_BH; case BlackAlfil: return PM_BE; case BlackWazir: return PM_BW; case BlackUnicorn: return PM_BU; case BlackCannon: return PM_BO; case BlackGrasshopper: return PM_BG; case BlackMan: return PM_BM; case BlackSilver: return PM_BSG; case BlackLance: return PM_BL; case BlackFalcon: return PM_BV; case BlackCobra: return PM_BS; case BlackCardinal: return PM_BAB; case BlackDragon: return PM_BD; case WhiteAngel: return PM_WA; case WhiteMarshall: return PM_WC; case WhiteFerz: return PM_WF; case WhiteNightrider: return PM_WH; case WhiteAlfil: return PM_WE; case WhiteWazir: return PM_WW; case WhiteUnicorn: return PM_WU; case WhiteCannon: return PM_WO; case WhiteGrasshopper: return PM_WG; case WhiteMan: return PM_WM; case WhiteSilver: return PM_WSG; case WhiteLance: return PM_WL; case WhiteFalcon: return PM_WV; case WhiteCobra: return PM_WS; case WhiteCardinal: return PM_WAB; case WhiteDragon: return PM_WD; } return 0; } void CreatePiecesFromFont() { LOGFONT lf; HDC hdc_window = NULL; HDC hdc = NULL; HFONT hfont_old; int fontHeight; int i; if( fontBitmapSquareSize < 0 ) { /* Something went seriously wrong in the past: do not try to recreate fonts! */ return; } if( !appData.useFont || appData.renderPiecesWithFont == NULL || appData.renderPiecesWithFont[0] == NULLCHAR || appData.renderPiecesWithFont[0] == '*' ) { fontBitmapSquareSize = -1; return; } if( fontBitmapSquareSize != squareSize ) { hdc_window = GetDC( hwndMain ); hdc = CreateCompatibleDC( hdc_window ); if( hPieceFont != NULL ) { DeleteObject( hPieceFont ); } else { for( i=0; i<=(int)BlackKing; i++ ) { hPieceMask[i] = NULL; hPieceFace[i] = NULL; } } fontHeight = 75; if( appData.fontPieceSize >= 50 && appData.fontPieceSize <= 150 ) { fontHeight = appData.fontPieceSize; } fontHeight = (fontHeight * squareSize) / 100; lf.lfHeight = -MulDiv( fontHeight, GetDeviceCaps(hdc, LOGPIXELSY), 72 ); lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfWeight = FW_NORMAL; lf.lfItalic = 0; lf.lfUnderline = 0; lf.lfStrikeOut = 0; lf.lfCharSet = DEFAULT_CHARSET; lf.lfOutPrecision = OUT_DEFAULT_PRECIS; lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf.lfQuality = PROOF_QUALITY; lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; strncpy( lf.lfFaceName, appData.renderPiecesWithFont, sizeof(lf.lfFaceName) ); lf.lfFaceName[ sizeof(lf.lfFaceName) - 1 ] = '\0'; hPieceFont = CreateFontIndirect( &lf ); if( hPieceFont == NULL ) { fontBitmapSquareSize = -2; } else { /* Setup font-to-piece character table */ if( ! SetCharTable(pieceToFontChar, appData.fontToPieceTable) ) { /* No (or wrong) global settings, try to detect the font */ if( strstr(lf.lfFaceName,"Alpha") != NULL ) { /* Alpha */ SetCharTable(pieceToFontChar, "phbrqkojntwl"); } else if( strstr(lf.lfFaceName,"DiagramTT") != NULL ) { /* DiagramTT* family */ SetCharTable(pieceToFontChar, "PNLRQKpnlrqk"); } else if( strstr(lf.lfFaceName,"WinboardF") != NULL ) { /* Fairy symbols */ SetCharTable(pieceToFontChar, "PNBRQFEACWMOHIJGDVSLUKpnbrqfeacwmohijgdvsluk"); } else if( strstr(lf.lfFaceName,"GC2004D") != NULL ) { /* Good Companion (Some characters get warped as literal :-( */ char s[] = "1cmWG0??S??oYI23wgQU"; s[0]=0xB9; s[1]=0xA9; s[6]=0xB1; s[11]=0xBB; s[12]=0xAB; s[17]=0xB3; SetCharTable(pieceToFontChar, s); } else { /* Cases, Condal, Leipzig, Lucena, Marroquin, Merida, Usual */ SetCharTable(pieceToFontChar, "pnbrqkomvtwl"); } } /* Create bitmaps */ hfont_old = SelectObject( hdc, hPieceFont ); for(i=(int)WhitePawn; i<(int)EmptySquare; i++) /* [HGM] made a loop for this */ if(PieceToChar((ChessSquare)i) != '.') /* skip unused pieces */ CreatePieceMaskFromFont( hdc_window, hdc, i ); SelectObject( hdc, hfont_old ); fontBitmapSquareSize = squareSize; } } if( hdc != NULL ) { DeleteDC( hdc ); } if( hdc_window != NULL ) { ReleaseDC( hwndMain, hdc_window ); } } HBITMAP DoLoadBitmap(HINSTANCE hinst, char *piece, int squareSize, char *suffix) { char name[128], buf[MSG_SIZ]; snprintf(name, sizeof(name)/sizeof(name[0]), "%s%d%s", piece, squareSize, suffix); if(appData.pieceDirectory[0]) { HBITMAP res; snprintf(buf, MSG_SIZ, "%s\\%s.bmp", appData.pieceDirectory, name); res = LoadImage( 0, buf, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); if(res) return res; } if (gameInfo.event && strcmp(gameInfo.event, "Easter Egg Hunt") == 0 && strcmp(name, "k80s") == 0) { safeStrCpy(name, "tim", sizeof(name)/sizeof(name[0]) ); } return LoadBitmap(hinst, name); } /* Insert a color into the program's logical palette structure. This code assumes the given color is the result of the RGB or PALETTERGB macro, and it knows how those macros work (which is documented). */ VOID InsertInPalette(COLORREF color) { LPPALETTEENTRY pe = &(pLogPal->palPalEntry[pLogPal->palNumEntries]); if (pLogPal->palNumEntries++ >= PALETTESIZE) { DisplayFatalError(_("Too many colors"), 0, 1); pLogPal->palNumEntries--; return; } pe->peFlags = (char) 0; pe->peRed = (char) (0xFF & color); pe->peGreen = (char) (0xFF & (color >> 8)); pe->peBlue = (char) (0xFF & (color >> 16)); return; } VOID InitDrawingColors() { int i; if (pLogPal == NULL) { /* Allocate enough memory for a logical palette with * PALETTESIZE entries and set the size and version fields * of the logical palette structure. */ pLogPal = (NPLOGPALETTE) LocalAlloc(LMEM_FIXED, (sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * (PALETTESIZE)))); pLogPal->palVersion = 0x300; } pLogPal->palNumEntries = 0; InsertInPalette(lightSquareColor); InsertInPalette(darkSquareColor); InsertInPalette(whitePieceColor); InsertInPalette(blackPieceColor); InsertInPalette(highlightSquareColor); InsertInPalette(premoveHighlightColor); /* create a logical color palette according the information * in the LOGPALETTE structure. */ hPal = CreatePalette((LPLOGPALETTE) pLogPal); lightSquareBrush = CreateSolidBrush(lightSquareColor); blackSquareBrush = CreateSolidBrush(blackPieceColor); darkSquareBrush = CreateSolidBrush(darkSquareColor); whitePieceBrush = CreateSolidBrush(whitePieceColor); blackPieceBrush = CreateSolidBrush(blackPieceColor); iconBkgndBrush = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND)); explodeBrush = CreateSolidBrush(highlightSquareColor); // [HGM] atomic for(i=0; i<8;i++) markerBrush[i] = CreateSolidBrush(markerColor[i]); // [HGM] markers /* [AS] Force rendering of the font-based pieces */ if( fontBitmapSquareSize > 0 ) { fontBitmapSquareSize = 0; } } int BoardWidth(int boardSize, int n) { /* [HGM] argument n added to allow different width and height */ int lineGap = sizeInfo[boardSize].lineGap; if( appData.overrideLineGap >= 0 && appData.overrideLineGap <= 5 ) { lineGap = appData.overrideLineGap; } return (n + 1) * lineGap + n * sizeInfo[boardSize].squareSize; } /* Respond to board resize by dragging edge */ VOID ResizeBoard(int newSizeX, int newSizeY, int flags) { BoardSize newSize = NUM_SIZES - 1; static int recurse = 0; if (IsIconic(hwndMain)) return; if (recurse > 0) return; recurse++; while (newSize > 0) { InitDrawingSizes(newSize+1000, 0); // [HGM] kludge to update sizeInfo without visible effects if(newSizeX >= sizeInfo[newSize].cliWidth && newSizeY >= sizeInfo[newSize].cliHeight) break; newSize--; } boardSize = newSize; InitDrawingSizes(boardSize, flags); recurse--; } extern Boolean twoBoards, partnerUp; // [HGM] dual VOID InitDrawingSizes(BoardSize boardSize, int flags) { int i, boardWidth, boardHeight; /* [HGM] height treated separately */ ChessSquare piece; static int oldBoardSize = -1, oldTinyLayout = 0; HDC hdc; SIZE clockSize, messageSize; HFONT oldFont; char buf[MSG_SIZ]; char *str; HMENU hmenu = GetMenu(hwndMain); RECT crect, wrect, oldRect; int offby; LOGBRUSH logbrush; VariantClass v = gameInfo.variant; int suppressVisibleEffects = 0; // [HGM] kludge to request updating sizeInfo only if((int)boardSize >= 1000 ) { boardSize -= 1000; suppressVisibleEffects = 1; } /* [HGM] call with -2 uses old size (for if nr of files, ranks changes) */ if(boardSize == (BoardSize)(-2) ) boardSize = oldBoardSize; if(boardSize == -1) return; // no size defined yet; abort (to allow early call of InitPosition) oldBoardSize = boardSize; if(boardSize != SizeMiddling && boardSize != SizePetite && boardSize != SizeBulky && !appData.useFont) { // correct board size to one where built-in pieces exist if((v == VariantCapablanca || v == VariantGothic || v == VariantGrand || v == VariantCapaRandom || v == VariantJanus || v == VariantSuper) && (boardSize < SizePetite || boardSize > SizeBulky) // Archbishop and Chancellor available in entire middle range || (v == VariantShogi && boardSize != SizeModerate) // Japanese-style Shogi || v == VariantKnightmate || v == VariantSChess || v == VariantXiangqi || v == VariantSpartan || v == VariantShatranj || v == VariantMakruk || v == VariantGreat || v == VariantFairy || v == VariantLion ) { if(boardSize < SizeMediocre) boardSize = SizePetite; else if(boardSize > SizeModerate) boardSize = SizeBulky; else boardSize = SizeMiddling; } } if(!appData.useFont && boardSize == SizePetite && (v == VariantKnightmate)) boardSize = SizeMiddling; // no Unicorn in Petite oldRect.left = wpMain.x; //[HGM] placement: remember previous window params oldRect.top = wpMain.y; oldRect.right = wpMain.x + wpMain.width; oldRect.bottom = wpMain.y + wpMain.height; tinyLayout = sizeInfo[boardSize].tinyLayout; smallLayout = sizeInfo[boardSize].smallLayout; squareSize = sizeInfo[boardSize].squareSize; lineGap = sizeInfo[boardSize].lineGap; minorSize = 0; /* [HGM] Kludge to see if demagnified pieces need to be shifted */ border = appData.useBorder && appData.border[0] ? squareSize/2 : 0; if( appData.overrideLineGap >= 0 && appData.overrideLineGap <= 5 ) { lineGap = appData.overrideLineGap; } if (tinyLayout != oldTinyLayout) { long style = GetWindowLongPtr(hwndMain, GWL_STYLE); if (tinyLayout) { style &= ~WS_SYSMENU; InsertMenu(hmenu, IDM_Exit, MF_BYCOMMAND, IDM_Minimize, "&Minimize\tCtrl+F4"); } else { style |= WS_SYSMENU; RemoveMenu(hmenu, IDM_Minimize, MF_BYCOMMAND); } SetWindowLongPtr(hwndMain, GWL_STYLE, style); for (i=0; menuBarText[tinyLayout][i]; i++) { ModifyMenu(hmenu, i, MF_STRING|MF_BYPOSITION|MF_POPUP, (UINT)GetSubMenu(hmenu, i), T_(menuBarText[tinyLayout][i])); } DrawMenuBar(hwndMain); } boardWidth = BoardWidth(boardSize, BOARD_WIDTH) + 2*border; boardHeight = BoardWidth(boardSize, BOARD_HEIGHT) + 2*border; /* Get text area sizes */ hdc = GetDC(hwndMain); if (appData.clockMode) { snprintf(buf, MSG_SIZ, _("White: %s"), TimeString(23*60*60*1000L)); } else { snprintf(buf, MSG_SIZ, _("White")); } oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf); GetTextExtentPoint(hdc, buf, strlen(buf), &clockSize); SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf); str = _("We only care about the height here"); GetTextExtentPoint(hdc, str, strlen(str), &messageSize); SelectObject(hdc, oldFont); ReleaseDC(hwndMain, hdc); /* Compute where everything goes */ if((first.programLogo || second.programLogo) && !tinyLayout) { /* [HGM] logo: if either logo is on, reserve space for it */ logoHeight = 2*clockSize.cy; leftLogoRect.left = OUTER_MARGIN; leftLogoRect.right = leftLogoRect.left + 4*clockSize.cy; leftLogoRect.top = OUTER_MARGIN; leftLogoRect.bottom = OUTER_MARGIN + logoHeight; rightLogoRect.right = OUTER_MARGIN + boardWidth; rightLogoRect.left = rightLogoRect.right - 4*clockSize.cy; rightLogoRect.top = OUTER_MARGIN; rightLogoRect.bottom = OUTER_MARGIN + logoHeight; whiteRect.left = leftLogoRect.right; whiteRect.right = OUTER_MARGIN + boardWidth/2 - INNER_MARGIN/2; whiteRect.top = OUTER_MARGIN; whiteRect.bottom = whiteRect.top + logoHeight; blackRect.right = rightLogoRect.left; blackRect.left = whiteRect.right + INNER_MARGIN; blackRect.top = whiteRect.top; blackRect.bottom = whiteRect.bottom; } else { whiteRect.left = OUTER_MARGIN; whiteRect.right = whiteRect.left + boardWidth/2 - INNER_MARGIN/2; whiteRect.top = OUTER_MARGIN; whiteRect.bottom = whiteRect.top + clockSize.cy; blackRect.left = whiteRect.right + INNER_MARGIN; blackRect.right = blackRect.left + boardWidth/2 - 1; blackRect.top = whiteRect.top; blackRect.bottom = whiteRect.bottom; logoHeight = 0; // [HGM] logo: suppress logo after change to tiny layout! } messageRect.left = OUTER_MARGIN + MESSAGE_LINE_LEFTMARGIN; if (appData.showButtonBar) { messageRect.right = OUTER_MARGIN + boardWidth // [HGM] logo: expressed independent of clock placement - N_BUTTONS*BUTTON_WIDTH - MESSAGE_LINE_LEFTMARGIN; } else { messageRect.right = OUTER_MARGIN + boardWidth; } messageRect.top = whiteRect.bottom + INNER_MARGIN; messageRect.bottom = messageRect.top + messageSize.cy; boardRect.left = OUTER_MARGIN; boardRect.right = boardRect.left + boardWidth; boardRect.top = messageRect.bottom + INNER_MARGIN; boardRect.bottom = boardRect.top + boardHeight; sizeInfo[boardSize].cliWidth = boardRect.right + OUTER_MARGIN; sizeInfo[boardSize].cliHeight = boardRect.bottom + OUTER_MARGIN; oldTinyLayout = tinyLayout; winW = 2 * GetSystemMetrics(SM_CXFRAME) + boardRect.right + OUTER_MARGIN; winH = 2 * GetSystemMetrics(SM_CYFRAME) + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYCAPTION) + boardRect.bottom + OUTER_MARGIN; winW *= 1 + twoBoards; if(suppressVisibleEffects) return; // [HGM] when called for filling sizeInfo only wpMain.width = winW; // [HGM] placement: set through temporary which can used by initial sizing choice wpMain.height = winH; // without disturbing window attachments GetWindowRect(hwndMain, &wrect); SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE); // [HGM] placement: let attached windows follow size change. ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, moveHistoryDialog, &wpMoveHistory ); ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, evalGraphDialog, &wpEvalGraph ); ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, engineOutputDialog, &wpEngineOutput ); ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, gameListDialog, &wpGameList ); ReattachAfterSize( &oldRect, wpMain.width, wpMain.height, hwndConsole, &wpConsole ); /* compensate if menu bar wrapped */ GetClientRect(hwndMain, &crect); offby = boardRect.bottom + OUTER_MARGIN - crect.bottom; wpMain.height += offby; switch (flags) { case WMSZ_TOPLEFT: SetWindowPos(hwndMain, NULL, wrect.right - wpMain.width, wrect.bottom - wpMain.height, wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER); break; case WMSZ_TOPRIGHT: case WMSZ_TOP: SetWindowPos(hwndMain, NULL, wrect.left, wrect.bottom - wpMain.height, wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER); break; case WMSZ_BOTTOMLEFT: case WMSZ_LEFT: SetWindowPos(hwndMain, NULL, wrect.right - wpMain.width, wrect.top, wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER); break; case WMSZ_BOTTOMRIGHT: case WMSZ_BOTTOM: case WMSZ_RIGHT: default: SetWindowPos(hwndMain, NULL, 0, 0, wpMain.width, wpMain.height, SWP_NOCOPYBITS|SWP_NOZORDER|SWP_NOMOVE); break; } hwndPause = NULL; for (i = 0; i < N_BUTTONS; i++) { if (buttonDesc[i].hwnd != NULL) { DestroyWindow(buttonDesc[i].hwnd); buttonDesc[i].hwnd = NULL; } if (appData.showButtonBar) { buttonDesc[i].hwnd = CreateWindow("BUTTON", buttonDesc[i].label, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, boardRect.right - BUTTON_WIDTH*(N_BUTTONS-i), messageRect.top, BUTTON_WIDTH, messageSize.cy, hwndMain, (HMENU) buttonDesc[i].id, (HINSTANCE) GetWindowLongPtr(hwndMain, GWLP_HINSTANCE), NULL); if (tinyLayout) { SendMessage(buttonDesc[i].hwnd, WM_SETFONT, (WPARAM)font[boardSize][MESSAGE_FONT]->hf, MAKELPARAM(FALSE, 0)); } if (buttonDesc[i].id == IDM_Pause) hwndPause = buttonDesc[i].hwnd; buttonDesc[i].wndproc = (WNDPROC) SetWindowLongPtr(buttonDesc[i].hwnd, GWLP_WNDPROC, (LONG_PTR) ButtonProc); } } if (gridPen != NULL) DeleteObject(gridPen); if (highlightPen != NULL) DeleteObject(highlightPen); if (premovePen != NULL) DeleteObject(premovePen); if (lineGap != 0) { logbrush.lbStyle = BS_SOLID; logbrush.lbColor = RGB(0, 0, 0); /* grid pen color = black */ gridPen = ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER, lineGap, &logbrush, 0, NULL); logbrush.lbColor = highlightSquareColor; highlightPen = ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER, lineGap, &logbrush, 0, NULL); logbrush.lbColor = premoveHighlightColor; premovePen = ExtCreatePen(PS_GEOMETRIC|PS_SOLID|PS_ENDCAP_FLAT|PS_JOIN_MITER, lineGap, &logbrush, 0, NULL); /* [HGM] Loop had to be split in part for vert. and hor. lines */ for (i = 0; i < BOARD_HEIGHT + 1; i++) { gridEndpoints[i*2].x = boardRect.left + lineGap / 2 + border; gridEndpoints[i*2].y = gridEndpoints[i*2 + 1].y = boardRect.top + lineGap / 2 + (i * (squareSize + lineGap)) + border; gridEndpoints[i*2 + 1].x = boardRect.left + lineGap / 2 + BOARD_WIDTH * (squareSize + lineGap) + border; gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2; } for (i = 0; i < BOARD_WIDTH + 1; i++) { gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].y = boardRect.top + lineGap / 2 + border; gridEndpoints[i*2 + BOARD_HEIGHT*2 + 2].x = gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].x = boardRect.left + lineGap / 2 + (i * (squareSize + lineGap)) + border; gridEndpoints[i*2 + 1 + BOARD_HEIGHT*2 + 2].y = boardRect.top + BOARD_HEIGHT * (squareSize + lineGap) + border; gridVertexCounts[i*2] = gridVertexCounts[i*2 + 1] = 2; } } /* [HGM] Licensing requirement */ #ifdef GOTHIC if(gameInfo.variant == VariantGothic) GothicPopUp( GOTHIC, VariantGothic); else #endif #ifdef FALCON if(gameInfo.variant == VariantFalcon) GothicPopUp( FALCON, VariantFalcon); else #endif GothicPopUp( "", VariantNormal); /* if (boardSize == oldBoardSize) return; [HGM] variant might have changed */ /* Load piece bitmaps for this board size */ for (i=0; i<=2; i++) { for (piece = WhitePawn; (int) piece < (int) BlackPawn; piece = (ChessSquare) ((int) piece + 1)) { if (pieceBitmap[i][piece] != NULL) DeleteObject(pieceBitmap[i][piece]); } } fontBitmapSquareSize = 0; /* [HGM] render: make sure pieces will be recreated, as we might need others now */ // Orthodox Chess pieces pieceBitmap[0][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "s"); pieceBitmap[0][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "s"); pieceBitmap[0][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "s"); pieceBitmap[0][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "s"); pieceBitmap[0][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "s"); pieceBitmap[1][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "o"); pieceBitmap[1][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "o"); pieceBitmap[1][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "o"); pieceBitmap[1][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "o"); pieceBitmap[1][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "o"); pieceBitmap[2][WhitePawn] = DoLoadBitmap(hInst, "p", squareSize, "w"); pieceBitmap[2][WhiteKnight] = DoLoadBitmap(hInst, "n", squareSize, "w"); pieceBitmap[2][WhiteBishop] = DoLoadBitmap(hInst, "b", squareSize, "w"); pieceBitmap[2][WhiteRook] = DoLoadBitmap(hInst, "r", squareSize, "w"); pieceBitmap[2][WhiteKing] = DoLoadBitmap(hInst, "k", squareSize, "w"); if( gameInfo.variant == VariantShogi && squareSize <= 72 && squareSize >= 33) { // in Shogi, Hijack the unused Queen for Lance pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "s"); pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "o"); pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "l", squareSize, "w"); } else { pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "s"); pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "o"); pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "q", squareSize, "w"); } if(squareSize <= 72 && squareSize >= 33) { /* A & C are available in most sizes now */ if(squareSize != 49 && squareSize != 72 && squareSize != 33) { // Vortex-like pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "s"); pieceBitmap[1][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "o"); pieceBitmap[2][WhiteAngel] = DoLoadBitmap(hInst, "a", squareSize, "w"); pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "s"); pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "o"); pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "w"); pieceBitmap[0][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "s"); pieceBitmap[1][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "o"); pieceBitmap[2][WhiteCobra] = DoLoadBitmap(hInst, "cv", squareSize, "w"); pieceBitmap[0][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "s"); pieceBitmap[1][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "o"); pieceBitmap[2][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "w"); } else { // Smirf-like if(gameInfo.variant == VariantSChess) { pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "v", squareSize, "s"); pieceBitmap[1][WhiteAngel] = DoLoadBitmap(hInst, "v", squareSize, "o"); pieceBitmap[2][WhiteAngel] = DoLoadBitmap(hInst, "v", squareSize, "w"); } else { pieceBitmap[0][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "s"); pieceBitmap[1][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "o"); pieceBitmap[2][WhiteAngel] = DoLoadBitmap(hInst, "aa", squareSize, "w"); } } if(gameInfo.variant == VariantGothic) { // Vortex-like pieceBitmap[0][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "s"); pieceBitmap[1][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "o"); pieceBitmap[2][WhiteMarshall] = DoLoadBitmap(hInst, "cv", squareSize, "w"); } else if(gameInfo.variant == VariantSChess && (squareSize == 49 || squareSize == 72)) { pieceBitmap[0][WhiteMarshall] = DoLoadBitmap(hInst, "e", squareSize, "s"); pieceBitmap[1][WhiteMarshall] = DoLoadBitmap(hInst, "e", squareSize, "o"); pieceBitmap[2][WhiteMarshall] = DoLoadBitmap(hInst, "e", squareSize, "w"); } else { // WinBoard standard pieceBitmap[0][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "s"); pieceBitmap[1][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "o"); pieceBitmap[2][WhiteMarshall] = DoLoadBitmap(hInst, "c", squareSize, "w"); } } if(squareSize==72 || squareSize==49 || squareSize==33) { /* experiment with some home-made bitmaps */ pieceBitmap[0][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "s"); pieceBitmap[1][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "o"); pieceBitmap[2][WhiteFerz] = DoLoadBitmap(hInst, "f", squareSize, "w"); pieceBitmap[0][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "s"); pieceBitmap[1][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "o"); pieceBitmap[2][WhiteWazir] = DoLoadBitmap(hInst, "w", squareSize, "w"); pieceBitmap[0][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "s"); pieceBitmap[1][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "o"); pieceBitmap[2][WhiteAlfil] = DoLoadBitmap(hInst, "e", squareSize, "w"); pieceBitmap[0][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "s"); pieceBitmap[1][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "o"); pieceBitmap[2][WhiteMan] = DoLoadBitmap(hInst, "m", squareSize, "w"); pieceBitmap[0][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "s"); pieceBitmap[1][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "o"); pieceBitmap[2][WhiteCardinal] = DoLoadBitmap(hInst, "a", squareSize, "w"); pieceBitmap[0][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "s"); pieceBitmap[1][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "o"); pieceBitmap[2][WhiteDragon] = DoLoadBitmap(hInst, "dk", squareSize, "w"); pieceBitmap[0][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "s"); pieceBitmap[1][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "o"); pieceBitmap[2][WhiteFalcon] = DoLoadBitmap(hInst, "v", squareSize, "w"); pieceBitmap[0][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "s"); pieceBitmap[1][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "o"); pieceBitmap[2][WhiteCobra] = DoLoadBitmap(hInst, "s", squareSize, "w"); pieceBitmap[0][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "s"); pieceBitmap[1][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "o"); pieceBitmap[2][WhiteLance] = DoLoadBitmap(hInst, "l", squareSize, "w"); pieceBitmap[0][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "s"); pieceBitmap[1][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "o"); pieceBitmap[2][WhiteUnicorn] = DoLoadBitmap(hInst, "u", squareSize, "w"); pieceBitmap[0][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "s"); pieceBitmap[1][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "o"); pieceBitmap[2][WhiteLion] = DoLoadBitmap(hInst, "ln", squareSize, "w"); if(gameInfo.variant == VariantShogi && BOARD_HEIGHT != 7) { /* promoted Gold representations (but not in Tori!)*/ pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "s"); pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "wp", squareSize, "o"); pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "w", squareSize, "w"); pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "wn", squareSize, "s"); pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "wn", squareSize, "o"); pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "w", squareSize, "w"); pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "ws", squareSize, "s"); pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "ws", squareSize, "o"); pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "w", squareSize, "w"); pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "wl", squareSize, "s"); pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "wl", squareSize, "o"); pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "w", squareSize, "w"); } else { pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "s"); pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "o"); pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "o", squareSize, "w"); pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "s"); pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "o"); pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "h", squareSize, "w"); pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "s"); pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "o"); pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "cv", squareSize, "w"); pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "s"); pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "o"); pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "g", squareSize, "w"); } } else { /* other size, no special bitmaps available. Use smaller symbols */ if((int)boardSize < 2) minorSize = sizeInfo[0].squareSize; else minorSize = sizeInfo[(int)boardSize - 2].squareSize; pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "s"); pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "o"); pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "n", minorSize, "w"); pieceBitmap[0][WhiteCardinal] = DoLoadBitmap(hInst, "b", minorSize, "s"); pieceBitmap[1][WhiteCardinal] = DoLoadBitmap(hInst, "b", minorSize, "o"); pieceBitmap[2][WhiteCardinal] = DoLoadBitmap(hInst, "b", minorSize, "w"); pieceBitmap[0][WhiteDragon] = DoLoadBitmap(hInst, "r", minorSize, "s"); pieceBitmap[1][WhiteDragon] = DoLoadBitmap(hInst, "r", minorSize, "o"); pieceBitmap[2][WhiteDragon] = DoLoadBitmap(hInst, "r", minorSize, "w"); pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "s"); pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "o"); pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "q", minorSize, "w"); } if(gameInfo.variant == VariantShogi && squareSize == 58) /* special Shogi support in this size */ { for (i=0; i<=2; i++) { /* replace all bitmaps */ for (piece = WhitePawn; (int) piece < (int) BlackPawn; piece = (ChessSquare) ((int) piece + 1)) { if (pieceBitmap[i][piece] != NULL) DeleteObject(pieceBitmap[i][piece]); } } pieceBitmap[0][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "o"); pieceBitmap[0][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "o"); pieceBitmap[0][WhiteBishop] = DoLoadBitmap(hInst, "sb", squareSize, "o"); pieceBitmap[0][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "o"); pieceBitmap[0][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "o"); pieceBitmap[0][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "o"); pieceBitmap[0][WhiteFerz] = DoLoadBitmap(hInst, "sf", squareSize, "o"); pieceBitmap[0][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "o"); pieceBitmap[0][WhiteCannon] = DoLoadBitmap(hInst, "su", squareSize, "o"); pieceBitmap[0][WhiteNightrider] = DoLoadBitmap(hInst, "sh", squareSize, "o"); pieceBitmap[0][WhiteCardinal] = DoLoadBitmap(hInst, "sa", squareSize, "o"); pieceBitmap[0][WhiteDragon] = DoLoadBitmap(hInst, "sc", squareSize, "o"); pieceBitmap[0][WhiteGrasshopper] = DoLoadBitmap(hInst, "sg", squareSize, "o"); pieceBitmap[0][WhiteSilver] = DoLoadBitmap(hInst, "ss", squareSize, "o"); pieceBitmap[1][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "o"); pieceBitmap[1][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "o"); pieceBitmap[1][WhiteBishop] = DoLoadBitmap(hInst, "sb", squareSize, "o"); pieceBitmap[1][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "o"); pieceBitmap[1][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "o"); pieceBitmap[1][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "o"); pieceBitmap[1][WhiteFerz] = DoLoadBitmap(hInst, "sf", squareSize, "o"); pieceBitmap[1][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "o"); pieceBitmap[1][WhiteCannon] = DoLoadBitmap(hInst, "su", squareSize, "o"); pieceBitmap[1][WhiteNightrider] = DoLoadBitmap(hInst, "sh", squareSize, "o"); pieceBitmap[1][WhiteCardinal] = DoLoadBitmap(hInst, "sa", squareSize, "o"); pieceBitmap[1][WhiteDragon] = DoLoadBitmap(hInst, "sc", squareSize, "o"); pieceBitmap[1][WhiteGrasshopper] = DoLoadBitmap(hInst, "sg", squareSize, "o"); pieceBitmap[1][WhiteSilver] = DoLoadBitmap(hInst, "ss", squareSize, "o"); pieceBitmap[2][WhitePawn] = DoLoadBitmap(hInst, "sp", squareSize, "w"); pieceBitmap[2][WhiteKnight] = DoLoadBitmap(hInst, "sn", squareSize, "w"); pieceBitmap[2][WhiteBishop] = DoLoadBitmap(hInst, "sr", squareSize, "w"); pieceBitmap[2][WhiteRook] = DoLoadBitmap(hInst, "sr", squareSize, "w"); pieceBitmap[2][WhiteQueen] = DoLoadBitmap(hInst, "sl", squareSize, "w"); pieceBitmap[2][WhiteKing] = DoLoadBitmap(hInst, "sk", squareSize, "w"); pieceBitmap[2][WhiteFerz] = DoLoadBitmap(hInst, "sw", squareSize, "w"); pieceBitmap[2][WhiteWazir] = DoLoadBitmap(hInst, "sw", squareSize, "w"); pieceBitmap[2][WhiteCannon] = DoLoadBitmap(hInst, "sp", squareSize, "w"); pieceBitmap[2][WhiteNightrider] = DoLoadBitmap(hInst, "sn", squareSize, "w"); pieceBitmap[2][WhiteCardinal] = DoLoadBitmap(hInst, "sr", squareSize, "w"); pieceBitmap[2][WhiteDragon] = DoLoadBitmap(hInst, "sr", squareSize, "w"); pieceBitmap[2][WhiteGrasshopper] = DoLoadBitmap(hInst, "sl", squareSize, "w"); pieceBitmap[2][WhiteSilver] = DoLoadBitmap(hInst, "sw", squareSize, "w"); minorSize = 0; } } HBITMAP PieceBitmap(ChessSquare p, int kind) { if ((int) p >= (int) BlackPawn) p = (ChessSquare) ((int) p - (int) BlackPawn + (int) WhitePawn); return pieceBitmap[kind][(int) p]; } /***************************************************************/ #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #define MAX(a,b) (((a) > (b)) ? (a) : (b)) /* #define MIN3(a,b,c) (((a) < (b) && (a) < (c)) ? (a) : (((b) < (a) && (b) < (c)) ? (b) : (c))) #define MAX3(a,b,c) (((a) > (b) && (a) > (c)) ? (a) : (((b) > (a) && (b) > (c)) ? (b) : (c))) */ VOID SquareToPos(int row, int column, int * x, int * y) { if (flipView) { *x = boardRect.left + lineGap + ((BOARD_WIDTH-1)-column) * (squareSize + lineGap) + border; *y = boardRect.top + lineGap + row * (squareSize + lineGap) + border; } else { *x = boardRect.left + lineGap + column * (squareSize + lineGap) + border; *y = boardRect.top + lineGap + ((BOARD_HEIGHT-1)-row) * (squareSize + lineGap) + border; } } VOID DrawCoordsOnDC(HDC hdc) { static char files[] = "0123456789012345678901221098765432109876543210"; static char ranks[] = "wvutsrqponmlkjihgfedcbaabcdefghijklmnopqrstuvw"; char str[2] = { NULLCHAR, NULLCHAR }; int oldMode, oldAlign, x, y, start, i; HFONT oldFont; HBRUSH oldBrush; if (!appData.showCoords) return; start = flipView ? 1-(ONE!='1') : 45+(ONE!='1')-BOARD_HEIGHT; oldBrush = SelectObject(hdc, GetStockObject(BLACK_BRUSH)); oldMode = SetBkMode(hdc, (appData.monoMode ? OPAQUE : TRANSPARENT)); oldAlign = GetTextAlign(hdc); oldFont = SelectObject(hdc, font[boardSize][COORD_FONT]->hf); y = boardRect.top + lineGap; x = boardRect.left + lineGap + gameInfo.holdingsWidth*(squareSize + lineGap); if(border) { SetTextAlign(hdc, TA_RIGHT|TA_TOP); x += border - lineGap - 4; y += squareSize - 6; } else SetTextAlign(hdc, TA_LEFT|TA_TOP); for (i = 0; i < BOARD_HEIGHT; i++) { str[0] = files[start + i]; ExtTextOut(hdc, x + 2 - (border ? gameInfo.holdingsWidth * (squareSize + lineGap) : 0), y + 1, 0, NULL, str, 1, NULL); y += squareSize + lineGap; } start = flipView ? 23-(BOARD_RGHT-BOARD_LEFT) : 23; if(border) { SetTextAlign(hdc, TA_LEFT|TA_TOP); x += -border + 4; y += border - squareSize + 6; } else SetTextAlign(hdc, TA_RIGHT|TA_BOTTOM); for (i = 0; i < BOARD_RGHT - BOARD_LEFT; i++) { str[0] = ranks[start + i]; ExtTextOut(hdc, x + squareSize - 2, y - 1, 0, NULL, str, 1, NULL); x += squareSize + lineGap; } SelectObject(hdc, oldBrush); SetBkMode(hdc, oldMode); SetTextAlign(hdc, oldAlign); SelectObject(hdc, oldFont); } VOID DrawGridOnDC(HDC hdc) { HPEN oldPen; if (lineGap != 0) { oldPen = SelectObject(hdc, gridPen); PolyPolyline(hdc, gridEndpoints, gridVertexCounts, BOARD_WIDTH+BOARD_HEIGHT + 2); SelectObject(hdc, oldPen); } } #define HIGHLIGHT_PEN 0 #define PREMOVE_PEN 1 VOID DrawHighlightOnDC(HDC hdc, BOOLEAN on, int x, int y, int pen) { int x1, y1; HPEN oldPen, hPen; if (lineGap == 0) return; if (flipView) { x1 = boardRect.left + lineGap/2 + ((BOARD_WIDTH-1)-x) * (squareSize + lineGap) + border; y1 = boardRect.top + lineGap/2 + y * (squareSize + lineGap) + border; } else { x1 = boardRect.left + lineGap/2 + x * (squareSize + lineGap) + border; y1 = boardRect.top + lineGap/2 + ((BOARD_HEIGHT-1)-y) * (squareSize + lineGap) + border; } hPen = pen ? premovePen : highlightPen; oldPen = SelectObject(hdc, on ? hPen : gridPen); MoveToEx(hdc, x1, y1, NULL); LineTo(hdc, x1 + squareSize + lineGap, y1); LineTo(hdc, x1 + squareSize + lineGap, y1 + squareSize + lineGap); LineTo(hdc, x1, y1 + squareSize + lineGap); LineTo(hdc, x1, y1); SelectObject(hdc, oldPen); } VOID DrawHighlightsOnDC(HDC hdc, HighlightInfo *h, int pen) { int i; for (i=0; i<2; i++) { if (h->sq[i].x >= 0 && h->sq[i].y >= 0) DrawHighlightOnDC(hdc, TRUE, h->sq[i].x, h->sq[i].y, pen); } } /* Note: sqcolor is used only in monoMode */ /* Note that this code is largely duplicated in woptions.c, function DrawSampleSquare, so that needs to be updated too */ VOID DrawPieceOnDC(HDC hdc, ChessSquare piece, int color, int sqcolor, int x, int y, HDC tmphdc) { HBITMAP oldBitmap; HBRUSH oldBrush; int tmpSize; if (appData.blindfold) return; /* [AS] Use font-based pieces if needed */ if( fontBitmapSquareSize >= 0 && (squareSize > 32 || gameInfo.variant >= VariantShogi)) { /* Create piece bitmaps, or do nothing if piece set is up to date */ CreatePiecesFromFont(); if( fontBitmapSquareSize == squareSize ) { int index = TranslatePieceToFontPiece(piece); SelectObject( tmphdc, hPieceMask[ index ] ); if(appData.upsideDown ? color==flipView : (flipView && gameInfo.variant == VariantShogi)) StretchBlt(hdc, x+squareSize, y+squareSize, -squareSize, -squareSize, tmphdc, 0, 0, squareSize, squareSize, SRCAND); else BitBlt( hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, SRCAND ); SelectObject( tmphdc, hPieceFace[ index ] ); if(appData.upsideDown ? color==flipView : (flipView && gameInfo.variant == VariantShogi)) StretchBlt(hdc, x+squareSize, y+squareSize, -squareSize, -squareSize, tmphdc, 0, 0, squareSize, squareSize, SRCPAINT); else BitBlt( hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, SRCPAINT ); return; } } if (appData.monoMode) { SelectObject(tmphdc, PieceBitmap(piece, color == sqcolor ? OUTLINE_PIECE : SOLID_PIECE)); BitBlt(hdc, x, y, squareSize, squareSize, tmphdc, 0, 0, sqcolor ? SRCCOPY : NOTSRCCOPY); } else { HBRUSH xBrush = whitePieceBrush; tmpSize = squareSize; if(appData.pieceDirectory[0]) xBrush = GetStockObject(WHITE_BRUSH); if(minorSize && ((piece >= (int)WhiteNightrider && piece <= WhiteGrasshopper) || (piece >= (int)BlackNightrider && piece <= BlackGrasshopper)) ) { /* [HGM] no bitmap available for promoted pieces in Crazyhouse */ /* Bitmaps of smaller size are substituted, but we have to align them */ x += (squareSize - minorSize)>>1; y += squareSize - minorSize - 2; tmpSize = minorSize; } if (color || appData.allWhite ) { oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, WHITE_PIECE)); if( color ) oldBrush = SelectObject(hdc, xBrush); else oldBrush = SelectObject(hdc, blackPieceBrush); if(appData.upsideDown && color==flipView) StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A); else BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A); /* Use black for outline of white pieces */ SelectObject(tmphdc, PieceBitmap(piece, OUTLINE_PIECE)); if(appData.upsideDown && color==flipView) StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, SRCAND); else BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, SRCAND); } else if(appData.pieceDirectory[0]) { oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, WHITE_PIECE)); oldBrush = SelectObject(hdc, xBrush); if(appData.upsideDown && color==flipView) StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A); else BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A); SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE)); if(appData.upsideDown && color==flipView) StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, SRCAND); else BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, SRCAND); } else { /* Use square color for details of black pieces */ oldBitmap = SelectObject(tmphdc, PieceBitmap(piece, SOLID_PIECE)); oldBrush = SelectObject(hdc, blackPieceBrush); if(appData.upsideDown && !flipView) StretchBlt(hdc, x+tmpSize, y+tmpSize, -tmpSize, -tmpSize, tmphdc, 0, 0, tmpSize, tmpSize, 0x00B8074A); else BitBlt(hdc, x, y, tmpSize, tmpSize, tmphdc, 0, 0, 0x00B8074A); } SelectObject(hdc, oldBrush); SelectObject(tmphdc, oldBitmap); } } /* [AS] Compute a drawing mode for a square, based on specified settings (see DrawTile) */ int GetBackTextureMode( int algo ) { int result = BACK_TEXTURE_MODE_DISABLED; switch( algo ) { case BACK_TEXTURE_MODE_PLAIN: result = 1; /* Always use identity map */ break; case BACK_TEXTURE_MODE_FULL_RANDOM: result = 1 + (myrandom() % 3); /* Pick a transformation at random */ break; } return result; } /* [AS] Compute and save texture drawing info, otherwise we may not be able to handle redraws cleanly (as random numbers would always be different). */ VOID RebuildTextureSquareInfo() { BITMAP bi; int lite_w = 0; int lite_h = 0; int dark_w = 0; int dark_h = 0; int row; int col; ZeroMemory( &backTextureSquareInfo, sizeof(backTextureSquareInfo) ); if( liteBackTexture != NULL ) { if( GetObject( liteBackTexture, sizeof(bi), &bi ) > 0 ) { lite_w = bi.bmWidth; lite_h = bi.bmHeight; } } if( darkBackTexture != NULL ) { if( GetObject( darkBackTexture, sizeof(bi), &bi ) > 0 ) { dark_w = bi.bmWidth; dark_h = bi.bmHeight; } } for( row=0; row= squareSize && lite_h >= squareSize ) { if( lite_w >= squareSize*BOARD_WIDTH ) backTextureSquareInfo[row][col].x = (2*col+1)*lite_w/(2*BOARD_WIDTH) - squareSize/2; /* [HGM] cut out of center of virtual square */ else backTextureSquareInfo[row][col].x = col * (lite_w - squareSize) / (BOARD_WIDTH-1); /* [HGM] divide by size-1 in stead of size! */ if( lite_h >= squareSize*BOARD_HEIGHT ) backTextureSquareInfo[row][col].y = (2*(BOARD_HEIGHT-row)-1)*lite_h/(2*BOARD_HEIGHT) - squareSize/2; else backTextureSquareInfo[row][col].y = (BOARD_HEIGHT-1-row) * (lite_h - squareSize) / (BOARD_HEIGHT-1); backTextureSquareInfo[row][col].mode = GetBackTextureMode(liteBackTextureMode); } } else { /* Dark square */ if( dark_w >= squareSize && dark_h >= squareSize ) { if( dark_w >= squareSize*BOARD_WIDTH ) backTextureSquareInfo[row][col].x = (2*col+1) * dark_w / (2*BOARD_WIDTH) - squareSize/2; else backTextureSquareInfo[row][col].x = col * (dark_w - squareSize) / (BOARD_WIDTH-1); if( dark_h >= squareSize*BOARD_HEIGHT ) backTextureSquareInfo[row][col].y = (2*(BOARD_HEIGHT-row)-1) * dark_h / (2*BOARD_HEIGHT) - squareSize/2; else backTextureSquareInfo[row][col].y = (BOARD_HEIGHT-1-row) * (dark_h - squareSize) / (BOARD_HEIGHT-1); backTextureSquareInfo[row][col].mode = GetBackTextureMode(darkBackTextureMode); } } } } } /* [AS] Arrow highlighting support */ static double A_WIDTH = 5; /* Width of arrow body */ #define A_HEIGHT_FACTOR 6 /* Length of arrow "point", relative to body width */ #define A_WIDTH_FACTOR 3 /* Width of arrow "point", relative to body width */ static double Sqr( double x ) { return x*x; } static int Round( double x ) { return (int) (x + 0.5); } /* Draw an arrow between two points using current settings */ VOID DrawArrowBetweenPoints( HDC hdc, int s_x, int s_y, int d_x, int d_y ) { POINT arrow[7]; double dx, dy, j, k, x, y; if( d_x == s_x ) { int h = (d_y > s_y) ? +A_WIDTH*A_HEIGHT_FACTOR : -A_WIDTH*A_HEIGHT_FACTOR; arrow[0].x = s_x + A_WIDTH + 0.5; arrow[0].y = s_y; arrow[1].x = s_x + A_WIDTH + 0.5; arrow[1].y = d_y - h; arrow[2].x = arrow[1].x + A_WIDTH*(A_WIDTH_FACTOR-1) + 0.5; arrow[2].y = d_y - h; arrow[3].x = d_x; arrow[3].y = d_y; arrow[5].x = arrow[1].x - 2*A_WIDTH + 0.5; arrow[5].y = d_y - h; arrow[4].x = arrow[5].x - A_WIDTH*(A_WIDTH_FACTOR-1) + 0.5; arrow[4].y = d_y - h; arrow[6].x = arrow[1].x - 2*A_WIDTH + 0.5; arrow[6].y = s_y; } else if( d_y == s_y ) { int w = (d_x > s_x) ? +A_WIDTH*A_HEIGHT_FACTOR : -A_WIDTH*A_HEIGHT_FACTOR; arrow[0].x = s_x; arrow[0].y = s_y + A_WIDTH + 0.5; arrow[1].x = d_x - w; arrow[1].y = s_y + A_WIDTH + 0.5; arrow[2].x = d_x - w; arrow[2].y = arrow[1].y + A_WIDTH*(A_WIDTH_FACTOR-1) + 0.5; arrow[3].x = d_x; arrow[3].y = d_y; arrow[5].x = d_x - w; arrow[5].y = arrow[1].y - 2*A_WIDTH + 0.5; arrow[4].x = d_x - w; arrow[4].y = arrow[5].y - A_WIDTH*(A_WIDTH_FACTOR-1) + 0.5; arrow[6].x = s_x; arrow[6].y = arrow[1].y - 2*A_WIDTH + 0.5; } else { /* [AS] Needed a lot of paper for this! :-) */ dy = (double) (d_y - s_y) / (double) (d_x - s_x); dx = (double) (s_x - d_x) / (double) (s_y - d_y); j = sqrt( Sqr(A_WIDTH) / (1.0 + Sqr(dx)) ); k = sqrt( Sqr(A_WIDTH*A_HEIGHT_FACTOR) / (1.0 + Sqr(dy)) ); x = s_x; y = s_y; arrow[0].x = Round(x - j); arrow[0].y = Round(y + j*dx); arrow[1].x = Round(arrow[0].x + 2*j); // [HGM] prevent width to be affected by rounding twice arrow[1].y = Round(arrow[0].y - 2*j*dx); if( d_x > s_x ) { x = (double) d_x - k; y = (double) d_y - k*dy; } else { x = (double) d_x + k; y = (double) d_y + k*dy; } x = Round(x); y = Round(y); // [HGM] make sure width of shaft is rounded the same way on both ends arrow[6].x = Round(x - j); arrow[6].y = Round(y + j*dx); arrow[2].x = Round(arrow[6].x + 2*j); arrow[2].y = Round(arrow[6].y - 2*j*dx); arrow[3].x = Round(arrow[2].x + j*(A_WIDTH_FACTOR-1)); arrow[3].y = Round(arrow[2].y - j*(A_WIDTH_FACTOR-1)*dx); arrow[4].x = d_x; arrow[4].y = d_y; arrow[5].x = Round(arrow[6].x - j*(A_WIDTH_FACTOR-1)); arrow[5].y = Round(arrow[6].y + j*(A_WIDTH_FACTOR-1)*dx); } Polygon( hdc, arrow, 7 ); } /* [AS] Draw an arrow between two squares */ VOID DrawArrowBetweenSquares( HDC hdc, int s_col, int s_row, int d_col, int d_row ) { int s_x, s_y, d_x, d_y; HPEN hpen; HPEN holdpen; HBRUSH hbrush; HBRUSH holdbrush; LOGBRUSH stLB; if( s_col == d_col && s_row == d_row ) { return; } /* Get source and destination points */ SquareToPos( s_row, s_col, &s_x, &s_y); SquareToPos( d_row, d_col, &d_x, &d_y); if( d_y > s_y ) { d_y += squareSize / 2 - squareSize / 4; // [HGM] round towards same centers on all sides! } else if( d_y < s_y ) { d_y += squareSize / 2 + squareSize / 4; } else { d_y += squareSize / 2; } if( d_x > s_x ) { d_x += squareSize / 2 - squareSize / 4; } else if( d_x < s_x ) { d_x += squareSize / 2 + squareSize / 4; } else { d_x += squareSize / 2; } s_x += squareSize / 2; s_y += squareSize / 2; /* Adjust width */ A_WIDTH = squareSize / 14.; //[HGM] make float /* Draw */ stLB.lbStyle = BS_SOLID; stLB.lbColor = appData.highlightArrowColor; stLB.lbHatch = 0; hpen = CreatePen( PS_SOLID, 2, RGB(0x00,0x00,0x00) ); holdpen = SelectObject( hdc, hpen ); hbrush = CreateBrushIndirect( &stLB ); holdbrush = SelectObject( hdc, hbrush ); DrawArrowBetweenPoints( hdc, s_x, s_y, d_x, d_y ); SelectObject( hdc, holdpen ); SelectObject( hdc, holdbrush ); DeleteObject( hpen ); DeleteObject( hbrush ); } BOOL HasHighlightInfo() { BOOL result = FALSE; if( highlightInfo.sq[0].x >= 0 && highlightInfo.sq[0].y >= 0 && highlightInfo.sq[1].x >= 0 && highlightInfo.sq[1].y >= 0 ) { result = TRUE; } return result; } BOOL IsDrawArrowEnabled() { BOOL result = FALSE; if( appData.highlightMoveWithArrow && squareSize >= 32 ) { result = TRUE; } return result; } VOID DrawArrowHighlight( HDC hdc ) { if( IsDrawArrowEnabled() && HasHighlightInfo() ) { DrawArrowBetweenSquares( hdc, highlightInfo.sq[0].x, highlightInfo.sq[0].y, highlightInfo.sq[1].x, highlightInfo.sq[1].y ); } } HRGN GetArrowHighlightClipRegion( HDC hdc ) { HRGN result = NULL; if( HasHighlightInfo() ) { int x1, y1, x2, y2; int sx, sy, dx, dy; SquareToPos(highlightInfo.sq[0].y, highlightInfo.sq[0].x, &x1, &y1 ); SquareToPos(highlightInfo.sq[1].y, highlightInfo.sq[1].x, &x2, &y2 ); sx = MIN( x1, x2 ); sy = MIN( y1, y2 ); dx = MAX( x1, x2 ) + squareSize; dy = MAX( y1, y2 ) + squareSize; result = CreateRectRgn( sx, sy, dx, dy ); } return result; } /* Warning: this function modifies the behavior of several other functions. Basically, Winboard is optimized to avoid drawing the whole board if not strictly needed. Unfortunately, the decision whether or not to perform a full or partial repaint is scattered all over the place, which is not good for features such as "arrow highlighting" that require a full repaint of the board. So, I've tried to patch the code where I thought it made sense (e.g. after or during user interaction, when speed is not so important) but especially to avoid errors in the displayed graphics. In such patched places, I always try refer to this function so there is a single place to maintain knowledge. To restore the original behavior, just return FALSE unconditionally. */ BOOL IsFullRepaintPreferrable() { BOOL result = FALSE; if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() ) { /* Arrow may appear on the board */ result = TRUE; } return result; } /* This function is called by DrawPosition to know whether a full repaint must be forced or not. Only DrawPosition may directly call this function, which makes use of some state information. Other function should call DrawPosition specifying the repaint flag, and can use IsFullRepaintPreferrable if needed. */ BOOL DrawPositionNeedsFullRepaint() { BOOL result = FALSE; /* Probably a slightly better policy would be to trigger a full repaint when animInfo.piece changes state (i.e. empty -> non-empty and viceversa), but animation is fast enough that it's difficult to notice. */ if( animInfo.piece == EmptySquare ) { if( (appData.highlightLastMove || appData.highlightDragging) && IsDrawArrowEnabled() /*&& HasHighlightInfo()*/ ) { result = TRUE; } } return result; } static HBITMAP borderBitmap; VOID DrawBackgroundOnDC(HDC hdc) { BITMAP bi; HDC tmphdc; HBITMAP hbm; static char oldBorder[MSG_SIZ]; int w = 600, h = 600, mode; if(strcmp(appData.border, oldBorder)) { // load new one when old one no longer valid strncpy(oldBorder, appData.border, MSG_SIZ-1); borderBitmap = LoadImage( 0, appData.border, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); } if(borderBitmap == NULL) { // loading failed, use white FillRect( hdc, &boardRect, whitePieceBrush ); return; } tmphdc = CreateCompatibleDC(hdc); hbm = SelectObject(tmphdc, borderBitmap); if( GetObject( borderBitmap, sizeof(bi), &bi ) > 0 ) { w = bi.bmWidth; h = bi.bmHeight; } mode = SetStretchBltMode(hdc, COLORONCOLOR); StretchBlt(hdc, boardRect.left, boardRect.top, boardRect.right - boardRect.left, boardRect.bottom - boardRect.top, tmphdc, 0, 0, w, h, SRCCOPY); SetStretchBltMode(hdc, mode); SelectObject(tmphdc, hbm); DeleteDC(tmphdc); } VOID DrawBoardOnDC(HDC hdc, Board board, HDC tmphdc) { int row, column, x, y, square_color, piece_color; ChessSquare piece; HBRUSH oldBrush; HDC texture_hdc = NULL; /* [AS] Initialize background textures if needed */ if( liteBackTexture != NULL || darkBackTexture != NULL ) { static int backTextureBoardSize; /* [HGM] boardsize: also new texture if board format changed */ if( backTextureSquareSize != squareSize || backTextureBoardSize != BOARD_WIDTH+BOARD_FILES*BOARD_HEIGHT) { backTextureBoardSize = BOARD_WIDTH+BOARD_FILES*BOARD_HEIGHT; backTextureSquareSize = squareSize; RebuildTextureSquareInfo(); } texture_hdc = CreateCompatibleDC( hdc ); } for (row = 0; row < BOARD_HEIGHT; row++) { for (column = 0; column < BOARD_WIDTH; column++) { SquareToPos(row, column, &x, &y); piece = board[row][column]; square_color = ((column + row) % 2) == 1; if( gameInfo.variant == VariantXiangqi ) { square_color = !InPalace(row, column); if(BOARD_HEIGHT&1) { if(row==BOARD_HEIGHT/2) square_color ^= 1; } else if(row < BOARD_HEIGHT/2) square_color ^= 1; } piece_color = (int) piece < (int) BlackPawn; /* [HGM] holdings file: light square or black */ if(column == BOARD_LEFT-2) { if( row > BOARD_HEIGHT - gameInfo.holdingsSize - 1 ) square_color = 1; else { DisplayHoldingsCount(hdc, x, y, 0, 0); /* black out */ continue; } } else if(column == BOARD_RGHT + 1 ) { if( row < gameInfo.holdingsSize ) square_color = 1; else { DisplayHoldingsCount(hdc, x, y, 0, 0); continue; } } if(column == BOARD_LEFT-1 ) /* left align */ DisplayHoldingsCount(hdc, x, y, flipView, (int) board[row][column]); else if( column == BOARD_RGHT) /* right align */ DisplayHoldingsCount(hdc, x, y, !flipView, (int) board[row][column]); else if( piece == DarkSquare) DisplayHoldingsCount(hdc, x, y, 0, 0); else if (appData.monoMode) { if (piece == EmptySquare) { BitBlt(hdc, x, y, squareSize, squareSize, 0, 0, 0, square_color ? WHITENESS : BLACKNESS); } else { DrawPieceOnDC(hdc, piece, piece_color, square_color, x, y, tmphdc); } } else if( appData.useBitmaps && backTextureSquareInfo[row][column].mode > 0 ) { /* [AS] Draw the square using a texture bitmap */ HBITMAP hbm = SelectObject( texture_hdc, square_color ? liteBackTexture : darkBackTexture ); int r = row, c = column; // [HGM] do not flip board in flipView if(flipView) { r = BOARD_HEIGHT-1 - r; c = BOARD_WIDTH-1 - c; } DrawTile( x, y, squareSize, squareSize, hdc, texture_hdc, backTextureSquareInfo[r][c].mode, backTextureSquareInfo[r][c].x, backTextureSquareInfo[r][c].y ); SelectObject( texture_hdc, hbm ); if (piece != EmptySquare) { DrawPieceOnDC(hdc, piece, piece_color, -1, x, y, tmphdc); } } else { HBRUSH brush = square_color ? lightSquareBrush : darkSquareBrush; oldBrush = SelectObject(hdc, brush ); BitBlt(hdc, x, y, squareSize, squareSize, 0, 0, 0, PATCOPY); SelectObject(hdc, oldBrush); if (piece != EmptySquare) DrawPieceOnDC(hdc, piece, piece_color, -1, x, y, tmphdc); } } } if( texture_hdc != NULL ) { DeleteDC( texture_hdc ); } } int saveDiagFlag = 0; FILE *diagFile; // [HGM] diag void fputDW(FILE *f, int x) { fputc(x & 255, f); fputc(x>>8 & 255, f); fputc(x>>16 & 255, f); fputc(x>>24 & 255, f); } #define MAX_CLIPS 200 /* more than enough */ VOID DrawLogoOnDC(HDC hdc, RECT logoRect, HBITMAP logo) { // HBITMAP bufferBitmap; BITMAP bi; // RECT Rect; HDC tmphdc; HBITMAP hbm; int w = 100, h = 50; if(logo == NULL) { if(!logoHeight) return; FillRect( hdc, &logoRect, whitePieceBrush ); } // GetClientRect(hwndMain, &Rect); // bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1, // Rect.bottom-Rect.top+1); tmphdc = CreateCompatibleDC(hdc); hbm = SelectObject(tmphdc, logo); if( GetObject( logo, sizeof(bi), &bi ) > 0 ) { w = bi.bmWidth; h = bi.bmHeight; } StretchBlt(hdc, logoRect.left, logoRect.top, logoRect.right - logoRect.left, logoRect.bottom - logoRect.top, tmphdc, 0, 0, w, h, SRCCOPY); SelectObject(tmphdc, hbm); DeleteDC(tmphdc); } VOID DisplayLogos() { if(logoHeight) { HDC hdc = GetDC(hwndMain); HBITMAP whiteLogo = (HBITMAP) first.programLogo, blackLogo = (HBITMAP) second.programLogo; if(appData.autoLogo) { switch(gameMode) { // pick logos based on game mode case IcsObserving: whiteLogo = second.programLogo; // ICS logo blackLogo = second.programLogo; default: break; case IcsPlayingWhite: if(!appData.zippyPlay) whiteLogo = userLogo; blackLogo = second.programLogo; // ICS logo break; case IcsPlayingBlack: whiteLogo = second.programLogo; // ICS logo blackLogo = appData.zippyPlay ? first.programLogo : userLogo; break; case TwoMachinesPlay: if(first.twoMachinesColor[0] == 'b') { whiteLogo = second.programLogo; blackLogo = first.programLogo; } break; case MachinePlaysWhite: blackLogo = userLogo; break; case MachinePlaysBlack: whiteLogo = userLogo; blackLogo = first.programLogo; } } DrawLogoOnDC(hdc, leftLogoRect, flipClock ? blackLogo : whiteLogo); DrawLogoOnDC(hdc, rightLogoRect, flipClock ? whiteLogo : blackLogo); ReleaseDC(hwndMain, hdc); } } void UpdateLogos(int display) { // called after loading new engine(s), in tourney or from menu LoadLogo(&first, 0, FALSE); LoadLogo(&second, 1, appData.icsActive); InitDrawingSizes(-2, 0); // adapt layout of board window to presence/absence of logos if(display) DisplayLogos(); } static HDC hdcSeek; // [HGM] seekgraph void DrawSeekAxis( int x, int y, int xTo, int yTo ) { POINT stPt; HPEN hp = SelectObject( hdcSeek, gridPen ); MoveToEx( hdcSeek, boardRect.left+x, boardRect.top+y, &stPt ); LineTo( hdcSeek, boardRect.left+xTo, boardRect.top+yTo ); SelectObject( hdcSeek, hp ); } // front-end wrapper for drawing functions to do rectangles void DrawSeekBackground( int left, int top, int right, int bottom ) { HPEN hp; RECT rc; if (hdcSeek == NULL) { hdcSeek = GetDC(hwndMain); if (!appData.monoMode) { SelectPalette(hdcSeek, hPal, FALSE); RealizePalette(hdcSeek); } } hp = SelectObject( hdcSeek, gridPen ); rc.top = boardRect.top+top; rc.left = boardRect.left+left; rc.bottom = boardRect.top+bottom; rc.right = boardRect.left+right; FillRect( hdcSeek, &rc, lightSquareBrush ); SelectObject( hdcSeek, hp ); } // front-end wrapper for putting text in graph void DrawSeekText(char *buf, int x, int y) { SIZE stSize; SetBkMode( hdcSeek, TRANSPARENT ); GetTextExtentPoint32( hdcSeek, buf, strlen(buf), &stSize ); TextOut( hdcSeek, boardRect.left+x-3, boardRect.top+y-stSize.cy/2, buf, strlen(buf) ); } void DrawSeekDot(int x, int y, int color) { int square = color & 0x80; HBRUSH oldBrush = SelectObject(hdcSeek, color == 0 ? markerBrush[1] : color == 1 ? darkSquareBrush : explodeBrush); color &= 0x7F; if(square) Rectangle(hdcSeek, boardRect.left+x - squareSize/9, boardRect.top+y - squareSize/9, boardRect.left+x + squareSize/9, boardRect.top+y + squareSize/9); else Ellipse(hdcSeek, boardRect.left+x - squareSize/8, boardRect.top+y - squareSize/8, boardRect.left+x + squareSize/8, boardRect.top+y + squareSize/8); SelectObject(hdcSeek, oldBrush); } void DrawSeekOpen() { } void DrawSeekClose() { } VOID HDCDrawPosition(HDC hdc, BOOLEAN repaint, Board board) { static Board lastReq[2], lastDrawn[2]; static HighlightInfo lastDrawnHighlight, lastDrawnPremove; static int lastDrawnFlipView = 0; static int lastReqValid[2] = {0, 0}, lastDrawnValid[2] = {0, 0}; int releaseDC, x, y, x2, y2, row, column, num_clips = 0, i; HDC tmphdc; HDC hdcmem; HBITMAP bufferBitmap; HBITMAP oldBitmap; RECT Rect; HRGN clips[MAX_CLIPS]; ChessSquare dragged_piece = EmptySquare; int nr = twoBoards*partnerUp; /* I'm undecided on this - this function figures out whether a full * repaint is necessary on its own, so there's no real reason to have the * caller tell it that. I think this can safely be set to FALSE - but * if we trust the callers not to request full repaints unnessesarily, then * we could skip some clipping work. In other words, only request a full * redraw when the majority of pieces have changed positions (ie. flip, * gamestart and similar) --Hawk */ Boolean fullrepaint = repaint; if(DrawSeekGraph()) return; // [HG} seekgraph: suppress printing board if seek graph up if( DrawPositionNeedsFullRepaint() ) { fullrepaint = TRUE; } if (board == NULL) { if (!lastReqValid[nr]) { return; } board = lastReq[nr]; } else { CopyBoard(lastReq[nr], board); lastReqValid[nr] = 1; } if (doingSizing) { return; } if (IsIconic(hwndMain)) { return; } if (hdc == NULL) { hdc = GetDC(hwndMain); if (!appData.monoMode) { SelectPalette(hdc, hPal, FALSE); RealizePalette(hdc); } releaseDC = TRUE; } else { releaseDC = FALSE; } /* Create some work-DCs */ hdcmem = CreateCompatibleDC(hdc); tmphdc = CreateCompatibleDC(hdc); /* If dragging is in progress, we temporarely remove the piece */ /* [HGM] or temporarily decrease count if stacked */ /* !! Moved to before board compare !! */ if (dragInfo.from.x >= 0 && dragInfo.pos.x >= 0) { dragged_piece = board[dragInfo.from.y][dragInfo.from.x]; if(dragInfo.from.x == BOARD_LEFT-2 ) { if(--board[dragInfo.from.y][dragInfo.from.x+1] == 0 ) board[dragInfo.from.y][dragInfo.from.x] = EmptySquare; } else if(dragInfo.from.x == BOARD_RGHT+1) { if(--board[dragInfo.from.y][dragInfo.from.x-1] == 0 ) board[dragInfo.from.y][dragInfo.from.x] = EmptySquare; } else board[dragInfo.from.y][dragInfo.from.x] = gatingPiece; } /* Figure out which squares need updating by comparing the * newest board with the last drawn board and checking if * flipping has changed. */ if (!fullrepaint && lastDrawnValid[nr] && (nr == 1 || lastDrawnFlipView == flipView)) { for (row = 0; row < BOARD_HEIGHT; row++) { /* [HGM] true size, not 8 */ for (column = 0; column < BOARD_WIDTH; column++) { if (lastDrawn[nr][row][column] != board[row][column]) { SquareToPos(row, column, &x, &y); clips[num_clips++] = CreateRectRgn(x, y, x + squareSize, y + squareSize); } } } if(nr == 0) { // [HGM] dual: no highlights on second board for (i=0; i<2; i++) { if (lastDrawnHighlight.sq[i].x != highlightInfo.sq[i].x || lastDrawnHighlight.sq[i].y != highlightInfo.sq[i].y) { if (lastDrawnHighlight.sq[i].x >= 0 && lastDrawnHighlight.sq[i].y >= 0) { SquareToPos(lastDrawnHighlight.sq[i].y, lastDrawnHighlight.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } if (highlightInfo.sq[i].x >= 0 && highlightInfo.sq[i].y >= 0) { SquareToPos(highlightInfo.sq[i].y, highlightInfo.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } } } for (i=0; i<2; i++) { if (lastDrawnPremove.sq[i].x != premoveHighlightInfo.sq[i].x || lastDrawnPremove.sq[i].y != premoveHighlightInfo.sq[i].y) { if (lastDrawnPremove.sq[i].x >= 0 && lastDrawnPremove.sq[i].y >= 0) { SquareToPos(lastDrawnPremove.sq[i].y, lastDrawnPremove.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } if (premoveHighlightInfo.sq[i].x >= 0 && premoveHighlightInfo.sq[i].y >= 0) { SquareToPos(premoveHighlightInfo.sq[i].y, premoveHighlightInfo.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } } } } else { // nr == 1 partnerHighlightInfo.sq[0].y = board[EP_STATUS-4]; partnerHighlightInfo.sq[0].x = board[EP_STATUS-3]; partnerHighlightInfo.sq[1].y = board[EP_STATUS-2]; partnerHighlightInfo.sq[1].x = board[EP_STATUS-1]; for (i=0; i<2; i++) { if (partnerHighlightInfo.sq[i].x >= 0 && partnerHighlightInfo.sq[i].y >= 0) { SquareToPos(partnerHighlightInfo.sq[i].y, partnerHighlightInfo.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } if (oldPartnerHighlight.sq[i].x >= 0 && oldPartnerHighlight.sq[i].y >= 0) { SquareToPos(oldPartnerHighlight.sq[i].y, oldPartnerHighlight.sq[i].x, &x, &y); clips[num_clips++] = CreateRectRgn(x - lineGap, y - lineGap, x + squareSize + lineGap, y + squareSize + lineGap); } } } } else { fullrepaint = TRUE; } /* Create a buffer bitmap - this is the actual bitmap * being written to. When all the work is done, we can * copy it to the real DC (the screen). This avoids * the problems with flickering. */ GetClientRect(hwndMain, &Rect); bufferBitmap = CreateCompatibleBitmap(hdc, Rect.right-Rect.left+1, Rect.bottom-Rect.top+1); oldBitmap = SelectObject(hdcmem, bufferBitmap); if (!appData.monoMode) { SelectPalette(hdcmem, hPal, FALSE); } /* Create clips for dragging */ if (!fullrepaint) { if (dragInfo.from.x >= 0) { SquareToPos(dragInfo.from.y, dragInfo.from.x, &x, &y); clips[num_clips++] = CreateRectRgn(x, y, x+squareSize, y+squareSize); } if (dragInfo.start.x >= 0) { SquareToPos(dragInfo.start.y, dragInfo.start.x, &x, &y); clips[num_clips++] = CreateRectRgn(x, y, x+squareSize, y+squareSize); } if (dragInfo.pos.x >= 0) { x = dragInfo.pos.x - squareSize / 2; y = dragInfo.pos.y - squareSize / 2; clips[num_clips++] = CreateRectRgn(x, y, x+squareSize, y+squareSize); } if (dragInfo.lastpos.x >= 0) { x = dragInfo.lastpos.x - squareSize / 2; y = dragInfo.lastpos.y - squareSize / 2; clips[num_clips++] = CreateRectRgn(x, y, x+squareSize, y+squareSize); } } /* Are we animating a move? * If so, * - remove the piece from the board (temporarely) * - calculate the clipping region */ if (!fullrepaint) { if (animInfo.piece != EmptySquare) { board[animInfo.from.y][animInfo.from.x] = EmptySquare; x = boardRect.left + animInfo.lastpos.x; y = boardRect.top + animInfo.lastpos.y; x2 = boardRect.left + animInfo.pos.x; y2 = boardRect.top + animInfo.pos.y; clips[num_clips++] = CreateRectRgn(MIN(x,x2), MIN(y,y2), MAX(x,x2)+squareSize, MAX(y,y2)+squareSize); /* Slight kludge. The real problem is that after AnimateMove is done, the position on the screen does not match lastDrawn. This currently causes trouble only on e.p. captures in atomic, where the piece moves to an empty square and then explodes. The old and new positions both had an empty square at the destination, but animation has drawn a piece there and we have to remember to erase it. [HGM] moved until after setting lastDrawn */ lastDrawn[0][animInfo.to.y][animInfo.to.x] = animInfo.piece; } } /* No clips? Make sure we have fullrepaint set to TRUE */ if (num_clips == 0) fullrepaint = TRUE; /* Set clipping on the memory DC */ if (!fullrepaint) { SelectClipRgn(hdcmem, clips[0]); for (x = 1; x < num_clips; x++) { if (ExtSelectClipRgn(hdcmem, clips[x], RGN_OR) == ERROR) abort(); // this should never ever happen! } } /* Do all the drawing to the memory DC */ if(explodeInfo.radius) { // [HGM] atomic HBRUSH oldBrush; int x, y, r=(explodeInfo.radius * squareSize)/100; ChessSquare piece = board[explodeInfo.fromY][explodeInfo.fromX]; board[explodeInfo.fromY][explodeInfo.fromX] = EmptySquare; // suppress display of capturer SquareToPos(explodeInfo.toY, explodeInfo.toX, &x, &y); x += squareSize/2; y += squareSize/2; if(!fullrepaint) { clips[num_clips] = CreateRectRgn(x-r, y-r, x+r, y+r); ExtSelectClipRgn(hdcmem, clips[num_clips++], RGN_OR); } DrawGridOnDC(hdcmem); DrawHighlightsOnDC(hdcmem, &highlightInfo, HIGHLIGHT_PEN); DrawHighlightsOnDC(hdcmem, &premoveHighlightInfo, PREMOVE_PEN); DrawBoardOnDC(hdcmem, board, tmphdc); board[explodeInfo.fromY][explodeInfo.fromX] = piece; oldBrush = SelectObject(hdcmem, explodeBrush); Ellipse(hdcmem, x-r, y-r, x+r, y+r); SelectObject(hdcmem, oldBrush); } else { if(border) DrawBackgroundOnDC(hdcmem); DrawGridOnDC(hdcmem); if(nr == 0) { // [HGM] dual: decide which highlights to draw DrawHighlightsOnDC(hdcmem, &highlightInfo, HIGHLIGHT_PEN); DrawHighlightsOnDC(hdcmem, &premoveHighlightInfo, PREMOVE_PEN); } else { DrawHighlightsOnDC(hdcmem, &partnerHighlightInfo, HIGHLIGHT_PEN); oldPartnerHighlight = partnerHighlightInfo; } DrawBoardOnDC(hdcmem, board, tmphdc); } if(nr == 0) // [HGM] dual: markers only on left board for (row = 0; row < BOARD_HEIGHT; row++) { for (column = 0; column < BOARD_WIDTH; column++) { if (marker[row][column]) { // marker changes only occur with full repaint! HBRUSH oldBrush = SelectObject(hdcmem, markerBrush[marker[row][column]-1]); SquareToPos(row, column, &x, &y); Ellipse(hdcmem, x + squareSize/4, y + squareSize/4, x + 3*squareSize/4, y + 3*squareSize/4); SelectObject(hdcmem, oldBrush); } } } if( appData.highlightMoveWithArrow ) { DrawArrowHighlight(hdcmem); } DrawCoordsOnDC(hdcmem); CopyBoard(lastDrawn[nr], board); /* [HGM] Moved to here from end of routine, */ /* to make sure lastDrawn contains what is actually drawn */ /* Put the dragged piece back into place and draw it (out of place!) */ if (dragged_piece != EmptySquare) { /* [HGM] or restack */ if(dragInfo.from.x == BOARD_LEFT-2 ) board[dragInfo.from.y][dragInfo.from.x+1]++; else if(dragInfo.from.x == BOARD_RGHT+1 ) board[dragInfo.from.y][dragInfo.from.x-1]++; board[dragInfo.from.y][dragInfo.from.x] = dragged_piece; x = dragInfo.pos.x - squareSize / 2; y = dragInfo.pos.y - squareSize / 2; DrawPieceOnDC(hdcmem, dragInfo.piece, ((int) dragInfo.piece < (int) BlackPawn), (dragInfo.from.y + dragInfo.from.x) % 2, x, y, tmphdc); } /* Put the animated piece back into place and draw it */ if (animInfo.piece != EmptySquare) { board[animInfo.from.y][animInfo.from.x] = animInfo.piece; x = boardRect.left + animInfo.pos.x; y = boardRect.top + animInfo.pos.y; DrawPieceOnDC(hdcmem, animInfo.piece, ((int) animInfo.piece < (int) BlackPawn), (animInfo.from.y + animInfo.from.x) % 2, x, y, tmphdc); } /* Release the bufferBitmap by selecting in the old bitmap * and delete the memory DC */ SelectObject(hdcmem, oldBitmap); DeleteDC(hdcmem); /* Set clipping on the target DC */ if (!fullrepaint) { if(nr == 1) for (x = 0; x < num_clips; x++) { // [HGM] dual: translate clips RECT rect; GetRgnBox(clips[x], &rect); DeleteObject(clips[x]); clips[x] = CreateRectRgn(rect.left + wpMain.width/2, rect.top, rect.right + wpMain.width/2, rect.bottom); } SelectClipRgn(hdc, clips[0]); for (x = 1; x < num_clips; x++) { if (ExtSelectClipRgn(hdc, clips[x], RGN_OR) == ERROR) abort(); // this should never ever happen! } } /* Copy the new bitmap onto the screen in one go. * This way we avoid any flickering */ oldBitmap = SelectObject(tmphdc, bufferBitmap); BitBlt(hdc, boardRect.left + twoBoards*partnerUp*wpMain.width/2, boardRect.top, // [HGM] dual boardRect.right - boardRect.left, boardRect.bottom - boardRect.top, tmphdc, boardRect.left, boardRect.top, SRCCOPY); if(saveDiagFlag) { BITMAP b; int i, j=0, m, w, wb, fac=0; char *pData; BITMAPINFOHEADER bih; int color[16], nrColors=0; GetObject(bufferBitmap, sizeof(b), &b); if(pData = malloc(b.bmWidthBytes*b.bmHeight + 10000)) { bih.biSize = sizeof(BITMAPINFOHEADER); bih.biWidth = b.bmWidth; bih.biHeight = b.bmHeight; bih.biPlanes = 1; bih.biBitCount = b.bmBitsPixel; bih.biCompression = 0; bih.biSizeImage = b.bmWidthBytes*b.bmHeight; bih.biXPelsPerMeter = 0; bih.biYPelsPerMeter = 0; bih.biClrUsed = 0; bih.biClrImportant = 0; // fprintf(diagFile, "t=%d\nw=%d\nh=%d\nB=%d\nP=%d\nX=%d\n", // b.bmType, b.bmWidth, b.bmHeight, b.bmWidthBytes, b.bmPlanes, b.bmBitsPixel); GetDIBits(tmphdc,bufferBitmap,0,b.bmHeight,pData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); // fprintf(diagFile, "%8x\n", (int) pData); wb = b.bmWidthBytes; // count colors for(i=0; i>2; i++) { int k = ((int*) pData)[i]; for(j=0; j= 16) break; color[j] = k; if(j >= nrColors) nrColors = j+1; } if(j<16) { // 16 colors is enough. Compress to 4 bits per pixel INT p = 0; for(i=0; i>2); w+=2) { int k = ((int*) pData)[(wb*i>>2) + w]; for(j=0; j>2) + w + 1]; for(m=0; m>5)<<2; } // write BITMAPFILEHEADER fprintf(diagFile, "BM"); fputDW(diagFile, wb*(b.bmHeight - boardRect.top + OUTER_MARGIN)+0x36 + (fac?64:0)); fputDW(diagFile, 0); fputDW(diagFile, 0x36 + (fac?64:0)); // write BITMAPINFOHEADER fputDW(diagFile, 40); fputDW(diagFile, b.bmWidth); fputDW(diagFile, b.bmHeight - boardRect.top + OUTER_MARGIN); if(fac) fputDW(diagFile, 0x040001); // planes and bits/pixel else fputDW(diagFile, 0x200001); // planes and bits/pixel fputDW(diagFile, 0); fputDW(diagFile, 0); fputDW(diagFile, 0); fputDW(diagFile, 0); fputDW(diagFile, 0); fputDW(diagFile, 0); // write color table if(fac) for(i=0; i<16; i++) fputDW(diagFile, color[i]); // write bitmap data for(i=0; ihf); ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE, &messageRect, messageText, strlen(messageText), NULL); SelectObject(hdc, oldFont); DisplayBothClocks(); DisplayLogos(); } EndPaint(hwnd,&ps); } return; } /* * If the user selects on a border boundary, return -1; if off the board, * return -2. Otherwise map the event coordinate to the square. * The offset boardRect.left or boardRect.top must already have been * subtracted from x. */ int EventToSquare(x, limit) int x, limit; { if (x <= border) return -2; if (x < lineGap + border) return -1; x -= lineGap + border; if ((x % (squareSize + lineGap)) >= squareSize) return -1; x /= (squareSize + lineGap); if (x >= limit) return -2; return x; } typedef struct { char piece; int command; char* name; } DropEnable; DropEnable dropEnables[] = { { 'P', DP_Pawn, N_("Pawn") }, { 'N', DP_Knight, N_("Knight") }, { 'B', DP_Bishop, N_("Bishop") }, { 'R', DP_Rook, N_("Rook") }, { 'Q', DP_Queen, N_("Queen") }, }; VOID SetupDropMenu(HMENU hmenu) { int i, count, enable; char *p; extern char white_holding[], black_holding[]; char item[MSG_SIZ]; for (i=0; i 0 || !appData.testLegality /*!!temp:*/ || (gameInfo.variant == VariantCrazyhouse && !appData.icsActive); ModifyMenu(hmenu, dropEnables[i].command, MF_BYCOMMAND | (enable ? MF_ENABLED : MF_GRAYED) | MF_STRING, dropEnables[i].command, item); } } void DragPieceBegin(int x, int y, Boolean instantly) { dragInfo.lastpos.x = boardRect.left + x; dragInfo.lastpos.y = boardRect.top + y; if(instantly) dragInfo.pos = dragInfo.lastpos; dragInfo.from.x = fromX; dragInfo.from.y = fromY; dragInfo.piece = boards[currentMove][fromY][fromX]; dragInfo.start = dragInfo.from; SetCapture(hwndMain); } void DragPieceEnd(int x, int y) { ReleaseCapture(); dragInfo.start.x = dragInfo.start.y = -1; dragInfo.from = dragInfo.start; dragInfo.pos = dragInfo.lastpos = dragInfo.start; } void ChangeDragPiece(ChessSquare piece) { dragInfo.piece = piece; } /* Event handler for mouse messages */ VOID MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int x, y, menuNr; POINT pt; static int recursive = 0; HMENU hmenu; BOOLEAN forceFullRepaint = IsFullRepaintPreferrable(); /* [AS] */ if (recursive) { if (message == WM_MBUTTONUP) { /* Hideous kludge to fool TrackPopupMenu into paying attention to the middle button: we simulate pressing the left button too! */ PostMessage(hwnd, WM_LBUTTONDOWN, wParam, lParam); PostMessage(hwnd, WM_LBUTTONUP, wParam, lParam); } return; } recursive++; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); x = EventToSquare(pt.x - boardRect.left, BOARD_WIDTH); y = EventToSquare(pt.y - boardRect.top, BOARD_HEIGHT); if (!flipView && y >= 0) { y = BOARD_HEIGHT - 1 - y; } if (flipView && x >= 0) { x = BOARD_WIDTH - 1 - x; } shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status controlKey = GetKeyState(VK_CONTROL) < 0; // [HGM] remember last shift status switch (message) { case WM_LBUTTONDOWN: if (PtInRect((LPRECT) &whiteRect, pt)) { ClockClick(flipClock); break; } else if (PtInRect((LPRECT) &blackRect, pt)) { ClockClick(!flipClock); break; } if(dragging) { // [HGM] lion: don't destroy dragging info if we are already dragging dragInfo.start.x = dragInfo.start.y = -1; dragInfo.from = dragInfo.start; } if(fromX == -1 && frozen) { // not sure where this is for fromX = fromY = -1; DrawPosition(forceFullRepaint || FALSE, NULL); /* [AS] */ break; } LeftClick(Press, pt.x - boardRect.left, pt.y - boardRect.top); DrawPosition(TRUE, NULL); break; case WM_LBUTTONUP: LeftClick(Release, pt.x - boardRect.left, pt.y - boardRect.top); DrawPosition(TRUE, NULL); break; case WM_MOUSEMOVE: if(SeekGraphClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, 1)) break; if(PromoScroll(pt.x - boardRect.left, pt.y - boardRect.top)) break; MovePV(pt.x - boardRect.left, pt.y - boardRect.top, boardRect.bottom - boardRect.top); if ((appData.animateDragging || appData.highlightDragging) && (wParam & MK_LBUTTON || dragging == 2) && dragInfo.from.x >= 0) { BOOL full_repaint = FALSE; if (appData.animateDragging) { dragInfo.pos = pt; } if (appData.highlightDragging) { HoverEvent(highlightInfo.sq[1].x, highlightInfo.sq[1].y, x, y); if( IsDrawArrowEnabled() && (x < 0 || x >= BOARD_WIDTH || y < 0 || y >= BOARD_HEIGHT) ) { full_repaint = TRUE; } } DrawPosition( full_repaint, NULL); dragInfo.lastpos = dragInfo.pos; } break; case WM_MOUSEWHEEL: // [DM] { static int lastDir = 0; // [HGM] build in some hysteresis to avoid spurious events /* Mouse Wheel is being rolled forward * Play moves forward */ if((short)HIWORD(wParam) < 0 && currentMove < forwardMostMove) { if(lastDir == 1) ForwardEvent(); else lastDir = 1; } // [HGM] suppress first event in direction /* Mouse Wheel is being rolled backward * Play moves backward */ if((short)HIWORD(wParam) > 0 && currentMove > backwardMostMove) { if(lastDir == -1) BackwardEvent(); else lastDir = -1; } } break; case WM_MBUTTONUP: case WM_RBUTTONUP: ReleaseCapture(); RightClick(Release, pt.x - boardRect.left, pt.y - boardRect.top, &fromX, &fromY); break; case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: ErrorPopDown(); ReleaseCapture(); fromX = fromY = -1; dragInfo.pos.x = dragInfo.pos.y = -1; dragInfo.start.x = dragInfo.start.y = -1; dragInfo.from = dragInfo.start; dragInfo.lastpos = dragInfo.pos; if (appData.highlightDragging) { ClearHighlights(); } if(y == -2) { /* [HGM] right mouse button in clock area edit-game mode ups clock */ if (PtInRect((LPRECT) &whiteRect, pt)) { if (GetKeyState(VK_SHIFT) < 0) AdjustClock(flipClock, 1); } else if (PtInRect((LPRECT) &blackRect, pt)) { if (GetKeyState(VK_SHIFT) < 0) AdjustClock(!flipClock, 1); } break; } DrawPosition(TRUE, NULL); menuNr = RightClick(Press, pt.x - boardRect.left, pt.y - boardRect.top, &fromX, &fromY); switch (menuNr) { case 0: if (message == WM_MBUTTONDOWN) { buttonCount = 3; /* even if system didn't think so */ if (wParam & MK_SHIFT) MenuPopup(hwnd, pt, LoadMenu(hInst, "BlackPieceMenu"), -1); else MenuPopup(hwnd, pt, LoadMenu(hInst, "WhitePieceMenu"), -1); } else { /* message == WM_RBUTTONDOWN */ /* Just have one menu, on the right button. Windows users don't think to try the middle one, and sometimes other software steals it, or it doesn't really exist. */ if(gameInfo.variant != VariantShogi) MenuPopup(hwnd, pt, LoadMenu(hInst, "PieceMenu"), -1); else MenuPopup(hwnd, pt, LoadMenu(hInst, "ShogiPieceMenu"), -1); } break; case 2: SetCapture(hwndMain); break; case 1: hmenu = LoadMenu(hInst, "DropPieceMenu"); SetupDropMenu(hmenu); MenuPopup(hwnd, pt, hmenu, -1); default: break; } break; } recursive--; } /* Preprocess messages for buttons in main window */ LRESULT CALLBACK ButtonProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int id = GetWindowLongPtr(hwnd, GWLP_ID); int i, dir; for (i=0; i= 'A' && WhiteOnMove(currentMove) && PieceToChar(WhiteAngel) != '~') || (PieceToChar(BlackAngel) >= 'A' && !WhiteOnMove(currentMove) && PieceToChar(BlackAngel) != '~') ) ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hDlg, PB_Chancellor), ((PieceToChar(WhiteMarshall) >= 'A' && WhiteOnMove(currentMove) && PieceToChar(WhiteMarshall) != '~') || (PieceToChar(BlackMarshall) >= 'A' && !WhiteOnMove(currentMove) && PieceToChar(BlackMarshall) != '~') ) ? SW_SHOW : SW_HIDE); /* [HGM] Hide B & R button in Shogi, use Q as promote, N as defer */ ShowWindow(GetDlgItem(hDlg, PB_Rook), !promoStyle ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hDlg, PB_Bishop), !promoStyle ? SW_SHOW : SW_HIDE); if(promoStyle) { SetDlgItemText(hDlg, PB_Queen, "YES"); SetDlgItemText(hDlg, PB_Knight, "NO"); SetWindowText(hDlg, "Promote?"); } ShowWindow(GetDlgItem(hDlg, IDC_Centaur), gameInfo.variant == VariantSuper ? SW_SHOW : SW_HIDE); return TRUE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDCANCEL: EndDialog(hDlg, TRUE); /* Exit the dialog */ ClearHighlights(); DrawPosition(FALSE, NULL); return TRUE; case PB_King: promoChar = gameInfo.variant == VariantSuper ? PieceToChar(BlackSilver) : PieceToChar(BlackKing); break; case PB_Queen: promoChar = promoStyle ? '+' : ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteQueen : BlackQueen)); break; case PB_Rook: promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteRook : BlackRook)); if(gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove)) promoChar = PieceToChar(BlackDragon); break; case PB_Bishop: promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteBishop : BlackBishop)); if(gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove)) promoChar = PieceToChar(BlackAlfil); break; case PB_Chancellor: promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteMarshall : BlackMarshall)); break; case PB_Archbishop: promoChar = ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteAngel : BlackAngel)); break; case PB_Knight: promoChar = gameInfo.variant == VariantShogi ? '=' : promoStyle ? NULLCHAR : ToLower(PieceToChar(WhiteOnMove(currentMove) ? WhiteKnight : BlackKnight)); break; default: return FALSE; } if(promoChar == '.') return FALSE; // invalid piece chosen EndDialog(hDlg, TRUE); /* Exit the dialog */ UserMoveEvent(fromX, fromY, toX, toY, promoChar); fromX = fromY = -1; if (!appData.highlightLastMove) { ClearHighlights(); DrawPosition(FALSE, NULL); } return TRUE; } return FALSE; } /* Pop up promotion dialog */ VOID PromotionPopup(HWND hwnd) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)Promotion, hInst); DialogBox(hInst, MAKEINTRESOURCE(DLG_PromotionKing), hwnd, (DLGPROC)lpProc); FreeProcInstance(lpProc); } void PromotionPopUp(char choice) { promoStyle = (choice == '+'); DrawPosition(TRUE, NULL); PromotionPopup(hwndMain); } VOID LoadGameDialog(HWND hwnd, char* title) { UINT number = 0; FILE *f; char fileTitle[MSG_SIZ]; f = OpenFileDialog(hwnd, "rb", "", appData.oldSaveStyle ? "gam" : "pgn", GAME_FILT, title, &number, fileTitle, NULL); if (f != NULL) { cmailMsgLoaded = FALSE; if (number == 0) { int error = GameListBuild(f); if (error) { DisplayError(_("Cannot build game list"), error); } else if (!ListEmpty(&gameList) && ((ListGame *) gameList.tailPred)->number > 1) { GameListPopUp(f, fileTitle); return; } GameListDestroy(); number = 1; } LoadGame(f, number, fileTitle, FALSE); } } int get_term_width() { HDC hdc; TEXTMETRIC tm; RECT rc; HFONT hfont, hold_font; LOGFONT lf; HWND hText; if (hwndConsole) hText = GetDlgItem(hwndConsole, OPT_ConsoleText); else return 79; // get the text metrics hdc = GetDC(hText); lf = font[boardSize][CONSOLE_FONT]->lf; if (consoleCF.dwEffects & CFE_BOLD) lf.lfWeight = FW_BOLD; if (consoleCF.dwEffects & CFE_ITALIC) lf.lfItalic = TRUE; if (consoleCF.dwEffects & CFE_STRIKEOUT) lf.lfStrikeOut = TRUE; if (consoleCF.dwEffects & CFE_UNDERLINE) lf.lfUnderline = TRUE; hfont = CreateFontIndirect(&lf); hold_font = SelectObject(hdc, hfont); GetTextMetrics(hdc, &tm); SelectObject(hdc, hold_font); DeleteObject(hfont); ReleaseDC(hText, hdc); // get the rectangle SendMessage(hText, EM_GETRECT, 0, (LPARAM)&rc); return (rc.right-rc.left) / tm.tmAveCharWidth; } void UpdateICSWidth(HWND hText) { LONG old_width, new_width; new_width = get_term_width(hText, FALSE); old_width = GetWindowLongPtr(hText, GWLP_USERDATA); if (new_width != old_width) { ics_update_width(new_width); SetWindowLongPtr(hText, GWLP_USERDATA, new_width); } } VOID ChangedConsoleFont() { CHARFORMAT cfmt; CHARRANGE tmpsel, sel; MyFont *f = font[boardSize][CONSOLE_FONT]; HWND hText = GetDlgItem(hwndConsole, OPT_ConsoleText); HWND hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); PARAFORMAT paraf; cfmt.cbSize = sizeof(CHARFORMAT); cfmt.dwMask = CFM_FACE|CFM_SIZE|CFM_CHARSET; safeStrCpy(cfmt.szFaceName, font[boardSize][CONSOLE_FONT]->mfp.faceName, sizeof(cfmt.szFaceName)/sizeof(cfmt.szFaceName[0]) ); /* yHeight is expressed in twips. A twip is 1/20 of a font's point * size. This was undocumented in the version of MSVC++ that I had * when I wrote the code, but is apparently documented now. */ cfmt.yHeight = (int)(f->mfp.pointSize * 20.0 + 0.5); cfmt.bCharSet = f->lf.lfCharSet; cfmt.bPitchAndFamily = f->lf.lfPitchAndFamily; SendMessage(hText, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt); SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &cfmt); /* Why are the following seemingly needed too? */ SendMessage(hText, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt); SendMessage(hInput, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM) &cfmt); SendMessage(hText, EM_EXGETSEL, 0, (LPARAM)&sel); tmpsel.cpMin = 0; tmpsel.cpMax = -1; /*999999?*/ SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&tmpsel); SendMessage(hText, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cfmt); /* Trying putting this here too. It still seems to tickle a RichEdit * bug: sometimes RichEdit indents the first line of a paragraph too. */ paraf.cbSize = sizeof(paraf); paraf.dwMask = PFM_OFFSET | PFM_STARTINDENT; paraf.dxStartIndent = 0; paraf.dxOffset = WRAP_INDENT; SendMessage(hText, EM_SETPARAFORMAT, 0, (LPARAM) ¶f); SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel); UpdateICSWidth(hText); } /*---------------------------------------------------------------------------*\ * * Window Proc for main window * \*---------------------------------------------------------------------------*/ /* Process messages for main window, etc. */ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { FARPROC lpProc; int wmId; char *defName; FILE *f; UINT number; char fileTitle[MSG_SIZ]; static SnapData sd; static int peek=0; switch (message) { case WM_PAINT: /* message: repaint portion of window */ PaintProc(hwnd); break; case WM_ERASEBKGND: if (IsIconic(hwnd)) { /* Cheat; change the message */ return (DefWindowProc(hwnd, WM_ICONERASEBKGND, wParam, lParam)); } else { return (DefWindowProc(hwnd, message, wParam, lParam)); } break; case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: case WM_MOUSEMOVE: case WM_MOUSEWHEEL: MouseEvent(hwnd, message, wParam, lParam); break; case WM_KEYUP: if((char)wParam == '\b') { ForwardEvent(); peek = 0; } JAWS_KBUP_NAVIGATION break; case WM_KEYDOWN: if((char)wParam == '\b') { if(!peek) BackwardEvent(), peek = 1; } JAWS_KBDOWN_NAVIGATION break; case WM_CHAR: JAWS_ALT_INTERCEPT if (appData.icsActive && ((char)wParam == '\r' || (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9'))) { // [HGM] movenum: for non-zero digits we always do type-in dialog HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput); if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE); SetFocus(h); SendMessage(h, message, wParam, lParam); } else if(lParam != KF_REPEAT) { if (isalpha((char)wParam) || isdigit((char)wParam)) { TypeInEvent((char)wParam); } else if((char)wParam == 003) CopyGameToClipboard(); else if((char)wParam == 026) PasteGameOrFENFromClipboard(); } break; case WM_PALETTECHANGED: if (hwnd != (HWND)wParam && !appData.monoMode) { int nnew; HDC hdc = GetDC(hwndMain); SelectPalette(hdc, hPal, TRUE); nnew = RealizePalette(hdc); if (nnew > 0) { paletteChanged = TRUE; InvalidateRect(hwnd, &boardRect, FALSE); } ReleaseDC(hwnd, hdc); } break; case WM_QUERYNEWPALETTE: if (!appData.monoMode /*&& paletteChanged*/) { int nnew; HDC hdc = GetDC(hwndMain); paletteChanged = FALSE; SelectPalette(hdc, hPal, FALSE); nnew = RealizePalette(hdc); if (nnew > 0) { InvalidateRect(hwnd, &boardRect, FALSE); } ReleaseDC(hwnd, hdc); return TRUE; } return FALSE; case WM_COMMAND: /* message: command from application menu */ wmId = LOWORD(wParam); switch (wmId) { case IDM_NewGame: ResetGameEvent(); SAY("new game enter a move to play against the computer with white"); break; case IDM_NewGameFRC: if( NewGameFRC() == 0 ) { ResetGameEvent(); } break; case IDM_NewVariant: NewVariantPopup(hwnd); break; case IDM_LoadGame: LoadGameDialog(hwnd, _("Load Game from File")); break; case IDM_LoadNextGame: ReloadGame(1); break; case IDM_LoadPrevGame: ReloadGame(-1); break; case IDM_ReloadGame: ReloadGame(0); break; case IDM_LoadPosition: if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) { Reset(FALSE, TRUE); } number = 1; f = OpenFileDialog(hwnd, "rb", "", appData.oldSaveStyle ? "pos" : "fen", POSITION_FILT, _("Load Position from File"), &number, fileTitle, NULL); if (f != NULL) { LoadPosition(f, number, fileTitle); } break; case IDM_LoadNextPosition: ReloadPosition(1); break; case IDM_LoadPrevPosition: ReloadPosition(-1); break; case IDM_ReloadPosition: ReloadPosition(0); break; case IDM_SaveGame: defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn"); f = OpenFileDialog(hwnd, "a", defName, appData.oldSaveStyle ? "gam" : "pgn", GAME_FILT, _("Save Game to File"), NULL, fileTitle, NULL); if (f != NULL) { SaveGame(f, 0, ""); } break; case IDM_SavePosition: defName = DefaultFileName(appData.oldSaveStyle ? "pos" : "fen"); f = OpenFileDialog(hwnd, "a", defName, appData.oldSaveStyle ? "pos" : "fen", POSITION_FILT, _("Save Position to File"), NULL, fileTitle, NULL); if (f != NULL) { SavePosition(f, 0, ""); } break; case IDM_SaveDiagram: defName = "diagram"; f = OpenFileDialog(hwnd, "wb", defName, "bmp", DIAGRAM_FILT, _("Save Diagram to File"), NULL, fileTitle, NULL); if (f != NULL) { SaveDiagram(f); } break; case IDM_SaveSelected: f = OpenFileDialog(hwnd, "a", "", "pgn", GAME_FILT, _("Save Game to File"), NULL, fileTitle, NULL); if (f != NULL) { SaveSelected(f, 0, ""); } break; case IDM_CreateBook: CreateBookEvent(); break; case IDM_CopyGame: CopyGameToClipboard(); break; case IDM_PasteGame: PasteGameFromClipboard(); break; case IDM_CopyGameListToClipboard: CopyGameListToClipboard(); break; /* [AS] Autodetect FEN or PGN data */ case IDM_PasteAny: PasteGameOrFENFromClipboard(); break; /* [AS] Move history */ case IDM_ShowMoveHistory: if( MoveHistoryIsUp() ) { MoveHistoryPopDown(); } else { MoveHistoryPopUp(); } break; /* [AS] Eval graph */ case IDM_ShowEvalGraph: if( EvalGraphIsUp() ) { EvalGraphPopDown(); } else { EvalGraphPopUp(); SetFocus(hwndMain); } break; /* [AS] Engine output */ case IDM_ShowEngineOutput: if( EngineOutputIsUp() ) { EngineOutputPopDown(); } else { EngineOutputPopUp(); } break; /* [AS] User adjudication */ case IDM_UserAdjudication_White: UserAdjudicationEvent( +1 ); break; case IDM_UserAdjudication_Black: UserAdjudicationEvent( -1 ); break; case IDM_UserAdjudication_Draw: UserAdjudicationEvent( 0 ); break; /* [AS] Game list options dialog */ case IDM_GameListOptions: GameListOptions(); break; case IDM_NewChat: ChatPopUp(NULL); break; case IDM_CopyPosition: CopyFENToClipboard(); break; case IDM_PastePosition: PasteFENFromClipboard(); break; case IDM_MailMove: MailMoveEvent(); break; case IDM_ReloadCMailMsg: Reset(TRUE, TRUE); ReloadCmailMsgEvent(FALSE); break; case IDM_Minimize: ShowWindow(hwnd, SW_MINIMIZE); break; case IDM_Exit: ExitEvent(0); break; case IDM_MachineWhite: MachineWhiteEvent(); /* * refresh the tags dialog only if it's visible */ if (gameMode == MachinePlaysWhite && IsWindowVisible(editTagsDialog)) { char *tags; tags = PGNTags(&gameInfo); TagsPopUp(tags, CmailMsg()); free(tags); } SAY("computer starts playing white"); break; case IDM_MachineBlack: MachineBlackEvent(); /* * refresh the tags dialog only if it's visible */ if (gameMode == MachinePlaysBlack && IsWindowVisible(editTagsDialog)) { char *tags; tags = PGNTags(&gameInfo); TagsPopUp(tags, CmailMsg()); free(tags); } SAY("computer starts playing black"); break; case IDM_Match: // [HGM] match: flows into next case, after setting Match Mode and nr of Games MatchEvent(2); // distinguish from command-line-triggered case (matchMode=1) break; case IDM_TwoMachines: TwoMachinesEvent(); /* * refresh the tags dialog only if it's visible */ if (gameMode == TwoMachinesPlay && IsWindowVisible(editTagsDialog)) { char *tags; tags = PGNTags(&gameInfo); TagsPopUp(tags, CmailMsg()); free(tags); } SAY("computer starts playing both sides"); break; case IDM_AnalysisMode: if(AnalyzeModeEvent()) { SAY("analyzing current position"); } break; case IDM_AnalyzeFile: AnalyzeFileEvent(); break; case IDM_IcsClient: IcsClientEvent(); break; case IDM_EditGame: case IDM_EditGame2: EditGameEvent(); SAY("edit game"); break; case IDM_EditPosition: case IDM_EditPosition2: EditPositionEvent(); SAY("enter a FEN string or setup a position on the board using the control R pop up menu"); break; case IDM_Training: TrainingEvent(); break; case IDM_ShowGameList: ShowGameListProc(); break; case IDM_EditProgs1: EditTagsPopUp(firstChessProgramNames, &firstChessProgramNames); break; case IDM_LoadProg1: LoadEnginePopUp(hwndMain, 0); break; case IDM_LoadProg2: LoadEnginePopUp(hwndMain, 1); break; case IDM_EditServers: EditTagsPopUp(icsNames, &icsNames); break; case IDM_EditTags: case IDM_Tags: EditTagsProc(); break; case IDM_EditBook: EditBookEvent(); break; case IDM_EditComment: case IDM_Comment: if (commentUp && editComment) { CommentPopDown(); } else { EditCommentEvent(); } break; case IDM_Pause: PauseEvent(); break; case IDM_Accept: AcceptEvent(); break; case IDM_Decline: DeclineEvent(); break; case IDM_Rematch: RematchEvent(); break; case IDM_CallFlag: CallFlagEvent(); break; case IDM_Draw: DrawEvent(); break; case IDM_Adjourn: AdjournEvent(); break; case IDM_Abort: AbortEvent(); break; case IDM_Resign: ResignEvent(); break; case IDM_StopObserving: StopObservingEvent(); break; case IDM_StopExamining: StopExaminingEvent(); break; case IDM_Upload: UploadGameEvent(); break; case IDM_TypeInMove: TypeInEvent('\000'); break; case IDM_TypeInName: PopUpNameDialog('\000'); break; case IDM_Backward: BackwardEvent(); SetFocus(hwndMain); break; JAWS_MENU_ITEMS case IDM_Forward: ForwardEvent(); SetFocus(hwndMain); break; case IDM_ToStart: ToStartEvent(); SetFocus(hwndMain); break; case IDM_ToEnd: ToEndEvent(); SetFocus(hwndMain); break; case OPT_GameListNext: // [HGM] forward these two accelerators to Game List case OPT_GameListPrev: if(gameListDialog) SendMessage(gameListDialog, WM_COMMAND, wmId, 0); break; case IDM_Revert: RevertEvent(FALSE); break; case IDM_Annotate: // [HGM] vari: revert with annotation RevertEvent(TRUE); break; case IDM_TruncateGame: TruncateGameEvent(); break; case IDM_MoveNow: MoveNowEvent(); break; case IDM_RetractMove: RetractMoveEvent(); break; case IDM_FlipView: flipView = !flipView; DrawPosition(FALSE, NULL); break; case IDM_FlipClock: flipClock = !flipClock; DisplayBothClocks(); DisplayLogos(); break; case IDM_MuteSounds: mute = !mute; // [HGM] mute: keep track of global muting variable CheckMenuItem(GetMenu(hwndMain),IDM_MuteSounds, MF_BYCOMMAND|(mute?MF_CHECKED:MF_UNCHECKED)); break; case IDM_GeneralOptions: GeneralOptionsPopup(hwnd); DrawPosition(TRUE, NULL); break; case IDM_BoardOptions: BoardOptionsPopup(hwnd); break; case IDM_ThemeOptions: ThemeOptionsPopup(hwnd); break; case IDM_EnginePlayOptions: EnginePlayOptionsPopup(hwnd); break; case IDM_Engine1Options: EngineOptionsPopup(hwnd, &first); break; case IDM_Engine2Options: savedHwnd = hwnd; if(WaitForEngine(&second, SettingsMenuIfReady)) break; EngineOptionsPopup(hwnd, &second); break; case IDM_OptionsUCI: UciOptionsPopup(hwnd); break; case IDM_Tourney: TourneyPopup(hwnd); break; case IDM_IcsOptions: IcsOptionsPopup(hwnd); break; case IDM_Fonts: FontsOptionsPopup(hwnd); break; case IDM_Sounds: SoundOptionsPopup(hwnd); break; case IDM_CommPort: CommPortOptionsPopup(hwnd); break; case IDM_LoadOptions: LoadOptionsPopup(hwnd); break; case IDM_SaveOptions: SaveOptionsPopup(hwnd); break; case IDM_TimeControl: TimeControlOptionsPopup(hwnd); break; case IDM_SaveSettings: SaveSettings(settingsFileName); break; case IDM_SaveSettingsOnExit: saveSettingsOnExit = !saveSettingsOnExit; (void) CheckMenuItem(GetMenu(hwndMain), IDM_SaveSettingsOnExit, MF_BYCOMMAND|(saveSettingsOnExit ? MF_CHECKED : MF_UNCHECKED)); break; case IDM_Hint: HintEvent(); break; case IDM_Book: BookEvent(); break; case IDM_AboutGame: AboutGameEvent(); break; case IDM_Debug: appData.debugMode = !appData.debugMode; if (appData.debugMode) { char dir[MSG_SIZ]; GetCurrentDirectory(MSG_SIZ, dir); SetCurrentDirectory(installDir); debugFP = fopen(appData.nameOfDebugFile, "w"); SetCurrentDirectory(dir); setbuf(debugFP, NULL); } else { fclose(debugFP); debugFP = NULL; } break; case IDM_HELPCONTENTS: if (!MyHelp (hwnd, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS") && !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) { MessageBox (GetFocus(), _("Unable to activate help"), szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND); } break; case IDM_HELPSEARCH: if (!MyHelp (hwnd, "winboard.hlp", HELP_PARTIALKEY, (DWORD)(LPSTR)"") && !HtmlHelp(hwnd, "winboard.chm", 0, 0) ) { MessageBox (GetFocus(), _("Unable to activate help"), szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND); } break; case IDM_HELPHELP: if(!WinHelp(hwnd, (LPSTR)NULL, HELP_HELPONHELP, 0)) { MessageBox (GetFocus(), _("Unable to activate help"), szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND); } break; case IDM_ABOUT: lpProc = MakeProcInstance((FARPROC)About, hInst); DialogBox(hInst, (gameInfo.event && strcmp(gameInfo.event, "Easter Egg Hunt") == 0) ? "AboutBox2" : "AboutBox", hwnd, (DLGPROC)lpProc); FreeProcInstance(lpProc); break; case IDM_DirectCommand1: AskQuestionEvent(_("Direct Command"), _("Send to chess program:"), "", "1"); break; case IDM_DirectCommand2: AskQuestionEvent(_("Direct Command"), _("Send to second chess program:"), "", "2"); break; case EP_WhitePawn: EditPositionMenuEvent(WhitePawn, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteKnight: EditPositionMenuEvent(WhiteKnight, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteBishop: EditPositionMenuEvent(WhiteBishop, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteRook: EditPositionMenuEvent(WhiteRook, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteQueen: EditPositionMenuEvent(WhiteQueen, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteFerz: EditPositionMenuEvent(WhiteFerz, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteWazir: EditPositionMenuEvent(WhiteWazir, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteAlfil: EditPositionMenuEvent(WhiteAlfil, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteCannon: EditPositionMenuEvent(WhiteCannon, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteCardinal: EditPositionMenuEvent(WhiteAngel, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteMarshall: EditPositionMenuEvent(WhiteMarshall, fromX, fromY); fromX = fromY = -1; break; case EP_WhiteKing: EditPositionMenuEvent(WhiteKing, fromX, fromY); fromX = fromY = -1; break; case EP_BlackPawn: EditPositionMenuEvent(BlackPawn, fromX, fromY); fromX = fromY = -1; break; case EP_BlackKnight: EditPositionMenuEvent(BlackKnight, fromX, fromY); fromX = fromY = -1; break; case EP_BlackBishop: EditPositionMenuEvent(BlackBishop, fromX, fromY); fromX = fromY = -1; break; case EP_BlackRook: EditPositionMenuEvent(BlackRook, fromX, fromY); fromX = fromY = -1; break; case EP_BlackQueen: EditPositionMenuEvent(BlackQueen, fromX, fromY); fromX = fromY = -1; break; case EP_BlackFerz: EditPositionMenuEvent(BlackFerz, fromX, fromY); fromX = fromY = -1; break; case EP_BlackWazir: EditPositionMenuEvent(BlackWazir, fromX, fromY); fromX = fromY = -1; break; case EP_BlackAlfil: EditPositionMenuEvent(BlackAlfil, fromX, fromY); fromX = fromY = -1; break; case EP_BlackCannon: EditPositionMenuEvent(BlackCannon, fromX, fromY); fromX = fromY = -1; break; case EP_BlackCardinal: EditPositionMenuEvent(BlackAngel, fromX, fromY); fromX = fromY = -1; break; case EP_BlackMarshall: EditPositionMenuEvent(BlackMarshall, fromX, fromY); fromX = fromY = -1; break; case EP_BlackKing: EditPositionMenuEvent(BlackKing, fromX, fromY); fromX = fromY = -1; break; case EP_EmptySquare: EditPositionMenuEvent(EmptySquare, fromX, fromY); fromX = fromY = -1; break; case EP_ClearBoard: EditPositionMenuEvent(ClearBoard, fromX, fromY); fromX = fromY = -1; break; case EP_White: EditPositionMenuEvent(WhitePlay, fromX, fromY); fromX = fromY = -1; break; case EP_Black: EditPositionMenuEvent(BlackPlay, fromX, fromY); fromX = fromY = -1; break; case EP_Promote: EditPositionMenuEvent(PromotePiece, fromX, fromY); fromX = fromY = -1; break; case EP_Demote: EditPositionMenuEvent(DemotePiece, fromX, fromY); fromX = fromY = -1; break; case DP_Pawn: DropMenuEvent(WhitePawn, fromX, fromY); fromX = fromY = -1; break; case DP_Knight: DropMenuEvent(WhiteKnight, fromX, fromY); fromX = fromY = -1; break; case DP_Bishop: DropMenuEvent(WhiteBishop, fromX, fromY); fromX = fromY = -1; break; case DP_Rook: DropMenuEvent(WhiteRook, fromX, fromY); fromX = fromY = -1; break; case DP_Queen: DropMenuEvent(WhiteQueen, fromX, fromY); fromX = fromY = -1; break; case IDM_English: barbaric = 0; appData.language = ""; TranslateMenus(0); CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED); CheckMenuItem(GetMenu(hwndMain), IDM_English, MF_BYCOMMAND|MF_CHECKED); lastChecked = wmId; break; default: if(wmId >= IDM_RecentEngines && wmId < IDM_RecentEngines + appData.recentEngines) RecentEngineEvent(wmId - IDM_RecentEngines); else if(wmId > IDM_English && wmId < IDM_English+20) { LoadLanguageFile(languageFile[wmId - IDM_English - 1]); TranslateMenus(0); CheckMenuItem(GetMenu(hwndMain), lastChecked, MF_BYCOMMAND|MF_UNCHECKED); CheckMenuItem(GetMenu(hwndMain), wmId, MF_BYCOMMAND|MF_CHECKED); lastChecked = wmId; break; } return (DefWindowProc(hwnd, message, wParam, lParam)); } break; case WM_TIMER: switch (wParam) { case CLOCK_TIMER_ID: KillTimer(hwnd, clockTimerEvent); /* Simulate one-shot timer as in X */ clockTimerEvent = 0; DecrementClocks(); /* call into back end */ break; case LOAD_GAME_TIMER_ID: KillTimer(hwnd, loadGameTimerEvent); /* Simulate one-shot timer as in X*/ loadGameTimerEvent = 0; AutoPlayGameLoop(); /* call into back end */ break; case ANALYSIS_TIMER_ID: if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile || appData.icsEngineAnalyze) && appData.periodicUpdates) { AnalysisPeriodicEvent(0); } else { KillTimer(hwnd, analysisTimerEvent); analysisTimerEvent = 0; } break; case DELAYED_TIMER_ID: KillTimer(hwnd, delayedTimerEvent); delayedTimerEvent = 0; delayedTimerCallback(); break; } break; case WM_USER_Input: InputEvent(hwnd, message, wParam, lParam); break; /* [AS] Also move "attached" child windows */ case WM_WINDOWPOSCHANGING: if( hwnd == hwndMain && appData.useStickyWindows ) { LPWINDOWPOS lpwp = (LPWINDOWPOS) lParam; if( ((lpwp->flags & SWP_NOMOVE) == 0) /*&& ((lpwp->flags & SWP_NOSIZE) != 0)*/ ) { // [HGM] in Win8 size always accompanies move? /* Window is moving */ RECT rcMain; // GetWindowRect( hwnd, &rcMain ); //[HGM] sticky: in XP this returned new position, not old rcMain.left = wpMain.x; // replace by these 4 lines to reconstruct old rect rcMain.right = wpMain.x + wpMain.width; rcMain.top = wpMain.y; rcMain.bottom = wpMain.y + wpMain.height; ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, moveHistoryDialog, &wpMoveHistory ); ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, evalGraphDialog, &wpEvalGraph ); ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, engineOutputDialog, &wpEngineOutput ); ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, gameListDialog, &wpGameList ); ReattachAfterMove( &rcMain, lpwp->x, lpwp->y, hwndConsole, &wpConsole ); wpMain.x = lpwp->x; wpMain.y = lpwp->y; } } break; /* [AS] Snapping */ case WM_ENTERSIZEMOVE: if(appData.debugMode) { fprintf(debugFP, "size-move\n"); } if (hwnd == hwndMain) { doingSizing = TRUE; lastSizing = 0; } return OnEnterSizeMove( &sd, hwnd, wParam, lParam ); break; case WM_SIZING: if(appData.debugMode) { fprintf(debugFP, "sizing\n"); } if (hwnd == hwndMain) { lastSizing = wParam; } break; case WM_MOVING: if(appData.debugMode) { fprintf(debugFP, "moving\n"); } return OnMoving( &sd, hwnd, wParam, lParam ); case WM_EXITSIZEMOVE: if(appData.debugMode) { fprintf(debugFP, "exit size-move, size = %d\n", squareSize); } if (hwnd == hwndMain) { RECT client; doingSizing = FALSE; InvalidateRect(hwnd, &boardRect, FALSE); GetClientRect(hwnd, &client); ResizeBoard(client.right, client.bottom, lastSizing); lastSizing = 0; if(appData.debugMode) { fprintf(debugFP, "square size = %d\n", squareSize); } } return OnExitSizeMove( &sd, hwnd, wParam, lParam ); break; case WM_DESTROY: /* message: window being destroyed */ PostQuitMessage(0); break; case WM_CLOSE: if (hwnd == hwndMain) { ExitEvent(0); } break; default: /* Passes it on if unprocessed */ return (DefWindowProc(hwnd, message, wParam, lParam)); } return 0; } /*---------------------------------------------------------------------------*\ * * Misc utility routines * \*---------------------------------------------------------------------------*/ /* * Decent random number generator, at least not as bad as Windows * standard rand, which returns a value in the range 0 to 0x7fff. */ unsigned int randstate; int myrandom(void) { randstate = randstate * 1664525 + 1013904223; return (int) randstate & 0x7fffffff; } void mysrandom(unsigned int seed) { randstate = seed; } /* * returns TRUE if user selects a different color, FALSE otherwise */ BOOL ChangeColor(HWND hwnd, COLORREF *which) { static BOOL firstTime = TRUE; static DWORD customColors[16]; CHOOSECOLOR cc; COLORREF newcolor; int i; ColorClass ccl; if (firstTime) { /* Make initial colors in use available as custom colors */ /* Should we put the compiled-in defaults here instead? */ i = 0; customColors[i++] = lightSquareColor & 0xffffff; customColors[i++] = darkSquareColor & 0xffffff; customColors[i++] = whitePieceColor & 0xffffff; customColors[i++] = blackPieceColor & 0xffffff; customColors[i++] = highlightSquareColor & 0xffffff; customColors[i++] = premoveHighlightColor & 0xffffff; for (ccl = (ColorClass) 0; ccl < NColorClasses && i < 16; ccl++) { customColors[i++] = textAttribs[ccl].color; } while (i < 16) customColors[i++] = RGB(255, 255, 255); firstTime = FALSE; } cc.lStructSize = sizeof(cc); cc.hwndOwner = hwnd; cc.hInstance = NULL; cc.rgbResult = (DWORD) (*which & 0xffffff); cc.lpCustColors = (LPDWORD) customColors; cc.Flags = CC_RGBINIT|CC_FULLOPEN; if (!ChooseColor(&cc)) return FALSE; newcolor = (COLORREF) (0x2000000 | cc.rgbResult); if (newcolor == *which) return FALSE; *which = newcolor; return TRUE; /* InitDrawingColors(); InvalidateRect(hwnd, &boardRect, FALSE); */ } BOOLEAN MyLoadSound(MySound *ms) { BOOL ok = FALSE; struct stat st; FILE *f; if (ms->data && ms->flag) free(ms->data); ms->data = NULL; switch (ms->name[0]) { case NULLCHAR: /* Silence */ ok = TRUE; break; case '$': /* System sound from Control Panel. Don't preload here. */ ok = TRUE; break; case '!': if (ms->name[1] == NULLCHAR) { /* "!" alone = silence */ ok = TRUE; } else { /* Builtin wave resource. Error if not found. */ HANDLE h = FindResource(hInst, ms->name + 1, "WAVE"); if (h == NULL) break; ms->data = (void *)LoadResource(hInst, h); ms->flag = 0; // not maloced, so cannot be freed! if (h == NULL) break; ok = TRUE; } break; default: /* .wav file. Error if not found. */ f = fopen(ms->name, "rb"); if (f == NULL) break; if (fstat(fileno(f), &st) < 0) break; ms->data = malloc(st.st_size); ms->flag = 1; if (fread(ms->data, st.st_size, 1, f) < 1) break; fclose(f); ok = TRUE; break; } if (!ok) { char buf[MSG_SIZ]; snprintf(buf, MSG_SIZ, _("Error loading sound %s"), ms->name); DisplayError(buf, GetLastError()); } return ok; } BOOLEAN MyPlaySound(MySound *ms) { BOOLEAN ok = FALSE; if(mute) return TRUE; // [HGM] mute: suppress all sound play when muted switch (ms->name[0]) { case NULLCHAR: if(appData.debugMode) fprintf(debugFP, "silence\n"); /* Silence */ ok = TRUE; break; case '$': /* System sound from Control Panel (deprecated feature). "$" alone or an unset sound name gets default beep (still in use). */ if (ms->name[1]) { ok = PlaySound(ms->name + 1, NULL, SND_ALIAS|SND_ASYNC); } if (!ok) ok = MessageBeep(MB_OK); break; case '!': /* Builtin wave resource, or "!" alone for silence */ if (ms->name[1]) { if (ms->data == NULL) return FALSE; ok = PlaySound(ms->data, NULL, SND_MEMORY|SND_ASYNC); } else { ok = TRUE; } break; default: /* .wav file. Error if not found. */ if (ms->data == NULL) return FALSE; ok = PlaySound(ms->data, NULL, SND_MEMORY|SND_ASYNC); break; } /* Don't print an error: this can happen innocently if the sound driver is busy; for instance, if another instance of WinBoard is playing a sound at about the same time. */ return ok; } LRESULT CALLBACK OldOpenFileHook(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL ok; OPENFILENAME *ofn; static UINT *number; /* gross that this is static */ switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ ofn = (OPENFILENAME *) lParam; if (ofn->Flags & OFN_ENABLETEMPLATE) { number = (UINT *) ofn->lCustData; SendMessage(GetDlgItem(hDlg, edt2), WM_SETTEXT, 0, (LPARAM) ""); } else { number = NULL; } CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); Translate(hDlg, 1536); return FALSE; /* Allow for further processing */ case WM_COMMAND: if ((LOWORD(wParam) == IDOK) && (number != NULL)) { *number = GetDlgItemInt(hDlg, OPT_IndexNumberOld, &ok, FALSE); } return FALSE; /* Allow for further processing */ } return FALSE; } UINT APIENTRY OpenFileHook(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam) { static UINT *number; OPENFILENAME *ofname; OFNOTIFY *ofnot; switch (uiMsg) { case WM_INITDIALOG: Translate(hdlg, DLG_IndexNumber); ofname = (OPENFILENAME *)lParam; number = (UINT *)(ofname->lCustData); break; case WM_NOTIFY: ofnot = (OFNOTIFY *)lParam; if (ofnot->hdr.code == CDN_FILEOK) { *number = GetDlgItemInt(hdlg, OPT_IndexNumber, NULL, FALSE); } break; } return 0; } FILE * OpenFileDialog(HWND hwnd, char *write, char *defName, char *defExt, // [HGM] diag: type of 'write' now string char *nameFilt, char *dlgTitle, UINT *number, char fileTitle[MSG_SIZ], char fileName[MSG_SIZ]) { OPENFILENAME openFileName; char buf1[MSG_SIZ]; FILE *f; if (fileName == NULL) fileName = buf1; if (defName == NULL) { safeStrCpy(fileName, "*.", 3 ); strcat(fileName, defExt); } else { safeStrCpy(fileName, defName, MSG_SIZ ); } if (fileTitle) safeStrCpy(fileTitle, "", MSG_SIZ ); if (number) *number = 0; openFileName.lStructSize = sizeof(OPENFILENAME); openFileName.hwndOwner = hwnd; openFileName.hInstance = (HANDLE) hInst; openFileName.lpstrFilter = nameFilt; openFileName.lpstrCustomFilter = (LPSTR) NULL; openFileName.nMaxCustFilter = 0L; openFileName.nFilterIndex = 1L; openFileName.lpstrFile = fileName; openFileName.nMaxFile = MSG_SIZ; openFileName.lpstrFileTitle = fileTitle; openFileName.nMaxFileTitle = fileTitle ? MSG_SIZ : 0; openFileName.lpstrInitialDir = NULL; openFileName.lpstrTitle = dlgTitle; openFileName.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | (write[0] != 'r' ? 0 : OFN_FILEMUSTEXIST) | (number ? OFN_ENABLETEMPLATE | OFN_ENABLEHOOK: 0) | (oldDialog ? 0 : OFN_EXPLORER); openFileName.nFileOffset = 0; openFileName.nFileExtension = 0; openFileName.lpstrDefExt = defExt; openFileName.lCustData = (LONG) number; openFileName.lpfnHook = oldDialog ? (LPOFNHOOKPROC) OldOpenFileHook : (LPOFNHOOKPROC) OpenFileHook; openFileName.lpTemplateName = (LPSTR)(oldDialog ? 1536 : DLG_IndexNumber); if (write[0] != 'r' ? GetSaveFileName(&openFileName) : GetOpenFileName(&openFileName)) { /* open the file */ f = fopen(openFileName.lpstrFile, write); if (f == NULL) { MessageBox(hwnd, _("File open failed"), NULL, MB_OK|MB_ICONEXCLAMATION); return NULL; } } else { int err = CommDlgExtendedError(); if (err != 0) DisplayError(_("Internal error in file dialog box"), err); return FALSE; } return f; } VOID APIENTRY MenuPopup(HWND hwnd, POINT pt, HMENU hmenu, UINT def) { HMENU hmenuTrackPopup; /* floating pop-up menu */ /* * Get the first pop-up menu in the menu template. This is the * menu that TrackPopupMenu displays. */ hmenuTrackPopup = GetSubMenu(hmenu, 0); TranslateOneMenu(10, hmenuTrackPopup); SetMenuDefaultItem(hmenuTrackPopup, def, FALSE); /* * TrackPopup uses screen coordinates, so convert the * coordinates of the mouse click to screen coordinates. */ ClientToScreen(hwnd, (LPPOINT) &pt); /* Draw and track the floating pop-up menu. */ TrackPopupMenu(hmenuTrackPopup, TPM_CENTERALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL); /* Destroy the menu.*/ DestroyMenu(hmenu); } typedef struct { HWND hDlg, hText; int sizeX, sizeY, newSizeX, newSizeY; HDWP hdwp; } ResizeEditPlusButtonsClosure; BOOL CALLBACK ResizeEditPlusButtonsCallback(HWND hChild, LPARAM lparam) { ResizeEditPlusButtonsClosure *cl = (ResizeEditPlusButtonsClosure *)lparam; RECT rect; POINT pt; if (hChild == cl->hText) return TRUE; GetWindowRect(hChild, &rect); /* gives screen coords */ pt.x = rect.left + (cl->newSizeX - cl->sizeX)/2; pt.y = rect.top + cl->newSizeY - cl->sizeY; ScreenToClient(cl->hDlg, &pt); cl->hdwp = DeferWindowPos(cl->hdwp, hChild, NULL, pt.x, pt.y, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); return TRUE; } /* Resize a dialog that has a (rich) edit field filling most of the top, with a row of buttons below */ VOID ResizeEditPlusButtons(HWND hDlg, HWND hText, int sizeX, int sizeY, int newSizeX, int newSizeY) { RECT rectText; int newTextHeight, newTextWidth; ResizeEditPlusButtonsClosure cl; /*if (IsIconic(hDlg)) return;*/ if (newSizeX == sizeX && newSizeY == sizeY) return; cl.hdwp = BeginDeferWindowPos(8); GetWindowRect(hText, &rectText); /* gives screen coords */ newTextWidth = rectText.right - rectText.left + newSizeX - sizeX; newTextHeight = rectText.bottom - rectText.top + newSizeY - sizeY; if (newTextHeight < 0) { newSizeY += -newTextHeight; newTextHeight = 0; } cl.hdwp = DeferWindowPos(cl.hdwp, hText, NULL, 0, 0, newTextWidth, newTextHeight, SWP_NOZORDER|SWP_NOMOVE); cl.hDlg = hDlg; cl.hText = hText; cl.sizeX = sizeX; cl.sizeY = sizeY; cl.newSizeX = newSizeX; cl.newSizeY = newSizeY; EnumChildWindows(hDlg, ResizeEditPlusButtonsCallback, (LPARAM)&cl); EndDeferWindowPos(cl.hdwp); } BOOL CenterWindowEx(HWND hwndChild, HWND hwndParent, int mode) { RECT rChild, rParent; int wChild, hChild, wParent, hParent; int wScreen, hScreen, xNew, yNew; HDC hdc; /* Get the Height and Width of the child window */ GetWindowRect (hwndChild, &rChild); wChild = rChild.right - rChild.left; hChild = rChild.bottom - rChild.top; /* Get the Height and Width of the parent window */ GetWindowRect (hwndParent, &rParent); wParent = rParent.right - rParent.left; hParent = rParent.bottom - rParent.top; /* Get the display limits */ hdc = GetDC (hwndChild); wScreen = GetDeviceCaps (hdc, HORZRES); hScreen = GetDeviceCaps (hdc, VERTRES); ReleaseDC(hwndChild, hdc); /* Calculate new X position, then adjust for screen */ xNew = rParent.left + ((wParent - wChild) /2); if (xNew < 0) { xNew = 0; } else if ((xNew+wChild) > wScreen) { xNew = wScreen - wChild; } /* Calculate new Y position, then adjust for screen */ if( mode == 0 ) { yNew = rParent.top + ((hParent - hChild) /2); } else { yNew = rParent.top + GetSystemMetrics( SM_CYCAPTION ) * 2 / 3; } if (yNew < 0) { yNew = 0; } else if ((yNew+hChild) > hScreen) { yNew = hScreen - hChild; } /* Set it, and return */ return SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } /* Center one window over another */ BOOL CenterWindow (HWND hwndChild, HWND hwndParent) { return CenterWindowEx( hwndChild, hwndParent, 0 ); } /*---------------------------------------------------------------------------*\ * * Startup Dialog functions * \*---------------------------------------------------------------------------*/ void InitComboStrings(HANDLE hwndCombo, char **cd) { SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0); while (*cd != NULL) { SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) T_(*cd)); cd++; } } void InitComboStringsFromOption(HANDLE hwndCombo, char *str) { char buf1[MAX_ARG_LEN]; int len; if (str[0] == '@') { FILE* f = fopen(str + 1, "r"); if (f == NULL) { DisplayFatalError(str + 1, errno, 2); return; } len = fread(buf1, 1, sizeof(buf1)-1, f); fclose(f); buf1[len] = NULLCHAR; str = buf1; } SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0); for (;;) { char buf[MSG_SIZ]; char *end = strchr(str, '\n'); if (end == NULL) return; memcpy(buf, str, end - str); buf[end - str] = NULLCHAR; SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) buf); str = end + 1; } } void SetStartupDialogEnables(HWND hDlg) { EnableWindow(GetDlgItem(hDlg, OPT_ChessEngineName), IsDlgButtonChecked(hDlg, OPT_ChessEngine) || (appData.zippyPlay && IsDlgButtonChecked(hDlg, OPT_ChessServer))); EnableWindow(GetDlgItem(hDlg, OPT_SecondChessEngineName), IsDlgButtonChecked(hDlg, OPT_ChessEngine)); EnableWindow(GetDlgItem(hDlg, OPT_ChessServerName), IsDlgButtonChecked(hDlg, OPT_ChessServer)); EnableWindow(GetDlgItem(hDlg, OPT_AdditionalOptions), IsDlgButtonChecked(hDlg, OPT_AnyAdditional)); EnableWindow(GetDlgItem(hDlg, IDOK), IsDlgButtonChecked(hDlg, OPT_ChessEngine) || IsDlgButtonChecked(hDlg, OPT_ChessServer) || IsDlgButtonChecked(hDlg, OPT_View)); } char * QuoteForFilename(char *filename) { int dquote, space; dquote = strchr(filename, '"') != NULL; space = strchr(filename, ' ') != NULL; if (dquote || space) { if (dquote) { return "'"; } else { return "\""; } } else { return ""; } } VOID InitEngineBox(HWND hDlg, HWND hwndCombo, char* nthcp, char* nthd, char* nthdir, char *nthnames) { char buf[MSG_SIZ]; char *q; InitComboStringsFromOption(hwndCombo, nthnames); q = QuoteForFilename(nthcp); snprintf(buf, MSG_SIZ, "%s%s%s", q, nthcp, q); if (*nthdir != NULLCHAR) { q = QuoteForFilename(nthdir); snprintf(buf + strlen(buf), MSG_SIZ, " /%s=%s%s%s", nthd, q, nthdir, q); } if (*nthcp == NULLCHAR) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) 0, (LPARAM) 0); } else if (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) buf) == CB_ERR) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf); } } LRESULT CALLBACK StartupDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; HANDLE hwndCombo; char *p; switch (message) { case WM_INITDIALOG: /* Center the dialog */ CenterWindow (hDlg, GetDesktopWindow()); Translate(hDlg, DLG_Startup); /* Initialize the dialog items */ InitEngineBox(hDlg, GetDlgItem(hDlg, OPT_ChessEngineName), appData.firstChessProgram, "fd", appData.firstDirectory, firstChessProgramNames); InitEngineBox(hDlg, GetDlgItem(hDlg, OPT_SecondChessEngineName), appData.secondChessProgram, singleList ? "fd" : "sd", appData.secondDirectory, singleList ? firstChessProgramNames : secondChessProgramNames); //[HGM] single: use first list in second combo hwndCombo = GetDlgItem(hDlg, OPT_ChessServerName); InitComboStringsFromOption(hwndCombo, icsNames); snprintf(buf, MSG_SIZ, "%s /icsport=%s", appData.icsHost, appData.icsPort); if (*appData.icsHelper != NULLCHAR) { char *q = QuoteForFilename(appData.icsHelper); sprintf(buf + strlen(buf), " /icshelper=%s%s%s", q, appData.icsHelper, q); } if (*appData.icsHost == NULLCHAR) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) 0, (LPARAM) 0); /*SendMessage(hwndCombo, CB_SHOWDROPDOWN, (WPARAM) TRUE, (LPARAM) 0); !!too soon */ } else if (SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) buf) == CB_ERR) { SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); SendMessage(hwndCombo, WM_SETTEXT, (WPARAM) 0, (LPARAM) buf); } if (appData.icsActive) { CheckDlgButton(hDlg, OPT_ChessServer, BST_CHECKED); } else if (appData.noChessProgram) { CheckDlgButton(hDlg, OPT_View, BST_CHECKED); } else { CheckDlgButton(hDlg, OPT_ChessEngine, BST_CHECKED); } SetStartupDialogEnables(hDlg); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: if (IsDlgButtonChecked(hDlg, OPT_ChessEngine)) { safeStrCpy(buf, "/fcp=", sizeof(buf)/sizeof(buf[0]) ); GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf)); p = buf; comboLine = strdup(p+5); // [HGM] recent: remember complete line of first combobox ParseArgs(StringGet, &p); safeStrCpy(buf, singleList ? "/fcp=" : "/scp=", sizeof(buf)/sizeof(buf[0]) ); GetDlgItemText(hDlg, OPT_SecondChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf)); p = buf; SwapEngines(singleList); // temporarily swap first and second, to load a second 'first', ... ParseArgs(StringGet, &p); SwapEngines(singleList); // ... and then make it 'second' appData.noChessProgram = FALSE; appData.icsActive = FALSE; } else if (IsDlgButtonChecked(hDlg, OPT_ChessServer)) { safeStrCpy(buf, "/ics /icshost=", sizeof(buf)/sizeof(buf[0]) ); GetDlgItemText(hDlg, OPT_ChessServerName, buf + strlen(buf), sizeof(buf) - strlen(buf)); p = buf; ParseArgs(StringGet, &p); if (appData.zippyPlay) { safeStrCpy(buf, "/fcp=", sizeof(buf)/sizeof(buf[0]) ); GetDlgItemText(hDlg, OPT_ChessEngineName, buf + strlen(buf), sizeof(buf) - strlen(buf)); p = buf; ParseArgs(StringGet, &p); } } else if (IsDlgButtonChecked(hDlg, OPT_View)) { appData.noChessProgram = TRUE; appData.icsActive = FALSE; } else { MessageBox(hDlg, _("Choose an option, or cancel to exit"), _("Option Error"), MB_OK|MB_ICONEXCLAMATION); return TRUE; } if (IsDlgButtonChecked(hDlg, OPT_AnyAdditional)) { GetDlgItemText(hDlg, OPT_AdditionalOptions, buf, sizeof(buf)); p = buf; ParseArgs(StringGet, &p); } EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: ExitEvent(0); return TRUE; case IDM_HELPCONTENTS: if (!WinHelp (hDlg, "winboard.hlp", HELP_KEY,(DWORD)(LPSTR)"CONTENTS")) { MessageBox (GetFocus(), _("Unable to activate help"), szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND); } break; default: SetStartupDialogEnables(hDlg); break; } break; } return FALSE; } /*---------------------------------------------------------------------------*\ * * About box dialog functions * \*---------------------------------------------------------------------------*/ /* Process messages for "About" dialog box */ LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Center the dialog over the application window */ CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER)); SetDlgItemText(hDlg, ABOUTBOX_Version, programVersion); Translate(hDlg, ABOUTBOX); JAWS_COPYRIGHT return (TRUE); case WM_COMMAND: /* message: received a command */ if (LOWORD(wParam) == IDOK /* "OK" box selected? */ || LOWORD(wParam) == IDCANCEL) { /* System menu close command? */ EndDialog(hDlg, TRUE); /* Exit the dialog */ return (TRUE); } break; } return (FALSE); } /*---------------------------------------------------------------------------*\ * * Comment Dialog functions * \*---------------------------------------------------------------------------*/ LRESULT CALLBACK CommentDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static HANDLE hwndText = NULL; int len, newSizeX, newSizeY; static int sizeX, sizeY; char *str; RECT rect; MINMAXINFO *mmi; switch (message) { case WM_INITDIALOG: /* message: initialize dialog box */ /* Initialize the dialog items */ Translate(hDlg, DLG_EditComment); hwndText = GetDlgItem(hDlg, OPT_CommentText); SetDlgItemText(hDlg, OPT_CommentText, commentText); EnableWindow(GetDlgItem(hDlg, OPT_CancelComment), editComment); EnableWindow(GetDlgItem(hDlg, OPT_ClearComment), editComment); EnableWindow(GetDlgItem(hDlg, OPT_EditComment), !editComment); SendMessage(hwndText, EM_SETREADONLY, !editComment, 0); SetWindowText(hDlg, commentTitle); if (editComment) { SetFocus(hwndText); } else { SetFocus(GetDlgItem(hDlg, IDOK)); } SendMessage(GetDlgItem(hDlg, OPT_CommentText), WM_SETFONT, (WPARAM)font[boardSize][COMMENT_FONT]->hf, MAKELPARAM(FALSE, 0)); /* Size and position the dialog */ if (!commentDialog) { commentDialog = hDlg; GetClientRect(hDlg, &rect); sizeX = rect.right; sizeY = rect.bottom; if (wpComment.x != CW_USEDEFAULT && wpComment.y != CW_USEDEFAULT && wpComment.width != CW_USEDEFAULT && wpComment.height != CW_USEDEFAULT) { WINDOWPLACEMENT wp; EnsureOnScreen(&wpComment.x, &wpComment.y, 0, 0); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = SW_SHOW; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpComment.x; wp.rcNormalPosition.right = wpComment.x + wpComment.width; wp.rcNormalPosition.top = wpComment.y; wp.rcNormalPosition.bottom = wpComment.y + wpComment.height; SetWindowPlacement(hDlg, &wp); GetClientRect(hDlg, &rect); newSizeX = rect.right; newSizeY = rect.bottom; ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; } } SendDlgItemMessage( hDlg, OPT_CommentText, EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_KEYEVENTS ); return FALSE; case WM_COMMAND: /* message: received a command */ switch (LOWORD(wParam)) { case IDOK: if (editComment) { char *p, *q; /* Read changed options from the dialog box */ hwndText = GetDlgItem(hDlg, OPT_CommentText); len = GetWindowTextLength(hwndText); str = (char *) malloc(len + 1); GetWindowText(hwndText, str, len + 1); p = q = str; while (*q) { if (*q == '\r') q++; else *p++ = *q++; } *p = NULLCHAR; ReplaceComment(commentIndex, str); free(str); } CommentPopDown(); return TRUE; case IDCANCEL: case OPT_CancelComment: CommentPopDown(); return TRUE; case OPT_ClearComment: SetDlgItemText(hDlg, OPT_CommentText, ""); break; case OPT_EditComment: EditCommentEvent(); return TRUE; default: break; } break; case WM_NOTIFY: // [HGM] vari: cloned from whistory.c if( wParam == OPT_CommentText ) { MSGFILTER * lpMF = (MSGFILTER *) lParam; if( lpMF->msg == WM_RBUTTONDOWN && (lpMF->wParam & (MK_CONTROL | MK_SHIFT)) == 0 || lpMF->msg == WM_CHAR && lpMF->wParam == '\022' ) { POINTL pt; LRESULT index; pt.x = LOWORD( lpMF->lParam ); pt.y = HIWORD( lpMF->lParam ); if(lpMF->msg == WM_CHAR) { CHARRANGE sel; SendDlgItemMessage( hDlg, OPT_CommentText, EM_EXGETSEL, 0, (LPARAM) &sel ); index = sel.cpMin; } else index = SendDlgItemMessage( hDlg, OPT_CommentText, EM_CHARFROMPOS, 0, (LPARAM) &pt ); hwndText = GetDlgItem(hDlg, OPT_CommentText); // cloned from above len = GetWindowTextLength(hwndText); str = (char *) malloc(len + 1); GetWindowText(hwndText, str, len + 1); ReplaceComment(commentIndex, str); if(commentIndex != currentMove) ToNrEvent(commentIndex); LoadVariation( index, str ); // [HGM] also does the actual moving to it, now free(str); /* Zap the message for good: apparently, returning non-zero is not enough */ lpMF->msg = WM_USER; return TRUE; } } break; case WM_SIZE: newSizeX = LOWORD(lParam); newSizeY = HIWORD(lParam); ResizeEditPlusButtons(hDlg, hwndText, sizeX, sizeY, newSizeX, newSizeY); sizeX = newSizeX; sizeY = newSizeY; break; case WM_GETMINMAXINFO: /* Prevent resizing window too small */ mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; break; } return FALSE; } VOID EitherCommentPopUp(int index, char *title, char *str, BOOLEAN edit) { FARPROC lpProc; char *p, *q; CheckMenuItem(GetMenu(hwndMain), IDM_Comment, edit ? MF_CHECKED : MF_UNCHECKED); if (str == NULL) str = ""; p = (char *) malloc(2 * strlen(str) + 2); q = p; while (*str) { if (*str == '\n') *q++ = '\r'; *q++ = *str++; } *q = NULLCHAR; if (commentText != NULL) free(commentText); commentIndex = index; commentTitle = title; commentText = p; editComment = edit; if (commentDialog) { SendMessage(commentDialog, WM_INITDIALOG, 0, 0); if (!commentUp) ShowWindow(commentDialog, SW_SHOW); } else { lpProc = MakeProcInstance((FARPROC)CommentDialog, hInst); CreateDialog(hInst, MAKEINTRESOURCE(DLG_EditComment), hwndMain, (DLGPROC)lpProc); FreeProcInstance(lpProc); } commentUp = TRUE; } /*---------------------------------------------------------------------------*\ * * Type-in move dialog functions * \*---------------------------------------------------------------------------*/ LRESULT CALLBACK TypeInMoveDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char move[MSG_SIZ]; HWND hInput; switch (message) { case WM_INITDIALOG: move[0] = (char) lParam; move[1] = NULLCHAR; CenterWindowEx(hDlg, GetWindow(hDlg, GW_OWNER), 1 ); Translate(hDlg, DLG_TypeInMove); hInput = GetDlgItem(hDlg, OPT_Move); SetWindowText(hInput, move); SetFocus(hInput); SendMessage(hInput, EM_SETSEL, (WPARAM)9999, (LPARAM)9999); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: shiftKey = GetKeyState(VK_SHIFT) < 0; // [HGM] remember last shift status GetDlgItemText(hDlg, OPT_Move, move, sizeof(move)); TypeInDoneEvent(move); EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; } return FALSE; } VOID PopUpMoveDialog(char firstchar) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)TypeInMoveDialog, hInst); DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInMove), hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Type-in name dialog functions * \*---------------------------------------------------------------------------*/ LRESULT CALLBACK TypeInNameDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { char move[MSG_SIZ]; HWND hInput; switch (message) { case WM_INITDIALOG: move[0] = (char) lParam; move[1] = NULLCHAR; CenterWindowEx(hDlg, GetWindow(hDlg, GW_OWNER), 1 ); Translate(hDlg, DLG_TypeInName); hInput = GetDlgItem(hDlg, OPT_Name); SetWindowText(hInput, move); SetFocus(hInput); SendMessage(hInput, EM_SETSEL, (WPARAM)9999, (LPARAM)9999); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: GetDlgItemText(hDlg, OPT_Name, move, sizeof(move)); appData.userName = strdup(move); SetUserLogo(); SetGameInfo(); if(gameMode == MachinePlaysWhite || gameMode == MachinePlaysBlack) { snprintf(move, MSG_SIZ, "%s vs. %s", gameInfo.white, gameInfo.black); DisplayTitle(move); } EndDialog(hDlg, TRUE); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; } return FALSE; } VOID PopUpNameDialog(char firstchar) { FARPROC lpProc; lpProc = MakeProcInstance((FARPROC)TypeInNameDialog, hInst); DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_TypeInName), hwndMain, (DLGPROC)lpProc, (LPARAM)firstchar); FreeProcInstance(lpProc); } /*---------------------------------------------------------------------------*\ * * Error dialogs * \*---------------------------------------------------------------------------*/ /* Nonmodal error box */ LRESULT CALLBACK ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); VOID ErrorPopUp(char *title, char *content) { FARPROC lpProc; char *p, *q; BOOLEAN modal = hwndMain == NULL; p = content; q = errorMessage; while (*p) { if (*p == '\n') { if (modal) { *q++ = ' '; p++; } else { *q++ = '\r'; *q++ = *p++; } } else { *q++ = *p++; } } *q = NULLCHAR; strncpy(errorTitle, title, sizeof(errorTitle)); errorTitle[sizeof(errorTitle) - 1] = '\0'; if (modal) { MessageBox(NULL, errorMessage, errorTitle, MB_OK|MB_ICONEXCLAMATION); } else { lpProc = MakeProcInstance((FARPROC)ErrorDialog, hInst); CreateDialog(hInst, MAKEINTRESOURCE(DLG_Error), hwndMain, (DLGPROC)lpProc); FreeProcInstance(lpProc); } } VOID ErrorPopDown() { if (!appData.popupMoveErrors && moveErrorMessageUp) DisplayMessage("", ""); if (errorDialog == NULL) return; DestroyWindow(errorDialog); errorDialog = NULL; if(errorExitStatus) ExitEvent(errorExitStatus); } LRESULT CALLBACK ErrorDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { RECT rChild; switch (message) { case WM_INITDIALOG: GetWindowRect(hDlg, &rChild); /* SetWindowPos(hDlg, NULL, rChild.left, rChild.top + boardRect.top - (rChild.bottom - rChild.top), 0, 0, SWP_NOZORDER|SWP_NOSIZE); */ /* [AS] It seems that the above code wants to move the dialog up in the "caption area" of the main window, but it uses the dialog height as an hard-coded constant, and it doesn't work when you resize the dialog. For now, just give it a default position. */ SetWindowPos(hDlg, NULL, boardRect.left+8, boardRect.top+8, 0, 0, SWP_NOZORDER|SWP_NOSIZE); Translate(hDlg, DLG_Error); errorDialog = hDlg; SetWindowText(hDlg, errorTitle); SetDlgItemText(hDlg, OPT_ErrorText, errorMessage); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: if (errorDialog == hDlg) errorDialog = NULL; DestroyWindow(hDlg); return TRUE; default: break; } break; } return FALSE; } #ifdef GOTHIC HWND gothicDialog = NULL; LRESULT CALLBACK GothicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { RECT rChild; int height = GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME); switch (message) { case WM_INITDIALOG: GetWindowRect(hDlg, &rChild); SetWindowPos(hDlg, NULL, wpMain.x, wpMain.y-height, wpMain.width, height, SWP_NOZORDER); /* [AS] It seems that the above code wants to move the dialog up in the "caption area" of the main window, but it uses the dialog height as an hard-coded constant, and it doesn't work when you resize the dialog. For now, just give it a default position. */ gothicDialog = hDlg; SetWindowText(hDlg, errorTitle); SetDlgItemText(hDlg, OPT_ErrorText, errorMessage); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: if (errorDialog == hDlg) errorDialog = NULL; DestroyWindow(hDlg); return TRUE; default: break; } break; } return FALSE; } VOID GothicPopUp(char *title, VariantClass variant) { FARPROC lpProc; static char *lastTitle; strncpy(errorTitle, title, sizeof(errorTitle)); errorTitle[sizeof(errorTitle) - 1] = '\0'; if(lastTitle != title && gothicDialog != NULL) { DestroyWindow(gothicDialog); gothicDialog = NULL; } if(variant != VariantNormal && gothicDialog == NULL) { title = lastTitle; lpProc = MakeProcInstance((FARPROC)GothicDialog, hInst); CreateDialog(hInst, MAKEINTRESOURCE(DLG_Error), hwndMain, (DLGPROC)lpProc); FreeProcInstance(lpProc); } } #endif /*---------------------------------------------------------------------------*\ * * Ics Interaction console functions * \*---------------------------------------------------------------------------*/ #define HISTORY_SIZE 64 static char *history[HISTORY_SIZE]; int histIn = 0, histP = 0; VOID SaveInHistory(char *cmd) { if (history[histIn] != NULL) { free(history[histIn]); history[histIn] = NULL; } if (*cmd == NULLCHAR) return; history[histIn] = StrSave(cmd); histIn = (histIn + 1) % HISTORY_SIZE; if (history[histIn] != NULL) { free(history[histIn]); history[histIn] = NULL; } histP = histIn; } char * PrevInHistory(char *cmd) { int newhp; if (histP == histIn) { if (history[histIn] != NULL) free(history[histIn]); history[histIn] = StrSave(cmd); } newhp = (histP - 1 + HISTORY_SIZE) % HISTORY_SIZE; if (newhp == histIn || history[newhp] == NULL) return NULL; histP = newhp; return history[histP]; } char * NextInHistory() { if (histP == histIn) return NULL; histP = (histP + 1) % HISTORY_SIZE; return history[histP]; } HMENU LoadIcsTextMenu(IcsTextMenuEntry *e) { HMENU hmenu, h; int i = 0; hmenu = LoadMenu(hInst, "TextMenu"); h = GetSubMenu(hmenu, 0); while (e->item) { if (strcmp(e->item, "-") == 0) { AppendMenu(h, MF_SEPARATOR, 0, 0); } else { // [HGM] re-written a bit to use only one AppendMenu call for both cases (| or no |) int flags = MF_STRING, j = 0; if (e->item[0] == '|') { flags |= MF_MENUBARBREAK; j++; } if(!strcmp(e->command, "none")) flags |= MF_GRAYED; // [HGM] chatclick: provide inactive dummy AppendMenu(h, flags, IDM_CommandX + i, e->item + j); } e++; i++; } return hmenu; } WNDPROC consoleTextWindowProc; void CommandX(HWND hwnd, char *command, BOOLEAN getname, BOOLEAN immediate) { char buf[MSG_SIZ], name[MSG_SIZ]; HWND hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); CHARRANGE sel; if (!getname) { SetWindowText(hInput, command); if (immediate) { SendMessage(hInput, WM_CHAR, '\r', 0); } else { sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hInput, EM_EXSETSEL, 0, (LPARAM)&sel); SetFocus(hInput); } return; } SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel); if (sel.cpMin == sel.cpMax) { /* Expand to surrounding word */ TEXTRANGE tr; do { tr.chrg.cpMax = sel.cpMin; tr.chrg.cpMin = --sel.cpMin; if (sel.cpMin < 0) break; tr.lpstrText = name; SendMessage(hwnd, EM_GETTEXTRANGE, 0, (LPARAM) &tr); } while (isalpha(name[0]) || isdigit(name[0]) || name[0] == '-'); sel.cpMin++; do { tr.chrg.cpMin = sel.cpMax; tr.chrg.cpMax = ++sel.cpMax; tr.lpstrText = name; if (SendMessage(hwnd, EM_GETTEXTRANGE, 0, (LPARAM) &tr) < 1) break; } while (isalpha(name[0]) || isdigit(name[0]) || name[0] == '-'); sel.cpMax--; if (sel.cpMax == sel.cpMin || sel.cpMax - sel.cpMin > MSG_SIZ/2) { MessageBeep(MB_ICONEXCLAMATION); return; } tr.chrg = sel; tr.lpstrText = name; SendMessage(hwnd, EM_GETTEXTRANGE, 0, (LPARAM) &tr); } else { if (sel.cpMax - sel.cpMin > MSG_SIZ/2) { MessageBeep(MB_ICONEXCLAMATION); return; } SendMessage(hwnd, EM_GETSELTEXT, 0, (LPARAM) name); } if (immediate) { if(strstr(command, "%s")) snprintf(buf, MSG_SIZ, command, name); else snprintf(buf, MSG_SIZ, "%s %s", command, name); SetWindowText(hInput, buf); SendMessage(hInput, WM_CHAR, '\r', 0); } else { if(!strcmp(command, "chat")) { ChatPopUp(name); return; } snprintf(buf, MSG_SIZ, "%s %s ", command, name); /* trailing space */ SetWindowText(hInput, buf); sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hInput, EM_EXSETSEL, 0, (LPARAM)&sel); SetFocus(hInput); } } LRESULT CALLBACK ConsoleTextSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND hInput; CHARRANGE sel; switch (message) { case WM_KEYDOWN: if (!(GetKeyState(VK_CONTROL) & ~1)) break; if(wParam=='R') return 0; switch (wParam) { case VK_PRIOR: SendMessage(hwnd, EM_LINESCROLL, 0, -999999); return 0; case VK_NEXT: sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); SendMessage(hwnd, EM_SCROLLCARET, 0, 0); return 0; } break; case WM_CHAR: if(wParam != '\022') { if (wParam == '\t') { if (GetKeyState(VK_SHIFT) < 0) { /* shifted */ if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE); if (buttonDesc[0].hwnd) { SetFocus(buttonDesc[0].hwnd); } else { SetFocus(hwndMain); } } else { /* unshifted */ SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleInput)); } } else { hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); JAWS_DELETE( SetFocus(hInput); ) SendMessage(hInput, message, wParam, lParam); } return 0; } // [HGM] navigate: for Ctrl+R, flow into next case (moved up here) to summon up menu lParam = -1; case WM_RBUTTONDOWN: if (!(GetKeyState(VK_SHIFT) & ~1)) { /* Move selection here if it was empty */ POINT pt; pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel); if (sel.cpMin == sel.cpMax) { if(lParam != -1) sel.cpMin = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM)&pt); /*doc is wrong*/ sel.cpMax = sel.cpMin; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); } SendMessage(hwnd, EM_HIDESELECTION, FALSE, FALSE); { // [HGM] chatclick: code moved here from WM_RBUTTONUP case, to have menu appear on down-click POINT pt; HMENU hmenu = LoadIcsTextMenu(icsTextMenuEntry); SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel); if (sel.cpMin == sel.cpMax) { EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hmenu, IDM_QuickPaste, MF_BYCOMMAND|MF_GRAYED); } if (!IsClipboardFormatAvailable(CF_TEXT)) { EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED); } pt.x = LOWORD(lParam)-30; // [HGM] chatclick: make menu pop up with pointer above upper-right item pt.y = HIWORD(lParam)-10; // make it appear as if mouse moved there, so it will be selected on up-click PostMessage(hwnd, WM_MOUSEMOVE, wParam, lParam+5); MenuPopup(hwnd, pt, hmenu, -1); } } return 0; case WM_RBUTTONUP: if (GetKeyState(VK_SHIFT) & ~1) { SendDlgItemMessage(hwndConsole, OPT_ConsoleText, WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0); } return 0; case WM_PASTE: hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); SetFocus(hInput); return SendMessage(hInput, message, wParam, lParam); case WM_MBUTTONDOWN: return SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0); case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_QuickPaste: { SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel); if (sel.cpMin == sel.cpMax) { MessageBeep(MB_ICONEXCLAMATION); return 0; } SendMessage(hwnd, WM_COPY, 0, 0); hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); SendMessage(hInput, WM_PASTE, 0, 0); SetFocus(hInput); return 0; } case IDM_Cut: SendMessage(hwnd, WM_CUT, 0, 0); return 0; case IDM_Paste: SendMessage(hwnd, WM_PASTE, 0, 0); return 0; case IDM_Copy: SendMessage(hwnd, WM_COPY, 0, 0); return 0; default: { int i = LOWORD(wParam) - IDM_CommandX; if (i >= 0 && i < ICS_TEXT_MENU_SIZE && icsTextMenuEntry[i].command != NULL) { CommandX(hwnd, icsTextMenuEntry[i].command, icsTextMenuEntry[i].getname, icsTextMenuEntry[i].immediate); return 0; } } break; } break; } return (*consoleTextWindowProc)(hwnd, message, wParam, lParam); } WNDPROC consoleInputWindowProc; LRESULT CALLBACK ConsoleInputSubclass(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { char buf[MSG_SIZ]; char *p; static BOOL sendNextChar = FALSE; static BOOL quoteNextChar = FALSE; InputSource *is = consoleInputSource; CHARFORMAT cf; CHARRANGE sel; switch (message) { case WM_CHAR: if (!appData.localLineEditing || sendNextChar) { is->buf[0] = (CHAR) wParam; is->count = 1; SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is); sendNextChar = FALSE; return 0; } if (quoteNextChar) { buf[0] = (char) wParam; buf[1] = NULLCHAR; SendMessage(hwnd, EM_REPLACESEL, TRUE, (LPARAM) buf); quoteNextChar = FALSE; return 0; } switch (wParam) { case '\r': /* Enter key */ is->count = GetWindowText(hwnd, is->buf, INPUT_SOURCE_BUF_SIZE-1); if (consoleEcho) SaveInHistory(is->buf); is->buf[is->count++] = '\n'; is->buf[is->count] = NULLCHAR; SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is); if (consoleEcho) { ConsoleOutput(is->buf, is->count, TRUE); } else if (appData.localLineEditing) { ConsoleOutput("\n", 1, TRUE); } /* fall thru */ case '\033': /* Escape key */ SetWindowText(hwnd, ""); cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT; if (consoleEcho) { cf.crTextColor = textAttribs[ColorNormal].color; } else { cf.crTextColor = COLOR_ECHOOFF; } cf.dwEffects = textAttribs[ColorNormal].effects; SendMessage(hwnd, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf); return 0; case '\t': /* Tab key */ if (GetKeyState(VK_SHIFT) < 0) { /* shifted */ SetFocus(GetDlgItem(hwndConsole, OPT_ConsoleText)); } else { /* unshifted */ if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE); if (buttonDesc[0].hwnd) { SetFocus(buttonDesc[0].hwnd); } else { SetFocus(hwndMain); } } return 0; case '\023': /* Ctrl+S */ sendNextChar = TRUE; return 0; case '\021': /* Ctrl+Q */ quoteNextChar = TRUE; return 0; JAWS_REPLAY default: break; } break; case WM_KEYDOWN: switch (wParam) { case VK_UP: GetWindowText(hwnd, buf, MSG_SIZ); p = PrevInHistory(buf); if (p != NULL) { SetWindowText(hwnd, p); sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); return 0; } break; case VK_DOWN: p = NextInHistory(); if (p != NULL) { SetWindowText(hwnd, p); sel.cpMin = 999999; sel.cpMax = 999999; SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); return 0; } break; case VK_HOME: case VK_END: if (!(GetKeyState(VK_CONTROL) & ~1)) break; /* fall thru */ case VK_PRIOR: case VK_NEXT: SendDlgItemMessage(hwndConsole, OPT_ConsoleText, message, wParam, lParam); return 0; } break; case WM_MBUTTONDOWN: SendDlgItemMessage(hwndConsole, OPT_ConsoleText, WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0); break; case WM_RBUTTONUP: if (GetKeyState(VK_SHIFT) & ~1) { SendDlgItemMessage(hwndConsole, OPT_ConsoleText, WM_COMMAND, MAKEWPARAM(IDM_QuickPaste, 0), 0); } else { POINT pt; HMENU hmenu; hmenu = LoadMenu(hInst, "InputMenu"); SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&sel); if (sel.cpMin == sel.cpMax) { EnableMenuItem(hmenu, IDM_Copy, MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hmenu, IDM_Cut, MF_BYCOMMAND|MF_GRAYED); } if (!IsClipboardFormatAvailable(CF_TEXT)) { EnableMenuItem(hmenu, IDM_Paste, MF_BYCOMMAND|MF_GRAYED); } pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); MenuPopup(hwnd, pt, hmenu, -1); } return 0; case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_Undo: SendMessage(hwnd, EM_UNDO, 0, 0); return 0; case IDM_SelectAll: sel.cpMin = 0; sel.cpMax = -1; /*999999?*/ SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&sel); return 0; case IDM_Cut: SendMessage(hwnd, WM_CUT, 0, 0); return 0; case IDM_Paste: SendMessage(hwnd, WM_PASTE, 0, 0); return 0; case IDM_Copy: SendMessage(hwnd, WM_COPY, 0, 0); return 0; } break; } return (*consoleInputWindowProc)(hwnd, message, wParam, lParam); } #define CO_MAX 100000 #define CO_TRIM 1000 LRESULT CALLBACK ConsoleWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static SnapData sd; HWND hText, hInput; RECT rect; static int sizeX, sizeY; int newSizeX, newSizeY; MINMAXINFO *mmi; WORD wMask; hText = GetDlgItem(hDlg, OPT_ConsoleText); hInput = GetDlgItem(hDlg, OPT_ConsoleInput); switch (message) { case WM_NOTIFY: if (((NMHDR*)lParam)->code == EN_LINK) { ENLINK *pLink = (ENLINK*)lParam; if (pLink->msg == WM_LBUTTONUP) { TEXTRANGE tr; tr.chrg = pLink->chrg; tr.lpstrText = malloc(1+tr.chrg.cpMax-tr.chrg.cpMin); SendMessage(hText, EM_GETTEXTRANGE, 0, (LPARAM)&tr); ShellExecute(NULL, "open", tr.lpstrText, NULL, NULL, SW_SHOW); free(tr.lpstrText); } } break; case WM_INITDIALOG: /* message: initialize dialog box */ hwndConsole = hDlg; SetFocus(hInput); consoleTextWindowProc = (WNDPROC) SetWindowLongPtr(hText, GWLP_WNDPROC, (LONG_PTR) ConsoleTextSubclass); SendMessage(hText, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor); consoleInputWindowProc = (WNDPROC) SetWindowLongPtr(hInput, GWLP_WNDPROC, (LONG_PTR) ConsoleInputSubclass); SendMessage(hInput, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor); Colorize(ColorNormal, TRUE); SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM) &consoleCF); ChangedConsoleFont(); GetClientRect(hDlg, &rect); sizeX = rect.right; sizeY = rect.bottom; if (wpConsole.x != CW_USEDEFAULT && wpConsole.y != CW_USEDEFAULT && wpConsole.width != CW_USEDEFAULT && wpConsole.height != CW_USEDEFAULT) { WINDOWPLACEMENT wp; EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = SW_SHOW; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpConsole.x; wp.rcNormalPosition.right = wpConsole.x + wpConsole.width; wp.rcNormalPosition.top = wpConsole.y; wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height; SetWindowPlacement(hDlg, &wp); } // [HGM] Chessknight's change 2004-07-13 else { /* Determine Defaults */ WINDOWPLACEMENT wp; wpConsole.x = wpMain.width + 1; wpConsole.y = wpMain.y; wpConsole.width = screenWidth - wpMain.width; wpConsole.height = wpMain.height; EnsureOnScreen(&wpConsole.x, &wpConsole.y, 0, 0); wp.length = sizeof(WINDOWPLACEMENT); wp.flags = 0; wp.showCmd = SW_SHOW; wp.ptMaxPosition.x = wp.ptMaxPosition.y = 0; wp.rcNormalPosition.left = wpConsole.x; wp.rcNormalPosition.right = wpConsole.x + wpConsole.width; wp.rcNormalPosition.top = wpConsole.y; wp.rcNormalPosition.bottom = wpConsole.y + wpConsole.height; SetWindowPlacement(hDlg, &wp); } // Allow hText to highlight URLs and send notifications on them wMask = (WORD) SendMessage(hText, EM_GETEVENTMASK, 0, 0L); SendMessage(hText, EM_SETEVENTMASK, 0, wMask | ENM_LINK); SendMessage(hText, EM_AUTOURLDETECT, TRUE, 0L); SetWindowLongPtr(hText, GWLP_USERDATA, 79); // initialize the text window's width return FALSE; case WM_SETFOCUS: SetFocus(hInput); return 0; case WM_CLOSE: ExitEvent(0); /* not reached */ break; case WM_SIZE: if (IsIconic(hDlg)) break; newSizeX = LOWORD(lParam); newSizeY = HIWORD(lParam); if (sizeX != newSizeX || sizeY != newSizeY) { RECT rectText, rectInput; POINT pt; int newTextHeight, newTextWidth; GetWindowRect(hText, &rectText); newTextWidth = rectText.right - rectText.left + newSizeX - sizeX; newTextHeight = rectText.bottom - rectText.top + newSizeY - sizeY; if (newTextHeight < 0) { newSizeY += -newTextHeight; newTextHeight = 0; } SetWindowPos(hText, NULL, 0, 0, newTextWidth, newTextHeight, SWP_NOZORDER|SWP_NOMOVE); GetWindowRect(hInput, &rectInput); /* gives screen coords */ pt.x = rectInput.left; pt.y = rectInput.top + newSizeY - sizeY; ScreenToClient(hDlg, &pt); SetWindowPos(hInput, NULL, pt.x, pt.y, /* needs client coords */ rectInput.right - rectInput.left + newSizeX - sizeX, rectInput.bottom - rectInput.top, SWP_NOZORDER); } sizeX = newSizeX; sizeY = newSizeY; break; case WM_GETMINMAXINFO: /* Prevent resizing window too small */ mmi = (MINMAXINFO *) lParam; mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; break; /* [AS] Snapping */ case WM_ENTERSIZEMOVE: return OnEnterSizeMove( &sd, hDlg, wParam, lParam ); case WM_SIZING: return OnSizing( &sd, hDlg, wParam, lParam ); case WM_MOVING: return OnMoving( &sd, hDlg, wParam, lParam ); case WM_EXITSIZEMOVE: UpdateICSWidth(hText); return OnExitSizeMove( &sd, hDlg, wParam, lParam ); } return DefWindowProc(hDlg, message, wParam, lParam); } VOID ConsoleCreate() { HWND hCons; if (hwndConsole) return; hCons = CreateDialog(hInst, szConsoleName, 0, NULL); SendMessage(hCons, WM_INITDIALOG, 0, 0); } VOID ConsoleOutput(char* data, int length, int forceVisible) { HWND hText; int trim, exlen; char *p, *q; char buf[CO_MAX+1]; POINT pEnd; RECT rect; static int delayLF = 0; CHARRANGE savesel, sel; if (hwndConsole == NULL || length > CO_MAX-100 || length == 0) return; p = data; q = buf; if (delayLF) { *q++ = '\r'; *q++ = '\n'; delayLF = 0; } while (length--) { if (*p == '\n') { if (*++p) { *q++ = '\r'; *q++ = '\n'; } else { delayLF = 1; } } else if (*p == '\007') { MyPlaySound(&sounds[(int)SoundBell]); p++; } else { *q++ = *p++; } } *q = NULLCHAR; hText = GetDlgItem(hwndConsole, OPT_ConsoleText); SendMessage(hText, EM_HIDESELECTION, TRUE, FALSE); /* Save current selection */ SendMessage(hText, EM_EXGETSEL, 0, (LPARAM)&savesel); exlen = GetWindowTextLength(hText); /* Find out whether current end of text is visible */ SendMessage(hText, EM_GETRECT, 0, (LPARAM) &rect); SendMessage(hText, EM_POSFROMCHAR, (WPARAM) &pEnd, exlen); /* Trim existing text if it's too long */ if (exlen + (q - buf) > CO_MAX) { trim = (CO_TRIM > (q - buf)) ? CO_TRIM : (q - buf); sel.cpMin = 0; sel.cpMax = trim; SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel); SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)""); exlen -= trim; savesel.cpMin -= trim; savesel.cpMax -= trim; if (exlen < 0) exlen = 0; if (savesel.cpMin < 0) savesel.cpMin = 0; if (savesel.cpMax < savesel.cpMin) savesel.cpMax = savesel.cpMin; } /* Append the new text */ sel.cpMin = exlen; sel.cpMax = exlen; SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel); SendMessage(hText, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&consoleCF); SendMessage(hText, EM_REPLACESEL, 0, (LPARAM) buf); if (forceVisible || exlen == 0 || (rect.left <= pEnd.x && pEnd.x < rect.right && rect.top <= pEnd.y && pEnd.y < rect.bottom)) { /* Scroll to make new end of text visible if old end of text was visible or new text is an echo of user typein */ sel.cpMin = 9999999; sel.cpMax = 9999999; SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel); SendMessage(hText, EM_HIDESELECTION, FALSE, FALSE); SendMessage(hText, EM_SCROLLCARET, 0, 0); SendMessage(hText, EM_HIDESELECTION, TRUE, FALSE); } if (savesel.cpMax == exlen || forceVisible) { /* Move insert point to new end of text if it was at the old end of text or if the new text is an echo of user typein */ sel.cpMin = 9999999; sel.cpMax = 9999999; SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&sel); } else { /* Restore previous selection */ SendMessage(hText, EM_EXSETSEL, 0, (LPARAM)&savesel); } SendMessage(hText, EM_HIDESELECTION, FALSE, FALSE); } /*---------*/ void DisplayHoldingsCount(HDC hdc, int x, int y, int rightAlign, int copyNumber) { char buf[100]; char *str; COLORREF oldFg, oldBg; HFONT oldFont; RECT rect; if(copyNumber > 1) snprintf(buf, sizeof(buf)/sizeof(buf[0]),"%d", copyNumber); else buf[0] = 0; oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */ oldBg = SetBkColor(hdc, RGB(0, 0, 0)); /* black */ oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf); rect.left = x; rect.right = x + squareSize; rect.top = y; rect.bottom = y + squareSize; str = buf; ExtTextOut(hdc, x + MESSAGE_LINE_LEFTMARGIN + (rightAlign ? (squareSize*2)/3 : 0), y, ETO_CLIPPED|ETO_OPAQUE, &rect, str, strlen(str), NULL); (void) SetTextColor(hdc, oldFg); (void) SetBkColor(hdc, oldBg); (void) SelectObject(hdc, oldFont); } void DisplayAClock(HDC hdc, int timeRemaining, int highlight, RECT *rect, char *color, char *flagFell) { char buf[100]; char *str; COLORREF oldFg, oldBg; HFONT oldFont; if (twoBoards && partnerUp) return; if (appData.clockMode) { if (tinyLayout) snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%c %s %s", color[0], TimeString(timeRemaining), flagFell); else snprintf(buf, sizeof(buf)/sizeof(buf[0]), "%s:%c%s %s", color, (logoHeight>0 ? 0 : ' '), TimeString(timeRemaining), flagFell); str = buf; } else { str = color; } if (highlight) { oldFg = SetTextColor(hdc, RGB(255, 255, 255)); /* white */ oldBg = SetBkColor(hdc, RGB(0, 0, 0)); /* black */ } else { oldFg = SetTextColor(hdc, RGB(0, 0, 0)); /* black */ oldBg = SetBkColor(hdc, RGB(255, 255, 255)); /* white */ } oldFont = SelectObject(hdc, font[boardSize][CLOCK_FONT]->hf); JAWS_SILENCE ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN, rect->top, ETO_CLIPPED|ETO_OPAQUE, rect, str, strlen(str), NULL); if(logoHeight > 0 && appData.clockMode) { RECT r; str += strlen(color)+2; r.top = rect->top + logoHeight/2; r.left = rect->left; r.right = rect->right; r.bottom = rect->bottom; ExtTextOut(hdc, rect->left + MESSAGE_LINE_LEFTMARGIN, r.top, ETO_CLIPPED|ETO_OPAQUE, &r, str, strlen(str), NULL); } (void) SetTextColor(hdc, oldFg); (void) SetBkColor(hdc, oldBg); (void) SelectObject(hdc, oldFont); } int DoReadFile(HANDLE hFile, char *buf, int count, DWORD *outCount, OVERLAPPED *ovl) { int ok, err; /* [AS] */ if( count <= 0 ) { if (appData.debugMode) { fprintf( debugFP, "DoReadFile: trying to read past end of buffer, overflow = %d\n", count ); } return ERROR_INVALID_USER_BUFFER; } ResetEvent(ovl->hEvent); ovl->Offset = ovl->OffsetHigh = 0; ok = ReadFile(hFile, buf, count, outCount, ovl); if (ok) { err = NO_ERROR; } else { err = GetLastError(); if (err == ERROR_IO_PENDING) { ok = GetOverlappedResult(hFile, ovl, outCount, TRUE); if (ok) err = NO_ERROR; else err = GetLastError(); } } return err; } int DoWriteFile(HANDLE hFile, char *buf, int count, DWORD *outCount, OVERLAPPED *ovl) { int ok, err; ResetEvent(ovl->hEvent); ovl->Offset = ovl->OffsetHigh = 0; ok = WriteFile(hFile, buf, count, outCount, ovl); if (ok) { err = NO_ERROR; } else { err = GetLastError(); if (err == ERROR_IO_PENDING) { ok = GetOverlappedResult(hFile, ovl, outCount, TRUE); if (ok) err = NO_ERROR; else err = GetLastError(); } } return err; } /* [AS] If input is line by line and a line exceed the buffer size, force an error */ void CheckForInputBufferFull( InputSource * is ) { if( is->lineByLine && (is->next - is->buf) >= INPUT_SOURCE_BUF_SIZE ) { /* Look for end of line */ char * p = is->buf; while( p < is->next && *p != '\n' ) { p++; } if( p >= is->next ) { if (appData.debugMode) { fprintf( debugFP, "Input line exceeded buffer size (source id=%lu)\n", is->id ); } is->error = ERROR_BROKEN_PIPE; /* [AS] Just any non-successful code! */ is->count = (DWORD) -1; is->next = is->buf; } } } DWORD InputThread(LPVOID arg) { InputSource *is; OVERLAPPED ovl; is = (InputSource *) arg; ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ovl.Internal = ovl.InternalHigh = ovl.Offset = ovl.OffsetHigh = 0; while (is->hThread != NULL) { is->error = DoReadFile(is->hFile, is->next, INPUT_SOURCE_BUF_SIZE - (is->next - is->buf), &is->count, &ovl); if (is->error == NO_ERROR) { is->next += is->count; } else { if (is->error == ERROR_BROKEN_PIPE) { /* Correct for MS brain damage. EOF reading a pipe is not an error. */ is->count = 0; } else { is->count = (DWORD) -1; /* [AS] The (is->count <= 0) check below is not useful for unsigned values! */ break; } } CheckForInputBufferFull( is ); SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is); if( is->count == ((DWORD) -1) ) break; /* [AS] */ if (is->count <= 0) break; /* Quit on EOF or error */ } CloseHandle(ovl.hEvent); CloseHandle(is->hFile); if (appData.debugMode) { fprintf( debugFP, "Input thread terminated (id=%lu, error=%d, count=%ld)\n", is->id, is->error, is->count ); } return 0; } /* Windows 95 beta 2 won't let you do overlapped i/o on a console or pipe */ DWORD NonOvlInputThread(LPVOID arg) { InputSource *is; char *p, *q; int i; char prev; is = (InputSource *) arg; while (is->hThread != NULL) { is->error = ReadFile(is->hFile, is->next, INPUT_SOURCE_BUF_SIZE - (is->next - is->buf), &is->count, NULL) ? NO_ERROR : GetLastError(); if (is->error == NO_ERROR) { /* Change CRLF to LF */ if (is->next > is->buf) { p = is->next - 1; i = is->count + 1; } else { p = is->next; i = is->count; } q = p; prev = NULLCHAR; while (i > 0) { if (prev == '\r' && *p == '\n') { *(q-1) = '\n'; is->count--; } else { *q++ = *p; } prev = *p++; i--; } *q = NULLCHAR; is->next = q; } else { if (is->error == ERROR_BROKEN_PIPE) { /* Correct for MS brain damage. EOF reading a pipe is not an error. */ is->count = 0; } else { is->count = (DWORD) -1; } } CheckForInputBufferFull( is ); SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is); if( is->count == ((DWORD) -1) ) break; /* [AS] */ if (is->count < 0) break; /* Quit on error */ } CloseHandle(is->hFile); return 0; } DWORD SocketInputThread(LPVOID arg) { InputSource *is; is = (InputSource *) arg; while (is->hThread != NULL) { is->count = recv(is->sock, is->buf, INPUT_SOURCE_BUF_SIZE, 0); if ((int)is->count == SOCKET_ERROR) { is->count = (DWORD) -1; is->error = WSAGetLastError(); } else { is->error = NO_ERROR; is->next += is->count; if (is->count == 0 && is->second == is) { /* End of file on stderr; quit with no message */ break; } } SendMessage(hwndMain, WM_USER_Input, 0, (LPARAM) is); if( is->count == ((DWORD) -1) ) break; /* [AS] */ if (is->count <= 0) break; /* Quit on EOF or error */ } return 0; } VOID InputEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { InputSource *is; is = (InputSource *) lParam; if (is->lineByLine) { /* Feed in lines one by one */ char *p = is->buf; char *q = p; while (q < is->next) { if (*q++ == '\n') { (is->func)(is, is->closure, p, q - p, NO_ERROR); p = q; } } /* Move any partial line to the start of the buffer */ q = is->buf; while (p < is->next) { *q++ = *p++; } is->next = q; if (is->error != NO_ERROR || is->count == 0) { /* Notify backend of the error. Note: If there was a partial line at the end, it is not flushed through. */ (is->func)(is, is->closure, is->buf, is->count, is->error); } } else { /* Feed in the whole chunk of input at once */ (is->func)(is, is->closure, is->buf, is->count, is->error); is->next = is->buf; } } /*---------------------------------------------------------------------------*\ * * Menu enables. Used when setting various modes. * \*---------------------------------------------------------------------------*/ typedef struct { int item; int flags; } Enables; VOID GreyRevert(Boolean grey) { // [HGM] vari: for retracting variations in local mode HMENU hmenu = GetMenu(hwndMain); EnableMenuItem(hmenu, IDM_Revert, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED)); EnableMenuItem(hmenu, IDM_Annotate, MF_BYCOMMAND|(grey ? MF_GRAYED : MF_ENABLED)); } VOID SetMenuEnables(HMENU hmenu, Enables *enab) { while (enab->item > 0) { (void) EnableMenuItem(hmenu, enab->item, enab->flags); enab++; } } Enables gnuEnables[] = { { IDM_MailMove, MF_BYCOMMAND|MF_GRAYED }, { IDM_ReloadCMailMsg, MF_BYCOMMAND|MF_GRAYED }, { IDM_IcsClient, MF_BYCOMMAND|MF_GRAYED }, { IDM_Accept, MF_BYCOMMAND|MF_GRAYED }, { IDM_Decline, MF_BYCOMMAND|MF_GRAYED }, { IDM_Rematch, MF_BYCOMMAND|MF_GRAYED }, { IDM_Adjourn, MF_BYCOMMAND|MF_GRAYED }, { IDM_StopExamining, MF_BYCOMMAND|MF_GRAYED }, { IDM_StopObserving, MF_BYCOMMAND|MF_GRAYED }, { IDM_Upload, MF_BYCOMMAND|MF_GRAYED }, { IDM_Revert, MF_BYCOMMAND|MF_GRAYED }, { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED }, { IDM_NewChat, MF_BYCOMMAND|MF_GRAYED }, // Needed to switch from ncp to GNU mode on Engine Load { ACTION_POS, MF_BYPOSITION|MF_ENABLED }, { IDM_MachineWhite, MF_BYCOMMAND|MF_ENABLED }, { IDM_MachineBlack, MF_BYCOMMAND|MF_ENABLED }, { IDM_TwoMachines, MF_BYCOMMAND|MF_ENABLED }, { IDM_Match, MF_BYCOMMAND|MF_ENABLED }, { IDM_AnalysisMode, MF_BYCOMMAND|MF_ENABLED }, { IDM_AnalyzeFile, MF_BYCOMMAND|MF_ENABLED }, { IDM_Engine1Options, MF_BYCOMMAND|MF_ENABLED }, { IDM_Engine2Options, MF_BYCOMMAND|MF_ENABLED }, { IDM_TimeControl, MF_BYCOMMAND|MF_ENABLED }, { IDM_RetractMove, MF_BYCOMMAND|MF_ENABLED }, { IDM_MoveNow, MF_BYCOMMAND|MF_ENABLED }, { IDM_Hint, MF_BYCOMMAND|MF_ENABLED }, { IDM_Book, MF_BYCOMMAND|MF_ENABLED }, { -1, -1 } }; Enables icsEnables[] = { { IDM_MailMove, MF_BYCOMMAND|MF_GRAYED }, { IDM_ReloadCMailMsg, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineWhite, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineBlack, MF_BYCOMMAND|MF_GRAYED }, { IDM_TwoMachines, MF_BYCOMMAND|MF_GRAYED }, { IDM_Match, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineBoth, MF_BYCOMMAND|MF_GRAYED }, { IDM_AnalysisMode, MF_BYCOMMAND|MF_ENABLED }, { IDM_AnalyzeFile, MF_BYCOMMAND|MF_GRAYED }, { IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED }, { IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED }, { IDM_Hint, MF_BYCOMMAND|MF_GRAYED }, { IDM_Book, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadProg1, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadProg2, MF_BYCOMMAND|MF_GRAYED }, { IDM_IcsOptions, MF_BYCOMMAND|MF_ENABLED }, { IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED }, { IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED }, { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED }, { IDM_Tourney, MF_BYCOMMAND|MF_GRAYED }, { -1, -1 } }; #if ZIPPY Enables zippyEnables[] = { { IDM_MoveNow, MF_BYCOMMAND|MF_ENABLED }, { IDM_Hint, MF_BYCOMMAND|MF_ENABLED }, { IDM_Book, MF_BYCOMMAND|MF_ENABLED }, { IDM_Engine1Options, MF_BYCOMMAND|MF_ENABLED }, { -1, -1 } }; #endif Enables ncpEnables[] = { { IDM_MailMove, MF_BYCOMMAND|MF_GRAYED }, { IDM_ReloadCMailMsg, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineWhite, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineBlack, MF_BYCOMMAND|MF_GRAYED }, { IDM_TwoMachines, MF_BYCOMMAND|MF_GRAYED }, { IDM_Match, MF_BYCOMMAND|MF_GRAYED }, { IDM_AnalysisMode, MF_BYCOMMAND|MF_GRAYED }, { IDM_AnalyzeFile, MF_BYCOMMAND|MF_GRAYED }, { IDM_IcsClient, MF_BYCOMMAND|MF_GRAYED }, { ACTION_POS, MF_BYPOSITION|MF_GRAYED }, { IDM_Revert, MF_BYCOMMAND|MF_GRAYED }, { IDM_Annotate, MF_BYCOMMAND|MF_GRAYED }, { IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED }, { IDM_RetractMove, MF_BYCOMMAND|MF_GRAYED }, { IDM_TimeControl, MF_BYCOMMAND|MF_GRAYED }, { IDM_Hint, MF_BYCOMMAND|MF_GRAYED }, { IDM_Book, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineBoth, MF_BYCOMMAND|MF_GRAYED }, { IDM_NewChat, MF_BYCOMMAND|MF_GRAYED }, { IDM_Engine1Options, MF_BYCOMMAND|MF_GRAYED }, { IDM_Engine2Options, MF_BYCOMMAND|MF_GRAYED }, { IDM_Sounds, MF_BYCOMMAND|MF_GRAYED }, { -1, -1 } }; Enables trainingOnEnables[] = { { IDM_EditComment, MF_BYCOMMAND|MF_GRAYED }, { IDM_Comment, MF_BYCOMMAND|MF_GRAYED }, { IDM_Pause, MF_BYCOMMAND|MF_GRAYED }, { IDM_Forward, MF_BYCOMMAND|MF_GRAYED }, { IDM_Backward, MF_BYCOMMAND|MF_GRAYED }, { IDM_ToEnd, MF_BYCOMMAND|MF_GRAYED }, { IDM_ToStart, MF_BYCOMMAND|MF_GRAYED }, { IDM_MoveNow, MF_BYCOMMAND|MF_GRAYED }, { IDM_TruncateGame, MF_BYCOMMAND|MF_GRAYED }, { -1, -1 } }; Enables trainingOffEnables[] = { { IDM_EditComment, MF_BYCOMMAND|MF_ENABLED }, { IDM_Comment, MF_BYCOMMAND|MF_ENABLED }, { IDM_Pause, MF_BYCOMMAND|MF_ENABLED }, { IDM_Forward, MF_BYCOMMAND|MF_ENABLED }, { IDM_Backward, MF_BYCOMMAND|MF_ENABLED }, { IDM_ToEnd, MF_BYCOMMAND|MF_ENABLED }, { IDM_ToStart, MF_BYCOMMAND|MF_ENABLED }, { IDM_MoveNow, MF_BYCOMMAND|MF_ENABLED }, { IDM_TruncateGame, MF_BYCOMMAND|MF_ENABLED }, { -1, -1 } }; /* These modify either ncpEnables or gnuEnables */ Enables cmailEnables[] = { { IDM_MailMove, MF_BYCOMMAND|MF_ENABLED }, { IDM_ReloadCMailMsg, MF_BYCOMMAND|MF_ENABLED }, { ACTION_POS, MF_BYPOSITION|MF_ENABLED }, { IDM_CallFlag, MF_BYCOMMAND|MF_GRAYED }, { IDM_Draw, MF_BYCOMMAND|MF_ENABLED }, { IDM_Adjourn, MF_BYCOMMAND|MF_GRAYED }, { IDM_Abort, MF_BYCOMMAND|MF_GRAYED }, { -1, -1 } }; Enables machineThinkingEnables[] = { { IDM_LoadGame, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadNextGame, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadPrevGame, MF_BYCOMMAND|MF_GRAYED }, { IDM_ReloadGame, MF_BYCOMMAND|MF_GRAYED }, { IDM_PasteGame, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadPosition, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadNextPosition, MF_BYCOMMAND|MF_GRAYED }, { IDM_LoadPrevPosition, MF_BYCOMMAND|MF_GRAYED }, { IDM_ReloadPosition, MF_BYCOMMAND|MF_GRAYED }, { IDM_PastePosition, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineWhite, MF_BYCOMMAND|MF_GRAYED }, { IDM_MachineBlack, MF_BYCOMMAND|MF_GRAYED }, { IDM_TwoMachines, MF_BYCOMMAND|MF_GRAYED }, // { IDM_Match, MF_BYCOMMAND|MF_GRAYED }, { IDM_TypeInMove, MF_BYCOMMAND|MF_GRAYED }, { IDM_RetractMove, MF_BYCOMMAND|MF_GRAYED }, { -1, -1 } }; Enables userThinkingEnables[] = { { IDM_LoadGame, MF_BYCOMMAND|MF_ENABLED }, { IDM_LoadNextGame, MF_BYCOMMAND|MF_ENABLED }, { IDM_LoadPrevGame, MF_BYCOMMAND|MF_ENABLED }, { IDM_ReloadGame, MF_BYCOMMAND|MF_ENABLED }, { IDM_PasteGame, MF_BYCOMMAND|MF_ENABLED }, { IDM_LoadPosition, MF_BYCOMMAND|MF_ENABLED }, { IDM_LoadNextPosition, MF_BYCOMMAND|MF_ENABLED }, { IDM_LoadPrevPosition, MF_BYCOMMAND|MF_ENABLED }, { IDM_ReloadPosition, MF_BYCOMMAND|MF_ENABLED }, { IDM_PastePosition, MF_BYCOMMAND|MF_ENABLED }, { IDM_MachineWhite, MF_BYCOMMAND|MF_ENABLED }, { IDM_MachineBlack, MF_BYCOMMAND|MF_ENABLED }, { IDM_TwoMachines, MF_BYCOMMAND|MF_ENABLED }, // { IDM_Match, MF_BYCOMMAND|MF_ENABLED }, { IDM_TypeInMove, MF_BYCOMMAND|MF_ENABLED }, { IDM_RetractMove, MF_BYCOMMAND|MF_ENABLED }, { -1, -1 } }; /*---------------------------------------------------------------------------*\ * * Front-end interface functions exported by XBoard. * Functions appear in same order as prototypes in frontend.h. * \*---------------------------------------------------------------------------*/ VOID CheckMark(UINT item, int state) { if(item) CheckMenuItem(GetMenu(hwndMain), item, MF_BYCOMMAND|state); } VOID ModeHighlight() { static UINT prevChecked = 0; static int prevPausing = 0; UINT nowChecked; if (pausing != prevPausing) { prevPausing = pausing; (void) CheckMenuItem(GetMenu(hwndMain), IDM_Pause, MF_BYCOMMAND|(pausing ? MF_CHECKED : MF_UNCHECKED)); if (hwndPause) SetWindowText(hwndPause, pausing ? "C" : "P"); } switch (gameMode) { case BeginningOfGame: if (appData.icsActive) nowChecked = IDM_IcsClient; else if (appData.noChessProgram) nowChecked = IDM_EditGame; else nowChecked = IDM_MachineBlack; break; case MachinePlaysBlack: nowChecked = IDM_MachineBlack; break; case MachinePlaysWhite: nowChecked = IDM_MachineWhite; break; case TwoMachinesPlay: nowChecked = IDM_TwoMachines; break; case AnalyzeMode: nowChecked = IDM_AnalysisMode; break; case AnalyzeFile: nowChecked = IDM_AnalyzeFile; break; case EditGame: nowChecked = IDM_EditGame; break; case PlayFromGameFile: nowChecked = IDM_LoadGame; break; case EditPosition: nowChecked = IDM_EditPosition; break; case Training: nowChecked = IDM_Training; break; case IcsPlayingWhite: case IcsPlayingBlack: case IcsObserving: case IcsIdle: nowChecked = IDM_IcsClient; break; default: case EndOfGame: nowChecked = 0; break; } CheckMark(prevChecked, MF_UNCHECKED); CheckMark(nowChecked, MF_CHECKED); CheckMark(IDM_Match, matchMode && matchGame < appData.matchGames ? MF_CHECKED : MF_UNCHECKED); if (nowChecked == IDM_LoadGame || nowChecked == IDM_Training) { (void) EnableMenuItem(GetMenu(hwndMain), IDM_Training, MF_BYCOMMAND|MF_ENABLED); } else { (void) EnableMenuItem(GetMenu(hwndMain), IDM_Training, MF_BYCOMMAND|MF_GRAYED); } prevChecked = nowChecked; /* [DM] icsEngineAnalyze - Do a sceure check too */ if (appData.icsActive) { if (appData.icsEngineAnalyze) { CheckMark(IDM_AnalysisMode, MF_CHECKED); } else { CheckMark(IDM_AnalysisMode, MF_UNCHECKED); } } DisplayLogos(); // [HGM] logos: mode change could have altered logos } VOID SetICSMode() { HMENU hmenu = GetMenu(hwndMain); SetMenuEnables(hmenu, icsEnables); EnableMenuItem(GetSubMenu(hmenu, OPTIONS_POS), IDM_IcsOptions, MF_BYCOMMAND|MF_ENABLED); #if ZIPPY if (appData.zippyPlay) { SetMenuEnables(hmenu, zippyEnables); if (!appData.noChessProgram) /* [DM] icsEngineAnalyze */ (void) EnableMenuItem(GetMenu(hwndMain), IDM_AnalysisMode, MF_BYCOMMAND|MF_ENABLED); } #endif } VOID SetGNUMode() { SetMenuEnables(GetMenu(hwndMain), gnuEnables); } VOID SetNCPMode() { HMENU hmenu = GetMenu(hwndMain); SetMenuEnables(hmenu, ncpEnables); DrawMenuBar(hwndMain); } VOID SetCmailMode() { SetMenuEnables(GetMenu(hwndMain), cmailEnables); } VOID SetTrainingModeOn() { int i; SetMenuEnables(GetMenu(hwndMain), trainingOnEnables); for (i = 0; i < N_BUTTONS; i++) { if (buttonDesc[i].hwnd != NULL) EnableWindow(buttonDesc[i].hwnd, FALSE); } CommentPopDown(); } VOID SetTrainingModeOff() { int i; SetMenuEnables(GetMenu(hwndMain), trainingOffEnables); for (i = 0; i < N_BUTTONS; i++) { if (buttonDesc[i].hwnd != NULL) EnableWindow(buttonDesc[i].hwnd, TRUE); } } VOID SetUserThinkingEnables() { SetMenuEnables(GetMenu(hwndMain), userThinkingEnables); } VOID SetMachineThinkingEnables() { HMENU hMenu = GetMenu(hwndMain); int flags = MF_BYCOMMAND|MF_ENABLED; SetMenuEnables(hMenu, machineThinkingEnables); if (gameMode == MachinePlaysBlack) { (void)EnableMenuItem(hMenu, IDM_MachineBlack, flags); } else if (gameMode == MachinePlaysWhite) { (void)EnableMenuItem(hMenu, IDM_MachineWhite, flags); } else if (gameMode == TwoMachinesPlay) { (void)EnableMenuItem(hMenu, matchMode ? IDM_Match : IDM_TwoMachines, flags); // [HGM] match } } VOID DisplayTitle(char *str) { char title[MSG_SIZ], *host; if (str[0] != NULLCHAR) { safeStrCpy(title, str, sizeof(title)/sizeof(title[0]) ); } else if (appData.icsActive) { if (appData.icsCommPort[0] != NULLCHAR) host = "ICS"; else host = appData.icsHost; snprintf(title, MSG_SIZ, "%s: %s", szTitle, host); } else if (appData.noChessProgram) { safeStrCpy(title, szTitle, sizeof(title)/sizeof(title[0]) ); } else { safeStrCpy(title, szTitle, sizeof(title)/sizeof(title[0]) ); strcat(title, ": "); strcat(title, first.tidy); } SetWindowText(hwndMain, title); } VOID DisplayMessage(char *str1, char *str2) { HDC hdc; HFONT oldFont; int remain = MESSAGE_TEXT_MAX - 1; int len; moveErrorMessageUp = FALSE; /* turned on later by caller if needed */ messageText[0] = NULLCHAR; if (*str1) { len = strlen(str1); if (len > remain) len = remain; strncpy(messageText, str1, len); messageText[len] = NULLCHAR; remain -= len; } if (*str2 && remain >= 2) { if (*str1) { strcat(messageText, " "); remain -= 2; } len = strlen(str2); if (len > remain) len = remain; strncat(messageText, str2, len); } messageText[MESSAGE_TEXT_MAX - 1] = NULLCHAR; safeStrCpy(lastMsg, messageText, MSG_SIZ); if (hwndMain == NULL || IsIconic(hwndMain)) return; SAYMACHINEMOVE(); hdc = GetDC(hwndMain); oldFont = SelectObject(hdc, font[boardSize][MESSAGE_FONT]->hf); ExtTextOut(hdc, messageRect.left, messageRect.top, ETO_CLIPPED|ETO_OPAQUE, &messageRect, messageText, strlen(messageText), NULL); (void) SelectObject(hdc, oldFont); (void) ReleaseDC(hwndMain, hdc); } VOID DisplayError(char *str, int error) { char buf[MSG_SIZ*2], buf2[MSG_SIZ]; int len; if (error == 0) { safeStrCpy(buf, str, sizeof(buf)/sizeof(buf[0]) ); } else { len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, LANG_NEUTRAL, (LPSTR) buf2, MSG_SIZ, NULL); if (len > 0) { snprintf(buf, 2*MSG_SIZ, "%s:\n%s", str, buf2); } else { ErrorMap *em = errmap; while (em->err != 0 && em->err != error) em++; if (em->err != 0) { snprintf(buf, 2*MSG_SIZ, "%s:\n%s", str, em->msg); } else { snprintf(buf, 2*MSG_SIZ, "%s:\nError code %d", str, error); } } } ErrorPopUp(_("Error"), buf); } VOID DisplayMoveError(char *str) { fromX = fromY = -1; ClearHighlights(); DrawPosition(FALSE, NULL); if (appData.popupMoveErrors) { ErrorPopUp(_("Error"), str); } else { DisplayMessage(str, ""); moveErrorMessageUp = TRUE; } } VOID DisplayFatalError(char *str, int error, int exitStatus) { char buf[2*MSG_SIZ], buf2[MSG_SIZ]; int len; char *label = exitStatus ? _("Fatal Error") : _("Exiting"); if (error != 0) { len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, LANG_NEUTRAL, (LPSTR) buf2, MSG_SIZ, NULL); if (len > 0) { snprintf(buf, 2*MSG_SIZ, "%s:\n%s", str, buf2); } else { ErrorMap *em = errmap; while (em->err != 0 && em->err != error) em++; if (em->err != 0) { snprintf(buf, 2*MSG_SIZ, "%s:\n%s", str, em->msg); } else { snprintf(buf, 2*MSG_SIZ, "%s:\nError code %d", str, error); } } str = buf; } if (appData.debugMode) { fprintf(debugFP, "%s: %s\n", label, str); } if (appData.popupExitMessage) { (void) MessageBox(hwndMain, str, label, MB_OK| (exitStatus ? MB_ICONSTOP : MB_ICONINFORMATION)); } ExitEvent(exitStatus); } VOID DisplayInformation(char *str) { (void) MessageBox(hwndMain, str, _("Information"), MB_OK|MB_ICONINFORMATION); } VOID DisplayNote(char *str) { ErrorPopUp(_("Note"), str); } typedef struct { char *title, *question, *replyPrefix; ProcRef pr; } QuestionParams; LRESULT CALLBACK QuestionDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static QuestionParams *qp; char reply[MSG_SIZ]; int len, err; switch (message) { case WM_INITDIALOG: qp = (QuestionParams *) lParam; CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER)); Translate(hDlg, DLG_Question); SetWindowText(hDlg, qp->title); SetDlgItemText(hDlg, OPT_QuestionText, qp->question); SetFocus(GetDlgItem(hDlg, OPT_QuestionInput)); return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: safeStrCpy(reply, qp->replyPrefix, sizeof(reply)/sizeof(reply[0]) ); if (*reply) strcat(reply, " "); len = strlen(reply); GetDlgItemText(hDlg, OPT_QuestionInput, reply + len, sizeof(reply) - len); strcat(reply, "\n"); OutputToProcess(qp->pr, reply, strlen(reply), &err); EndDialog(hDlg, TRUE); if (err) DisplayFatalError(_("Error writing to chess program"), err, 1); return TRUE; case IDCANCEL: EndDialog(hDlg, FALSE); return TRUE; default: break; } break; } return FALSE; } VOID AskQuestion(char* title, char *question, char *replyPrefix, ProcRef pr) { QuestionParams qp; FARPROC lpProc; qp.title = title; qp.question = question; qp.replyPrefix = replyPrefix; qp.pr = pr; lpProc = MakeProcInstance((FARPROC)QuestionDialog, hInst); DialogBoxParam(hInst, MAKEINTRESOURCE(DLG_Question), hwndMain, (DLGPROC)lpProc, (LPARAM)&qp); FreeProcInstance(lpProc); } /* [AS] Pick FRC position */ LRESULT CALLBACK NewGameFRC_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { static int * lpIndexFRC; BOOL index_is_ok; char buf[16]; switch( message ) { case WM_INITDIALOG: lpIndexFRC = (int *) lParam; CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER)); Translate(hDlg, DLG_NewGameFRC); SendDlgItemMessage( hDlg, IDC_NFG_Edit, EM_SETLIMITTEXT, sizeof(buf)-1, 0 ); SetDlgItemInt( hDlg, IDC_NFG_Edit, *lpIndexFRC, TRUE ); SendDlgItemMessage( hDlg, IDC_NFG_Edit, EM_SETSEL, 0, -1 ); SetFocus(GetDlgItem(hDlg, IDC_NFG_Edit)); break; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDOK: *lpIndexFRC = GetDlgItemInt(hDlg, IDC_NFG_Edit, &index_is_ok, TRUE ); EndDialog( hDlg, 0 ); shuffleOpenings = TRUE; /* [HGM] shuffle: switch shuffling on for as long as we stay in current variant */ return TRUE; case IDCANCEL: EndDialog( hDlg, 1 ); return TRUE; case IDC_NFG_Edit: if( HIWORD(wParam) == EN_CHANGE ) { GetDlgItemInt(hDlg, IDC_NFG_Edit, &index_is_ok, TRUE ); EnableWindow( GetDlgItem(hDlg, IDOK), index_is_ok ); } return TRUE; case IDC_NFG_Random: snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%d", myrandom() ); /* [HGM] shuffle: no longer limit to 960 */ SetDlgItemText(hDlg, IDC_NFG_Edit, buf ); return TRUE; } break; } return FALSE; } int NewGameFRC() { int result; int index = appData.defaultFrcPosition; FARPROC lpProc = MakeProcInstance( (FARPROC) NewGameFRC_Proc, hInst ); result = DialogBoxParam( hInst, MAKEINTRESOURCE(DLG_NewGameFRC), hwndMain, (DLGPROC)lpProc, (LPARAM)&index ); if( result == 0 ) { appData.defaultFrcPosition = index; } return result; } /* [AS] Game list options. Refactored by HGM */ HWND gameListOptionsDialog; // low-level front-end: clear text edit / list widget void GLT_ClearList() { SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_RESETCONTENT, 0, 0 ); } // low-level front-end: clear text edit / list widget void GLT_DeSelectList() { SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_SETCURSEL, 0, 0 ); } // low-level front-end: append line to text edit / list widget void GLT_AddToList( char *name ) { if( name != 0 ) { SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_ADDSTRING, 0, (LPARAM) name ); } } // low-level front-end: get line from text edit / list widget Boolean GLT_GetFromList( int index, char *name ) { if( name != 0 ) { if( SendDlgItemMessage( gameListOptionsDialog, IDC_GameListTags, LB_GETTEXT, index, (LPARAM) name ) != LB_ERR ) return TRUE; } return FALSE; } void GLT_MoveSelection( HWND hDlg, int delta ) { int idx1 = (int) SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETCURSEL, 0, 0 ); int idx2 = idx1 + delta; int count = (int) SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETCOUNT, 0, 0 ); if( idx1 >=0 && idx1 < count && idx2 >= 0 && idx2 < count ) { char buf[128]; SendDlgItemMessage( hDlg, IDC_GameListTags, LB_GETTEXT, idx1, (LPARAM) buf ); SendDlgItemMessage( hDlg, IDC_GameListTags, LB_DELETESTRING, idx1, 0 ); SendDlgItemMessage( hDlg, IDC_GameListTags, LB_INSERTSTRING, idx2, (LPARAM) buf ); SendDlgItemMessage( hDlg, IDC_GameListTags, LB_SETCURSEL, idx2, 0 ); } } LRESULT CALLBACK GameListOptions_Proc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch( message ) { case WM_INITDIALOG: gameListOptionsDialog = hDlg; // [HGM] pass through global to keep out off back-end CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER)); Translate(hDlg, DLG_GameListOptions); /* Initialize list */ GLT_TagsToList( lpUserGLT ); SetFocus( GetDlgItem(hDlg, IDC_GameListTags) ); break; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDOK: GLT_ParseList(); EndDialog( hDlg, 0 ); return TRUE; case IDCANCEL: EndDialog( hDlg, 1 ); return TRUE; case IDC_GLT_Default: GLT_TagsToList( GLT_DEFAULT_TAGS ); return TRUE; case IDC_GLT_Restore: GLT_TagsToList( appData.gameListTags ); return TRUE; case IDC_GLT_Up: GLT_MoveSelection( hDlg, -1 ); return TRUE; case IDC_GLT_Down: GLT_MoveSelection( hDlg, +1 ); return TRUE; } break; } return FALSE; } int GameListOptions() { int result; FARPROC lpProc = MakeProcInstance( (FARPROC) GameListOptions_Proc, hInst ); safeStrCpy( lpUserGLT, appData.gameListTags ,LPUSERGLT_SIZE ); result = DialogBoxParam( hInst, MAKEINTRESOURCE(DLG_GameListOptions), hwndMain, (DLGPROC)lpProc, (LPARAM)lpUserGLT ); if( result == 0 ) { char *oldTags = appData.gameListTags; /* [AS] Memory leak here! */ appData.gameListTags = strdup( lpUserGLT ); if(strcmp(oldTags, appData.gameListTags)) // [HGM] redo Game List when we changed something GameListToListBox(NULL, TRUE, ".", NULL, FALSE, FALSE); // "." as filter is kludge to select all } return result; } VOID DisplayIcsInteractionTitle(char *str) { char consoleTitle[MSG_SIZ]; snprintf(consoleTitle, MSG_SIZ, "%s: %s", szConsoleTitle, str); SetWindowText(hwndConsole, consoleTitle); if(appData.chatBoxes) { // [HGM] chat: open chat boxes char buf[MSG_SIZ], *p = buf, *q; safeStrCpy(buf, appData.chatBoxes, sizeof(buf)/sizeof(buf[0]) ); do { q = strchr(p, ';'); if(q) *q++ = 0; if(*p) ChatPopUp(p); } while(p=q); } SetActiveWindow(hwndMain); } void DrawPosition(int fullRedraw, Board board) { HDCDrawPosition(NULL, (BOOLEAN) fullRedraw, board); } void NotifyFrontendLogin() { if (hwndConsole) UpdateICSWidth(GetDlgItem(hwndConsole, OPT_ConsoleText)); } VOID ResetFrontEnd() { fromX = fromY = -1; if (dragInfo.pos.x != -1 || dragInfo.pos.y != -1) { dragInfo.pos.x = dragInfo.pos.y = -1; dragInfo.pos.x = dragInfo.pos.y = -1; dragInfo.lastpos = dragInfo.pos; dragInfo.start.x = dragInfo.start.y = -1; dragInfo.from = dragInfo.start; ReleaseCapture(); DrawPosition(TRUE, NULL); } TagsPopDown(); } VOID CommentPopUp(char *title, char *str) { HWND hwnd = GetActiveWindow(); EitherCommentPopUp(currentMove, title, str, FALSE); // [HGM] vari: fake move index, rather than 0 SAY(str); SetActiveWindow(hwnd); } VOID CommentPopDown(void) { CheckMenuItem(GetMenu(hwndMain), IDM_Comment, MF_UNCHECKED); if (commentDialog) { ShowWindow(commentDialog, SW_HIDE); } commentUp = FALSE; } VOID EditCommentPopUp(int index, char *title, char *str) { EitherCommentPopUp(index, title, str, TRUE); } int Roar() { MyPlaySound(&sounds[(int)SoundRoar]); return 1; } VOID RingBell() { MyPlaySound(&sounds[(int)SoundMove]); } VOID PlayIcsWinSound() { MyPlaySound(&sounds[(int)SoundIcsWin]); } VOID PlayIcsLossSound() { MyPlaySound(&sounds[(int)SoundIcsLoss]); } VOID PlayIcsDrawSound() { MyPlaySound(&sounds[(int)SoundIcsDraw]); } VOID PlayIcsUnfinishedSound() { MyPlaySound(&sounds[(int)SoundIcsUnfinished]); } VOID PlayAlarmSound() { MyPlaySound(&sounds[(int)SoundAlarm]); } VOID PlayTellSound() { MyPlaySound(&textAttribs[ColorTell].sound); } VOID EchoOn() { HWND hInput; consoleEcho = TRUE; hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&consoleCF); SendMessage(hInput, EM_SETBKGNDCOLOR, FALSE, consoleBackgroundColor); } VOID EchoOff() { CHARFORMAT cf; HWND hInput; consoleEcho = FALSE; hInput = GetDlgItem(hwndConsole, OPT_ConsoleInput); /* This works OK: set text and background both to the same color */ cf = consoleCF; cf.crTextColor = COLOR_ECHOOFF; SendMessage(hInput, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf); SendMessage(hInput, EM_SETBKGNDCOLOR, FALSE, cf.crTextColor); } /* No Raw()...? */ void Colorize(ColorClass cc, int continuation) { currentColorClass = cc; consoleCF.dwMask = CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_STRIKEOUT; consoleCF.crTextColor = textAttribs[cc].color; consoleCF.dwEffects = textAttribs[cc].effects; if (!continuation) MyPlaySound(&textAttribs[cc].sound); } char * UserName() { static char buf[MSG_SIZ]; DWORD bufsiz = MSG_SIZ; if(appData.userName != NULL && appData.userName[0] != 0) { return appData.userName; /* [HGM] username: prefer name selected by user over his system login */ } if (!GetUserName(buf, &bufsiz)) { /*DisplayError("Error getting user name", GetLastError());*/ safeStrCpy(buf, _("User"), sizeof(buf)/sizeof(buf[0]) ); } return buf; } char * HostName() { static char buf[MSG_SIZ]; DWORD bufsiz = MSG_SIZ; if (!GetComputerName(buf, &bufsiz)) { /*DisplayError("Error getting host name", GetLastError());*/ safeStrCpy(buf, _("Unknown"), sizeof(buf)/sizeof(buf[0]) ); } return buf; } int ClockTimerRunning() { return clockTimerEvent != 0; } int StopClockTimer() { if (clockTimerEvent == 0) return FALSE; KillTimer(hwndMain, clockTimerEvent); clockTimerEvent = 0; return TRUE; } void StartClockTimer(long millisec) { clockTimerEvent = SetTimer(hwndMain, (UINT) CLOCK_TIMER_ID, (UINT) millisec, NULL); } void DisplayWhiteClock(long timeRemaining, int highlight) { HDC hdc; char *flag = whiteFlag && gameMode == TwoMachinesPlay ? "(!)" : ""; if(appData.noGUI) return; hdc = GetDC(hwndMain); if (!IsIconic(hwndMain)) { DisplayAClock(hdc, timeRemaining, highlight, flipClock ? &blackRect : &whiteRect, _("White"), flag); } if (highlight && iconCurrent == iconBlack) { iconCurrent = iconWhite; PostMessage(hwndMain, WM_SETICON, (WPARAM) TRUE, (LPARAM) iconCurrent); if (IsIconic(hwndMain)) { DrawIcon(hdc, 2, 2, iconCurrent); } } (void) ReleaseDC(hwndMain, hdc); if (hwndConsole) PostMessage(hwndConsole, WM_SETICON, (WPARAM) TRUE, (LPARAM) iconCurrent); } void DisplayBlackClock(long timeRemaining, int highlight) { HDC hdc; char *flag = blackFlag && gameMode == TwoMachinesPlay ? "(!)" : ""; if(appData.noGUI) return; hdc = GetDC(hwndMain); if (!IsIconic(hwndMain)) { DisplayAClock(hdc, timeRemaining, highlight, flipClock ? &whiteRect : &blackRect, _("Black"), flag); } if (highlight && iconCurrent == iconWhite) { iconCurrent = iconBlack; PostMessage(hwndMain, WM_SETICON, (WPARAM) TRUE, (LPARAM) iconCurrent); if (IsIconic(hwndMain)) { DrawIcon(hdc, 2, 2, iconCurrent); } } (void) ReleaseDC(hwndMain, hdc); if (hwndConsole) PostMessage(hwndConsole, WM_SETICON, (WPARAM) TRUE, (LPARAM) iconCurrent); } int LoadGameTimerRunning() { return loadGameTimerEvent != 0; } int StopLoadGameTimer() { if (loadGameTimerEvent == 0) return FALSE; KillTimer(hwndMain, loadGameTimerEvent); loadGameTimerEvent = 0; return TRUE; } void StartLoadGameTimer(long millisec) { loadGameTimerEvent = SetTimer(hwndMain, (UINT) LOAD_GAME_TIMER_ID, (UINT) millisec, NULL); } void AutoSaveGame() { char *defName; FILE *f; char fileTitle[MSG_SIZ]; defName = DefaultFileName(appData.oldSaveStyle ? "gam" : "pgn"); f = OpenFileDialog(hwndMain, "a", defName, appData.oldSaveStyle ? "gam" : "pgn", GAME_FILT, _("Save Game to File"), NULL, fileTitle, NULL); if (f != NULL) { SaveGame(f, 0, ""); fclose(f); } } void ScheduleDelayedEvent(DelayedEventCallback cb, long millisec) { if (delayedTimerEvent != 0) { if (appData.debugMode && cb != delayedTimerCallback) { // [HGM] alive: not too much debug fprintf(debugFP, "ScheduleDelayedEvent: event already scheduled\n"); } KillTimer(hwndMain, delayedTimerEvent); delayedTimerEvent = 0; if(delayedTimerCallback != cb) // [HGM] alive: do not "flush" same event, just postpone it delayedTimerCallback(); } delayedTimerCallback = cb; delayedTimerEvent = SetTimer(hwndMain, (UINT) DELAYED_TIMER_ID, (UINT) millisec, NULL); } DelayedEventCallback GetDelayedEvent() { if (delayedTimerEvent) { return delayedTimerCallback; } else { return NULL; } } void CancelDelayedEvent() { if (delayedTimerEvent) { KillTimer(hwndMain, delayedTimerEvent); delayedTimerEvent = 0; } } DWORD GetWin32Priority(int nice) { // [HGM] nice: translate Unix nice() value to indows priority class. (Code stolen from Polyglot 1.4w11) /* REALTIME_PRIORITY_CLASS 0x00000100 HIGH_PRIORITY_CLASS 0x00000080 ABOVE_NORMAL_PRIORITY_CLASS 0x00008000 NORMAL_PRIORITY_CLASS 0x00000020 BELOW_NORMAL_PRIORITY_CLASS 0x00004000 IDLE_PRIORITY_CLASS 0x00000040 */ if (nice < -15) return 0x00000080; if (nice < 0) return 0x00008000; if (nice == 0) return 0x00000020; if (nice < 15) return 0x00004000; return 0x00000040; } void RunCommand(char *cmdLine) { /* Now create the child process. */ STARTUPINFO siStartInfo; PROCESS_INFORMATION piProcInfo; siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.lpReserved = NULL; siStartInfo.lpDesktop = NULL; siStartInfo.lpTitle = NULL; siStartInfo.dwFlags = STARTF_USESTDHANDLES; siStartInfo.cbReserved2 = 0; siStartInfo.lpReserved2 = NULL; siStartInfo.hStdInput = NULL; siStartInfo.hStdOutput = NULL; siStartInfo.hStdError = NULL; CreateProcess(NULL, cmdLine, /* command line */ NULL, /* process security attributes */ NULL, /* primary thread security attrs */ TRUE, /* handles are inherited */ DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP, NULL, /* use parent's environment */ NULL, &siStartInfo, /* STARTUPINFO pointer */ &piProcInfo); /* receives PROCESS_INFORMATION */ CloseHandle(piProcInfo.hThread); } /* Start a child process running the given program. The process's standard output can be read from "from", and its standard input can be written to "to". Exit with fatal error if anything goes wrong. Returns an opaque pointer that can be used to destroy the process later. */ int StartChildProcess(char *cmdLine, char *dir, ProcRef *pr) { #define BUFSIZE 4096 HANDLE hChildStdinRd, hChildStdinWr, hChildStdoutRd, hChildStdoutWr; HANDLE hChildStdinWrDup, hChildStdoutRdDup; SECURITY_ATTRIBUTES saAttr; BOOL fSuccess; PROCESS_INFORMATION piProcInfo; STARTUPINFO siStartInfo; ChildProc *cp; char buf[MSG_SIZ]; DWORD err; if (appData.debugMode) { fprintf(debugFP, "StartChildProcess (dir=\"%s\") %s\n", dir, cmdLine); } *pr = NoProc; /* Set the bInheritHandle flag so pipe handles are inherited. */ saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; /* * The steps for redirecting child's STDOUT: * 1. Create anonymous pipe to be STDOUT for child. * 2. Create a noninheritable duplicate of read handle, * and close the inheritable read handle. */ /* Create a pipe for the child's STDOUT. */ if (! CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0)) { return GetLastError(); } /* Duplicate the read handle to the pipe, so it is not inherited. */ fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdoutRd, GetCurrentProcess(), &hChildStdoutRdDup, 0, FALSE, /* not inherited */ DUPLICATE_SAME_ACCESS); if (! fSuccess) { return GetLastError(); } CloseHandle(hChildStdoutRd); /* * The steps for redirecting child's STDIN: * 1. Create anonymous pipe to be STDIN for child. * 2. Create a noninheritable duplicate of write handle, * and close the inheritable write handle. */ /* Create a pipe for the child's STDIN. */ if (! CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0)) { return GetLastError(); } /* Duplicate the write handle to the pipe, so it is not inherited. */ fSuccess = DuplicateHandle(GetCurrentProcess(), hChildStdinWr, GetCurrentProcess(), &hChildStdinWrDup, 0, FALSE, /* not inherited */ DUPLICATE_SAME_ACCESS); if (! fSuccess) { return GetLastError(); } CloseHandle(hChildStdinWr); /* Arrange to (1) look in dir for the child .exe file, and * (2) have dir be the child's working directory. Interpret * dir relative to the directory WinBoard loaded from. */ GetCurrentDirectory(MSG_SIZ, buf); SetCurrentDirectory(installDir); SetCurrentDirectory(dir); /* Now create the child process. */ siStartInfo.cb = sizeof(STARTUPINFO); siStartInfo.lpReserved = NULL; siStartInfo.lpDesktop = NULL; siStartInfo.lpTitle = NULL; siStartInfo.dwFlags = STARTF_USESTDHANDLES; siStartInfo.cbReserved2 = 0; siStartInfo.lpReserved2 = NULL; siStartInfo.hStdInput = hChildStdinRd; siStartInfo.hStdOutput = hChildStdoutWr; siStartInfo.hStdError = hChildStdoutWr; fSuccess = CreateProcess(NULL, cmdLine, /* command line */ NULL, /* process security attributes */ NULL, /* primary thread security attrs */ TRUE, /* handles are inherited */ DETACHED_PROCESS|CREATE_NEW_PROCESS_GROUP, NULL, /* use parent's environment */ NULL, &siStartInfo, /* STARTUPINFO pointer */ &piProcInfo); /* receives PROCESS_INFORMATION */ err = GetLastError(); SetCurrentDirectory(buf); /* return to prev directory */ if (! fSuccess) { return err; } if (appData.niceEngines){ // [HGM] nice: adjust engine proc priority if(appData.debugMode) fprintf(debugFP, "nice engine proc to %d\n", appData.niceEngines); SetPriorityClass(piProcInfo.hProcess, GetWin32Priority(appData.niceEngines)); } /* Close the handles we don't need in the parent */ CloseHandle(piProcInfo.hThread); CloseHandle(hChildStdinRd); CloseHandle(hChildStdoutWr); /* Prepare return value */ cp = (ChildProc *) calloc(1, sizeof(ChildProc)); cp->kind = CPReal; cp->hProcess = piProcInfo.hProcess; cp->pid = piProcInfo.dwProcessId; cp->hFrom = hChildStdoutRdDup; cp->hTo = hChildStdinWrDup; *pr = (void *) cp; /* Klaus Friedel says that this Sleep solves a problem under Windows 2000 where engines sometimes don't see the initial command(s) from WinBoard and hang. I don't understand how that can happen, but the Sleep is harmless, so I've put it in. Others have also reported what may be the same problem, so hopefully this will fix it for them too. */ Sleep(500); return NO_ERROR; } void DestroyChildProcess(ProcRef pr, int/*boolean*/ signal) { ChildProc *cp; int result; cp = (ChildProc *) pr; if (cp == NULL) return; switch (cp->kind) { case CPReal: /* TerminateProcess is considered harmful, so... */ CloseHandle(cp->hTo); /* Closing this will give the child an EOF and hopefully kill it */ if (cp->hFrom) CloseHandle(cp->hFrom); /* if NULL, InputThread will close it */ /* The following doesn't work because the chess program doesn't "have the same console" as WinBoard. Maybe we could arrange for this even though neither WinBoard nor the chess program uses a console for stdio? */ /*!!if (signal) GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, cp->pid);*/ /* [AS] Special termination modes for misbehaving programs... */ if( signal & 8 ) { result = TerminateProcess( cp->hProcess, 0 ); if ( appData.debugMode) { fprintf( debugFP, "Terminating process %lu, result=%d\n", cp->pid, result ); } } else if( signal & 4 ) { DWORD dw = WaitForSingleObject( cp->hProcess, appData.delayAfterQuit*1000 + 50 ); // Wait 3 seconds at most if( dw != WAIT_OBJECT_0 ) { result = TerminateProcess( cp->hProcess, 0 ); if ( appData.debugMode) { fprintf( debugFP, "Process %lu still alive after timeout, killing... result=%d\n", cp->pid, result ); } } } CloseHandle(cp->hProcess); break; case CPComm: if (cp->hFrom) CloseHandle(cp->hFrom); break; case CPSock: closesocket(cp->sock); WSACleanup(); break; case CPRcmd: if (signal) send(cp->sock2, "\017", 1, 0); /* 017 = 15 = SIGTERM */ closesocket(cp->sock); closesocket(cp->sock2); WSACleanup(); break; } free(cp); } void InterruptChildProcess(ProcRef pr) { ChildProc *cp; cp = (ChildProc *) pr; if (cp == NULL) return; switch (cp->kind) { case CPReal: /* The following doesn't work because the chess program doesn't "have the same console" as WinBoard. Maybe we could arrange for this even though neither WinBoard nor the chess program uses a console for stdio */ /*!!GenerateConsoleCtrlEvent(CTRL_C_EVENT, cp->pid);*/ break; case CPComm: case CPSock: /* Can't interrupt */ break; case CPRcmd: send(cp->sock2, "\002", 1, 0); /* 2 = SIGINT */ break; } } int OpenTelnet(char *host, char *port, ProcRef *pr) { char cmdLine[MSG_SIZ]; if (port[0] == NULLCHAR) { snprintf(cmdLine, MSG_SIZ, "%s %s", appData.telnetProgram, host); } else { snprintf(cmdLine, MSG_SIZ, "%s %s %s", appData.telnetProgram, host, port); } return StartChildProcess(cmdLine, "", pr); } /* Code to open TCP sockets */ int OpenTCP(char *host, char *port, ProcRef *pr) { ChildProc *cp; int err; SOCKET s; struct sockaddr_in sa, mysa; struct hostent FAR *hp; unsigned short uport; WORD wVersionRequested; WSADATA wsaData; /* Initialize socket DLL */ wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) return err; /* Make socket */ if ((s = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { err = WSAGetLastError(); WSACleanup(); return err; } /* Bind local address using (mostly) don't-care values. */ memset((char *) &mysa, 0, sizeof(struct sockaddr_in)); mysa.sin_family = AF_INET; mysa.sin_addr.s_addr = INADDR_ANY; uport = (unsigned short) 0; mysa.sin_port = htons(uport); if (bind(s, (struct sockaddr *) &mysa, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { err = WSAGetLastError(); WSACleanup(); return err; } /* Resolve remote host name */ memset((char *) &sa, 0, sizeof(struct sockaddr_in)); if (!(hp = gethostbyname(host))) { unsigned int b0, b1, b2, b3; err = WSAGetLastError(); if (sscanf(host, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) == 4) { hp = (struct hostent *) calloc(1, sizeof(struct hostent)); hp->h_addrtype = AF_INET; hp->h_length = 4; hp->h_addr_list = (char **) calloc(2, sizeof(char *)); hp->h_addr_list[0] = (char *) malloc(4); hp->h_addr_list[0][0] = (char) b0; hp->h_addr_list[0][1] = (char) b1; hp->h_addr_list[0][2] = (char) b2; hp->h_addr_list[0][3] = (char) b3; } else { WSACleanup(); return err; } } sa.sin_family = hp->h_addrtype; uport = (unsigned short) atoi(port); sa.sin_port = htons(uport); memcpy((char *) &sa.sin_addr, hp->h_addr, hp->h_length); /* Make connection */ if (connect(s, (struct sockaddr *) &sa, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { err = WSAGetLastError(); WSACleanup(); return err; } /* Prepare return value */ cp = (ChildProc *) calloc(1, sizeof(ChildProc)); cp->kind = CPSock; cp->sock = s; *pr = (ProcRef *) cp; return NO_ERROR; } int OpenCommPort(char *name, ProcRef *pr) { HANDLE h; COMMTIMEOUTS ct; ChildProc *cp; char fullname[MSG_SIZ]; if (*name != '\\') snprintf(fullname, MSG_SIZ, "\\\\.\\%s", name); else safeStrCpy(fullname, name, sizeof(fullname)/sizeof(fullname[0]) ); h = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (h == (HANDLE) -1) { return GetLastError(); } hCommPort = h; if (!SetCommState(h, (LPDCB) &dcb)) return GetLastError(); /* Accumulate characters until a 100ms pause, then parse */ ct.ReadIntervalTimeout = 100; ct.ReadTotalTimeoutMultiplier = 0; ct.ReadTotalTimeoutConstant = 0; ct.WriteTotalTimeoutMultiplier = 0; ct.WriteTotalTimeoutConstant = 0; if (!SetCommTimeouts(h, (LPCOMMTIMEOUTS) &ct)) return GetLastError(); /* Prepare return value */ cp = (ChildProc *) calloc(1, sizeof(ChildProc)); cp->kind = CPComm; cp->hFrom = h; cp->hTo = h; *pr = (ProcRef *) cp; return NO_ERROR; } int OpenLoopback(ProcRef *pr) { DisplayFatalError(_("Not implemented"), 0, 1); return NO_ERROR; } int OpenRcmd(char* host, char* user, char* cmd, ProcRef* pr) { ChildProc *cp; int err; SOCKET s, s2, s3; struct sockaddr_in sa, mysa; struct hostent FAR *hp; unsigned short uport; WORD wVersionRequested; WSADATA wsaData; int fromPort; char stderrPortStr[MSG_SIZ]; /* Initialize socket DLL */ wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) return err; /* Resolve remote host name */ memset((char *) &sa, 0, sizeof(struct sockaddr_in)); if (!(hp = gethostbyname(host))) { unsigned int b0, b1, b2, b3; err = WSAGetLastError(); if (sscanf(host, "%u.%u.%u.%u", &b0, &b1, &b2, &b3) == 4) { hp = (struct hostent *) calloc(1, sizeof(struct hostent)); hp->h_addrtype = AF_INET; hp->h_length = 4; hp->h_addr_list = (char **) calloc(2, sizeof(char *)); hp->h_addr_list[0] = (char *) malloc(4); hp->h_addr_list[0][0] = (char) b0; hp->h_addr_list[0][1] = (char) b1; hp->h_addr_list[0][2] = (char) b2; hp->h_addr_list[0][3] = (char) b3; } else { WSACleanup(); return err; } } sa.sin_family = hp->h_addrtype; uport = (unsigned short) 514; sa.sin_port = htons(uport); memcpy((char *) &sa.sin_addr, hp->h_addr, hp->h_length); /* Bind local socket to unused "privileged" port address */ s = INVALID_SOCKET; memset((char *) &mysa, 0, sizeof(struct sockaddr_in)); mysa.sin_family = AF_INET; mysa.sin_addr.s_addr = INADDR_ANY; for (fromPort = 1023;; fromPort--) { if (fromPort < 0) { WSACleanup(); return WSAEADDRINUSE; } if (s == INVALID_SOCKET) { if ((s = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { err = WSAGetLastError(); WSACleanup(); return err; } } uport = (unsigned short) fromPort; mysa.sin_port = htons(uport); if (bind(s, (struct sockaddr *) &mysa, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { err = WSAGetLastError(); if (err == WSAEADDRINUSE) continue; WSACleanup(); return err; } if (connect(s, (struct sockaddr *) &sa, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { err = WSAGetLastError(); if (err == WSAEADDRINUSE) { closesocket(s); s = -1; continue; } WSACleanup(); return err; } break; } /* Bind stderr local socket to unused "privileged" port address */ s2 = INVALID_SOCKET; memset((char *) &mysa, 0, sizeof(struct sockaddr_in)); mysa.sin_family = AF_INET; mysa.sin_addr.s_addr = INADDR_ANY; for (fromPort = 1023;; fromPort--) { if (fromPort == prevStderrPort) continue; // don't reuse port if (fromPort < 0) { (void) closesocket(s); WSACleanup(); return WSAEADDRINUSE; } if (s2 == INVALID_SOCKET) { if ((s2 = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { err = WSAGetLastError(); closesocket(s); WSACleanup(); return err; } } uport = (unsigned short) fromPort; mysa.sin_port = htons(uport); if (bind(s2, (struct sockaddr *) &mysa, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { err = WSAGetLastError(); if (err == WSAEADDRINUSE) continue; (void) closesocket(s); WSACleanup(); return err; } if (listen(s2, 1) == SOCKET_ERROR) { err = WSAGetLastError(); if (err == WSAEADDRINUSE) { closesocket(s2); s2 = INVALID_SOCKET; continue; } (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } break; } prevStderrPort = fromPort; // remember port used snprintf(stderrPortStr, MSG_SIZ, "%d", fromPort); if (send(s, stderrPortStr, strlen(stderrPortStr) + 1, 0) == SOCKET_ERROR) { err = WSAGetLastError(); (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } if (send(s, UserName(), strlen(UserName()) + 1, 0) == SOCKET_ERROR) { err = WSAGetLastError(); (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } if (*user == NULLCHAR) user = UserName(); if (send(s, user, strlen(user) + 1, 0) == SOCKET_ERROR) { err = WSAGetLastError(); (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } if (send(s, cmd, strlen(cmd) + 1, 0) == SOCKET_ERROR) { err = WSAGetLastError(); (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } if ((s3 = accept(s2, NULL, NULL)) == INVALID_SOCKET) { err = WSAGetLastError(); (void) closesocket(s); (void) closesocket(s2); WSACleanup(); return err; } (void) closesocket(s2); /* Stop listening */ /* Prepare return value */ cp = (ChildProc *) calloc(1, sizeof(ChildProc)); cp->kind = CPRcmd; cp->sock = s; cp->sock2 = s3; *pr = (ProcRef *) cp; return NO_ERROR; } InputSourceRef AddInputSource(ProcRef pr, int lineByLine, InputCallback func, VOIDSTAR closure) { InputSource *is, *is2 = NULL; ChildProc *cp = (ChildProc *) pr; is = (InputSource *) calloc(1, sizeof(InputSource)); is->lineByLine = lineByLine; is->func = func; is->closure = closure; is->second = NULL; is->next = is->buf; if (pr == NoProc) { is->kind = CPReal; consoleInputSource = is; } else { is->kind = cp->kind; /* [AS] Try to avoid a race condition if the thread is given control too early: we create all threads suspended so that the is->hThread variable can be safely assigned, then let the threads start with ResumeThread. */ switch (cp->kind) { case CPReal: is->hFile = cp->hFrom; cp->hFrom = NULL; /* now owned by InputThread */ is->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) NonOvlInputThread, (LPVOID) is, CREATE_SUSPENDED, &is->id); break; case CPComm: is->hFile = cp->hFrom; cp->hFrom = NULL; /* now owned by InputThread */ is->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) InputThread, (LPVOID) is, CREATE_SUSPENDED, &is->id); break; case CPSock: is->sock = cp->sock; is->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread, (LPVOID) is, CREATE_SUSPENDED, &is->id); break; case CPRcmd: is2 = (InputSource *) calloc(1, sizeof(InputSource)); *is2 = *is; is->sock = cp->sock; is->second = is2; is2->sock = cp->sock2; is2->second = is2; is->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread, (LPVOID) is, CREATE_SUSPENDED, &is->id); is2->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) SocketInputThread, (LPVOID) is2, CREATE_SUSPENDED, &is2->id); break; } if( is->hThread != NULL ) { ResumeThread( is->hThread ); } if( is2 != NULL && is2->hThread != NULL ) { ResumeThread( is2->hThread ); } } return (InputSourceRef) is; } void RemoveInputSource(InputSourceRef isr) { InputSource *is; is = (InputSource *) isr; is->hThread = NULL; /* tell thread to stop */ CloseHandle(is->hThread); if (is->second != NULL) { is->second->hThread = NULL; CloseHandle(is->second->hThread); } } int no_wrap(char *message, int count) { ConsoleOutput(message, count, FALSE); return count; } int OutputToProcess(ProcRef pr, char *message, int count, int *outError) { DWORD dOutCount; int outCount = SOCKET_ERROR; ChildProc *cp = (ChildProc *) pr; static OVERLAPPED ovl; static int line = 0; if (pr == NoProc) { if (appData.noJoin || !appData.useInternalWrap) return no_wrap(message, count); else { int width = get_term_width(); int len = wrap(NULL, message, count, width, &line); char *msg = malloc(len); int dbgchk; if (!msg) return no_wrap(message, count); else { dbgchk = wrap(msg, message, count, width, &line); if (dbgchk != len && appData.debugMode) fprintf(debugFP, "wrap(): dbgchk(%d) != len(%d)\n", dbgchk, len); ConsoleOutput(msg, len, FALSE); free(msg); return len; } } } if (ovl.hEvent == NULL) { ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); } ovl.Internal = ovl.InternalHigh = ovl.Offset = ovl.OffsetHigh = 0; switch (cp->kind) { case CPSock: case CPRcmd: outCount = send(cp->sock, message, count, 0); if (outCount == SOCKET_ERROR) { *outError = WSAGetLastError(); } else { *outError = NO_ERROR; } break; case CPReal: if (WriteFile(((ChildProc *)pr)->hTo, message, count, &dOutCount, NULL)) { *outError = NO_ERROR; outCount = (int) dOutCount; } else { *outError = GetLastError(); } break; case CPComm: *outError = DoWriteFile(((ChildProc *)pr)->hTo, message, count, &dOutCount, &ovl); if (*outError == NO_ERROR) { outCount = (int) dOutCount; } break; } return outCount; } void DoSleep(int n) { if(n != 0) Sleep(n); } int OutputToProcessDelayed(ProcRef pr, char *message, int count, int *outError, long msdelay) { /* Ignore delay, not implemented for WinBoard */ return OutputToProcess(pr, message, count, outError); } void CmailSigHandlerCallBack(InputSourceRef isr, VOIDSTAR closure, char *buf, int count, int error) { DisplayFatalError(_("Not implemented"), 0, 1); } /* see wgamelist.c for Game List functions */ /* see wedittags.c for Edit Tags functions */ int ICSInitScript() { FILE *f; char buf[MSG_SIZ]; char *dummy; if (SearchPath(installDir, appData.icsLogon, NULL, MSG_SIZ, buf, &dummy)) { f = fopen(buf, "r"); if (f != NULL) { ProcessICSInitScript(f); fclose(f); return TRUE; } } return FALSE; } VOID StartAnalysisClock() { if (analysisTimerEvent) return; analysisTimerEvent = SetTimer(hwndMain, (UINT) ANALYSIS_TIMER_ID, (UINT) 2000, NULL); } VOID SetHighlights(int fromX, int fromY, int toX, int toY) { highlightInfo.sq[0].x = fromX; highlightInfo.sq[0].y = fromY; highlightInfo.sq[1].x = toX; highlightInfo.sq[1].y = toY; } VOID ClearHighlights() { highlightInfo.sq[0].x = highlightInfo.sq[0].y = highlightInfo.sq[1].x = highlightInfo.sq[1].y = -1; } VOID SetPremoveHighlights(int fromX, int fromY, int toX, int toY) { premoveHighlightInfo.sq[0].x = fromX; premoveHighlightInfo.sq[0].y = fromY; premoveHighlightInfo.sq[1].x = toX; premoveHighlightInfo.sq[1].y = toY; } VOID ClearPremoveHighlights() { premoveHighlightInfo.sq[0].x = premoveHighlightInfo.sq[0].y = premoveHighlightInfo.sq[1].x = premoveHighlightInfo.sq[1].y = -1; } VOID ShutDownFrontEnd() { if (saveSettingsOnExit) SaveSettings(settingsFileName); DeleteClipboardTempFiles(); } void BoardToTop() { if (IsIconic(hwndMain)) ShowWindow(hwndMain, SW_RESTORE); SetActiveWindow(hwndMain); } /* * Prototypes for animation support routines */ static void ScreenSquare(int column, int row, POINT * pt); static void Tween( POINT * start, POINT * mid, POINT * finish, int factor, POINT frames[], int * nFrames); #define kFactor 4 void AnimateAtomicCapture(Board board, int fromX, int fromY, int toX, int toY) { // [HGM] atomic: animate blast wave int i; explodeInfo.fromX = fromX; explodeInfo.fromY = fromY; explodeInfo.toX = toX; explodeInfo.toY = toY; for(i=1; i<4*kFactor; i++) { explodeInfo.radius = (i*180)/(4*kFactor-1); DrawPosition(FALSE, board); Sleep(appData.animSpeed); } explodeInfo.radius = 0; DrawPosition(TRUE, board); } void AnimateMove(board, fromX, fromY, toX, toY) Board board; int fromX; int fromY; int toX; int toY; { ChessSquare piece; int x = toX, y = toY; POINT start, finish, mid; POINT frames[kFactor * 2 + 1]; int nFrames, n; if(killX >= 0 && IS_LION(board[fromY][fromX])) Roar(); if (!appData.animate) return; if (doingSizing) return; if (fromY < 0 || fromX < 0) return; piece = board[fromY][fromX]; if (piece >= EmptySquare) return; if(killX >= 0) toX = killX, toY = killY; // [HGM] lion: first to kill square again: ScreenSquare(fromX, fromY, &start); ScreenSquare(toX, toY, &finish); /* All moves except knight jumps move in straight line */ if (!(abs(fromX-toX) == 1 && abs(fromY-toY) == 2 || abs(fromX-toX) == 2 && abs(fromY-toY) == 1)) { mid.x = start.x + (finish.x - start.x) / 2; mid.y = start.y + (finish.y - start.y) / 2; } else { /* Knight: make straight movement then diagonal */ if (abs(toY - fromY) < abs(toX - fromX)) { mid.x = start.x + (finish.x - start.x) / 2; mid.y = start.y; } else { mid.x = start.x; mid.y = start.y + (finish.y - start.y) / 2; } } /* Don't use as many frames for very short moves */ if (abs(toY - fromY) + abs(toX - fromX) <= 2) Tween(&start, &mid, &finish, kFactor - 1, frames, &nFrames); else Tween(&start, &mid, &finish, kFactor, frames, &nFrames); animInfo.from.x = fromX; animInfo.from.y = fromY; animInfo.to.x = toX; animInfo.to.y = toY; animInfo.lastpos = start; animInfo.piece = piece; for (n = 0; n < nFrames; n++) { animInfo.pos = frames[n]; DrawPosition(FALSE, NULL); animInfo.lastpos = animInfo.pos; Sleep(appData.animSpeed); } animInfo.pos = finish; DrawPosition(FALSE, NULL); if(toX != x || toY != y) { fromX = toX; fromY = toY; toX = x; toY = y; goto again; } // second leg animInfo.piece = EmptySquare; Explode(board, fromX, fromY, toX, toY); } /* Convert board position to corner of screen rect and color */ static void ScreenSquare(column, row, pt) int column; int row; POINT * pt; { if (flipView) { pt->x = lineGap + ((BOARD_WIDTH-1)-column) * (squareSize + lineGap) + border; pt->y = lineGap + row * (squareSize + lineGap) + border; } else { pt->x = lineGap + column * (squareSize + lineGap) + border; pt->y = lineGap + ((BOARD_HEIGHT-1)-row) * (squareSize + lineGap) + border; } } /* Generate a series of frame coords from start->mid->finish. The movement rate doubles until the half way point is reached, then halves back down to the final destination, which gives a nice slow in/out effect. The algorithmn may seem to generate too many intermediates for short moves, but remember that the purpose is to attract the viewers attention to the piece about to be moved and then to where it ends up. Too few frames would be less noticeable. */ static void Tween(start, mid, finish, factor, frames, nFrames) POINT * start; POINT * mid; POINT * finish; int factor; POINT frames[]; int * nFrames; { int n, fraction = 1, count = 0; /* Slow in, stepping 1/16th, then 1/8th, ... */ for (n = 0; n < factor; n++) fraction *= 2; for (n = 0; n < factor; n++) { frames[count].x = start->x + (mid->x - start->x) / fraction; frames[count].y = start->y + (mid->y - start->y) / fraction; count ++; fraction = fraction / 2; } /* Midpoint */ frames[count] = *mid; count ++; /* Slow out, stepping 1/2, then 1/4, ... */ fraction = 2; for (n = 0; n < factor; n++) { frames[count].x = finish->x - (finish->x - mid->x) / fraction; frames[count].y = finish->y - (finish->y - mid->y) / fraction; count ++; fraction = fraction * 2; } *nFrames = count; } void SettingsPopUp(ChessProgramState *cps) { // [HGM] wrapper needed because handles must not be passed through back-end EngineOptionsPopup(savedHwnd, cps); } int flock(int fid, int code) { HANDLE hFile = (HANDLE) _get_osfhandle(fid); OVERLAPPED ov; ov.hEvent = NULL; ov.Offset = 0; ov.OffsetHigh = 0; switch(code) { case 1: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_SH case 2: LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, 1024, 0, &ov); break; // LOCK_EX case 3: UnlockFileEx(hFile, 0, 1024, 0, &ov); break; // LOCK_UN default: return -1; } return 0; } char * Col2Text (int n) { static int i=0; static char col[8][20]; COLORREF color = *(COLORREF *) colorVariable[n]; i = i+1 & 7; snprintf(col[i], 20, "#%02lx%02lx%02lx", color&0xff, (color>>8)&0xff, (color>>16)&0xff); return col[i]; } void ActivateTheme (int new) { // Redo initialization of features depending on options that can occur in themes InitTextures(); if(new) InitDrawingColors(); fontBitmapSquareSize = 0; // request creation of new font pieces InitDrawingSizes(boardSize, 0); InvalidateRect(hwndMain, NULL, TRUE); } xboard-4.8.0/winboard/COMPILING0000644000175000001440000000416112420374633012776 00000000000000Compiling with an Integrated Development Envrionment Microsoft Visual C++ -- For MSVC 6.0 IDE, all you need to do is 'File|Open Workspace...' and select 'winboard.dsw'. Then to build, choose 'Build|Batch Build...' and select the targets you want to build. This method has full support for Debug and Release builds either with or without JAWS support. For later versions of Visual C++, open the same workspace and convert when prompted. Then compile as above. DevCpp -- For DevCpp, you need to 'File|Open Project or File...' and select either 'winboard.dev' or 'WB4Jaws.dev'. After parsing the project, you can 'Execute|Compile' to build. This IDE has no facility for defines in the resource compiler, so the version information resource will not indicate JAWS support even if it actually has that support. These projects are not set up for debugging, but you can do so by adjusting the 'Compiler' and 'Parameters' options in the 'Project|Project Options' dialog. Compiling from the Command Line GCC -- this includes cygwin, mingw, djgpp and others. make -f makefile.gcc You can modify certain settings in the makefile such as JAWS support, debugging support. If using cygwin, you can select whether or not to link with cygwin1.dll instead of the msvcrt runtime. CL -- this includes MSVC and recent Intel compilers. nmake -f makefile.ms Note: NMAKE, not MAKE For Visual Studio 2005 and later, set VCVER to 8, otherwise set it to 6. You can select JAWS support or debugging just like the GCC makefile. For MSVC 6.0 and earlier, you are going to need the latest SDK from Microsoft. After you install it, set the SDK_INC variable appropriately. It defaults to the standard location, but you still need to uncomment the line. Prior to compiling from the command line, it will be necessary to invoke VCVARS32.BAT if you didn't have MSVC register the command line environment variables during installation. xboard-4.8.0/winboard/defaults.h0000644000175000001440000002516112421746530013515 00000000000000/* * defaults.h -- Default settings for Windows NT front end to XBoard * * Copyright 1991 by Digital Equipment Corporation, Maynard, * Massachusetts. * * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * The following terms apply to Digital Equipment Corporation's copyright * interest in XBoard: * ------------------------------------------------------------------------ * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * ------------------------------------------------------------------------ * * The following terms apply to the enhanced version of XBoard * distributed by the Free Software Foundation: * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ /* Static */ #define POSITION_FILT "Position files (*.fen,*.epd,*.pos)\0*.fen;*.epd;*.pos\0All files (*.*)\0*.*\0" #define GAME_FILT "Game files (*.pgn,*.gam)\0*.pgn;*.gam\0All files (*.*)\0*.*\0" #define DIAGRAM_FILT "bitmap files (*.bmp)\0*.bmp\0All files (*.*)\0*.*\0" #define SOUND_FILT "Wave files (*.wav)\0*.wav\0All files (*.*)\0*.*\0" #define OUTER_MARGIN (tinyLayout ? 0 : 4) #define INNER_MARGIN (tinyLayout ? 0 : 2) #define MESSAGE_LINE_LEFTMARGIN 2 #define MESSAGE_TEXT_MAX 256 /*#define COLOR_ECHOOFF RGB(192,192,192)*/ #define COLOR_ECHOOFF consoleBackgroundColor #define WRAP_INDENT 200 /* Settable */ #define FIRST_CHESS_PROGRAM "" #define FIRST_DIRECTORY "." #define SECOND_CHESS_PROGRAM "" #define SECOND_DIRECTORY "." #define CLOCK_FONT_TINY "Arial:9.0 b" #define CLOCK_FONT_TEENY "Arial:9.0 b" #define CLOCK_FONT_DINKY "Arial:10.0 b" #define CLOCK_FONT_PETITE "Arial:10.0 b" #define CLOCK_FONT_SLIM "Arial:12.0 b" #define CLOCK_FONT_SMALL "Arial:14.0 b" #define CLOCK_FONT_MEDIOCRE "Arial:14.0 b" #define CLOCK_FONT_MIDDLING "Arial:14.0 b" #define CLOCK_FONT_AVERAGE "Arial:15.0 b" #define CLOCK_FONT_MODERATE "Arial:16.0 b" #define CLOCK_FONT_MEDIUM "Arial:16.0 b" #define CLOCK_FONT_BULKY "Arial:17.0 b" #define CLOCK_FONT_LARGE "Arial:19.0 b" #define CLOCK_FONT_BIG "Arial:20.0 b" #define CLOCK_FONT_HUGE "Arial:21.0 b" #define CLOCK_FONT_GIANT "Arial:22.0 b" #define CLOCK_FONT_COLOSSAL "Arial:23.0 b" #define CLOCK_FONT_TITANIC "Arial:24.0 b" #define MESSAGE_FONT_TINY "Small Fonts:6.0" #define MESSAGE_FONT_TEENY "Small Fonts:6.0" #define MESSAGE_FONT_DINKY "Small Fonts:7.0" #define MESSAGE_FONT_PETITE "Small Fonts:7.0" #define MESSAGE_FONT_SLIM "Arial:8.0 b" #define MESSAGE_FONT_SMALL "Arial:9.0 b" #define MESSAGE_FONT_MEDIOCRE "Arial:9.0 b" #define MESSAGE_FONT_MIDDLING "Arial:9.0 b" #define MESSAGE_FONT_AVERAGE "Arial:10.0 b" #define MESSAGE_FONT_MODERATE "Arial:10.0 b" #define MESSAGE_FONT_MEDIUM "Arial:10.0 b" #define MESSAGE_FONT_BULKY "Arial:10.0 b" #define MESSAGE_FONT_LARGE "Arial:10.0 b" #define MESSAGE_FONT_BIG "Arial:11.0 b" #define MESSAGE_FONT_HUGE "Arial:11.0 b" #define MESSAGE_FONT_GIANT "Arial:11.0 b" #define MESSAGE_FONT_COLOSSAL "Arial:12.0 b" #define MESSAGE_FONT_TITANIC "Arial:12.0 b" #define COORD_FONT_TINY "Small Fonts:4.0" #define COORD_FONT_TEENY "Small Fonts:4.0" #define COORD_FONT_DINKY "Small Fonts:5.0" #define COORD_FONT_PETITE "Small Fonts:5.0" #define COORD_FONT_SLIM "Small Fonts:6.0" #define COORD_FONT_SMALL "Small Fonts:7.0" #define COORD_FONT_MEDIOCRE "Small Fonts:7.0" #define COORD_FONT_MIDDLING "Small Fonts:7.0" #define COORD_FONT_AVERAGE "Arial:7.0 b" #define COORD_FONT_MODERATE "Arial:7.0 b" #define COORD_FONT_MEDIUM "Arial:7.0 b" #define COORD_FONT_BULKY "Arial:7.0 b" #define COORD_FONT_LARGE "Arial:7.0 b" #define COORD_FONT_BIG "Arial:8.0 b" #define COORD_FONT_HUGE "Arial:8.0 b" #define COORD_FONT_GIANT "Arial:8.0 b" #define COORD_FONT_COLOSSAL "Arial:9.0 b" #define COORD_FONT_TITANIC "Arial:9.0 b" #define CONSOLE_FONT_TINY "Courier New:8.0" #define CONSOLE_FONT_TEENY "Courier New:8.0" #define CONSOLE_FONT_DINKY "Courier New:8.0" #define CONSOLE_FONT_PETITE "Courier New:8.0" #define CONSOLE_FONT_SLIM "Courier New:8.0" #define CONSOLE_FONT_SMALL "Courier New:8.0" #define CONSOLE_FONT_MEDIOCRE "Courier New:8.0" #define CONSOLE_FONT_MIDDLING "Courier New:8.0" #define CONSOLE_FONT_AVERAGE "Courier New:8.0" #define CONSOLE_FONT_MODERATE "Courier New:8.0" #define CONSOLE_FONT_MEDIUM "Courier New:8.0" #define CONSOLE_FONT_BULKY "Courier New:8.0" #define CONSOLE_FONT_LARGE "Courier New:8.0" #define CONSOLE_FONT_BIG "Courier New:8.0" #define CONSOLE_FONT_HUGE "Courier New:8.0" #define CONSOLE_FONT_GIANT "Courier New:8.0" #define CONSOLE_FONT_COLOSSAL "Courier New:8.0" #define CONSOLE_FONT_TITANIC "Courier New:8.0" #define COMMENT_FONT_TINY "Arial:9.0" #define COMMENT_FONT_TEENY "Arial:9.0" #define COMMENT_FONT_DINKY "Arial:9.0" #define COMMENT_FONT_PETITE "Arial:9.0" #define COMMENT_FONT_SLIM "Arial:9.0" #define COMMENT_FONT_SMALL "Arial:9.0" #define COMMENT_FONT_MEDIOCRE "Arial:9.0" #define COMMENT_FONT_MIDDLING "Arial:9.0" #define COMMENT_FONT_AVERAGE "Arial:9.0" #define COMMENT_FONT_MODERATE "Arial:9.0" #define COMMENT_FONT_MEDIUM "Arial:9.0" #define COMMENT_FONT_BULKY "Arial:9.0" #define COMMENT_FONT_LARGE "Arial:9.0" #define COMMENT_FONT_BIG "Arial:9.0" #define COMMENT_FONT_HUGE "Arial:9.0" #define COMMENT_FONT_GIANT "Arial:9.0" #define COMMENT_FONT_COLOSSAL "Arial:9.0" #define COMMENT_FONT_TITANIC "Arial:9.0" #define EDITTAGS_FONT_TINY "Courier New:8.0" #define EDITTAGS_FONT_TEENY "Courier New:8.0" #define EDITTAGS_FONT_DINKY "Courier New:8.0" #define EDITTAGS_FONT_PETITE "Courier New:8.0" #define EDITTAGS_FONT_SLIM "Courier New:8.0" #define EDITTAGS_FONT_SMALL "Courier New:8.0" #define EDITTAGS_FONT_MEDIUM "Courier New:8.0" #define EDITTAGS_FONT_MEDIOCRE "Courier New:8.0" #define EDITTAGS_FONT_MIDDLING "Courier New:8.0" #define EDITTAGS_FONT_AVERAGE "Courier New:8.0" #define EDITTAGS_FONT_MODERATE "Courier New:8.0" #define EDITTAGS_FONT_BULKY "Courier New:8.0" #define EDITTAGS_FONT_LARGE "Courier New:8.0" #define EDITTAGS_FONT_BIG "Courier New:8.0" #define EDITTAGS_FONT_HUGE "Courier New:8.0" #define EDITTAGS_FONT_GIANT "Courier New:8.0" #define EDITTAGS_FONT_COLOSSAL "Courier New:8.0" #define EDITTAGS_FONT_TITANIC "Courier New:8.0" #define MOVEHISTORY_FONT_ALL "MS Sans Serif:8.0" #define GAMELIST_FONT_ALL "MS Sans Serif:8.0" #define COLOR_SHOUT "#209000" #define COLOR_SSHOUT "b #289808" #define COLOR_CHANNEL1 "#2020E0" #define COLOR_CHANNEL "b #4040FF" #define COLOR_KIBITZ "b #FF00FF" #define COLOR_TELL "b #FF0000" #define COLOR_CHALLENGE "bi #FF0000" #define COLOR_REQUEST "bi #FF0000" #define COLOR_SEEK "#980808" #define COLOR_NORMAL "#000000" #define COLOR_NONE "#000000" #define COLOR_BKGD "#FFFFFF" #define SOUND_BELL "$" #define BUILT_IN_SOUND_NAMES {\ "Beepbeep", "Ching", "Click", "Cymbal", "Ding", "Drip", \ "Gong", "Laser", "Move", "Penalty", "Phone", "Pop", "Pop2", \ "Roar", "Slap", "Squeak", "Swish", "Thud", "Whipcrack", \ "Alarm", "Challenge", "Channel", "Channel1", "Draw", "Kibitz", \ "Lose", "Request", "Seek", "Shout", "SShout", "Tell", "Unfinished", \ "Win", NULL \ } #define SETTINGS_FILE "winboard.ini" #define DEBUG_FILE "winboard.debug" #define ICS_LOGON "ics.ini" #define ICS_NAMES "\ chessclub.com /icsport=5000 /icshelper=timestamp\n\ freechess.org /icsport=5000 /icshelper=timeseal\n\ global.chessparlor.com /icsport=6000 /icshelper=timeseal\n\ chessanytime.com /icsport=5000\n\ chess.net /icsport=5000\n\ chess.deepnet.com /icsport=5000 /icshelper=timeseal\n\ zics.org /icsport=5000\n\ jogo.cex.org.br /icsport=5000\n\ ajedrez.cec.uchile.cl /icsport=5000\n\ fly.cc.fer.hr /icsport=7890\n\ freechess.nl /icsport=5000 /icshelper=timeseal\n\ jeu.echecs.com /icsport=5000\n\ chess.unix-ag.uni-kl.de /icsport=5000 /icshelper=timeseal\n\ chess.mds.mdh.se /icsport=5000\n\ " #define ICS_TEXT_MENU_DEFAULT "\ -\n\ &Who,who,0,1\n\ Playe&rs,players,0,1\n\ &Games,games,0,1\n\ &Sought,sought,0,1\n\ | ,none,0,0\n\ Open Chat &Box (name),chat,1,0\n\ &Tell (name),tell,1,0\n\ M&essage (name),message,1,0\n\ -\n\ &Finger (name),finger,1,1\n\ &Vars (name),vars,1,1\n\ &Observe (name),observe,1,1\n\ &Match (name),match,1,1\n\ Pl&ay (name),play,1,1\n\ " #define FCP_NAMES "\ fmax /fd=Fairy-Max\n\ GNUChess\n\ \"GNUChes5 xboard\"\n\ " #define SCP_NAMES "\ fmax /sd=Fairy-Max\n\ GNUChess\n\ \"GNUChes5 xboard\"\n\ " xboard-4.8.0/winboard/wclipbrd.c0000644000175000001440000002407112421746530013506 00000000000000/* * wclipbrd.c -- Clipboard routines for WinBoard * * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include /* required for all Windows applications */ #include #include #include #include #include "common.h" #include "frontend.h" #include "backend.h" #include "winboard.h" #include "wclipbrd.h" #define _(s) T_(s) #define N_(s) s /* Imports from winboard.c */ extern HWND hwndMain; /* File globals */ static char *copyTemp; static char *pasteTemp; VOID CopyFENToClipboard() { char *fen = NULL; if(gameMode == EditPosition) EditPositionDone(TRUE); // [HGM] mak sure castling rights are set consistently fen = PositionToFEN(currentMove, NULL, 1); if (!fen) { DisplayError(_("Unable to convert position to FEN."), 0); return; } if (!CopyTextToClipboard(fen)) DisplayError(_("Unable to copy FEN to clipboard."), 0); free(fen); } /* [AS] */ HGLOBAL ExportGameListAsText(); VOID CopyGameListToClipboard() { HGLOBAL hMem = ExportGameListAsText(); if( hMem != NULL ) { /* Assign memory block to clipboard */ BOOL ok = OpenClipboard( hwndMain ); if( ok ) { ok = EmptyClipboard(); if( ok ) { if( hMem != SetClipboardData( CF_TEXT, hMem ) ) { ok = FALSE; } } CloseClipboard(); if( ! ok ) { GlobalFree( hMem ); } } if( ! ok ) { DisplayError( "Cannot copy list to clipboard.", 0 ); } } } VOID CopyGameToClipboard() { /* A rather cheesy hack here. Write the game to a file, then read from the * file into the clipboard. */ char *buf = NULL; FILE *f; unsigned long size; size_t len; struct stat st; if (!copyTemp) { copyTemp = tempnam(NULL, "wbcp"); } if (!copyTemp) { DisplayError(_("Cannot create temporary file name."),0); return; } f = fopen(copyTemp, "w"); if (!f) { DisplayError(_("Cannot open temporary file."), 0); return; } if (!SaveGame(f,0,"")) { /* call into backend */ DisplayError(_("Cannot write to temporary file."), 0); goto copy_game_to_clipboard_cleanup; } f = fopen(copyTemp, "rb"); if (!f) { DisplayError(_("Cannot reopen temporary file."), 0); goto copy_game_to_clipboard_cleanup; } if (fstat(fileno(f), &st) < 0) { DisplayError(_(_("Cannot determine size of file.")), 0); goto copy_game_to_clipboard_cleanup; } size = st.st_size; if (size == -1) { DisplayError(_(_("Cannot determine size of file.")), 0); goto copy_game_to_clipboard_cleanup; } rewind(f); buf = (char*)malloc(size+1); if (!buf) { DisplayError(_("Cannot allocate clipboard buffer."), 0); goto copy_game_to_clipboard_cleanup; } len = fread(buf, sizeof(char), size, f); if (len == -1) { DisplayError(_("Cannot read from temporary file."), 0); goto copy_game_to_clipboard_cleanup; } if ((unsigned long)size != (unsigned long)len) { /* sigh */ DisplayError(_("Error reading from temporary file."), 0); goto copy_game_to_clipboard_cleanup; } buf[size] = 0; if (!CopyTextToClipboard(buf)) { DisplayError(_("Cannot copy text to clipboard"), 0); } copy_game_to_clipboard_cleanup: if (buf) free(buf); if (f) fclose(f); } int CopyTextToClipboard(char *text) { /* some (most?) of the error checking may be overkill, * but hey, this is Windows */ HGLOBAL hGlobalMem; LPVOID lpGlobalMem; BOOL locked; UINT lockCount; DWORD err; hGlobalMem = GlobalAlloc(GHND, (DWORD)lstrlen(text)+1); if (hGlobalMem == NULL) { DisplayError(_("Unable to allocate memory for clipboard."), 0); return FALSE; } lpGlobalMem = GlobalLock(hGlobalMem); if (lpGlobalMem == NULL) { DisplayError(_(_("Unable to lock clipboard memory.")), 0); GlobalFree(hGlobalMem); return FALSE; } safeStrCpy(lpGlobalMem, text, 1<<20); if (appData.debugMode) { lockCount = GlobalFlags(hGlobalMem) & GMEM_LOCKCOUNT; fprintf(debugFP, "CopyTextToClipboard(): lock count %d\n", lockCount); } SetLastError(NO_ERROR); locked = GlobalUnlock(hGlobalMem); err = GetLastError(); if (appData.debugMode) { lockCount = GlobalFlags(hGlobalMem) & GMEM_LOCKCOUNT; fprintf(debugFP, "CopyTextToClipboard(): lock count %d\n", lockCount); } if (!locked) { locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED)); if (appData.debugMode) { fprintf(debugFP, "CopyTextToClipboard(): err %d locked %d\n", (int)err, locked); } } if (locked) { DisplayError(_("Cannot unlock clipboard memory."), 0); GlobalFree(hGlobalMem); return FALSE; } if (!OpenClipboard(hwndMain)) { DisplayError(_("Cannot open clipboard."), 0); GlobalFree(hGlobalMem); return FALSE; } if (!EmptyClipboard()) { DisplayError(_("Cannot empty clipboard."), 0); return FALSE; } if (hGlobalMem != SetClipboardData(CF_TEXT, hGlobalMem)) { DisplayError(_("Cannot copy text to clipboard."), 0); CloseClipboard(); GlobalFree(hGlobalMem); return FALSE; } if (!CloseClipboard()) DisplayError(_("Cannot close clipboard."), 0); return TRUE; } /* [AS] Reworked paste functions so they can work with strings too */ VOID PasteFENFromString( char * fen ) { if (appData.debugMode) { fprintf(debugFP, "PasteFenFromString(): fen '%s'\n", fen); } EditPositionPasteFEN(fen); /* call into backend */ free(fen); } VOID PasteFENFromClipboard() { char *fen = NULL; if (!PasteTextFromClipboard(&fen)) { DisplayError(_("Unable to paste FEN from clipboard."), 0); return; } PasteFENFromString( fen ); } VOID PasteGameFromString( char * buf ) { FILE *f; size_t len; if (!pasteTemp) { pasteTemp = tempnam(NULL, "wbpt"); } f = fopen(pasteTemp, "w"); if (!f) { DisplayError(_("Unable to create temporary file."), 0); free(buf); /* [AS] */ return; } len = fwrite(buf, sizeof(char), strlen(buf), f); fclose(f); if (len != strlen(buf)) { DisplayError(_("Error writing to temporary file."), 0); free(buf); /* [AS] */ return; } LoadGameFromFile(pasteTemp, 0, "Clipboard", TRUE); free( buf ); /* [AS] */ } VOID PasteGameFromClipboard() { /* Write the clipboard to a temp file, then let LoadGameFromFile() * do all the work. */ char *buf; if (!PasteTextFromClipboard(&buf)) { return; } PasteGameFromString( buf ); } /* [AS] Try to detect whether the clipboard contains FEN or PGN data */ VOID PasteGameOrFENFromClipboard() { char *buf; // char *tmp; Board dummyBoard; int dummy; // [HGM] paste any if (!PasteTextFromClipboard(&buf)) { return; } // [HGM] paste any: make still smarter, to allow pasting of games without tags, recognize FEN in stead if(!ParseFEN(dummyBoard, &dummy, buf, 0) ) { PasteGameFromString( buf ); } else { PasteFENFromString( buf ); } } int PasteTextFromClipboard(char **text) { /* some (most?) of the error checking may be overkill, * but hey, this is Windows */ HANDLE hClipMem; LPVOID lpClipMem; BOOL locked = FALSE; DWORD err; UINT lockCount; if (!OpenClipboard(hwndMain)) { DisplayError(_("Unable to open clipboard."), 0); return FALSE; } hClipMem = GetClipboardData(CF_TEXT); if (hClipMem == NULL) { CloseClipboard(); DisplayError(_("No text in clipboard."), 0); return FALSE; } lpClipMem = GlobalLock(hClipMem); if (lpClipMem == NULL) { CloseClipboard(); DisplayError(_(_("Unable to lock clipboard memory.")), 0); return FALSE; } *text = (char *) malloc(GlobalSize(hClipMem)+1); if (!*text) { DisplayError(_("Unable to allocate memory for text string."), 0); CloseClipboard(); return FALSE; } safeStrCpy(*text, lpClipMem, 1<<20 ); if (appData.debugMode) { lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT; fprintf(debugFP, "PasteTextFromClipboard(): lock count %d\n", lockCount); } SetLastError(NO_ERROR); /*suggested by Wilkin Ng*/ lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT; if (lockCount) { locked = GlobalUnlock(hClipMem); } err = GetLastError(); if (appData.debugMode) { lockCount = GlobalFlags(hClipMem) & GMEM_LOCKCOUNT; fprintf(debugFP, "PasteTextFromClipboard(): lock count %d\n", lockCount); } if (!locked) { locked = !((err == NO_ERROR) || (err == ERROR_NOT_LOCKED)); if (appData.debugMode) { fprintf(debugFP, "PasteTextFromClipboard(): err %d locked %d\n", (int)err, locked); } } if (locked) DisplayError(_("Unable to unlock clipboard memory."), 0); if (!CloseClipboard()) DisplayError(_("Unable to close clipboard."), 0); return TRUE; } VOID DeleteClipboardTempFiles() { if (copyTemp) remove(copyTemp); if (pasteTemp) remove(pasteTemp); } xboard-4.8.0/winboard/config.h0000644000175000001440000001023712421747466013162 00000000000000/* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if you have that is POSIX.1 compatible. */ /*#undef HAVE_SYS_WAIT_H*/ /* Define if you need to in order for stat and other things to work. */ /*#undef _POSIX_SOURCE*/ /* Define as the return type of signal handlers (int or void). */ /*#undef RETSIGTYPE*/ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ /*#undef TIME_WITH_SYS_TIME*/ /* Define if lex declares yytext as a char * by default, not a char[]. */ /*#undef YYTEXT_POINTER*/ /*#define FIRST_PTY_LETTER 'p'*/ #define HAVE_FCNTL_H 1 #define HAVE_GETHOSTNAME 0 #define HAVE_GETTIMEOFDAY 0 /* Use our own random() defined in winboard.c. */ #define HAVE_RANDOM 0 #define HAVE_SYS_SOCKET_H 0 /*#undef IBMRTAIX*/ #define LAST_PTY_LETTER 'q' /* Name of package */ #define PACKAGE "WinBoard" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "bug-xboard@gnu.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "WinBoard" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "WinBoard 4.8.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "winboard" /* Define to the version of this package. */ #define PACKAGE_VERSION "4.8.0" /* Define the Windows-specific FILE version info. this *MUST* be four comma separated 16-bit integers */ /* remember to not start a number with 0 (octal), dates like 2014,0901 would lead to an error */ #define PACKAGE_FILEVERSION 4,8,2014,929 #define PTY_ITERATION #define PTY_NAME_SPRINTF #define PTY_TTY_NAME_SPRINTF #define REMOTE_SHELL "" /*#undef RTU*/ /*#undef UNIPLUS*/ #define USE_PTYS 0 /*#undef X_WCHAR*/ #ifndef __BORLANDC__ #define WIN32 1 #else #define WIN32 #endif #define ZIPPY 1 /* Define if you have the _getpty function. */ /*#undef HAVE__GETPTY*/ /* Define if you have the ftime function. */ #define HAVE_FTIME 1 /* Define if you have the grantpt function. */ /*#undef HAVE_GRANTPT*/ /* Define if you have the rand48 function. */ /*#undef HAVE_RAND48*/ /* Define if you have the sysinfo function. */ /*#undef HAVE_SYSINFO*/ /* Define if you have the header file. */ /*#undef HAVE_LAN_SOCKET_H*/ /* Define if you have the header file. */ #define HAVE_STRING_H 1 /* Define if you have the header file. */ /*#undef HAVE_STROPTS_H*/ /* Define if you have the header file. */ #define HAVE_SYS_FCNTL_H 0 /* Define if you have the header file. */ /*#undef HAVE_SYS_SYSTEMINFO_H*/ /* Define if you have the header file. */ /*#undef HAVE_SYS_TIME_H*/ /* Define if you have the header file. */ /*#undef HAVE_UNISTD_H*/ /* Define if you have the i library (-li). */ /*#undef HAVE_LIBI*/ /* Define if you have the seq library (-lseq). */ /*#undef HAVE_LIBSEQ*/ /* Options -DEMULATE_RSH -DREMOTE_SHELL=\"\" is necessary on Windows 95, because it does not have its own rsh command. It works better this way on NT too, because the NT rsh does not propagate signals to the remote process. -DATTENTION is included even though I haven't been able to send signals to child processes on Windows, because at least I can send them over rsh to Unix programs. On Windows I send a newline instead, which wakes up the chess program if it's polling. On my GNU Chess port the newline actually works even for Move Now. */ #define EMULATE_RSH 1 #define ATTENTION 1 #ifdef __BORLANDC__ #define _strdup(x) strdup(x) #define STRICT #define _winmajor 3 /* windows 95 */ #endif /* Some definitions required by MSVC 4.1 */ #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x020A #endif #ifndef SCF_DEFAULT #define SCF_DEFAULT 0x0000 #define SCF_ALL 0x0004 #endif #ifdef _MSC_VER #define snprintf _snprintf #define inline __inline #if _MSC_VER < 1500 #define vsnprintf _vsnprintf #endif #endif xboard-4.8.0/winboard/help/0000755000175000001440000000000012420374633012540 500000000000000xboard-4.8.0/winboard/help/contents.hhc0000644000175000001440000000717312420374633015011 00000000000000
xboard-4.8.0/winboard/help/winboard0000644000175000001440000000133112420374633014206 00000000000000[OPTIONS] Compatibility=1.1 or later Compiled file=..\..\..\xboard-4.4.0.chm Contents file=Table of Contents.hhc Default topic=html\winb3mnn.htm Display compile progress=No Index file=winboard.hhk Language=0x413 Nederlands (Nederland) [FILES] html\winb3mnn.htm html\winb31o3.htm html\winb54vp.htm html\winb5lkl.htm html\winb9gqd.htm html\winb0nlh.htm html\winb85it.htm html\winb3j3p.htm html\winb4h6d.htm html\winb87ar.htm html\winb5qpf.htm html\winb75yr.htm html\winb3i0k.htm html\winb701f.htm html\winb1v8z.htm html\winb8ws3.htm html\winb55yr.htm html\winb8n03.htm html\winb85yr.htm html\winb2tv7.htm html\winb381f.htm html\winb1hir.htm html\winb3wmr.htm html\winb1ks4.htm [INFOTYPES] xboard-4.8.0/winboard/help/winboard.hhp0000644000175000001440000000105512420374633014767 00000000000000[OPTIONS] Compatibility=1.1 or later Compiled file=winboard.chm Contents file=contents.hhc Default topic=html\01.htm Display compile progress=No Index file=winboard.hhk Language=0x413 Nederlands (Nederland) [FILES] html\01.htm html\02.htm html\03.htm html\04.htm html\05.htm html\06.htm html\07.htm html\08.htm html\09.htm html\10.htm html\11.htm html\12.htm html\13.htm html\14.htm html\15.htm html\16.htm html\17.htm html\18.htm html\19.htm html\20.htm html\21.htm html\22.htm html\23.htm html\24.htm [INFOTYPES] xboard-4.8.0/winboard/help/winboard.hhk0000644000175000001440000030410512420374633014764 00000000000000
xboard-4.8.0/winboard/help/winboard.chm0000644000175000001440000025154312420374633014770 00000000000000ITSF`wV2|{ "|{ "`xTcSITSPT  j].!"TPMGL //#IDXHDR/#ITBITS /#STRINGS(m/#SYSTEM)/#TOPICS/#URLSTREc/#URLTBL0 /$FIftiMain /$OBJINSTj/$WWAssociativeLinks//$WWAssociativeLinks/Propertyf/$WWKeywordLinks//$WWKeywordLinks/BTree L/$WWKeywordLinks/DataX|/$WWKeywordLinks/MapTr/$WWKeywordLinks/PropertyF /contents.hhc{/html/ /html/01.htm@# /html/02.htmc+ /html/03.htmf /html/04.htmt /html/05.htm~m /html/06.htmk? /html/07.htm*T /html/08.htm~O /html/09.htmM /html/10.htmT /html/11.htmlw /html/12.htmc? /html/13.htm"u /html/14.htm /html/15.htm /html/16.htm'~ /html/17.htm% /html/18.htm.l /html/19.htmO /html/20.htmis /html/21.htm\j /html/22.htmF: /html/23.htm /html/24.htm /winboard.hhk{E::DataSpace/NameList<(::DataSpace/Storage/MSCompressed/Content7`,::DataSpace/Storage/MSCompressed/ControlDataj)::DataSpace/Storage/MSCompressed/SpanInfob/::DataSpace/Storage/MSCompressed/Transform/List<&_::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/i::DataSpace/Storage/MSCompressed/Transform/{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTableb=}>3 Uncompressed MSCompressed{7FC28940-9D31-11D0LZXC (0 *<jc΃ `' KM HHA Version 4.74.8702$ html/01.htm winboard contents.hhc winboard.hhko  T#SM=Y3S03^U=H+(K۠+mk{+ko@Ff %BIkI1e# ?6!{j[]^f{/ɶiF'_شE<+:+dqi 9|pD#VDF d( VB'U<xC=nf^UfT ^#b@NaJ*I%]!ijfTYXK:+jq5VVQ٥aS7oqhmQMb %d1ʐN8" a"#5=1P$ȴƫTuj'֤@5(CC٦M4s)Q&2Cx'XNh4` )1 H;Z]9Q*/PR.x ? ylWAב@aTdDֱ֖ U4#N;sNNQA/{5nSWu,;&2D|GZhK$Hnr6mʉ_#hHT 5: d%b1p2f0xvTF=c-]h>~pF\NL^El '?6'_9:(ǐiK9M(>d+aJQO5 Cj"~\P&f*h1ڦ:: AD-4owڢI!4Q`7xCE)+ W;!90hrth>nPAEY,Z1Nihђ| ![*Pp ?cS%Q@J Ԗrq;udUf_o%b480 Y{jh'z刿 ˴N撥kk2 @u?@+*w% IW2#+\C5XUx!5%GskK [gJ~ /(<_J0'-}ה8؎bdY*ODMfzqaЧu4S;Ж֤lՐ{K"pR~x+t5m#5}]1{#:ԘRK  _ >~| OKd0! a N*a /0(P G`6GVc"-qyo5+5AFQe{\p6&n۔- \Ѫ'%ȖTk;sh;5<)wy[}U6%KC@l"V:<7( S*7ݻcwI&p%"P!fE .xҚ|D$*~ciG9J 9-A]DG,R;lp9(爪!vt8ݯpDSPoDiR+r D ׾tET ~ C @o,y?}3Pn=-A$UY 1媉Q"bv!Ԫpm[0QzUrN8 91lP.Y*%XR͚4)SSyt˃}4hRT#c̨)$ îιInlÖJR, [GX:QOyKltb%0Q h.usFoJ3 zAI) G3 BԶy(:1ʼn!2W7_RuJ~,v >6Ryȷ)7uꍼ ?)b̴XC+Mv,gVBDXxIr8%@Z>ډ7x/} }hM`dĈ%];ELvר'So_ E_yAT1]^'JO::$2k Gݑl|)=0lkqͬWũ:3j2axtb3Yk-G`[3GI+o+OC鷷5'?YC<0_:EiYb*(oA18 &;2pw^,ժOQnG&F<)`7}Ʈ4ix\wX༶.p)huF7B( Hπeqd{"gec8-NjTum:h?Y@*~)LM{9$a? DquW ȖNMr5B98m.1ܣL}fLW8~ثS%)4f{_ t eefM Cʄu/GDrW 5pbf8뚸<\C uŇF73dnAq0x)}gi0JD8[\Gza;hb-NpSR1^ 5B'LKkӻm]Waip;=f"qkYTg_L &tM9pqNWfg9ǒuS+vt (&aX@6[xtϚxkT(>61 N̐ IP:416D7k+4s!>5Dura5zi6v WHjFpzLCrԱ:؟cn1+!QJHUӸPN?|`Plpc0}GR&-O{8hQKUhØg4аj'D:CЈƮژ$n]ҾI e4U4pgvmܓe"9QA_03w]2f$|F d pӿњLkD`Q1 IaUoCiAvdօ|Rg;7v[ $\Z4m.ח=+OZ.L"B8+sH#)#Ec!b2[G@NSYs󉧚јaiӳpŨ6cX Ka$ktg2bIߚJ՚GE㧉94fNd$yXل?%w ~^DȋPմG *f)a<`jVƾfޔ?hAy:Ee;NF~H֝ m̪73R"fQܙ9VOMl p Ē|3M@B*ء棁\xwŒ-~ATWsƼ;! "MX<4eݸ^ъvgn1VP6.Cc6jdȮDž$n1yϛ$wKyS$ 4`8s=,tπ*`|G(  ^T@&6S*>8@MFY:ǀntEjyR>*9r 2Fk;LPs`Br4Ea3!>iM'cmKιqyW8&;/°yDIIsN6 2R';A">&M`f%bIA Vy^N6j3 4MIuVSrF,y `7RirTh*9m"~mv* XTcbCVjj"'T< v$Ȧ~'b'#/ϓR۫triʨ@~.qY`KlfXVL3Xwe\Ҩ%6`f;`vp?ȡCP}d|vYd׿hNB+,TL!%K! pء&{`ue?7G]HVGV:0CJ:}$78؋rτ{t!N"2pNW5s8Q1"bB4fʙ0n^ IH` (X;옾|#邂*P TQ^@CM^e H(5$/!L{,tz-Cu!v}ttPfco3 ecd(굒 <\Bnu{hQ3&k *PPT$Ntt73zu[^S,i@4.̊uDBBo5gݺi?RT]g*Pe`yTN*1niȷ1so&c:L̗*L1ĔGܒ)3ӑK+s;B͂&i<:xό"7HK;>-#13?_>q{-g6l|{]'.%;>G~<cKOܞuj938S~?썑(VMLdwӑ)'!]1dCS ;>ρ IVeK))%}&uT5KўG?ѡHJ},O?wEƞˎo)WŸf;{Ik5֞PSR( E6K $lΤuJ w5P" B>7֍_"=t:*2xH L[75&wH ZY^ҴQU]P #IrT %(}"G]dJ6N;2h 2*?0Ad#XAFށ(REhUB.yLTk(PiFgvD-(i*P7iaPPG@Q29[[D[+-TrҋJqb ХZRf7m)ժ0g+te{) ɘU} WEq$FCy%U*Fg6d 7ffԞ'KJHï^͊Xњ] 9ٓ=iz%-s-P3](#^8>b@6Um3𻂪$}EVQ{%>T(οnhNۀvTHtw[{w ,q,C6;pPl #g & ϯ^iİk5 4:,GJx'p BEKC,GBO2eBz%2H{:!nKB&,-dnV9_̋xY75 v\S7YVqms,ma0)6|~2,,- p-R|z&;1/ֺ%k$J(aT\NT̷YhF[0sd&2| Gt)L_״XTiR L!ZtY]e0czKy!Δg~t^‡Ged"oF*n.Nzݢ -\eZ^l]YCF"5J+^:pBn/ngQ/Zfd2:SFh'XiI~VXܚ]bC*wm Pd=$KM+jΨu[%PZA%۳ G2|l rg֣ĩFP=2KbwwO:"V܎.=o# އzWt=IXХEjf2nuW^UD3&s ,0N$"_||t(zUʘ`S*>gv2])hSVkt _Q0vLQ-'3jWvZn^߭$pA"sAfvH S޲㽨. i᷃BC)2@7\ <ug!( \jH ZM}WmVYkSQʭD3H_5 JqIVǿ0u?"KKVa$NWiv-Z+zRM1=o;;RힴZPEV4k6itDiQ]Rh0<bXл:Iz"[EWܭ[$_y2K&#j`7ldj3\Ô6d9 ISpm=U܇']l~x 4jHZ.q[[(SHPt&0M m'RD[,7!ڬJClVQycEаח11yvV"x .8KS/5d2B'O8@@LһǷp#6vPϮӢwsx'd3̈!qsE*OW[ )W%pXmwFNxSJ'Z"3MQh+Zط|&w"b]q'qE m ,;鏲g$ 1EqG I6Vim҆Ehל&ۓ0%JRJbo0 HC]2×?ʓ!JeXP|E&1~0ʶƕVr9Աh%2t/mCTL` 2< x@\©9[ _[F;TCR-/¹aX.l䶌PšI?R 4tsg !OjH71*s}nF `xMEln뫡"c{? )"sYWc5LpBT|\< oۉ*jtҋ}l5*r&Rb%Ẻ7}R\OȎVS|ƕP^>*oXXpΌ1YIF閘@dH̭q^)F{WU]Vkq\őW'ljn^?Kh|ՕOCyyC2˵amOxSsyi}~LJ<}kM*s*=3%/*?ďB`PZ:}S'-xEۚ0 y^\V' a) -W|! q`\_a|UMMg &]ٟT.?49[2dv r%.9 rC:6o76i&]={s=h }G-T-ƙ6eN%oh5 +fN^hIנT>G+=X.|!dY/}H/2yhh{z(%JQ} tMY-hAn]e->E oXdơtW&T׹fK$! U&%e˽:#2O&IcBŢT]wc k1%\yfǟo_luW3Hcw!#[`^ɟ 2bf3mkg *› ^Dg pP_ ^G?1y*D_{1 MB`<谊۫#deA`76 qK,iIJ 20d3^ ԁZ"n[]Ϗ mS7y[|{V@ %~sI&1-wJ;W%nd?E+/% dK7 2 M~?&G~ ifg 2p_lXl@v0OwTŪΆ0@%vҢ5tQ^ 3\n,P.iE<%V/x_| LOuT"GtrRA;X@AQӟ!@Y%Mfi ^=j2Z 'xȻ Lp1Ҵ-ZsziXMg*SOxÑ#2iZ7ח#ILI^DPiḮMrx'E#M%CJx_Xh2D-cND"$YGB)7pN7 Yfkha-lC~{AɁ0e Γv#&Z&P9u>C#鐄4G8^V*;u2sZ-/sd9>hv/9,q$///>,V XߠQIOhvis=jt b1bcD 8E.[Ŋb"0e$s3O"MTVZ'QjwA]? ΕY2$#H`.Rs햺p*^[SÇ5% u0^Ʉh řm3{X8^"$0Cΰֵ/hӲ>ӓw@ YYTj<4|ˏzpS<@bD1b @Ի#u*Iwz)0'FXRp1H=/hs|`Jqt[ikxЉj}<.sјF+0LY%}i2cx*R SUA։ABMuGZ2е< bEʓ薩" ]c Zo*hSHApEAuD91=̕[C[kq4D^c9`Hy #)v6oIfl3Fv;UX{ɲ!;k͑ܥp'6?b ~fH5at*sW6|jE ! @8pW:31NE奍π,|ukȫyEwX1*)OcvJ#dP"؍ćmB4Tm](ZUF ܌80zי\ˉ8MJޞZ-~T(Ŝ0 %ר11|ΎzAvOeR-W&s>"U"p7FɻF|#ޔm$CMX#ZA@eCGq3t3-L|^'*xPcMwgH05h'U%5?c 5Ɠ23/Æ[N>TTgn[d^+°ATH] 282j<^8a<`j@И3@*ԍDH1 iٔiMoMMw(_l!B_NRGֵ ū ;bÁ}twP"@+D'@|bRI q)R7G6Z1~jIjǪDnq](Y~@uDmn絩wxrUsd {%y!{B/o68 i鹊-̛;8u=D!(=_8i m"o g]j.+Vċ! )wGsM dDG%b߼S nxQՇǠUWU :@H!2ù0&] r d)0JaBP<`<$?" 8 N S|yQ^H!_ / 3o8X{dg]b;!esP)(wW_/fybE-6 0hj'5[hS@.0<̘`w;1d&o7Q/8H KJ@.-0Aց Jh:&XVL`LmKoM/~ޖjexZ}'U Y'HM.ظyc?ٞ1;+=W,3bV5 s2d' yޖ83vܔd6Gs >2Q)ē&SaFe VJ6َ|-?$jfK"KU?!q\'6̺K~v<Ӄb6WtS# ~3T4>$<`7=< koЇ[ί?ڴF)A$$&,yWP0pA N%еrٛ^e)% b0AEo lVV(Hy~FdW&%:6Ͻ4U7zzQ߶CF`]"KYDi>&Te+(}CQH?>gE<~I4ߟG}7B6 Z&bPJ?8ΈOL~TÕ2ʛ`: Z0Gy5 nB;UQ %N4x%SNHڟ1 Pz$\lDǨ\ V08\`u򂟐uDEi} QBW9\Ws9K4ب`S 9J=];7f t*ҴߩnaK՛^d+d8PAGuAd eNrgTŲXbjbG`*FEehZMԠ=wC9 :n3p[dB6p2?X :Wj:|ӱM|O`ʷo`r!gQHnTFzST2!rQ9v;0?Euɨ9BOQ$1Aׄ &m?TxIPM?_usY5oA4dkBP;xܱaĮ:(~gl P4a)#G!'(g1ձ.;ek"~`e%Hlo:3Ӽ!RO tPĐ6Ez$`8n\qvsTQFTC4DJhh )egdixA8uh3m7lOgƚ27$?8 6cl4u2U؞{ķ|م¹ 7R ݵ/6! RPLUK;O45!fBa,.M.z\8Ň G3NJɡѳ_\^3EM)!5[d'PLy{u*$D ӓ 0pswk;Q|`ӂ#v15P2SP4oV*ڳ;.6W?H9Koڻ {fg8!18ݧwtݽ{$w(w{3;n󡨺UUA*Pj,X<FZ|a[jZ9R=duL2sޜr3ITrոFIU"(!=@@lGzCtT%Tx|݁z\%S ̃| d¼pc !A2o e8g@sa88b1|+FJonV czzˋԠi9~|*L_|uq- zMV 2ґʣgvOFfn`l  X>Ȼ󄒽2"@tA>LZTީ.&N?NqߥbfwE WL4BJe&ϋ#LCmd2pzLZV2"sBlhjHT *# 04㇉z SA0*-`ߧ 3lҘNz˛4cFr HQ/e*7}f$R:35R;72!nӹLQA/Z,@[.p )8CuJ-Ǧ[-/U)EN ^8[3B].1iX}&A2m?ybQ=yŒEW sSn ʉH2ᄑOptp^?';Z|Q ~i?Z'Y@Qन>X2 \6bSsI}QKvC%)\#͠>"'bHfU.K!PuȾ̺bX8jxV-5ԏ*Z3.XcN !dH.Zr5LID!G932? PIN4ĥ*C 5Vand}%@b2@Y:4AvYgEx>dڦ@*/|Q 8cTV yr4Ҟ9a嘷)7]Ct}SvpGr @xc0yvD֥g(3Z(jen@ Y{RGko6yۗIm׎}{ψ]" l̮JwPԛ@>\:JjE_K\&T(=U|cqL@BtN!c8e(e\0OPVVZd]SH'Yþk\/XUJbCݕ1O}kw%c`]8EO^*Y'Q"& Y%SD5P\tqKI>"9$Mi֮>neV0*ӕtER/һObYzŸY=o/~2蘡 jk^1/#bX-YoKb;Ԡ?x\@B|[x~Eʟ:i|&VGy9߆KӔ{XC4TX2klתpfCKɁېKEJK\+ςb29k.Y瓹7hNlXVF\P0<7 _;V l)T4OA9BI0b)aI uj{@x,'&z%缛Jv֊M9)rᕉxi`NhZ{gt"o۾=ޤlP&=֣I_QEXl ? ɻkcV(_ n PX؇coֱGk[]3qZaPn}(0 .S 40vbZBOMmǎ>. (nĆ3Y'saO'Dic,n#!3JZZ?g^ؗ\ &amTa 'aw?}71 =5(ݝ\>S&sIrHoph3#ړR@ޅz_7 }S}wjiIL_9Ƴi=ǫn[wXAw8=$7?z_d %S}Jlx Zj~KOFVl8F5e>:pg f!ҫix1ƹ4oZxArUof4OccrtP ^oNyE~><͸e煗s[=7] )kAwZȑ]=,Ap> K1wj\jm^fcdRbMd1L,Q{ʼnp"-pHk^t{xak^0 fnr(~ļ*o+W$kQF3nj_fX @+,L0V> S\L DpN"A[H=ud]qmJjo'LWdS?𧂣Vޥ# -vr"<76Hr2C;NĪ2IJcx|mZ8eL6[EX6fŗO8ȫ=)Z ݡx]%^fo鉛OI:1ݧh!m nSD?΁έ PJkۘi{ ˁxAʉ_,Oлɀ+d^A"qHl$?WNr=ҀmZO0f %Ƒq \g>UB6>`lU)!0C!fHt^ȝ~ q2!NX;ܯܥ5zJqKTQ)Հ].g| CB" vߌ _Yw_cL%OLxiaV$*{?i.X}7?/-=K hp/\Ē3ݒPT;WoC56 *+ȵIU_KwӔ0ɗ1m_"zjREƎCˎ)sNIxs#vKGQ(=S 0JC,6ͳzRu1Vҹ.Oor4*4eȼ}( b|B)Xt ]W9x_vCy20;'rr2zDL %Eb)`|"Ti|Ojϼeŭ6g++Z~7;|ܠ?:dFqo @a!:ㇵ/Ḇ0#r*DM@Q6i<`jID ,ԳV'}&wCkS~ݒp^=Q*-PjPRXp!X IcJ!4qbЄtSFIJ9;y߶Voh2A9WTg|ס i2P]#Th7M X.R6Vc%F~UZ((9!S ARiH??&`0@,G)i M$3o dԀEG颷WfmSxSum^+ '},Oii¤ 2)ٞ:ˮ;Jڐ+|L5Jª/yať(s1`ؑYݙ~1HʕMx,υv?L:>@)&@Jy]$FT735w'vgWBU9L_R#*B-3?X:v4RյP3(TP!H^4 1QQ!m5F'$+Wҍc[[<3ne̸d[jX6Ës81n]_,T"}3K8vԺWUl7xstCf$#NGCb,4ZgO&qO*S^1*] q ywgsy&-zDmEׇ5?^sڢ7d-0ѵ締&b'e5Kf l9Ejo}^)u@ Nb$|u:$I17{ir!w @@dje|ٝ+;n8d7wqA5JY:'+"|6v7Rhsp"ο ~kRmY NDV:fr'*T臓G9zMtX;0$wz-]l)Qxb]y|cx֙Y:i_tlvl:(_; 4j16hR>DŽreDa&.O@P%{8'xF8qk_ϙ7f)nc[nMnVa3+åqR< &[ƕr~ZgQ\ע6 Me Ii$:^s*3ezu]K0=袨MEErJߜ@9 .t*Nue\=RBtFb Z| KN[ <0ZHo75Sb3M.[B{h_WB{%slGnB#Bf'o'e,o&PUr&\+/o'ܖf_&m#쁩Ý0?e8`zP2;A ]$Tw$ .(~ǎd/!0QQƳȚb;+NwvGܕ);Q$~f&-K|ye[M0['wy;,PWB&6rۦC`kbW' >5{;?eJI Z* r[k- eÍwH!%'([T=&nJ@ ù7fѡ&0bž&A+;U`az7l3"NMK:_V!oЪ{|[1HhhA7y}X<ݔ}LrY*^HMs˸.ej.,xc4bg*MwWh,`Iӏg9GYIi$ YBQ9溌_pLrV}WǝDYclF5q,XXZG}Eߪ{EvȮTZYȴWمd"p A9߻dpp`! "E2xe^l趾A$'Br]r qQAib7_~4aդi Rz &Eqr_R a;ݶPbԥr{] uq;=\٢MBrc+fV C*e79ΩM|L6b:œYw3ӢL.HѽVFpwa.%fj{JݶzTLvܷℴI&zY(ڐ(&.vݹW ¥ds_+ b zhL3Z-u_]r I]E~I_,vW%P݊7,0'8|~jxJ9:+A9O;nV߱ RlZ4畗j2A{!)v=_5SwƧSt -2S~T{}Wkߛ?M]ngXߙ O ,@^f[0uh W5O SFۃg}zf Uc)E4R*,D*(Twɫc7R 8]l:YUq4ZQKȚCg3gsDbp9.{An:c ^t26`v̼Ro6ҥvUl+C9yrGRefw4 rPµzꖗgًk.o%P V+k犐/Q.4_i顂U铯Q7 ٴ#O|չ\:fwH?Rŗ#<Ih£ȕPV! s0{qjR-I -v_p+ 8#߽'yF@;)]/ˁ_z"ۚ5n/+yg>f޵eȒE:.{#=F:)0bK{m=,]'٣~Yݴ-`7O{^K6鿞#%--ox{o2PY}zwd{|Ҷe4n:a*i#WbQw/=o%|kRBz`D&Ihbj>˰I^>*'np,SЌ`.̶B>IyN+h»q8Aʼn{1 fBkJ_+O-ԿpsCd*4綅G^U;rB|#*\u"3f/iINUvJL sBV}! a26 D1P]B\1#:wM ^ ^ 8!C0diV?8=S6;'w-"| :ir5{cœo).1߯Wr("m\^,b5xluںp/n?*:-A\Vɻ,O(v)(IufϼQ8snZq|xBUr"TN.]ʞ-WS?ף+ ak=? }yWmŞn@mO@) ( j'ZuPT8F0͢{ @3fO~~᧤0z_AA;hpw(/׷T2{0:#.O%z-gEON#]@rêX* Ki9]x{5LQia n\R$PJ}8;HH(5mjxh|{]ׯK_lᾴӬ$vn'okg5ލ\:bxAFh<9`14 ?s5/r(-8zIC+V QMjObE܇mvޝ{ eKc+7޵fGd&zӖjfH+}'JpUsAhBA0 ηH[#==Tأx)ErECLWMvRɀ7QY gK@KymFb!vchY %VTwBOݾPߦW8bp/r+NS8;iN@f3c1h.7B^VD@NRv#!)c BνPi1YjG&x;Gi]aEVӓq5o7*CCH$u57gz] *8Ϫ)vD,Mh,R>M}AҬݩuHB Fk(}5Z[Nnٲg|.S0q RiR4S9R7Y=pU-KBHf\lSc9W^ )׏>nFp@hn0zҾx ^.Xy);RT:݅>_ _:vԴ}uB؉XL8b+-Mla!3DblA$p'o~zJod:8L3TPԔSfk@sE68NhdNS2e{%ʤ]MQ96\/%Jf bvFdx=L5_@ڔd7#VJN SR >Ć3+H͂B !*ZI9pF]!!U#?lz U[D~w҈RP:i y*6sB;j6*4`+R #88AqÚTZc6 5"V]ӎQϧӞux wi}td"d C6mċL&/}nм:sZg$u9(@qm-㾝sR6 !$ d r zg!O*l !K>H{l6|"Թ$^̿Y$YQa ݼ{H3~Ԏ7oȁ<0!gHR#D(؄ <lďAVyүG/{nǨw^`ٖ„#dTkPhEbZx_^+\,$MͭdzZ7Z1~I'Xqɨ׃<'-;"} 3乢4*|%;5:k99Ot .X@H^x~Wrwwuǎb@B\aTȝ*R?$:vr^eU:7?g9jRch eȹҍns.ʬ݂Akᚅ*=%0jKQկыzvgX~U.A[Q#3t͒;K`pSĎH:noUrv !')2곈BWufXh*$B*爦34RrAA{9d`@ j~9~Z(d:t*y 䧓%g܃T4-~j41=8_)2F?K1t ɆT &h` 5Ztf@#]9x0ր[ M:`5)!@FĎ!S$kδ<勤X*}ZY ֲhTIAw+ +9dld:lc@iF$-=2cZOӡ`I: [wxff]uK/䐣gSaJ NP/ Q")-y1~Vq"la(LNV% [uU8x!o{{wc>$!1vN JPu韂KU"C %5 .JXgC[ȜU/تJ:?"輽$gˌ@TTT~BvNdyMjXPoG͆b6*XjE]JPRQc o@x)r,㖗=8u'/!٪d)jJ%O&`m (T,eQԈ<$r(Lg+CY'?imz\Qa{wV%wMrE%);E~~& W[_P 88"T0CWEG#(o+H(z ?X4=$m`.}=J#a?Ҩ7um䳵k篕a͗i䰺v)1W#kvJ=hȍ(F_ᄜ|w|s7j5olR:5m9,_rj֕:gGu>RzO=j푅܊_EmsLî#X1=<0-8—1H97FoFYVH6;D2lBNif6 [rvA]ju{:)sj)&͂_}(ɘgř<"d!nΠyƟW4*<:$ǴUf| Z|K !N-cP_fX.g{5xYe\bIlS 5A~* _gON<7LW)| |c瘠:*m ܳLդ~u*QH;32W%Hn >n<:i *ԫǺ<.mSV;ǙK'G0)&UǠ NH&d(`W;?kl^|>-|m`C"R$jz{kFU&P w5Ck̳pf氒߁SlR] $AP7֗6 ߩx-L+!exy%cYMZ{٦~hSx?Wt;~E6cV1M} ^)q ptqUR>YE\f)3lVZ[]c͕>%/"]tge5SPNPf]Y84pЪ+KyƉptcZaLK>noq4u" qo)7*:c0c?©V]#nc%} {ZێrNr:F][2\>HYV#knۆfkFGp[_vn"z mX #)X1tpDBv[7S$~-W!C1;B;Hd 5k^:{d9lfSVJԇ3;4C8ߚTYs1ڔ 7]7!ቼ: p=U\YbNcWlm}A'"ӔD;=+P/QR)[JE]ЍN"9ç6iK `d'yO윫N19_n$tJ5V&cWPkPL╚s]3 bD)oc\z*tAv ػ]Af6EuB:zjJZP`aajOʆi|yiɂb7tfZ@;J2ˎXsb8kee# πEʨ@x@H: #ʏFZȈ%G_Ѽ[Ev}&Yf̝ڈiXWʹ@~}D`xpXjt=hI!^Hq3x h37 Q&Clj^fh]UsDY_fKmƬ+3^mu!釔Y[7-KAvY>lF~?qcaezgŒFpGlv XbDV6eG^v( nwͳ8d3Emk\ZSPLݚ6m+V3H'귗I2IO}EB(I/z̮KlɡFJ¢qhA,z~' HrqYjr0R%1ݻ0Y:B'Фt:}: D#/]wi!1L۸[0%nÚ0u\T 1:'N^i`"LdT.QEE]΀ ~3/so~L'=4PgW.=]:S)D\,P9NB\h!Dc/ЃUs 9~^ȱE>Ѓ$bd ׀#:-@}KNbWe.@XpFK&b$du!7s#IBk5k˲U#\cƎ^߿\;LpP~moAɁE 5FdE4Wm!HATIvx RVZM@m}t$d:GsEכ7@r K&l~s4l vISW<&%ZjJ$~ ':80)E )_Ek*Y'kB=@ugʴ"yJ_|&Cʗ4*A#N"o,!xr&N&eU{#Gdž&Nмixj>\ĦYyry%(PFӡh"}N%ɬHq -lD :}p`pG 9t؆=,Η7j6??#i&߯}]hV[3cuUg{fwJ ث Da[д!@wAqďMRR-Tز5F'Ġ &`O+9r/5!O#?r}W˭2*'6 [j&T/KI!5h \*4NO!AwgNjtxM:~M?)YLg%wh=d%s5VJ3FO?Ik'|:w0z pk,=`]4ێZ/3)f5#T9-tJ}*zđ 2ʣBs}cq₅,},6=ϴYE -6gbI], %'{Ǚ.29jwyӨ Ie_ew9Vl \a8ulAM'}P me+B.gxW&@ SMʣ \b~Kvb;Tl#$Nak1pl'MW5:;bS=-H`p>u7=MęF抶Q]q4*HR4,UtQ~12tWMXUyH+ҿoD0_9N,ԭ¹WD1=+tVG$q]A|بQDJXkj^*v~p"&u_ Ml۬b[kpF۩uR)I 9䫻tm VZbۅ*Bs}8~ó G>9HmUݿն9Gs~=Z{ jړU~X6*;` H3,lI/猇Bٽ'7 :נ"p`rE ^Eaא6I&Fj"xd=KpBvSHRV}cZ2舢y%bDٲzU'1˼<>u2'yaEV^۲}5x nPsz ,?#J KQ^unЧ]eѷytVØ:Xߔ7Nӊ@tR+i.TH엟 "S3oxQ0>&sL,C@N8eP%dl7'Ii1:XpZ6Ma8'X~T[g>62Zlgԛ &d鬂gQK G|B L`m]n@FD}r/]>WNS>Lh:`+ #mzhqjP<mш*Mɲ,$. "[< HJ>>Q&4|΋k(۞ҩz~_֣;h<ȥ'5!^hƝa1zobf"H~EӋsdwf2О>]sjZ戶yuWd7[!HUbzMּ*OGt'RR}ЛAN*OJQq.7o]R%gWW4= =bLt z]KV}ȕ:90[! ru0BSah2=i+;qn 8.vY5s5aj}ٛ[F6v悝f[UpW-+VmkrPV#,M5a%`"I^`P2/15hNl9$||۷`r;!sWh:U;*6"!_R9K]M9*zPF9XK"Nx{JMSF/Xҡ!e+ &0l=BM uzǪ@ A]s)A+9l8?W!޸>}Dž6y \oC(͝J?^h)͙{R!bXfO}Bx8 QG̹zYxcfIcP/)R c/sE:mL:G]Б$bbEK<_J%MaFҐSu@dέ@c*heV߆Xz̊Hx',mphYCɡk  gŧR9Ǝ2Jv)F5f<:%Hm rԥPjIicnӏY^-%(b;fjfSԚVUiÈ!3uQCRO"pK:NrWM|(J#tL~SU'wXHq٣F1`d#,:LR#^1xB: zL[1 *7|j8`p?kxix0衑my$JIT:n{Q0~4l֊P%R=e:Ϧu fI qQdgd*ve9j-ׁ|@QUnҬCFA|r9 H<8}0Lkɸ.lL(ѨӃ8  TthY(# /LP eD~P[SYJYpF U~|g+FP0YӔ3ES͐OtUi t]+GMȬ*8Y#L5\,dXz~ź Ub.Mmj$I«w`N/(7ԇVMh6-6Ź_geІ"ŝZXڃ[sӓ+=~;T{SHno`sLW}k3tlb sXbe4(4Gw映$ѱ&;'cQ^M/U E 6Q+=/[tCScGAA]Q-zTG$FlI{)@K(l\R=6UQp6:uf2CLjmjdzf;>:E.\º,n&7ht'R\*ݵ -hb /O|nq@PԺA`=dU G46!qUSN4+bheBvӂ+9Sy03m᜾%}j8,ʳvk:}u:Ã/z0"C4Mؼ3cQi)).aAV? ?>wEsḘJ9E~Wkm":._ˣϣLtS+Rp֦;;$ M*`{ǒ !Pk{MqZNA.C\~4F]Qhs:0UU $_%ܧS͍Fjۖ']4U;x=U4$hMEtXc)f?wf$Wdz~%Z[;3dF-*^uV@:eu.>C{QM8&8-[JaËՆmPa\fl-X_Y4Ѫt5;d'hvo | `:i VȦU:<* UFj޿ Π"o!Ԧד}q{ hCH`=R[w5?vkiLzփ%OVfY/WH',?햑6ۘw#x*Xql׮Vdr%F7_ҵ_~ui-DҪiD43n s鉶!@;; hfC4Ӯ9BsKw8zZ;/&si#N^ sA'Z~޵C+u#SY=i6NSmԝX%+aN!{- pQ<_[SP9i\*474n׌{(Joz/OSJJt`5 Uq"ܿ 5 R.!{N"\I$G$jitOew"YbcmѡXn(&3+Lu@gE{z@fje$>mJsD::IMʴ<%feUwUB8aG:V6I0[P5:70Kh#/*%=~t{}4$#'lA ;=޺tbVENG{$""E7 )e/M==S3ˑc:(Td{4C`6<{p;o*n;il(DV^DV/7f/*ICGi@enZ|S3{|en2J;.ӜviK\N/]T|JȖ"R.h\IC9!`Vڡ5sBX1+->&Di4 30 Z1+tu+C,'D]}] SA;u*V;ExF(wB|`ķ4b\%Dv*;ɟZ48`-C̣!CT?XP0Co՘Lvdjܰ%'ꩫ%[6a ,BvC1w%Bg~NwCa2v}`v'XyUb:UI`@5^ן\υ[ Iqss:O"|ډc\# zf/r:IMsz4 Śc}*p<DZSIT$k ޻dKVV<)G?e0fbs9N'iQvm8J} @ Q9#!k B`X znq?`3x#1alF&`k9A@v[CƩNk>D8 6@Ks.{iδ\VSKJ# ]R R-w)E$wO֢P[mDwu^*9<4ɪkڅv2&LM\$ 4ڠ `xS/ Ֆ橋!J!!N1?DlRI_H!c(&J# U +ջ7!82'.;qpF-Z0op\%rT&\/cU* ό P_,pM_{ڡ/_kyf:O&hNuVlce﨑I`ӽƭw OfcȞT|)s&z=H†㘦g4[yY?g[(>!u-G J2 0s[\eddJa[7ZjY"@& ӹ !;0kLplspsX&yj=Bˮf9 ٥rXqhALIBbQ~) Lʏ =Mk !304_=!IJa"$Aw([AډG{!Hd+ƚpڷ(K9~ 'jZs0 ~" 9|fr9X%.n/ RE;xcCEپp#/s%c^G7&Xn9L^]V"TƯoyc|N>jʅ;A{=aGGO6..yxC.O7"}xfj(ZK6*rs]b x_}w"FZZ H[[fuc،6[IFow /r\qNxߴCY_R%55H,_k̟I a:xR'Mnd>% E6'e<n7!m-WU1JJDC dT XxeG{6BRIK/(k5&j.!#2 2 z}'%ٔxgAߢ~ `.pE1=W_e(+KCMWX{ޏipqb0^?HH!aÃ_W-yKy1y|PgvG/?ÉܝtC#a.;pZg؋FIvo>;&mA{ kl:^A9F (ex"UČ@S0.?"Eޟh.r_p?IzjOޓO/ oT+Fc[&q@8hRLI3`t)oВ}L^Ou;~- `yy`F&-a_Ua _9~%\~%L=6DY_:_7Vۥ(eXx1idCPb =;7WXUZ/cHΉMbv`Y2tlפƆBә@E蝀o=R['fLvͱ;qӋ&3'aXHIM˜?– Q<}WI{+ulh(G6.%W߈֢7 V%hXRȔUErK`0AwǠ-@+v:{":$`o`i玲CGT3(yTl!8 ;|W/܏mĉM x-8)q9BQ5I8xl}T/LF+H"1N;;%w)tBE盀j I#n:'k 䘧 {X~FQrt(s/d%M`++]1~M}b{2g߬|fEK?S$K}MkDjS56ГZXrQSD:IO1?ҡ& Nk@M״xٛbd+o|&.jJN«i ,Nv+#'#vHL*U 3ہ7F,NvHmȕ{Ɂol>ocr%}S^S;zI*?,„Lpغ c`9Or5qZj ?@`߂J]S}u4Św1a1Gē++RZ%`$2tj$(o Oul}QX<;hfтQT>._RXoMlbFG^}Tv3`c63J6r}jSA|ejN|h^.bbx gX;SCA>b>ӡ0jS;fa9XcѴeB5f0]; F`\OpT0fpudu[-֔p`{%:wk]i= rEfXVUx֢!Q]8724b6I;c)AoR?Bby%3A'5F򛳱vm #VE;% jފzP^|cA/L%n nJ5RZ fp]BE4P~/WȞr[TQ~Wh˸ܯyhl2&_p<)h=mqI#-;X&U{s4(yeTQZcSyDQ_}-mZ>d4<1fo-6,F4w/3 ӽ޽cE^GW׵P}~{<O1EUzLd53G9>L vy'h;}O/673aEjbz㥝n^eL~(<8UThfCRq==m23Cz o3}tJ-ޠ &y8~{$= yKU6ȥ yh-*t6qs؏$^>Rdl GcL3,+*Ƅnav6!S}KW1Q#M3KDLGXK%N9_D [Q-rٵ>Wu0v}9J5Щ&y`:-JT8:Bf ]1/0S]O[vrطb zD:T #&q9R*$Wh MfHVNd,Zr1"BK~~Fk6qn**"+3 "25002^ӹ1Bdc`ݽș] &B nT~ԓt //Mcӫgf|OwS`(B<} 9.d8!p5( ,岁Y ωe>PAħHč?n),eeÊqϺQ,uxeb2ed]BU9J*~ѬNVԜI<sV1hKu2Eg(D|6qb9Q Rb<eWxA A_0y.8ڤ*D@nB~oSg:>g((U"g .ڻ5RxyRdNZ\X9/%,ijHع{i/T")kg-.6pLh䔷jXrf65T[ښXZmdBB8-S7k+㕱1cԘY`t55pw<౩fdz68DÓ(e}񖰠"8^<¸d!~& 8>ۀ^# q$:]h@<σnhcHy\QIUw$'U`k]9|J>3+0W @pLi.^ioyM讹$6p{e-{5ݫNF L2 "q)j& |ջUf3(0 %I͗UT/H4W1OkpƢ:>B}GK t}hUڢdƱN I,ezD`}^ʅKm*"`n;:b^Fq;Աq8vF$5Wh/>pfxuUId&hUsO]]|~9Ϋb kr^0 nYHxacb%gmF|C4oX!0PKC5 BL3-:9 ^f{0oRG/#Bx%V|cbj4p6v}؛7ooR8YSψ}#RKw}C]JyX|4lwg8yӔUOH! {n[V%n"2lp%X N<9YV|j֖4\i`|5Ub!K=0@7QbR%K ŎqYkY񨸹LX2ʢ)X=-d)a; ҖT" e8W:0%>M_uYIiw\V $4X9/pJ>ۀ)Of!{ҦGh!Py,B&!ӿP#=Ws )BܽE^F!UAObuRB_.ب!u7lcpc75iO+{9Z'+٩F%(4I܄8^UĒ@ l Knι`2)CS }t+ђSeC \Y☊ 2-sSz@,@ 4 R"/!{)2( 8(bcPA j4b#| e={g!Hu*ٜ\t닱`u]H 9 Bl&iQlZFufi"K[ |d}ӯ>y[ܻ_avVLጳ)-I0oeɢFaCiݔ?ozUCEQSs'`K:L&hoyo'BaM,LCa9g@Ų[8}zѳq#|(͒Vv}Ge%W vCX|֏F[t泷3vnjMp5,1)NbN(-24xAy sVY׷*#K$ont4"ӥ/Qn o-.nͿ*9(H0`OW0y 2%ccHG* #nc!Q/L_RqBK)vp4}l'>sN":|/d fX">cQ:|X_l<yD_&+!K6sPY<$;yш> ]8[]YUbaى1bX%AP]-ktʬd.˭CUV.JQ(q$"aGQr7c閈P/ $bJۖM%kw+>!yK+`-Q׃Wc 4Ss3!-Y;;n,%8ݜ7hv{!\㾱P%"|ZopQ5o9Q·.XwEPZJ'Lv,X=(妇 33ƢNXeN[HĘ{JTefHkF+̾I7~H/z1g%>RXz]zz4JS4d,ϲfs+{øio796QM[eo&_ pλ]&A6 :.LkzWݺ*7"hQux-y}Zf)B5߫򐢳(g *ml𔢔, hǐϲ^Z*ftlN+3x%@QـYGho~iO^ ofAjtCܚيg0\u){r Sbb&ޥXqK&ى>J׉~vv+?|w'qi_gSX |ɼJ$g>Qsf * |yՌ ؠs Z5 'fpE1^l.H;.S 茺ħڍ +D5&QM}}>o,Kkhw͡F,i~Z]vy^r!1:=yBr\l7v7EG]ppo e(PfJ4J?y4wZw9O>,1#VDsL@4E88*2bQ-{]dI.TKtlLy7>Z%@{[751;}U"RXשjkv:ob _iOo zp7F =i dqH!?т}OAׄ+%ng1^-z6>ՍjbԑUW8k7#2 F1&EhTfg]--)I%OՂ|ޘuX bwG;rMx!ZJ qx?pqG*ڭP#<РLjJfr&fl^3}<w6葿@ ˺ 7xŢHd|B'ꍀr 0&Ӣn}?*g:Yyl '$>) *c7D|QKv!0,>Ksz ,pǙFE3@6/b2] w ]^9y[ Vj WaEe#Hq2z?#M*;ֈt/3Sy;OI ʲQUwLQ r%!Z.Ygp=4p\N\Yr(sXdG(V;2?KϻmMsϝp#燧8'LzKᣤ0ZZW hW4KgG}ćI&|MchQwR&]J 8뚶xhĒ $%.i*R4my׆Wd>#@X/`ȷwGOp/+8/; ⢉例VÑ8Sy~G`E</ӢEݳZcx0<G[T̵O{Keԗ:DID_tQu9KRb3)$q` *ĥE%2/S*&j 4a%᠙7 B,rU \ͅʸ4uwi?UΥO >a%×NVː7'8;C/6WO"f]! F">UˎF6a-F3$֘;]#zďLJi3`=1"=%s4SYa)cYtZ~c(,sHˉϒqbI/%Js^wyIkڤ;Y̘VoXxX^{Qry%z- %,&@?;)zC2eoVB^`Y D:)Gp@ 75B1kd.PqCQ?mE emf͕>_2$dO 2s8D]_j +BP4}"AAq!0EnqI `4ZvG0ABhs`yq@RN8Bڼ*:eA8]\WI^K]"Gڄ\V:oNt/ս.tx˼cC!?d;F&gL̈ "0t=ew:Zp<-ZXC›KtC+/.<92 J )۟h@'xXY8*~ V3Ӕ 'T`VI'іA5N{6Sweah=k! %́i)ab(ܡ<&BqQbIsD4ġBlHL`ңhx̟QS@_ =yi9c,_wlݍccM0#c2/lr6V^A2)5噘Y{ÜUGc"+:sq;p^6H\SRmf#Pnnhtg*!k3#_&Yvyڶ=En;P|`UFQ8a iDv;tEwJ !!L=I;w: {¨ I>~6 ;)'aMs"dEdh ǣ=Nї8M.#ӊ<%Q ' {k("v6VwqsOTS<4JF5+Iƺ0gA9 L=k>3!s0ϓ8w"dEpT삁k'&<>P(Jem ;X dVy >c~ϸKEJ:i!Uզ?*^wD:̣˼cg9YyIfNZAch4qPip⎶%- cIc+ I fL4R1T'.wї+Gy INadga0`14^bdcS1)+Xo*cv_@aL'+3+dnP2安 zs̶o FXԎgK-»!^&fo'TspLpHᲕl\\*1=(wro#] ^90lm7?=Lnt ol#k",;zIt &M}Q͎eZW~Lol|d*7KAI)VF5 mM06fvm/"lE2e^ Bth@.|7J;:=Ԗu4V[ÌEqPEKsYYLε$}"bl/:} 8;lj@B[a!w<^m /Ds*}$u6 9mTIt ն^r+CѨ rGDqRۻ\BJ5ՎnŪks}ZL-gҶTnMҴFj#'夰CoiΩJtˏ&DºÈ87B B6zG|- | F9luFDP)!m/(X!BOw!U&l4–O 1qQ3*@'g K.)=FPoBYy,K4\;CC> xU|O`X?Up>CB)Se;SrZޥL ӵހ{5tsg(( (M^wt 7=w2JN"72\ :KzL׋韓$eL=ې*4z# :{>j*(n II&3zJiDș!T@V∡]\TI+#Rkf=, v'uGA3%h'<$MNJꍟu6US+0}^jyA/$Z[kQpTe?ŲG»Jܒ=aޝFз#QC"18 iO ,34ȌVgC51,IIJlb @5Pʝ#E1luyfiַ[}yL[4#^+@;؋Iz mjGk[: \\`V>ۘz:QcE-]e#xHzAbZG&?6aܙLGAg^O)`cL#dOlz~gin^wE5J89tUIJ3:Sg sXhp8nDmmȺ|^{ @Q@NH܏N+` 4:yN9G6QeP ⎖ AzG BȘJ,2us-PE<ʖ660vX{5]_Yϴ5z7CɐY3݆C0X%i?%p<9& n-A8lRZےUj1kVm~W##ÚpsS=ϴWg@.U*T NrT&`f.8mEV] j̣]-DI1T5%W@N5i@CEQӔh:v5,"\# #5àג%q&p`D9D։gt6ö}PQ׭Slg#o%H/Ԓqp99չެ(ݺ)qw'j[1)[v#O!/g{5)@\_j۳*lUT^m-M׌<ٶz'c}nN1Klr?)8g1Ӱ2 QQqFM0W*5'!bHpo|sU錄u#Oj`Di9l,@ Hw-B| @8R_WбS]\*-n>Ns/ C1͞"fRis\#++[O7ҵO{MCSWSLw4&AMU PkD~\Xvܬo[ٛ 5; h}xQx'cB(ˬ~td'X>IfPK׌;%bI {?e:Km>VE3(`j>-1Cg{aEl;Ju+j BT ھ)lr/+:ЖYyZ9ڬca-ƒz m# FɔHlXt0})ҔPȥ{7doihu{fFBQ|fZ_$S}NN)6'6P<>T*WLD(߶swUGGTNݎNP:D!Y+9[TsU{8D1V-K#VN(SYr("tMUp 23 xnбN#R}?i*WZ"T%ʁT״"q諯E}Lԡu ej[)Pp(.-OA^&c6找F6>ټ)y_*߫"!Y2{k g?]9RXI&NQ|ЁUBEѶ̕nzy)~\9S̺|! -C.s+v {7POe>$PuG*q wN<8/5#Kq¦kH[*e ?qkZf?hOF$rm[pJcˣx2X+`bOy}r_B/jRت mwɔdGNX۰Pg ֆw fƯ4whOG\H_! lĈ/g@72,u_xEU [dnGa8'nZ:>?7lHFil]K{P;EB'TpӉN֚p-.Q0 !:;z9[ﱉjZ4ۇF:/%#_g=dy'B#TS{r'H4m >#I&6?% |ڸ{[ؘ52(4 to_JyJc{8"n`0o|!!E[tAX*V=t>{8^`ԄDKy᝗R$ bX04Mͦ ;A/%kA<$AWph8d4y5{۱[Wgpqsh_{ZJfH5zp\|)!aaہ*، &aouqL'{" J]#*Dt{W65CDk` tIŶk:k4%|D wY'g{<֕w@Eaߦ`Ʒ2}/ ~>/Y#Zﻲ.ڑʵzfC*ZA䖬t\uTrJd٭O,@GVo&i)q'JO?m=?ż (Kn 'Vy]Ed7-mfJ!>o2tOpMiG:&BW$؎# (l-SJ*+9 LGD!'滸_ /X V_K6+_u:0NcHN>Ϝ!filw;yk.kdwSTZ]):d`^e_";2O jOu ߜ]Բ{zZECk1+jwzhhqXO@=$?dpi':'XdS:1JԱS;HN0ol; }ٰ-qq?1xl7EsWt者 ߇n.GnU]ezu~eܾX=; ,Lqš[V9>i:"9VfB;tw.bh9G(RyZ'iiuQ:Aa (09z/EZViQF͜GRvz497E P-O`꠱W,\ &4 {:l]]=YU¬=V{YY7iUV)cՅ6]8-1[![Ѽr“EjF 'im9,_&%BNw0B#ZTЕSohsHYFe(a<,=8ݜp&9!~JOM ePX5 kp(֓Arnj9,eZKK51uINJH(CEs1XK-&j\M O>xSXꕾ>ť>`-fҸ/B!bzG'Qi!_(/Yzç)nU)9)AiFrcSY𿻣ė)E~%(O MH rd)*ke2"_'A&X[ #ש76 BX:ܬ?0&iMӿɏdx q]޲KL"mjbx?.bxT? )]-FcMM )S R$Gqj*iC.D%#Уs> j(aNt?j:od7ks+uǶ>$զa%%:Rh(Kby][RrD&Z dZP.͔j*TmG:6 d$'S(@ 0P=[J|~;)/oVݳmjzHKk-uo:-&.=CC;< >{6(9[.0 EX֖v3s >SV}oyS/w\~PB qp$[f6:ueI{uzw`^E ,X.Q]SWAklL[6Ǿ0c-ip+- 5/j,C1QvQ(- gl;+"hA5l)wrDoiq]^o„ Q]`Ưʟۗ)vO9F-z@4{oKJW XƙʀZN.9CC{ ZQ'SekU IGHU*`16jٚ2}a9bwuJdac=e51 9;DDkO @-ְFhSK>SZ7(}ܙX{.5gq,T )3f;h~\uE{SニGq&̑632iu~L[@W>0ٱ&`hMKT|t8,jsq4U4DVu;F(|9K2{:ʪk+ڃ4 !̛W9fOXyWU{LJOW{ NvTf/<lQ*jAwCQZQTӸSS[W-{EVUw&X>01fвنP3o FnvAJbi핾:]|_Nƚ˅xCh1:AkJBrQ?Hd2Xqƽ)yB fM3]⇓^A_ kqZ&,MNȔ.6IµhX|s ՝! t}'x* ݸo=jX`u%)+f%*)X# %5d>5b ߖM?ߕ i"I+Pfĥy8ƼrwnP [z/d·|ᬮ%h*΅FŏGIceHQ6w:@)D1×t")y„N#qC]UVUnLp9l-ykih/9'r`'muKN7ey`Û-k" ς]q!W}!5$hw5x1 <5]&*iE~BiS;7$a}eHLqW kv+߽ a|&8xZu5d=0?EKVF0!_U_GS~MLW FPB d2=jʭqzb[̔ ]K|.soKՁoMi'2r9)#vz֚8MhLcmɦ H ::n泓F4uoT_}pp6(RxyR T NՖREC*du\ Mq`1*T"9myݬ"F;[#Ay\цԤvl('Bo2BIG0avKV?).^Q/;9x_ &6Usfmh\ p2bJ&ks" $g,G=[i ʵV &W?|rȕeۑ}! :U jm@S4#q[^c=0-*&Po6)͘:6c(-1oYa,[e}"Cu@Y3tB6Ȅ}Fe{ MtTЍ @ lCG\-)$5|k[f/7I%elSG'wY3[MZz>Śh'8KoI"=LK0őI+V gZ.+W0a6hx)L-w`bx TvjXɨHqB]/^gk\1.K$EfO=hQ,.щ-~ƺw&w\?x6!tA!xe#%d44 kkSCsg06_e(#Fky;sPQ+Õј@e+,mcb,h eh CT#&b 1fc\K]kgmrAmg{TK,KV0/IfC/Av Zb|F!ƒY3>@P4SeB/q.5),ځk)eᜍ(S8AfB$<Ʈ9Gg%UDʫ!BtGQfvRF8q:QLEHL#q%`Rlm~rStu1|M *'eJ I$81kz:aqLZ ".O; q3Sݟk(AJ ,Y4=FW[k+0yr;ǶcdWd?}5Z%COE 솷{<_oxKoG /Xy@@qfX,Ga&q򥭺(9ak%/g`,W@¿ Ѕ4lGP9xٺvO `x )S|NC40k6GW<@+j| (mv8ZN<:4`=ż1>9C䚥BPG&GGƕFpb {}4+Pk:h> y>p^`V2}xlol442@p;@L8Sv<z#f^< F:lyȃ֜:ۆd:dg^djPӟ,$HvNTo/kHNr*L t2{4P:7< .@qT$ CcYX$1u:yzGKy@{nG= Tc<,$ A$<81B@ܾhā2Ie ! aɞ4{֠+Nڊq@$@2'g3<~P](@t{~)tceQi#v*g?6fs -U k>ޙ`\z4Ar9CGj V7e7 p] i}*.+Ni HN6 }()950 k"Z{PZX2AKqOx nFq`Cx7%lu0B5>ӂ|/ ]CSxniP? :8@N:q/*]3lEκN2NU6[ȹ@{qU0> f ;ɷFR%;1tY=@O³C5L 'pF[:oMU?aFX`?#k$9`F➑~ KyJ3Z -? i{ S-=KFmms"ę)/.^B 7&UN{,T.$ߺ9X 9HyhFݤ&GTL@+>M{*`]KMc tR SwsWva&r2 LMz }3Z! "Ab~Z eP=S!遧>R{1BȖ܍1Vu|@k6mAR+`s}H&vuT:# J"012'COPrtϓWfh(kD/Ai97 AO7Rf`3 DS7UEp0q⽸CcchT͸6!Sp+R+U*Qǡޑʘ"@RO+$(f=| RH7=՞p n,V}63|eʥƹa@eH1BV7#L{r 1 J5dT9=b'̳bȫй?BMB5 r[ve!8LŸez“tק8.eˆD8Spxtw‡JD%iv~ޜS vs (jOлS 9vwtW@R!|ķF0/"~_1x,L:,1Ӑ?3 x-ӡC4&9w8 (5]|nQn8>ꨡpF٭1b^s ǀ /Nf}&Q.#7'XS3֒U =&.@(_EH]Tr_SZIP`>D6bwe>\v)R~e $(3M*74ĐVlL=rL"kD)yW- .KE, `7c5`o]uNi>!ejXؖE+w>#^&BwoxX!43a1:,f  {D!*q@> 6bc͜aA)ϗ\ ϭʭBP!~lxE!BQ." OkDa>f~Z~`RWJ_R8.[p0}1Ͷԑ\QS8EZ۰2.@(T햝 rX#XT_?^)LZ}ݝ{0w_|<%r}RQ'Lk1ן,;t;ZWdJ>~5 +yAߔ%KP2[<^@vUBa&X%c=Nv`ƳF ϊ <uYL^W#q!.c9_ cagӮqД >c@gv^;VxK* v7qPBsvN[yz+[CG\?$>RV,Id:;isMi$v^ef/wbxu9~}fUf4`! t&; aB(*죣4}Ȍ!с4 pl*f _y8܀y.؎iyVsO3vV$AegB޼߅a]W)iR*^i]=߀ ~#QAhe7f2yJWP~Ȣ y7~T&SP($qP%<1Ƭwmϸ ƄYSDLxtD# kφXP-J$ZKqr;(^)J7Z~c )O\ xwW˳A zag-+f!X:E*AJ$ 1auEΆ_܈Y@ ҝ/y P4duw\3#gIhI?]-$@3 듆i2 d t] cb|Aſ'OtWl\GV nETcJ#%Jx\] #Wf?T[یa&(>|``UYzw?֬9 '^Ⱦ#D iLk9uq:v&S H|Ƌ Iˣ큊0Unl[Us.1rbb W%ӟ@ƛJvU@(}lx"FL9l狙(}Pq;j2 ̦z<]$Ӎ q\JF=VwYhNBsI>w`@U,f+>~ܴ:/V1mv ̃UxъH:U`Weq@l9s|9Vsit,8)d#O?#g3x ΟH@{4 ,FFob5, bLXBjd}1޷#!&11AɈF,LLFD5bbc2qaĈtpFXrP|ILFbD:R'49FjĘ]4&::eD{nb4nŀA~$O"$F #"bFh*AI bD&29F @ZtQK1ٷ&c9ciqى2ϢŐ"ƈ%MĈ )QĈQˆ :Ĉ^ZbĂtaic:01bAUF 8j jfcNhc(AĚ b@-!1bO01,BĠxbb60A g+FK#%DLj&B91oG5BU2;j{;j2kПdʟes DFhL0FddhDLFd0FdDFhL0FddQV3-&1Db~;p#Zԋ.uݍs\ѺNŐuБ"r0R=iJ/yJr>ܹ1\|K7f}n>:u|0!<8CNuģF;1*@ilVF!?-?y]KХB~ulex}۶sֿ}LpwrMݸnT)ZR~F>W;RG飗L8 ^WGQ\S旘5M:%i/Iyz9uص=Jgv/g_t%6_S>/S |w*\_QU*"Op\~S/* CU[r}Z _p daXU<_<[| /_V7_ [튉'yZ52 3ԬU?/).B2r~Udk|oϬHqPB P(B ]mrX^9 $ (#hW.  ^ z)%x5\@ P@jA|/8"P?WB,1 x}:` C!gڮv%%肍^ -X^ ._GcX>5Ą٠o ]CxJ0 #4cAu _CYSѡڦEIY isc=7 v%dx7?)pQ1  +SY1bG- p^1qs`sqJ~J` ~؊sp;Fv9QeN.# o~T)Q<- P!91zAw@Q<|aÊ+"Z@-pF4+ BC#PA: qr-qRp4cx(vi ᣨCJ-1J|B΁{AZٷ(<{ox,^b[ }A 8o&!HQKRwL8>zcScR16az'pjw>nf0`+(rEg %`<rFT ){ Ѕ@)0|)[B-= b):/bd Hs0_A,LБ&et*c}q~c@᧸}$%@ #l=fp`:}%8s".hJa .^6Dic~T;M0uxY@T/ш8G LR|$0d+ k̟%X`ETlsGG$)`a9^L+oϦ #Mu]1a&SmǰҟWFDn ,73OA=&4W-j4M]BE99P2ӸبDzr=@]`b_8vS07En+ `+$Hw3?74Y:*YU$wӴrˊrO h]`ި"7)o`Ur@Z,="otb8 $:3$^XL!I_%ȭ*XgCyk θU;©l t>L6j%l{>fV<H85F f/Mʨ1`FI:&JbX;$.Ύ# 2p-Qܶ\ENip*;U7PŠRت]YLWv2oV_b%c6>bR$3zi<]*%‰2:_5sڹ.D "Y L毠wc9IZ[̀OAJjQ$ HoMqS"\elڗEZxâ2U8.s $@8!MJH_[A%l \}ݺf.ȊTot)!M\ޙ\{%zD RHN˪Ƃ%灚 PKɵ@%`1v{G 4|(%d׵*<%?fy*늋wVNNjHXpt*# dt7zQ.xhgAV'HRbso@6%RޕR`lzĿ1"3>sL;_c.O-2Yg0륚3)sP@L91LB”*IaU`Z֥M'޺ {ic f7$Q}eg :g~6gͬHT2ۡQ-+z WAE`"|0`vHwoNxpp74F8hN yM, V6,446-V !ϋW3zlf3u~9;Aλy/`ק[(ҭ|/0L^xbOaaQgGr&]g[Rd6õ.l[pl1XlvD|;! ,7.vyÑN)&[uWjkk&,0](PJ: |D$+AMۯRRhYsaFHb9*5Y\2z.f - ůx|7'*=Y1h(ٚQ8A7a, VV4dҦGR1dQLBH8d]m MUK]-{#3^U\/IwiGF堐Vn+'S4g*hˁd;J 'VSqPÞv}.wL$;$ ,ڋ&؎*%7n{ov$G'7?R!V= 52H?,&.gRY:J!l Ҏ2p#$;c>9ج٢ʃٚE84ES3jsѼNTQrUp)oMSk']t 1VJQ@6 vFl(cq&AqU5cÉ3;~9[ほp^h׸ zLvj(%8^wy~:<>-E(bnAؿ`' im_F0ݱ)vF. XwydGFMovCXDW~Vn'`Ӕ{Ƕd K3'Hx .Ur/nhl`D+~ݧWYZ/[bkٟ\B"ن*:t4sV$ە\Zڦ `Zy+ u3)uJxӋؖ$} h }xVHaV?rX09;!yIܺ_ dy.6fRu*'[@) m p.n촆֋=npogڷņ~ruP qL-.6uSԢ*.OS.EJfvrZWm U@X8oS2>QW^፽\A^RIp[L&-ev|_`ʅe txدE-" %DM6p,~WZ9`s.aYL#WFo 1/G9˻p7w ~m^/m  )b=x彖R!`7f~am:v/Ry@ lǻ7O3Prn簹3ߛWMJEZfT q^7pܥ{9 oŮt6DʼnN$ogmXGBnZmͧ9_sMXt9_O1_e~t 23p}G-]'Ds/4)% {׾AIX$:}`3F"Y%~Ӧ`tN ~n6uV}_2[ <C :7險3#4]2`jIC~(/bi[]Wـ6O]ҊUگKV0vv#1;E.D; :A 5;gn!LLq^dF`kzmyT(Z,yRbd?wU,H($ FIim( &ᤠ2V?&[w+µmL:48~(]nrM/gtUʤ,gbq]B%o9|UWVwoZB%aT=Mz+uj%Eꈚ?'3Ns^'=K)npzJy=|x%i*F_j}Y8r x۠,Ew%UuhCeՒC:= ݘR)YfäKvgei5~DXrѬm$d9oD&U]qE`|XYXE\VU`~]_u`3|),i*EtYr(dŭҒ΍K ͳLl=uEOrcIzU)|"oW\v)\\*7fǟ5fE(P4R}S"ˆ6u.k{Drli[i 4Ԯ.9Z0B>Zߜp nA#r$WT+= s7qūeEIUzϢF"P8/W$>\yܶ7Y?s+rѪzN{[._gǗ!~ِ@5*HMڂOQcEw x衧k/{qվEڙ#PK֎*Y\WQYLBiow VAh.W_ֱ8XˏOJ1H_=NW/~F~>3+>I]v?wkC3g_h58xNmw yȺmΩhnh+:ήY5Ǜ5Oi$'HzҮE-Tp]l9U+GMUVjԟ|1-r_MtQE3 FAhxy7}6_Prpm?д髢:iuqi>{k{W0Mo L}u>Qzw\fE!^g_I\XEL u\kXE2tVWʡDorip?QG;0W'\zuDUyG\$e Λ VDb=[gύL29\w]Zmx:QYץg.]{ל}TNA,"^(\pwkF{fJ}#Z0{ fow4kɈdm$[ i=}\Qy˻x箎[7{y-sL|1}YhD'G>FOנsk*kYq'R׬v'uGg-577:j~jNIDR;Y KmαIKՓjZa=>0>Jzf{F!_dYނa񝃊n|^`HeUV߄1p䟪6$֭([Ts}fkJP6fؠzti3h>lbrub9G p: kwË]"~Rnٴ̙a7Dz;^$]3< ?'D{e4#(x7{2@-_=4[+ʜ$+B%*m),Oz;Vh,#>,сi"E9/9ԊӖ$OO{cf>Wַuȡ3GC;9 랔Yjҳm|IV(_jGM(\k~~ޢ|h~k$.>aJ$JojW]Wڗ/v$2ƅv !9$lûMdo 5;;Bi|nwاߑp\AϨރ@U'1mrRBwO6MC|Ch~O')zR,ސ~G L~{{1e]Aة!s>\tCqߺgɲԕ!ǎC_|dh(_}l =Mgnx0#q|| hIkWVsHui\`'FKlZJ@m6K)?y8hݳpnyW@~ra${s-K<-+v#\T|$l氚rY%"a}}Fvt*MJ3&*+>]IR BFG>mޟCgLi5nOmךɻ,S|')ڂw'K~0?erw)iMFM䗖fIE8~!SO;_~0(VTqȯwoʗv5MΪG_M!aFr=HnSѿX:]6_!n쀯N}ԺqfnS1cϦe\l'vv^\NvC>kooJe'~4uzҮ&3{M1U4,iк=u^K5WϾbw':_|W2!ra4P1%3#򄾙O/lz^_p("oW~#sɞׇI-5m lgYWzQcJ쟣e":Ǎ2URL S ȤiY^{tk.$&ayn{?$]W-ၙlCt:}_{M>(PB P(B (PB P(B (PB P(B (PB P(B (PB P(B (PB P(B (PB`xboard-4.8.0/winboard/help/html/0000755000175000001440000000000012420374633013504 500000000000000xboard-4.8.0/winboard/help/html/08.htm0000644000175000001440000000251712420374633014372 00000000000000 Help Menu

Help Menu

Help Contents

Brings up this help file, starting at the Contents page.

Help Index

Brings up this help file, starting at the Index/Find dialog.

How to Use Help

Brings up the standard help file that explains how to use Windows Help.

Hint

Displays a move hint from the chess engine.

Book

Displays a list of possible moves from the chess engines opening book. The first column gives moves, the second column gives one possible response for each move, and the third column shows the number of lines in the book that include the move from the first column. If you select this option and nothing happens, the engine is out of its book or does not support the book command.

About WinBoard

Displays the WinBoard version number.

xboard-4.8.0/winboard/help/html/11.htm0000644000175000001440000000576712420374633014376 00000000000000 Command Line Options

COMMAND LINE OPTIONS

All WinBoard options can be set either on the command line (if you start WinBoard by typing into an MSDOS Prompt box), in the Properties/Shortcut/Target box of a Windows shortcut, in a settings file, or in the Additional Options box of the WinBoard startup dialog. Exactly the same syntax is used in all four places. Most options can also be set from the menus and saved using Save Settings Now or Save Settings on Exit, so most people will not need to read this section.

Most options have two names, a long one that is easy to read and a short one that is easy to type. To turn on a boolean (true/false) option opt, you can just give its short name preceded by a minus sign or slash (-opt or /opt); to turn one off, prefix the short name by an x or an extra minus sign (-xopt or /-opt). To set any other kind of option, or to set a boolean option using its long name, give the value after the name, separated by a space, colon, or equal sign. (-opt 23 or /option:true). If a string option contains spaces or special characters, enclose it in double quotes and use the \ quoting convention of C to name the special characters. Alternatively, you can enclose a string value in curly braces (/opt={string}), as long as the value does not contain a closing curly brace. If a filename option contains spaces, enclose it in either single or double quotes. In filename options, the \ character is not treated specially, so use single quotes around the outside of the value if it has double quotes inside (and vice versa).

When you start WinBoard, it will pop up the Startup dialog box unless you provide sufficient options on the command line for WinBoard to determine which major mode to be in and what engines to use or chess server to connect to. To bypass this box, you must at minimum give one of the three options /cp, /ics, or /ncp. If you give the /cp option, you must also give the /fcp and /scp options. If you give the /ics option, you must also give the /icshost option.

Chess Engine Options

UCI Engine Support !NEW!

Internet Chess Server Options

Load and Save Options

User Interface Options

Adjudication Options !NEW!

Other Options

xboard-4.8.0/winboard/help/html/01.htm0000644000175000001440000001524312420374633014363 00000000000000 Contents

WinBoard: Chessboard for Windows

A (not completely) updated description with the release of version 4.5.0.

For the ultimate WinBoard Experience

New features since WinBoard 4.2.7 that are implemented in Alessandro Scottis Winboard_x are highlighted in red. New features in the WinBoard 4.3.xx series by H.G. Muller are highlighted in green, that in the unified 4.4 series in blue. New additions for series 4.5 are in purple.

Description

WinBoard is a graphical user interface for chess. It displays a chessboard on the screen, accepts moves made with the mouse, and loads and saves game files in standard chess notation. WinBoard serves as a front-end for many different services, including:

  • Chess engines that run on your PC. You can play a game against an engine, set up arbitrary positions, force variations, or watch a game between two engines. Fairy-Max is supplied with WinBoard 4.3.14, and over 100 other free chess engines are available separately. Of these, Crafty is the most popular. See Installing Chess Engines for instructions on installing additional chess engines.

  • Chess servers on the Internet. You can play against other Internet Chess Server (ICS) users, observe games they are playing, review games in the ICS libraries, chat, analyze observed games with a chess program, and more. WinBoard can also be used to run an automated computer player on the ICS, but this feature is for advanced users only and is subject to some caveats; see the separate file zippy.README for information.

  • The Web and your own saved games. You can use WinBoard as a helper application to view files in your Web browser or the Explorer. You can use it to keep track of email postal games, browse games off the net, or review games you have saved.

Getting Started

WinBoard starts up in one of three major modes: chess engine mode, ICS client mode, or game viewer mode. You cannot change modes while WinBoard is running, but you can access all the game viewer features directly from the other two modes. Also, you can start WinBoard several times to get multiple chessboard windows running in any combination of modes.

You will usually run WinBoard by choosing an item from the Windows Start menu that runs it in the mode you want. If you just double-click on WinBoard.exe, you get a startup dialog asking which mode you want. If you choose chess engine mode, you can then select from the installed engines; if you choose ICS client mode, you can then select from a list of known chess servers. More advanced users can customize these lists or type in WinBoard command line options directly.

After starting WinBoard, you can make moves in several different ways. To move by dragging, press the left mouse button while the cursor is on one of your pieces, move the cursor to another square, and release the button. You can also move by clicking the left mouse button once (press and release) over one of your pieces, moving the cursor to another square, and clicking again. You drop new pieces on the board when setting up a position by selecting from a context menu. Press the right mouse button over a square to bring up the menu in Edit Position mode; no menu will come up in modes where dropping a new piece is not permitted. In games with piece drops, such as bughouse or shogi, the pieces you hold for dropping are displayed next to the board, and you can move them to the drop location the same way you perform normal moves. You can also make moves by typing them in standard algebraic chess notation. Either a dialog box will pop up for you to type into, or in ICS mode, your typing will be redirected into the ICS interaction window.

When using an engine, the right-most mouse button allows you to see on the board what the engine is thinking about. Pressing the button shows the deepest position of the engines most recent analysis. Moving the mouse vertically while keeping this button pressed down will make you do step through the principal variation, and allows you to see how the engine thinks this position will be reached.

When WinBoard is iconized, its icon is a white knight if it is White's turn to move, a black knight if it is Black's turn.

Next to the main window, WinBoard does use many auxiliary windows for dedicated tasks. We mention the Engine-Output window (formerly analysis window) for a better display of the thinking output of engines (which you can then right-click to play out the selected PV in the board window), the Game-History window (where the game is displayed in SAN, and where you can double-click a move to call up the corresponding position in the board window), the Evaluation Graph window (where you see a graph of engine scores vs. move number, and can call up the corresponding position in the board window by clicking a point on the graph), the Comment popup (where you can right-click variation comments to play them out on the main board, or add and edit comments), the Game-List window (where you see an overview of all games in a game file you loaded, and can select a game for loading by clicking on it, and limit the list to games you are interested in by filtering). These auxiliary windows can be opened or closed as the need arises.

Additional Information

Menus

Shortcut Buttons

Command Line Options

Initialization Files

Installing Chess Engines

Firewalls

Limitations

Authors

Copyright

Frequently Asked Questions

xboard-4.8.0/winboard/help/html/05.htm0000644000175000001440000000635512420374633014373 00000000000000 Action Menu

Action Menu

Most of these commands are available in chess server mode only.

Accept

Accepts a pending match offer. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.

Decline

Declines a pending offer (match, draw, etc.). If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice.

Rematch

Issues the ICS rematch command, which asks for another game against your last opponent with the same time control and rule set.

Call Flag

Calls your opponent's flag, claiming a win on time, or claiming a draw if you are both out of time. You can also call your opponent's flag by clicking on his clock.

Draw

Offers a draw to your opponent, accepts a pending draw offer from your opponent, or claims a draw by repetition or the 50-move rule, as appropriate.

Adjourn

Asks your opponent to agree to adjourning the current game, or agrees to a pending adjournment offer from your opponent. You continue an adjourned ICS game by challenging the same player again with the ICS match command.

Abort

Asks your opponent to agree to abort the current game, or agrees to a pending abort offer from your opponent. An aborted ICS game ends immediately without affecting either player's rating.

Resign

Resigns the game to your opponent.

Stop Observing

Ends your participation in observing a game, by issuing the ICS unobserve command.

Stop Examining

Ends your participation in observing a game, by issuing the ICS unobserve command.

Upload To Examine

Starts an examined game on the ICS, and uploads the game currently loaded in WinBoard (by pasting it, or loading from a file) to it.

Adjudicate To White

End the current game and stop participating engine. The result will appear in the PGN as a win for white.

Adjudicate To Black

Same as above, but game will appear as a win for black.

Adjudicate Draw

Same as above, but game will appear as a draw.

xboard-4.8.0/winboard/help/html/21.htm0000644000175000001440000000715212420374633014365 00000000000000 Firewalls

FIREWALLS

By default, "WinBoard /ics" communicates with an Internet Chess Server by opening a TCP socket directly from the machine it is running on to the ICS. If there is a firewall between your machine and the ICS, this won't work. Here are some recipes for getting around common kinds of firewalls using special options to WinBoard. Important: See the paragraph in the LIMITATIONS section below about extra echoes.

Suppose that you can't telnet directly to ICS, but you can telnet to a firewall host, log in, and then telnet from there to ICS. Let's say the firewall is called fire.wall.com. Set command-line options as follows:

WinBoard -ics -icshost fire.wall.com -icsport 23

Then when you run WinBoard in ICS mode, you will be prompted to log in to the firewall host. (This works because port 23 is the standard telnet login service.) Do so, then telnet to ICS, using a command like "telnet chessclub.com 5000", or whatever command the firewall provides for telnetting to port 5000.

If your firewall lets you telnet (or rlogin) to remote hosts, but doesn't let you telnet to port 5000, you will have to find some other host outside the firewall that does let you do this, and hop through it. For instance, suppose you have an account at foo.edu. Follow the recipe above, but instead of typing "telnet chessclub.com 5000" to the firewall, type "telnet foo.edu" (or "rlogin foo.edu"), log in there, and then type "telnet chessclub.com 5000".

Exception: chessclub.com itself lets you connect to the chess server on the default telnet port (23), which is what you get if you dont specify a port to the telnet program. But the other chess servers dont allow this.

Suppose that you can't telnet directly to ICS, but you can use rsh to run programs on a firewall host, and that host can telnet to ICS. Let's say the firewall is called rsh.wall.com. Set command-line options as follows:

WinBoard -ics -gateway rsh.wall.com -icshost chessclub.com

Then when you run WinBoard in ICS mode, it will connect to the ICS by using rsh to run the command "telnet chessclub.com 5000" on host rsh.wall.com.

ICC timestamp and FICS timeseal do not work through many firewalls. You can use them only if your firewall gives a clean TCP connection with a full 8-bit wide path. If your firewall allows you to get out only by running a special telnet program, you can't use timestamp or timeseal across it. But if you have access to a computer just outside your firewall, and you have much lower netlag when talking to that computer than to the ICS, it might be worthwhile running timestamp there. Follow the instructions above for hopping through a host outside the firewall (foo.edu in the example), but run timestamp or timeseal on that host instead of telnet.

Suppose that you have a SOCKS firewall that requires you to go through some extra level of authentication, but after that will give you a clean 8-bit wide TCP connection to the chess server. In that case, if you are using timestamp or timeseal, you need to somehow socksify it; if not, you need to socksify WinBoard itself. Socksification is beyond the scope of this document, but see the SOCKS Web site at http://www.socks.nec.com/how2socksify.html.

xboard-4.8.0/winboard/help/html/19.htm0000644000175000001440000000571712420374633014401 00000000000000 Files

INITIALIZATION FILES

Settings

When WinBoard starts up, it reads option settings from a file named WinBoard.ini in its installation directory (the directory containing WinBoard.exe). Options in this file have the same format as command line options, except that they do not all have to be on a single line. You can put a comment in a settings file by preceding it with a semicolon (;).

The WinBoard.ini file is read before the command line is processed, so any options you give on the command line override options in the file.

If WinBoard encounters a /settingsFile filename or @filename option while reading settings (whether from the command line or a file), it reads more settings from the given file before reading the next option.

The Save Settings Now menu command writes the current values of most options to a file. In addition, settings are saved automatically when WinBoard exits if Save Settings on Exit is checked. The settings are written to the last file named in a /settingsFile command, if any; otherwise to WinBoard.ini. The @ option does not affect which file settings are saved to.

Warning: Because Save Settings overwrites the last settings file (usually WinBoard.ini) and only saves a subset of WinBoard's options, you should not add settings of more options to such a file with a text editor. If you do this, your additional options will be lost on the next Save Settings. You can change the values of existing settings freely, using Notepad or any plain text editor. Be careful not to do this while WinBoard is running, however, unless you know that Save Settings on Exit is off. Otherwise all your changes will be overwritten and lost when WinBoard exits.

Notice that tournament managers, like PSWBTM, usually call WinBoard with the option not to save settings on exit, so that the entire tournament uses the same settings. So it does make sense to edit volatile options, such as /variant, into the settings file.

ICS Logon

Whenever WinBoard connects to the Internet Chess Server, if it finds a file called ICS.ini in its installation directory, it feeds the file's contents to the ICS as commands. Usually the first two lines of the file should be your ICS user name and password. You can specify a different name instead of ICS.ini by using the icslogon command line option.

xboard-4.8.0/winboard/help/html/17.htm0000644000175000001440000000721112420374633014366 00000000000000 Adjudication Options

Adjudication Options

/adjudicateLossThreshold scorethreshold

If the given value is non-zero, WinBoard adjudicates the game as a loss if both engines agree for a duration of 6 consecutive ply that the score is below the given score threshold for that engine. Make sure the score is interpreted properly by WinBoard, using /firstScoreAbs and /secondScoreAbs if needed.

/adjudicateDrawMoves number

If the given value is non-zero, WinBoard adjudicates the game as a draw if after the given number of moves it was not yet decided.

/checkMates true|false

If this option is True, WinBoard detects all checkmates and stalemates, and ends the game as soon as they occur. Legality-testing must be on for this option to work.

/testClaims true|false

If this option is True, WinBoard verifies all result claims made by engines, and those who send false claims will forfeit the game because of it. Legality-testing must be on for this option to work.

/materialDraws true|false

If this option is True, WinBoard adjudicates games as draws when there is no sufficient material left to create a checkmate. This applies to KBKB with like bishops, and to KBK, KNK and KK. Legality-testing must be on for this option to work.

/trivialDraws true|false

If this option is True, WinBoard adjudicates games as draws that cannot be usualy won without opponent assistance. This applies to KBKB with unlike bishops, and to KBKN, KNKN, KNNK, KRKR and KQKQ. The draw is called after 6 ply into these end-games, to allow quick mates that can occur in some positions. KQKQ does not really belong in this category, and might be taken out in the future. (When bitbase-based adjudications are implemented.) Legality-testing must be on for this option to work.

/ruleMoves number

If the given value is non-zero, WinBoard adjudicates the game as a draw after the given number of consecutive reversible moves. Engines can claim draws after 50 moves, irrespective of the value of number.

/repeatsToDraw number

If the given value is non-zero, WinBoard adjudicates the game as a draw if a position is repeated the given number of times. Engines can claim draws after 3 repeats, (on the 3rd occurrence, actually), irrespective of the value of number. Beware that positions that have different castling or en-passant rights do not count as repeats, WinBoard is fully e.p. and castling aware!

xboard-4.8.0/winboard/help/html/07.htm0000644000175000001440000007572412420374633014403 00000000000000 Options Menu

Options Menu

Flip View

Inverts your view of the chessboard.

If you are playing a game on the ICS, the board is always oriented at the start of the game so that your pawns move from the bottom of the window towards the top. Otherwise, the starting position is determined by the flipView command line option.

Swap Clocks

Interchanges the position of the white and black clocks on the screen. Intended for manually-operated computer-computer games, where the monitor is standing to the side of the playing board, to make sure that the operator sees the time of his own machine on his side of the table. Note that it is possible to adjust the clocks in steps of one minute, by left- (decrement) or right-clicking (increment) it with the mouse in Edit Game mode. (Clicking the clocks in other modes is interpreted as claiming the flag.)

Mute all Sounds

Provides a quick way to switch on or off all sounds, without affecting the settings for them.

General

Always On Top

If this option is on, WinBoard sets its chessboard to be a topmost window, meaning that it always appears on top of all ordinary windows on the screen.

Always Queen

If Always Queen is off, WinBoard brings up a dialog box whenever you move a pawn to the last rank, asking what piece you want to promote it to. If the option is on, your pawns are always promoted to queens. Your opponent can still underpromote, however.

Animate Dragging

If Animate Dragging is on while you are dragging a piece with the mouse, an image of the piece follows the mouse cursor. If Animate Dragging is off, there is no visual feedback while you are

dragging a piece, but if Animate Moving is on, the move will be animated when it is complete.

Animate Moving

If Animate Moving is on, all piece moves are animated. An image of the piece is shown moving from the old square to the new square when the move is completed (unless the move was already animated by Animate Dragging). If Animate Moving is off, a moved piece instantly disappears from its old square and reappears on its new square when the move is complete.

Auto Flag

If this option is on and one player runs out of time before the other, WinBoard will automatically call his flag, claiming a win on time. In ICS mode, Auto Flag will only call your opponent's flag, not yours, and the ICS may award you a draw instead of a win if you have insufficient mating material. On most chess servers, you can now do set autoflag 1 instead and have the server call the flag. In local chess engine mode, WinBoard may call either player's flag and will not take material into account.

Auto Flip View

If this option is on when you start a game, the board will be automatically oriented so that your pawns move from the bottom of the window towards the top.

Auto Raise Board

If this option is on, whenever a new game begins, the chessboard window will be deiconized (if necessary) and raised to the top of the stack of windows on your screen.

Blindfold

If Blindfold is on, WinBoard displays a blank board. Moves can still be entered with the mouse, either by dragging the (invisible) piece or clicking the starting and ending square. You can also enter your move by typing it on the keyboard.

Highlight Dragging

If Highlight Dragging is on while you are dragging a piece with the mouse, the starting square and the square that the mouse cursor is over are highlighted. This option works even if Animate Dragging is off. When the option /showTargetSquares is set, WinBoard will also indicate all squares where a piece can legally move to as soon as you lift it.

Extended PGN Info

The PGN will contain the engine search depth, score and time for each move where the depth is non-zero, as a comment behind the move if this option is on. Works only when Show Thinking is enabled. The recorded time is the time reported by the engine.

Extra Info In Move History

Same as above, but in move-history window.

Highlight Last Move

If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use Backward or Back to Start, the starting and ending squares of the last move to be unmade are highlighted.

Periodic Updates

If Periodic Updates is on, the Analysis window is updated every two seconds. If not, it is updated only when the best move found changes. The Analysis window currently works only with Crafty, and Periodic Updates may not work with all versions of Crafty.

Ponder Next Move

If this option is off, the chess engine will think only when it is on move. If the option is on, the engine will also think while waiting for you to make your move.

Popup Exit Message

If this option is on, when WinBoard wants to display a message just before exiting, it brings up a modal dialog box and waits for you to click OK before exiting. If the option is off, WinBoard prints exits immediately without showing the message. If debugMode is on, however, the message will appear in the debug log.

Popup Move Errors

If this option is off, when you make an error in moving (such as attempting an illegal move or moving the wrong color piece), the error message is displayed in the message area. If the option is on, move errors are displayed in small popup windows like other errors. You can dismiss an error popup either by clicking its OK button or by clicking anywhere on the board, including downclicking to start a move.

Show Button Bar

If Show Button Bar is on, WinBoard displays on-screen buttons to step forward, backward, or pause the game. If it is off, the buttons are hidden, making the message line wider.

Show Coords

If Show Coords is on, WinBoard displays algebraic coordinates along the board's left and bottom edges.

Show Thinking

If this option is set, WinBoard displays the chess engines current search depth and its notion of the score and best line of play from the current position as it is thinking. The score indicates how many pawns ahead (or if negative, behind) the engine thinks it is. In matches between two machines, the score is prefixed by W or B to indicate whether it is showing White's thinking or Black's.

Test Legality

If Test Legality is on, WinBoard tests whether the moves you enter with the mouse or read from game files are legal, and displays an error if they are not. Turn this option off if you are playing a chess variant that WinBoard does not understand. (Bughouse, suicide, and wild variants where the king may castle after starting on the d file are generally supported with Test Legality on. The same holds for variants with non-FIDE pieces, like shatranj, xangqi, shogi, gothic, capablanca, courier, knightmate: WinBoard knows how all pieces occurring in those variants move. Falcon, cylinder and berolina are only partly supported, though, and the latter two should definitely be played with legality testing off, and falcon uses a wildcard piece for the Falcons, so it considers any move of them legal, but might miss checkmates that involve a Falcon. So you should not play it with claim verification switched on.)

Hide Thinking From Human

An alternative to suppressing the Thinking Output in the display above the board by switching Show Thinking off, but doing it in a way that still allows the extended PGN info to be recorded.

Highlight Move With Arrow

A big, fat arrow is drawn between the start and target field of the last move, so you cannot possibly miss it.

Display Logos

Controls the display of engine, user or ICS logos above the board, next to the clocks, by switching on or off the option /autoLogo.

Board

Board Size

Determines how large the board will be and what fonts and piece bitmaps will be used. On a Titanic board the piece bitmaps are 129x129 pixels, on Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72, Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25, and Tiny 21x21. The smaller boards have no system menu, but you can minimize or close them from the File menu.

You can also change the board size by dragging the window edges or corners with the mouse. The board will snap to the largest size that fits into the area you outline.

Note that only sizes Bulky, Middling and to a lesser extent Petite have built-in bitmaps for the non-FIDE- pieces. Archbishop, Chancellor and the wildcard Lance exist in all sizes from Petite to Bulky, though. In size Moderate, variant shogi uses the traditional Japanese piece representation.

Board Colors

Lets you change the colors WinBoard is using to draw the board and pieces.

All White

Uses the representation of the white pieces (a filled-in black outline) also for the black pieces (where you can fill them with another color to distinguish them). If you do not choose a very dark color for the black pieces, they look very ugly without outline, and using this option can fix that.

Flip Black

Displays the black pieces upside down (or the white pieces in Flip View). This is useful in Shogi, when you want to use the traditional Japanese representation of the pieces.

Adjudications

Ponder Next Move, Show Thinking, Hide Thinking from Human and Periodic Updates

Duplicates of the controls in the General option menu.

Adjudicate Draw Moves

Adjudicate a draw after the given number of moves, to prevent games from dragging on forever if two engines in a dead-drawn position, conspire to avoid 50-move draws. This and the folowing options are only active in Two Machines mode.

Adjudicate Loss Threshold

Adjudicate the game as a loss when both engines agree that the (negative) score is below the given threshold for the duration of 6 consecutive plies.

Verify Claims

Verify result claims made by engines when they terminate the game. If needed, correct the results to a loss for the engine making the false claim. Needs Test Legality to be on in order to work.

Detect Mates

Let WinBoard detect checkmate and stalemate, even before the engine gets the chance to claim it. Useful with buggy engines, that exit without a claim, or just hang. Needs Test Legality to be on in order to work.

Draw If Insufficient Material

If this option is on, WinBoard will recognize KBKB positions with equally colored Bishops, KBK, KNK, and KK positions as draws, even before the engine can claim them. Needs Test Legality to be on in order to work.

Adjudicate Trivial Draws

If this option is on, KBKB (with B on unlike color), KBKN, KNKN, KNNK, KRKR and KQKQ positions will be adjudicated draw after 6 ply. For KQKQ this is not really sound, and in the future it might be taken out of this option. But as long as tablebase adjudications are not implemented, it seems best to group this end-game with the trivial draws. Needs Test Legality to be on in order to work.

N-Move Rule

Here you can set the number of reversible moves (non-pawn, non-capture) after which WinBoard should adjudicate a game as draw. Engine draw claims are always consider ed valid after 50 moves (in the context of Verify Claims), but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to a smaller value if you are impatient.

N-Fold Repetition Rule

Here you can set the number of repetitions of the same position that should occur in order for WinBoard to adjudicate the game as draw. Engine draw claims are always consider ed valid after 3 repetitions (in the context of Verify Claims) , but you can set a different value here to either give the engine more leeway if it wants to play on, or test its claiming capabilities, or set it to 2 if you are impatient. (Do not set it to 1!)

Common Engine Settings

Polyglot Directory

If WinBoard knows where to find Polyglot, you can install UCI engines as if they were WinBoard engines, and WinBoard will automatically invoke Polyglot as an adapter to run them.

Hash Size, EGTB Path, EGTB Cache Size, Opening Book, Number of CPUs

These are options that UCI engines expect to be specified. WinBoard protocol now also allows native WinBoard engines to request similar information, so it might be used for these engines as well. The memory size specified by the WinBoard-protocol memory command is the sum of the hash and EGTB cache sizes. The specified opening book, when enabled through the Use Book check box, will be used as GUI book for engines that do not have their own book (as indicated by the check boxes). It must be a book in Polyglot format.

Engine #1 Settings, Engine #2 Settings

This pops up a dialog that allows the user to set engine-defined options of the mentioned engine (if it is in use). What is in the dialog is entirely determined by the engine. Generally, any changes you make to the controls are only sent to the engine after you press OK. An exception are engine-defined push buttons; the corresponding signal is sent to the engine immediately when you push those. To see the options of UCI engines, you need a Polyglot adapter that supports the recent WB-protocol extensions.

ICS

Auto Comment

If Auto Comment is on, any remarks made on ICS while you are observing or playing a game are recorded as a comment on the current move. This includes remarks made with the ICS commands say, tell, whisper, and kibitz. Limitation: remarks that you type yourself are not

recognized; WinBoard scans only the output from ICS, not the input you type to it.

Auto Observe

If Auto Observe is on and you add a player to your gnotify list on ICS, WinBoard will automatically observe all of that player's games, unless you are doing something else (such as observing or playing a game of your own) when one starts. On most chess servers, you can now do follow player instead, and the server will automatically observe all of players games.

Auto Kibitz

Auto Kibitz controls how output of computers playing on an ICS is handled. In many tournaments, computers are obliged to kibitz their thinking output to the ICS, and this option will do that automatically, without the engine having to know it. In addition, such kibitzed output by your opponent will be kept out of the console window, and will be diverted to the engine-output window.

Get Move List

If Get Move List is on, whenever WinBoard receives the first board of a new ICS game (or a different ICS game from the one it is currently displaying), it retrieves the list of past moves from the server. You can then review the moves with the Forward and Backward commands or save them with Save Game. You might want to turn off this option if you are observing several blitz games at once, to keep from wasting time and network bandwidth fetching the move lists over and over. If you turn this option on while a game is in progress, WinBoard immediately fetches the current move list.

Local Line Editing

If Local Line Editing is on, your machine handles echoing, backspacing, etc., for the characters that you type into the ICS Interaction window. Output is forwarded to the ICS only when you hit Enter.The Enter key produces a newline character, also known as Ctrl+J, \n, LF, linefeed, or decimal ASCII code 10. In this mode you can force a control character into the edit buffer by preceding it with Ctrl+Q (quote); however, the edit buffer will not accept certain control characters even when they are quoted in this way. You can force a control character to be sent immediately to ICS, bypassing the edit buffer, by preceding it with Ctrl+S (send).

WinBoard keeps a history of lines you recently typed in Local Line Editing mode. You can bring back old lines by pressing the cursor up key in the text entry box. Press the cursor down key to go back down to newer lines.

If Local Line Editing is off, all characters are sent to ICS as you type them. The Enter key produces a carriage return character, also known as Ctrl+M, \r, CR, or decimal ASCII code 13. Use Ctrl+Backspace if you need the ASCII DEL character. You can enter any character code by holding down the Alt key and typing its decimal value (always beginning with 0) on the numeric keypad; this is a little-known standard feature of Windows.

In both modes, if WinBoards internal telnet protocol implementation is active, it translates all \n characters to the standard telnet end-of-line sequence \r\n just before sending them out to ICS; see telnetProgram.

It is generally not a good idea to turn off this option while connected to ICS. If you are tempted to do so because everything you type is being echoed an extra time, see the paragraph about extra echoes under LIMITATIONS below.

Quiet Play

If Quiet Play is on, WinBoard will automatically issue an ICS set shout 0 command whenever you start a game and a set shout 1 command whenever you finish one. Thus you will not be distracted by shouts from other ICS users while playing.

Seek Graph

Auto Refresh

If Seek Graph is on, you can summon up a graphical representation of players seeking a game on the ICS in stead of the chess board, by left-clicking the latter when you are not using it. The requested games are separated out by rating and time control. Rated, unrated and wild games are displayed in different colors, computers as squares, humans as dots. Hovering the mouse over a dot in the graph will display the details of the corresponding seek ad in the message field above the board. Left-clicking the dot will take up the challenge. Right-clicking dots will push them to the back, so you can see seek ads that might have been hidden behind it. Right-clicking off dots will refresh the graph, left-clicking off dots will take the graph down ad display the chess board again.

In combination with Auto Refresh, the seek graph will be updated automatically. This is only implemented for the FICS and ICC servers. To make switching on of this option effective might require you to log off and on again to the ICS, as it requires changing ICS settings that are locked during a session.

Background Observe

Dual Board

If Background Observe is on, boards sent to you by the ICS when you are playing, but which are not of your game, (but of games you are observing), will not be displayed automatically. In stead WinBoard will remember the last board it received that way, and display it when you press the right mouse button in stead of the board of your own game. This feature is meant to enable bughouse players a peek at their partners game, without the need to log on to the ICS a second time.

If in addition Dual Board is also on, such background games are even displayed on a second board, side by side with your own game, so that it is always in view. This feature is experimental, and largely undeveloped; there is no animation of moves on this second board, while the effets are undefined if the board format of the observed game is not the same as that of your own game.

Premove

Premove allows you to play a move on the board before you have received your opponents move. This move is highlighted on the board using the Premove Highlight color, and is sent to the ICS as soon as your opponents move is received. To cancel a premove, either click twice on the piece that was premoved or premove an illegal move.

This group of controls allows you to set the following options: premove, premoveWhite, premoveWhiteText, premoveBlack, premoveBlackText.

One-Click Move

When One-Click Move is set, a click on an own piece will immediately move that piece if it only has a single legal move, without waiting for you to click a to-square. Similarly, clicking an opponent piece or empty square will immediately perform the move to that square, if only a single legal move to it existed. This is the mouse equivalent of having to type only e4 when you mean e2-e4. Finally, double clicking an own piece (or clicking an already selected piece) will make it execute its only capture, which can save you some time if the target square was far away. Legality testing has to be switched on for this to work.

ICS Alarm

When icsAlarm is set to True, the alarm sound is played when your clock counts down to icsAlarmTime seconds. For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the icsAlarmTime.

ICS Interaction Colors

Lets you change the colors and type styles that WinBoard uses to distinguish between different types of messages in the ICS Interaction window. The types distinguished are: shout, sshout, channel 1 tell, other channel tell, kibitz (or whisper), personal tell (or new message notification), challenge, request (including abort, adjourn, draw, pause, and takeback), seek, and normal (all other messages).

Startup Chat Boxes

You can put a semicolon-separated list of ICS handles or channel numbers here, WinBoard will open a Chat Window for each handle at startup in ICS mode.

Fonts

Lets you change the fonts WinBoard is using. The clock font, message font and coordinates font are specific to each board size. The tags font, comments font and ICS Interaction font are not dependent on the current size of the board. The Revert to Defaults button will reset the clock font, message font and coordinates font for the current board size, and will set the tags font, message font and Ics Interaction font for all board sizes.

Sounds

Lets you change the sounds that WinBoard plays for various events.

If the Move sound is on, WinBoard alerts you by playing a sound after each of your opponent's moves (or after every move if you are observing a game on the Internet Chess Server). The sound is not played after moves you make or moves read from a saved game file. If you turn on the Move sound when using WinBoard with the Internet Chess Server, you will probably want to give the set bell 0 command to the ICS. Otherwise the ICS will send a bell character after every move (not just yours), causing WinBoard to play the ICS Bell sound too. Alternatively, you could turn off the ICS Bell sound in WinBoard, but that might cause you to miss ICS alerts for other interesting events.

The other sound events correspond directly to the types of messages that the ICS Interaction Colors option knows how to colorize.

Game List

Lets you select which information is displayed in the Game List window.

Communications

Lets you change the communication port parameters when the internetChessServerComPort option is in use.

Load Game

Lets you change options used while loading games (timeDelay option).

Save Game

Lets you change options used for saving games (autoSaveGames, oldSaveStyle, and saveGameFile options).

Time Control

Lets you change the time control to be used in games against a chess engine. Two types of timing are available.

With conventional chess clocks, each player begins with his clock set to the timeControl period. When both players have made movesPerSession moves, a new time control period begins. The time in the new period is added to whatever time the players have left on their clocks.

With incremental clocks, each player is given an initial time allotment, and a timeIncrement is added to his clock after every move. The increment may be zero, in which case the entire game must be finished within the initial time allotment.

With fixed time per move, the clock is reset to the given time before each move, and any left-over time is discarded (i.e. not added to the time for the next move).

Note that in local modes it is always possible to adjust the clocks during a game by Shift + click on it, where a right-click adds a minute, and a left-click subtracts one.

Save Settings Now

Save the current option settings to a file, along with the current window sizes and positions, to be automatically reloaded next time WinBoard is run. See Settings for the fine points.

Save Settings on Exit

If this option is on, the current settings are automatically saved when WinBoard exits, as with Save Settings Now.

xboard-4.8.0/winboard/help/html/23.htm0000644000175000001440000000577712420374633014402 00000000000000 Authors

AUTHORS AND CONTRIBUTORS

WinBoard is partly based on xboard, a chessboard program for Unix and the X Window System. Tim Mann has been responsible for all versions of WinBoard, and for xboard versions 1.3 and beyond. H.G.Muller is responsible for version 4.3.

Mark Williams added many features to WinBoard 4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training mode, auto raise, and blindfold. Hugh Fischer added piece animation to xboard, and Henrik Gram added it to WinBoard. Frank McIngvale contributed many xboard user interface improvements and improved Crafty support. Jochen Wiedmann ported xboard to the Amiga, creating AmyBoard, and converted the documentation to texinfo. Elmar Bartel contributed the new piece bitmaps for version 3.2. Evan Welsh wrote CMail. John Chanak contributed the initial implementation of ICS mode. The default color scheme was adapted from Wayne Christopher's XChess program. Chris Sears and Dan Sears wrote the original xboard. They were responsible for xboard versions 1.0 through 1.2. Alessandro Scotti added many elements to the user interface, including the board textures and font-based rendering, the evaluation-graph, move-history and engine-output window. He was also responsible for adding the UCI support. H.G. Muller made WinBoard castling- and e.p.-aware, added variant support with adjustable board sizes, the Crazyhouse holdings, and the fairy pieces. In addition he added most of the adjudication options, made WinBoard ore robust in dealing with buggy and crashing engines, and extended time control with a time-odds and node-count-based modes.

Send bug reports to <bug-xboard@gnu.org>. Please run WinBoard with the /debug option and include the output from the resulting WinBoard.debug file in your message.

The WinBoard 4.3.xx line is being developed by H.G. Muller independently of the GNU Savannah xboard project. Bug reports on this version, and suggestions for improvements and additions, are best posted in the WinBoard forum, development section (www.open-aurec.com/wbforum/).

Michel van den Bergh provided the code for reading Polyglot opening books.

Arun Persaud worked with H.G. Muller to combine all the features of the never-released WinBoard 4.2.8 of the Savannah project (mainly by Daniel Mehrmann), and the never-released 4.3.16 into a unified WinBoard 4.4, which is now available both from the Savannah web site and the WinBoard forum.

xboard-4.8.0/winboard/help/html/16.htm0000644000175000001440000007377612420374633014410 00000000000000 User Interface Options

User Interface Options

/firstLogo filename

/secondLogo filename

The appearance of either of these options causes WinBoard to reserve space for displaying logos on both sides of the clocks. Normally the first logo goes left, the second right, unless the option swap clocks is in effect. The filename must refer to a bitmap file (.bmp) containing a logo for the particular player (usually a 130x65 or 100x50 bitmap, which will be scaled to the height of two clock lines.)

/autoLogo true|false

When true, causes WinBoard to automatically supply a logo for the first and second chess program, by looking for a fie named logo.bmp in the engine directory (as specified by the /fd or /sd option), and then displays it like this file was given as an argument to the /firstLogo or /secondLogo option. In this mode it will also look in a sub-folder of its installation folder called logos, for finding logos with names corresponding to the ICS (e.g. chessclub.com.bmp) or to the human user, should they be involved in a game.

/hideThinkingFromHuman true|false

Prevents the engine thinking output to appear in the display, without necessitating to suppress the sending of this information altogether (so it can still appear in the PGN).

/noGUI

Suppresses all GUI functions of WinBoard (to speed up automated ultra-fast engine-engine games, which you dont want to watch). There will be no board or clock updates, no printing of moves, and no update of the icon on the task bar in this mode.

/top or /xtop, or /alwaysOnTop true|false

Sets the Always On Top option. Default: False.

/queen or /xqueen, or /alwaysPromoteToQueen true|false

Sets the Always Queen option. Default: False.

/drag or /xdrag, or /animateDragging true|false

Sets the Animate Dragging option. Default: True.

/animate or /xanimate, or /animateMoving true|false

Sets the Animate Moving option. Default: True.

/flip or /xflip, or /flipView true|false

If Auto Flip View is not set, or if you are observing but not participating in a game, then the positioning of the board at the start of each game depends on the flipView option. If flipView is False (the default), the board is positioned so that the white pawns move from the bottom to the top; if True, the black pawns move from the bottom to the top. In any case, the Flip View menu command can be used to flip the board after the game starts

/autoflip or /xautoflip, or /autoFlipView true|false

Sets the Auto Flip View option. Default: True.

/autoraise or /xautoraise, or /autoRaiseBoard true|false

Sets the Auto Raise Board option. Default: True.

/highdrag or /xhighdrag, or /highlightDragging true|false

Sets the Highlight Dragging option. Must be on for /showTargetSquares to work. Default: False.

/showTargetSquares true|false

When set, and the Highlight Dragging option is set, WinBoard will indicate all squares a piece can legally move to when you pick up that piece, by drawing a colored dot in it. Default: False.

/highlight or /xhighlight, or /highlightLastMove true|false

Sets the Highlight Last Move option. Default: False.

/exit or /xexit, or /popupExitMessage true|false

Sets the Popup Exit Message menu option. Default: False.

/popup or /xpopup, or /popupMoveErrors true|false

Sets the Popup Move Errors menu option. Default: False.

/coords or /xcoords, or /showCoords true|false

Sets the Show Coords option. Default: False.

/legal or /xlegal, or /testLegality true|false

Sets the Test Legality option. Default: True.

/size or /boardSize sizename

Sets the Board Size option. Also chooses which board size any following Font options will affect. The default is the largest size that will fit on your screen.

/wpc or /whitePieceColor color
/bpc
or /blackPieceColor color
/lsc
or /lightSquareColor color
/dsc
or /darkSquareColor color

Color specifications for white pieces, black pieces, light squares, and dark squares. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as #rrggbb) or in decimal (as rrr,ggg,bbb). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFFCC, #202020, #C8C365, and #77A26D. Available on the Board Colors section of the Board Options dialog.

If you are using a grayscale monitor, try setting the colors to:

-whitePieceColor:#FFFFFF
-blackPieceColor:#000000
-lightSquareColor:#CCCCCC
-darkSquareColor:#999999

/hsc or /highlightSquareColor color
/phc
or /premoveHighlightColor color

Color specifications for the Highlight Last Move and Premove options, respectively. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as #rrggbb) or in decimal (as rrr,ggg,bbb). In the latter format, you must enclose the string in quotation marks if you leave spaces after the commas. The defaults are respectively #FFFF00 and #FF0000, respectively. These colors are also used to indicate non-captures and captures, respectively, with the /showTargetSquares option. The premove color is also used to indicate the most recent move when stepping through the principal variation of an engine.

/mono or /xmono, or /monoMode true|false

Determines whether WinBoard displays its pieces and squares in black and white (True) or color (False, the default). Available in the Board Colors section of the Board Options dialog.

/flipBlack true|false

Determines whether WinBoard displays the black pieces upside down (or the white pieces in Flip View). Useful with Shogi with the traditional Japanese pieces, which are not distinguished by color but by orientation.

/allWhite true|false

Determines whether the white piece bitmaps will be used to display black pieces. The white pieces have a dark outline, which the black pieces lack. This makes the latter look vague if the color you give them is not very dark.

/renderPiecesWithFont fontname

Uses the named true-type font to render the pieces, rather than the built-in bitmaps. The font must be installed on your computer. If the name starts with a * it is ignored, allowing you to easily disable a font temporarily in the whinboard.ini file.

/fontPieceToCharTable characterstring

If font-based rendering of the pieces is used, this table specifies which character of the font alphabet should be used for which piece. The format of the character strings is the same as that of the argument of /pieceToCharTable.

/fontPieceSize number

The number gives the size of the piece, as a percentage of the square size.

/fontPieceBackColorWhite color
/fontPieceForeColorWhite color
/fontPieceBackColorBlack color
/fontPieceForeColorBlack color

Color specifications for white pieces, black pieces that are generated with font-based rendering.

/liteBackTextureFile filename

/darkBackTextureFile filename

The filename indicates a bitmap file that should be used to display the light or dark squares, allowing you to make boards that look like wood, marble, etc. A filename starting with * is ignored.

/liteBackTextureMode number

/darkBackTextureMode number

The number indicates the way the files given in the background-texture options should be used to fill in the squares. Valid texture modes are 1 (default) and 2. In mode 1 the squares are taken from portions of the texture bitmap and copied without further processing. In mode 2, squares can also be rotated, mirrored and so on in order to provide a little more variety to the texture. The operations are selected at random so the board will look slightly different every time the program is run.

/overideLineGap number

The number specifies the width, in pixels, of the grid lines used to separate the squares. If it is very small (like a single pixel), it becomes vey hard to see which squares are highlighted (to indicate the last move), as this highlighting is a color change of these grid lines. Highlighting the moves with an arrow is then recommended.

/highlightMovesWithArrow true|false

If this option is true, a big, fat arrow is drawn to indicate the last move.

/highlightArrowColor color

Specifies the color of the arrow that highlights the moves.

/evalHistoColorWhite color

/evalHistoColorBlack color

Specifies the colors to be used to plot the white and black scores in the evaluation graph.

/colorShout effects color
/colorSShout effects color
/colorChannel1 effects color
/colorChannel effects color
/colorKibitz effects color
/colorTell effects color
/colorChallenge effects color
/colorRequest effects color
/colorSeek effects color
/colorNormal effects color

Select colors and effects to colorize messages in the ICS Interaction window. The effects may be any combination of bold, italic, underline, and strikeout. Colors are specified as for squares and pieces. Available on the ICS Interaction Colors section of the ICS Options dialog. Limitation: On 256 color displays, Windows chooses the nearest solid color from the system palette, which will not always be close to the color you selected.

/colorBackground color

Sets the background color for the ICS Interaction window. Available on the ICS Interaction Colors section of the ICS Options dialog.

/colorize or /xcolorize, or /colorizeMessages true|false

If True, WinBoard colorizes messages in the ICS Interaction window with the colors listed above. Default: True. Available in the ICS Interaction Colors section of the ICS Options dialog.

/clockFont fontname:size effects
/messageFont fontname:size effects
/coordFont fontname:size effects
/tagsFont fontname:size effects
/commentFont fontname:size effects
/icsFont fontname:size effects

The fonts used respectively for the clocks, the message display line, rank and file coordinate labels, the Edit Tags dialog, the Edit Comment dialog, and the ICS Interaction window. These options may be given more than once. Each occurrence affects the fonts for the current board size; that is, the size given in the last preceding /boardSize option, if any, or else the default size. The font size may contain a decimal point, and the effects may be any combination of bold, italic, underline, and strikeout. Example: /clockFont="Arial:20.0 bi". Available on the Fonts menu.

/soundShout sound
/soundSShout sound
/soundChannel1 sound
/soundChannel sound
/soundKibitz sound
/soundTell sound
/soundChallenge sound
/soundRequest sound
/soundMove sound
/soundBell sound

/soundIcsWin sound
/soundIcsLoss sound
/soundIcsDraw sound
/soundIcsUnfinished sound

/soundIcsAlarm sound

Associate sounds with WinBoard events. Most of the events are the same ones that cause text colorization. In addition, soundMove is played if a chess engine or another player makes a move. SoundBell is played if the chess server sends an ASCII BEL character (Ctrl+G). Available on the Sounds menu.

SoundIcsWin, soundIcsLoss, soundIcsDraw and soundIcsUnfinished are played at the conclusion of an ICS game. The result of the game determines which sound is played.

SoundIcsAlarm is played when your game clock counts down to icsAlarmTime.

The sound argument may be one of the following:

  • The name of a .wav file. The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).

  • $, indicating the default system sound.

  • ! followed by the name of a built-in WinBoard wave resource.

  • ! alone, or (empty string), indicating silence.

The default for soundMove and soundBell is $, while the others default to silence.

/dropMenu true|false

This option allows you to emulate old behavior, where the right mouse button brings up the (now deprecated) drop menu rather than displaying the position at the end of the principal variation. Default: False.

/icsMenu={entries} or /icsMenu=@filename

This option lets you customize the right-button context menu that is available in the upper (output) pane of the ICS Interaction window. It consists of a list of menu entries, one per line. If the option value starts with an @ sign, it is the name of a file that contains the entries. Each entry contains either four fields separated by commas or the single character "-". The fields are:

  1. The menu text. If this field begins with "|", the item begins a new column in the menu and the "|" is not shown. If this field contains an "&", the character after the ampersand is underlined in the menu and acts as a keyboard shortcut for the item when the menu is displayed. Do not assign the same shortcut key to two different menu items.

  2. Text to insert into the input pane. The text cannot include a comma. You can use ICS aliases to get around this limitation.

  3. A flag (1 or 0) saying whether to insert a space and name (see above) after the text. If you set this flag, you might also want to put "(name)" into the menu text as a memory aid.

  4. A flag (1 or 0) saying whether the result should be sent immediately to ICS or left in the input pane for further editing.

You can now use two special insert texts chat and none in the entry definitions. In stead of being sent to the ICS, WinBoard will recognize them as special cases (they are not valid ICS commands anyway). Chat will open a chat box for the handle you clicked on, none will define a disabled entry (usually used with an item name of spaces), which you could put in the position of the menu that pops up under your mouse pointer, so there would be no default action when you up-click without moving the mouse first.

The entry "-" produces a separator line in the menu. The top three menu entries are always Copy and Paste, Copy, and Paste, but you have full control over the rest of the menu.

The default menu is:


&Who,who,0,1
Playe&rs,players,0,1
&Games,games,0,1
&Sought,sought,0,1
| ,none,0,0
Open Chat &Box (name),chat,1,0
&Tell (name),tell,1,0
M&essage (name),message,1,0

&Finger (name),finger,1,1
&Vars (name),vars,1,1
&Observe (name),observe,1,1
&Match (name),match,1,1
Pl&ay (name),play,1,1

There is no graphical user interface to set this option. To change it, edit your settings file with a plain text editor such as Notepad.

/icsNames={names} or /icsNames=@filename

This option lets you customize the drop-down list of ICS names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text /ics /icsHost= and adds the result to the command-line options. There is no graphical user interface to set this option. To change it, edit your settings file with a plain text editor such as Notepad.

/firstChessProgramNames={names} or /firstChessProgramNames="@filename"

This option lets you customize the first drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text /cp /firstChessProgram= and adds the result to the command-line options.

There is no graphical user interface to set this option. To change it, edit your settings file with a plain text editor such as Notepad. Example:

/firstChessProgramNames={GNUChess
WCrafty-15_11 /fd="C:\Program Files\Crafty"
ArasanX /fd="C:\Program Files\Arasan\Arasan 4.1"
"EXchess xb" /fd=C:\EXchess
Comet-WB /fd=C:\Comet
}

/secondChessProgramNames={names} or /secondChessProgramNames="@filename"

This option lets you customize the second drop-down list of chess engine names that appears in the WinBoard startup dialog. It consists of a list of strings, one per line. If the option value starts with an @ sign, it is the name of a file that contains the strings. When you select a string from the drop-down list, WinBoard prepends the text /cp /secondChessProgram= and adds the result to the command-line options.

There is no graphical user interface to set this option. To change it, edit your settings file with a plain text editor such as Notepad. Example:

/secondChessProgramNames={GNUChess
WCrafty-15_11 /sd="C:\\Program Files\\Crafty\"
ArasanX /sd="C:\Program Files\Arasan\Arasan 4.1"
"EXchess xb" /sd=C:\EXchess
Comet-WB /sd=C:\Comet
}

/x=xcoord /y=ycoord

Sets the initial location of the board window, giving the screen coordinates of the upper left-hand corner. Both arguments must be given together.

/analysisX=xcoord /analysisY=ycoord /analysisW=width /analysisH=height

These options have been deprecated, as the analysis window is replaced by the more general engine-output window. They are recognized, but ignored, and no longer saved in the winboard.ini file.

/commentX=xcoord /commentY=ycoord /commentW=width /commentH=height

Sets the initial location and size of the Comment window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/gameListX=xcoord /gameListY=ycoord /gameListW=width /gameListH=height

Sets the initial location and size of the Game List window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/icsX=xcoord /icsY=ycoord /icsW=width /icsH=height

Sets the initial location and size of the ICS Interaction window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/tagsX=xcoord /tagsY=ycoord /tagsW=width /tagsH=height

Sets the initial location and size of the Tags window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/moveHistoryX=xcoord moveHistoryY=ycoord /moveHistoryW=width /moveHistoryH=height

Sets the initial location and size of the move-history window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/evalGraphX=xcoord /evalGraphY=ycoord /evalGraphW=width /evalGraphH=height

Sets the initial location and size of the evaluation-graph window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/engineOutputX=xcoord /engineOutputY=ycoord

/engineOutputW=width /engineOutputH=height

Sets the initial location and size of the engine-output window, giving the screen coordinates of the upper left-hand corner (relative to the main window), the width, and the height. All four arguments must be given together.

/engineOutputUp true|false

/evalGraphUp true|false

/moveHistoryUp true|false

If set to True, the corresponding window is displayed, if False, the window is absent.

/stickyWindows true|false

Auxiliary windows touching the main window will stay attached to the latter when you move it.

/autoDisplayComment true|false

/autoDisplayTags true|false

If set to True, these options cause the window with the move comments, and the window with PGN tags, respectively, to pop up automatically when such tags or comments are encountered during the replaying a stored or loaded game.

/gameListTags string

The string contains single-character codes specifying the PGN tags that have to be listed for each game in the game-list window, and their order. The meaning of the characters is a=out-of-book info, b=black Elo, e=event, d=date, o=round, p=players, r=result, w=white Elo, s=site, t=time control and v=variant, Default: eprd.

xboard-4.8.0/winboard/help/html/24.htm0000644000175000001440000000441512420374633014367 00000000000000 Copyright

COPYRIGHT

Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
Enhancements Copyright 1992-2014 Free Software Foundation, Inc.

The following terms apply to Digital Equipment Corporation's copyright interest in WinBoard:

All Rights Reserved

Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.

DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

The following terms apply to the enhanced version of WinBoard distributed by the Free Software Foundation:

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 3 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.

xboard-4.8.0/winboard/help/html/04.htm0000644000175000001440000004061212420374633014364 00000000000000 Mode Menu

Mode Menu

Machine White

Forces the chess engine to play white.

Machine Black

Forces the chess engine to play black.

Two Machines

Starts a game between two chess engines.

Machine Both

A single chess engine plays itself. Mainly useful for pseudo-engines, that are in fact communication links to another machine, where you want to observe a game that is being played. (E.g. the gothic-chess.com server). This command is not implemented yet (version 4.3.14).

Analysis Mode

In this mode, you can make moves for both sides on the board. After each move, the chess engine will think about possible replies and display its analysis in a separate window. Crafty was the first engine to support this feature, but by now there are many others that support it as well. With respect to playing variations, the same holds as in Edit Game mode.

From WinBoard 4.4 on this function can also be invoked in zippy mode, i.e. when you are logged on to an ICS with an engine loaded. In that case it is not your own moves that the engine analyzes, but the moves that are played in a game on the ICS that you are observing. You must start observing before you start the analysis mode! See the file zippy.README for how to connect to an ICS and a chess engine running on your local computer at the same time. (Basically this amounts to adding the /zp command-line option in addition to all options you would need for connecting to the ICS, as well as those needed for running the chess engine.)

Analyze File

In this mode, you can load a game from a file, and the chess engine will analyze each move as in Analysis Mode. Crafty was the first engine to support this feature, but by now there are many others that support it as well.

ICS Client

This is the normal mode when WinBoard is connected to a chess server. If you have moved into Edit Game or Edit Position mode, you can select this option to get out.

When you run WinBoard in ICS mode, it starts up a console window in which you can type commands and receive text responses from the chess server. You can use the standard Windows editing keys to edit your command line before pressing Enter. The console window keeps a history of the last few commands you typed. Press the up-arrow key to go back to a previous command; press the down-arrow key to go forward again to a later command. Press the right mouse button in the output area for a context menu of editing commands and ICS command shortcuts.

Some useful ICS commands include who to see who is logged on, games to see what games are being played, match to challenge another player to a game, observe to observe an ongoing game, examine or smoves to review a recently completed game, and of course help.

Whenever you ask to observe an ongoing game, review a completed game, or resume an adjourned game, WinBoard retrieves and parses the list of past moves from the ICS, so you can review them with Forward and Backward or save them with Save Game.

In ICS mode a graph of players seeking games can be displayed in stead of the chess board, when you are idle (i.e. not playing, observing or examining). When this feature is enabled, left-clicking in the board area will switch between board and the seek graph. For details on this, see the Seek Graph command.

Some special ICS Client features are activated when you are in examine or bsetup mode on ICS. See the descriptions of the menu commands Forward, Backward, Pause, and Stop Examining below. You can also issue the ICS position-editing commands with the mouse. Move pieces by dragging with the left mouse button, or by left-clicking once on the starting square and once on the ending square. Press the right mouse button over a square for a context menu that lets you drop a new piece, empty the square, or clear the board. Click on the White or Black clock to set the side to play. You cannot set the side to play or drag pieces to arbitrary squares while examining on ICC, but you can do so in bsetup mode on FICS. You can also make moves by typing them into the ICS window; you may have to do this occasionally if you are playing a chess variant whose rules WinBoard does not understand. (But this list is getting shorter, and Fischer Random is not on it anymore; you can enter castling there with the mouse by dragging the King on top of the Rook.)

If you are playing a bughouse game on the ICS, a list of the offboard pieces that each player holds is shown in the window title bar, and graphically in the holdings area next to the board. To drop an offboard piece, drag it from the holdings to the board. (Pressing the right mouse button over an empty square to bring up a context menu will still work if you have set the /dropMenu option.) To observe your partner's games, start a second copy of WinBoard, log in as a guest, and use the ICS follow or pfollow command in the new window. You can also use the Background Observe or Dual Board features to follow your partners game through a single connection on which you are also playing yourself, in the background (peeking at it by pressing the right mouse button), or on side-by-side boards in the board window.

Edit Game

Allows you to make moves for both Black and White, and to change moves after backing up with the Backward command. The clocks do not run, but you can adjust their reading by clicking on them. A left-click subtracts one minute, a right-click adds one minute.

In chess engine mode, the chess engine continues to check moves for legality but does not participate in the game. You can bring the chess engine back into the game by selecting Machine White, Machine Black, or Two Machines.

In ICS mode, the moves are not sent to the ICS: Edit Game takes WinBoard out of ICS Client mode and lets you edit games locally. If you want to edit a game on ICS in a way that other ICS users can see, use the ICS examine command or start an ICS match against yourself.

If you edit an existing game locally by playing new moves while not at the end, you will create a new variation. (New moves at the end will simply be appended to the existing game.) WinBoard will then shelve the original variation (main line) from beyond the point where you played a new move. You can later revert to that main line with the Revert or Annotate commands. This will discard the variation you just entered, and restores the moves of the original main line that you overwrote. This procedure can be applied recursively, so you an make (sub-)variations on variations. Rather than entering variations move by move, you can also recall them from PGN variations in the Comment window, by right-clicking those.

Edit Position

Lets you set up an arbitrary board position. Use the left mouse button to drag pieces to new squares, or to delete a piece by dragging it off the board or dragging an empty square on top of it. To drop a new piece on a square, press the right mouse button over the square. This brings up a menu of pieces. Additional menu choices let you empty the square or clear the board. You can set the side to play next by clicking on the White or Black indicator at the top of the screen. The pop-up menu also contains options to promote or demote the piece currently in the square. (In variants like Crazyhouse a piece has a different representation when it is a promoted Pawn rater than an original piece.) This allows you to create some of the not-so-common pieces (e.g. a Unicorn is a promoted King, a Commoner is a demoted King).

In Edit Position mode you can type a FEN in the move type-in box to setup the corresponding position.

Selecting Edit Position causes WinBoard to discard all remembered moves in the current game.

In ICS mode, change made to the position by Edit Position are not sent to the ICS: Edit Position takes WinBoard out of ICS Client mode and lets you edit positions locally. If you want to edit positions on ICS in a way that other ICS users can see, use the ICS examine command, or start an ICS match against yourself. (See also ICS Client above.)

Show Engine Output

Open a new window dedicated to showing the thinking output of the engine(s), as controlled by Show Thinking. In ICS mode kibitzed info of an opponent engine can appear here as well, under control of the /autoKibitz option. Right-clicking a line of thinking output will allow you to step through the PV it contains on the main board, by vertically moving the mouse, keeping the right-button pressed. This also works for PVs kibitzed to you through an ICS.

WinBoard will display lines of thinking output of the same depth ordered by score, (highest score on top), rather than in the order the engine produced them. Usually this amounts to the same, as a normal engine search will only find new PV (and emit it as thinking output) when it searches a move with a higher score than the previous variation. But when the engine is in multi-variation mode this needs not always be true, and it is more convenient for someone analyzing games to see the moves sorted by score. The order in which the engine found them is only of interest o the engine author, and can still be deduced from the time or node count printed with the line.

Show Evaluation Graph

Open a new window dedicated to displaying a graph, representing the development of the engine score(s) from the current game over time. (Needs Show Thinking to be enabled in order to work.) Right-clicking on the graph will take you to the corresponding move in the board display.

Show Game List

Shows or hides the list of games generated by the last Load Game command. Which info from the PGN tags is included in the game-description line can be customized. A 'Filter' field in this window allows you to display only lines that contain a certain string. (E.g. a player name to see only games of that player from a big tournament file.)

Show Move History

Open a new window dedicated to showing the game currently in progress. Double-clicking on a move takes you to the corresponding position in the board display.

Open Chat Window

Open a new window that in ICS mode can be used to display messages received from ICS tell commands from a specified ICS handle, from a channel (when you set the handle to the channel number), shouts / c-shouts, or whispers / kibitzes from co-observers of a game (when you set the handle to shouts, c-shouts, whisper or kibitzes). You have to press the Change button in the chat window to activate the entered handle, or type . Typing into the bottom field of the window will send tell messages to the handle or channel, or whispers to co-observers. You can open up to five chat windows. Messages that are diverted to such a chat window will not appear in the ICS interaction window. A window dedicated to shouts will also capture c-shouts (if there is no dedicated c-shout box) and It messages, recognizable on the type of bracketing used around the shouter name ( [ ], ( ) or < >, respectively).

Training

Training mode lets you interactively guess the moves of a game for one of the players. While in Training mode, the navigation buttons are disabled. You guess the next move of the game by playing the move on the board (or using the Type In Move command). If the move played matches the next move of the game, the move is accepted and the opponents response is autoplayed. If the move played is incorrect, an error message is displayed.

Edit Tags

Lets you edit the PGN (portable game notation) tags for the current game. After editing, the tags must still conform to the PGN tag syntax:


<tag-section> ::= <tag-pair> <tag-section>
                  <empty>
<tag-pair>    ::= [ <tag-name> <tag-value> ]
<tag-name>    ::= <identifier>
<tag-value>   ::= <string>

See the PGN Standard for full details. Here is an example:


[Event "Portoroz Interzonal"]
[Site "Portoroz, Yugoslavia"]
[Date "1958.08.16"]
[Round "8"]
[White "Robert J. Fischer"]
[Black "Bent Larsen"]
[Result "1-0"]

Any characters that do not match this syntax are silently ignored. Note that the PGN standard requires all games to have at least the seven tags shown above. Any that you omit will be filled in by WinBoard with "?" (unknown value) or "-" (inapplicable value).

Edit Comment

Adds or modifies a comment on the current position. Comments are saved by Save Game and are displayed by Load Game, Forward, and Backward.

Enter Username

Allows you to type the name of the human player, which will appear in the PGN header and in the window title.

Pause

Pauses updates to the board, and if you are playing against a local chess engine, also pauses your clock. To continue, select Pause again, and the display will automatically update to the latest position. The P (or C) button is equivalent to selecting Pause.

If you select Pause when you are playing against a chess engine and it is not your move, the chess engines clock will continue to run and it will eventually make a move, at which point both clocks will stop. Since board updates are paused, however, you will not see the move until you exit from Pause mode (or select Forward). This behavior is meant to simulate adjournment with a sealed move.

If you select Pause while you are in examine mode on ICS, you can step backward and forward in the current history of the examined game without affecting the other examiners or observers. Select Pause again to reconnect yourself to the current state of the game on ICS.

If you select Pause while you are loading a game, the game stops loading. You can load more moves one at a time by selecting Forward, or resume automatic loading by selecting Pause again.

xboard-4.8.0/winboard/help/html/22.htm0000644000175000001440000001167212420374633014370 00000000000000 Limitations

LIMITATIONS AND NON-LIMITATIONS

WinBoard is a Win32 application. It runs only on Windows NT and Windows 95. It does not work on Windows 3.11 or earlier, even with the Win32s compatibility package.

CMail, the companion program to xboard for playing electronic mail correspondence chess, has not been ported to Win32.

There is no way for two people running copies of WinBoard to play each other without going through the Internet Chess Server.

Under some circumstances, your ICS password may be echoed when you log on.

If you are connecting to the ICS by running telnet, timestamp, or timeseal on an Internet provider host, you may find that each line you type is echoed back an extra time after you hit Enter. You can probably turn this echo off. If your Internet provider is a Unix system, type "stty -echo" after you log in to the provider but before you run telnet, timestamp, or timeseal. In addition, you may need to type the sequence Ctrl+Q Ctrl+E Enter after you have finished logging in to ICS. On VMS, type set terminal /noecho /nowrap, and after you telnet to the ICS, type Ctrl+Q Ctrl+] Enter set mode char Enter Enter. It is a good idea to turn off the extra remote echo if you can, because otherwise it can get interleaved with output from the ICS and confuse WinBoard's parsing routines. Dont just turn off Local Line Editing so that you see only the remote echo and not the local one; that will make the interleaving problem worse.

The game parser recognizes only algebraic notation (SAN).

The ICS logon file does not work properly when you connect to ICS through a Unix gateway host by setting icsPort to 23. The Unix login process apparently discards type-ahead.

Some WinBoard functions may not work with versions of GNU Chess earlier than 4.0, patchlevel 77. The current version of WinBoard works best with Crafty version 15.11 or later.

Many of the following points used to be limitations in WinBoard 4.2.7 and earlier, but are now fixed:

The internal move legality tester in WinBoard 4.3.xx does look at the game history, and is fully aware of castling or en passant-capture rights. It permits castling with the king on the d file because this is possible in some "wild 1" games on ICS. The piece-drop menu does not check piece drops in bughouse to see if you actually hold the piece you are trying to drop. But this way of dropping pieces should be considered an obsolete feature, now that pieces can be dropped by dragging them from the holdings to the board. Anyway, if you would attempt an illegal move when using a chess engine or the ICS, WinBoard will accept the error message that comes back, undo the move, and let you try another.

FEN positions saved by WinBoard do include correct information about whether castling or en passant are legal, and also handle the 50-move counter.

The mate detector does not understand that non-contact mate is not really mate in bughouse. The only problem this causes while playing is minor: a "#" (mate indicator) character will show up after a non-contact mating move in the move list. WinBoard will not assume the game is over at that point, not even when the option Detect Mates is on.

Edit Game mode always uses the rules of the selected variant, which can be a variant that uses piece drops. You can load and edit games that contain piece drops. The (obsolete) piece menus are not active, but you can perform piece drops by dragging pieces from the holdings.

Edit Position mode does not allow you to edit the Crazyhouse holdings properly. You cannot drag pieces to the holding, and using the popup menu to put pieces there does not adapt the holding counts and leads to an inconsistent state. Set up Crazyhouse positions by loading / pasting a bFEN, from there you can set the holdings.

Fischer Random castling is fully understood. You can enter castlings by dragging the King on top of your Rook. You can probably also play Fischer Random successfully on ICS by typing castling moves into the ICS Interaction window.

Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested.

xboard-4.8.0/winboard/help/html/06.htm0000644000175000001440000001407712420374633014374 00000000000000 Step Menu

Step Menu

Type In Move

Pops up a dialog box, into which you can type moves in standard algebraic chess notation. (You can also get this dialog box by simply starting to type over the chessboard, except in ICS mode, where such typing is redirected into the ICS interaction window.) Typing a number will have the same effect as stepping forward or backward to the position after that move. In Edit Position mode you can also type a FEN to set up the position.

Backward

Steps backward through a series of remembered moves. The < button is equivalent to selecting Backward, as is turning the mouse wheel towards you. In most modes, Backward only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Backward in any of these situations, you will not be allowed to make a different move. Use Retract Move or Edit Game if you want to change past moves.

If you are examining a game on the ICS, the behavior of Backward depends on whether WinBoard is in Pause mode. If Pause mode is off, Backward issues the ICS command backward, which backs up everyone's view of the game and allows you to make a different move. If Pause mode is on, Backward only backs up your local view.

Forward

Steps forward through a series of remembered moves (undoing the effect of Backward) or through a game file. The > button is equivalent, as is turning the mouse wheel away from you.

If you are examining a game on the ICS, the behavior of Forward depends on whether WinBoard is in Pause mode. If Pause mode is off, Forward issues the ICS command forward, which moves everyone's view of the game forward along the current line. If Pause mode is on, Forward only moves your local view forward, and it will not go past the position the game was in when you paused.

Back to Start

Jumps backward to the first remembered position in the game. The << button is equivalent.

In most modes, Back to Start only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on the ICS, or loading a game. If you select Back to Start in any of these situations, you will not be allowed to make a different move. Use Retract Move or Edit Game if you want to change past moves; or use New Game to start a new game.

If you are examining a game on the ICS, the behavior of Back to Start depends on whether WinBoard is in Pause mode. If Pause mode is off, Backward issues the ICS command backward 999999, which backs up everyone's view of the game to the start and allows you to make different moves. If Pause mode is on, Back to Start only backs up your local view.

Forward to End

Jumps forward to the last position in the game. The >> button is equivalent.

If you are examining a game on the ICS, the behavior of Forward to End depends on whether WinBoard is in Pause mode. If Pause mode is off, Forward to End issues the ICS command forward 999999, which moves everyone's view of the game forward to the end of the current line. If Pause mode is on, Forward to End only moves your local view forward, and it will not go past the position the game was in when you paused.

Revert

If you are examining a game on the ICS, issues the ICS command revert. In local mode, when you were editing or analyzing a game, and have been entering a number of moves by hand, starting from a position not at the end of the game, the revert command restores the game to the variation you started from. This can be applied recursively, so that you can analyze variations on variations; each time you create a new variation by entering an alternative move, the current variation will be shelved. Revert allows you to return to the most recently shelved variation.

Annotate

Similar to the Revert command, but in local mode it will add the variation you are abandoning as a comment to the move where it first deviated, in PGN variation format (i.e. in parentheses). You can right-click such variation comments to recall them.

Truncate Game

Discards all remembered moves of the game beyond the current position. Puts WinBoard into Edit Game mode if it was not there already.

Move Now

Forces the chess engine to move immediately. May not work with all chess engines.

Retract Move

Retracts your last move.

In chess engine mode, you can do this only after the chess engine has replied to your move. If the chess engine is still thinking, use Move Now first.

In ICS mode, Retract Move issues the command takeback 1 or takeback 2, depending on whether it is your opponent's move or yours.

xboard-4.8.0/winboard/help/html/20.htm0000644000175000001440000001256312420374633014366 00000000000000 Installing Chess Engines

INSTALLING CHESS ENGINES

Introduction

WinBoard is capable of operating with many different chess engines. You can play chess against a compatible engine, set up matches between two engines, or (advanced users only) run an automated computer player on an ICS.

Typically, the main difficulty in installing a new chess engine for use by WinBoard comes in getting the engine itself running and setting its options appropriately. The connection to WinBoard is relatively straightforward.

WinBoard-compatible chess engines are Win32 command line programs that you can run by hand in an MS-DOS Prompt box and type human-readable commands to. WinBoard connects to an engine simply by starting the engine up in the background and communicating with it through a pair of pipes. Therefore the basic procedure for installing an engine is:

1. Get a copy of the engine and any supporting files it needs.

2. Install and configure the engine as a command-line program by following the instructions that come with it. Try it out by running it from the command line in an MS-DOS Prompt box and make sure it works.

3. Optional, but recommended: Try out the WinBoard plus engine combination by running WinBoard with the proper command line arguments in an MS-DOS Prompt box.

4. Create a shortcut on your desktop or Start menu to run the engine with WinBoard.

5. Optionally edit your WinBoard.ini file to add the engine to the drop-down lists on WinBoard's startup dialog.

This document cannot explain steps 1 and 2 in detail for all engines, but we will take you through all five steps in outline, using Crafty as an example.

Example: Crafty

1. Choose a directory to put Crafty in. We'll use C:\Program Files\Crafty in this example. Download your copy of Crafty into this directory from its author's FTP site, ftp://ftp.cis.uab.edu/pub/hyatt. At this writing, you will need at least the following files:

read.me
v15/crafty.doc
v15/crafty.faq
v15/wcrafty-15.*.exe
(where * is replaced by the largest number there)
common/start.zip
common/medium.zip
(or another book).

2. The first three files are documentation that you can read with a text editor. Read the read.me file first and follow the instructions carefully. This will take some time. Do not write to the author of WinBoard if you have trouble with the instructions in the Crafty read.me. Try running Crafty from an MS-DOS Prompt box and make sure it works before you go on.

3. Optional, but recommended: In an MS-DOS Prompt box, cd to the directory where WinBoard is installed, typically "C:\Program Files\WinBoard". Then type the following command line. Use the actual name of the wcrafty file you downloaded, not an *, and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.

WinBoard /cp /fcp=WCrafty-15.* /fd="C:\Program Files\Crafty" /scp=WCrafty-15.* /sd="C:\Program Files\Crafty"

WinBoard should start up, with Crafty running as its chess engine. Check that you can play chess against Crafty.

4. To make a shortcut or Start menu entry for Crafty: Right-click on the desktop and select New/Shortcut. Use the Browse button to find your winboard.exe file and get its name into the Command Line box. (It usually will be "C:\Program Files\WinBoard\winboard.exe".) Click in the Command Line box and hit the End key to go to the end. Add the following to the end of the command line, after the closing quotation mark. Use the actual name of the wcrafty file you downloaded, not an *, and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.

/cp /fcp=WCrafty-15.* /fd="C:\Program Files\Crafty" 
/scp=WCrafty-15.* /sd="C:\Program Files\Crafty"

Press Next, choose a name for the shortcut, and press Finish. You can now use this shortcut to run WinBoard with Crafty. Double-click it to check that it works. You can drag or copy the shortcut into your Start menu if you like.

5. To add Crafty as an option in the WinBoard Startup dialog, edit your WinBoard.ini file with Notepad or another plain text editor, carefully following the example shown under /firstChessProgramNames above.

For more information

If you would like to run an automated computer player on the ICS, see the separate file zippy.README. If you would like to write your own engine to interface to WinBoard, see the separate file engine-intf.html, and join the mailing list mentioned there. Both files are included in the WinBoard distribution. You might also want to get the source code for WinBoard. It is available from the author's Web page, http://www.tim-mann.org/chess.html.

xboard-4.8.0/winboard/help/html/15.htm0000644000175000001440000001602012420374633014362 00000000000000 Load and Save Options

Load and Save Options

/lgf or /loadGameFile filename
/lgi
or /loadGameIndex N

If loadGameFile is set, WinBoard reads the specified game file at startup. You can leave out the name of this option and give just the file name, which is handy if you want to configure WinBoard as a game viewer with a browser such as the Windows Explorer or Netscape. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard input. If there is more than one game in the file, WinBoard pops up a menu of the available games, with entries based on their PGN tags. If loadGameIndex is set to N, the menu is suppressed and the Nth game found in the file is loaded immediately. A game index of 1 will load the first game, but step to the next game on each new game in Match Mode. Similarly, an index of 2 will step to the next game every two games, so that all games are played by each player with both colors.

/td or /timeDelay seconds

Time delay between moves during Load Game. Fractional seconds are allowed; try 0.4. A time delay value of -1 tells WinBoard not to step through game files automatically. Default: 1 second.

/sgf or /saveGameFile filename

If this option is set, WinBoard appends a record of every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard output.

/autosave or /xautosave, or /autoSaveGames true|false

If this option is True, at the end of every game WinBoard prompts you for a filename and appends a record of the game to the file you specify. Ignored if saveGameFile is set. Default: False.

/lpf or /loadPositionFile filename
/lpi
or /loadPositionIndex N

If loadPositionFile is set, WinBoard loads the specified position file at startup. The filename is interpreted relative to WinBoard's initial working directory. The filename "-" specifies the standard input. If loadPositionIndex is set to N, the Nth position found in the file is loaded; otherwise the first is loaded. A position index of 1 will load the first position, but step to the next position on each new game in Match Mode. Similarly, an index of 2 will step to the next position every two games, so that all positions are played by each player with both colors.

/rewindIndex number

When number is non-zero, resets the game or position index used in the /lgf or /lpf options back to 1 after it has reached the value number. Default: 0.

/spf or /savePositionFile filename

If this option is set, WinBoard appends the final position reached in every game played to the specified file. The filename is interpreted relative to WinBoard's initial working directory. The file name "-" specifies the standard output.

/pgnExtendedInfo true|false

If this option is set, WinBoard saves depth, score and time used for each move that the engine found as a comment in the PGN file.

/pgnEventHeader string

Sets the name used in the PGN event tag to string.

/saveOutOfBookInfo true|false

Include the information on how the engine(s) game out of its opening book in a special annotator tag with the PGN file.

/oldsave or /xoldsave, or /oldSaveStyle true|false

If this option is False (the default), WinBoard saves games in PGN (portable game notation) and positions in FEN (Forsythe-Edwards notation). If the option is True, a save style that is compatible with older versions of WinBoard (and of xboard) is used instead.

/debug or /xdebug, or /debugMode true|false

Writes debugging information to the file WinBoard.debug, including all commands sent to the chess engine, all output received from it, and all commands sent to ICS. You can press Ctrl+Alt+F12 to turn this option on or off while WinBoard is running. Each time you turn it on, any existing debug file is overwritten.

/debugFile filename or /nameOfDebugFile filename

Sets the name of the file to which WinBoard saves debug information (including all communication to and from the engines).

/engineDebugOutput number

Specifies how WinBoard should handle unsollicited output from the engine, with respect to saving it in the debug file. The output is further (hopefully) ignored. If number=0, WinBoard refrains from writing such spurious output to the debug file. If number=1, all engine output is written faithfully to the debug file. If number=2, any protocol-violating line is prefixed with a # character, as the engine itself should have done if it wanted to submit info for inclusion in the debug file.

This option is provided for the benefit of applications that use the debug file as a source of information, such as the broadcaster of live games TLCV / TLCS. Such applications can be protected from spurious engine output that might otherwise confuse them.The case number=3 is similar, but now marks non-compliant engine output with a more conspicuous prefix.

xboard-4.8.0/winboard/help/html/14.htm0000644000175000001440000002760012420374633014367 00000000000000 Internet Chess Server Options

Internet Chess Server Options

/ics or /xics, or /internetChessServerMode true|false

Connect with an Internet Chess Server to play chess against its other users, observe games they are playing, or review games that have recently finished. See ICS Client Default: False.

You can create a script file containing ICS commands that WinBoard will type in for you whenever you connect to the ICS. See ICS Logon.

/icshost or /internetChessServerHost hostname

The host name or numeric address of the Internet Chess Server to connect to when in ICS mode. The default is the empty string, which causes WinBoard to pop up a menu of known ICS sites. The file ics-addresses.txt in the WinBoard distribution gives slightly more information on these sites. It includes their numeric addresses, which you can use if your site does not have a working name server.

/icsport or /internetChessServerPort portnumber

The port number to use when connecting to a chess server in ICS mode. Default: 5000.

/icshelper program

An external helper program used to communicate with the chess server. Typically timestamp for the ICC (chessclub.com) or timeseal for FICS (freechess.org, eics.daimi.aau.dk, etc.). This option is shorthand for /useTelnet /telnetProgram program.

/telnet or /xtelnet, or /useTelnet true|false

This option is poorly named; it should be called /useHelper. If set to True, it instructs WinBoard to use an external helper program to communicate with the ICS, as specified by the telnetProgram option. The external program must be a pure console application that can communicate with WinBoard through pipes; the Windows telnet application is not suitable. If the option is False (the default), WinBoard communicates with the ICS by opening a Winsock TCP socket and using its own internal implementation of the telnet protocol.

/gateway hostname

If this option is set to a host name, WinBoard uses rsh to run the telnetProgram remotely on the given host to communicate with the Internet Chess Server instead of using its own internal implementation of the telnet protocol. See the FIREWALLS section below for an explanation of when this option is useful.

/telnetProgram program

This option is poorly named; it should be called /helperProgram. It gives the name of the remote or external helper program to be used with the gateway or useTelnet option. The default is "telnet". The telnet program is invoked with the value of internetChessServer as the first argument and the value of internetChessServerPort as the second argument on its command line.

/icscom or /internetChessServerComPort name

If this option is set, WinBoard communicates with the Internet Chess Server using a serial communication port instead of a network connection. Use this option if your machine is not connected to a network (not even via SLIP or PPP), but you do have Internet access through another machine by dialing in using a modem or by connecting directly to a serial terminal port. Example:

WinBoard /ics /icscom:com1

After you start WinBoard in this way, type whatever modem commands are necessary to dial out to your Internet provider and log in. You may need to turn off Local Line Editing on the Options menu while typing commands to the modem, but turn it on again afterwards. Then telnet to the ICS, using a command like "telnet chessclub.com 5000". Important: See the paragraph in the LIMITATIONS section below about extra echoes.

/comPortSettings dataRate,dataBits,parity,stopBits,flow

This option allows serial port parameters to be set from the command line or a settings file. The values are simply filled in to the Communications dialog.

/icslogon or /internetChessServerLogonScript filename

This option lets you change the name used for the ICS Logon file. Default: "ICS.ini". The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).

/autocomm or /xautocomm, or /autoComment true|false

Sets the Auto Comment option. Default: False.

/autoflag or /xautoflag, or /autoCallFlag true|false

Sets the Auto Flag option. Default: False.

/autobs or /xautobs, or /autoObserve true|false

Sets the Auto Observe option. Default: False.

/autoKibitz

Kibitzes the engines last thinking output (depth, score, time, speed, PV) to the ICS in zippy mode. Show Thinking must be on for this option to work. Also diverts similar kibitz information of an opponent engine that is playing you through the ICS to the engine-output window, as if the engine was playing locally.

/moves or /xmoves, or /getMoveList true|false

Sets the Get Move List option. Default: True.

/edit or /xedit, or /localLineEditing true|false

Sets the Local Line Editing option. Default: True.

/quiet or /xquiet, or /quietPlay true|false

Sets the Quiet Play option. Default: False

/blindfold true|false

Sets the Blindfold option. Default: False

/seekGraph true|false, or /sg

Enables summoning up of the Seek Graph by left-clicking the board. Default: False

/autoRefresh true|false

Sets the Auto Refresh option of the Seek Graph. Default: False

/backgroundObserve true|false

Sets the Background Observe option for observing other games during play. Default: False

/dualBoard true|false

Sets the Dual Board option for observing your partner's bughouse game. Default: False

/pre or /xpre, or /premove true|false

Sets the Premove option. If set to True, the premove feature is enabled. If set to False, premove is disabled and the other Premove settings are ignored. Default: False.

/prewhite or /xprewhite, or /premoveWhite true|false

/premoveWhiteText movetext

If premoveWhite is set to True and you are playing white in an ICS game, the text specified by the premoveWhiteText option is sent to the ICS as soon as the game starts. These options can be set from the Premove section of the ICS Options dialog box. The default for premoveWhite is False.

/preblack or /xpreblack, or /premoveBlack true|false

/premoveBlackText movetext

If premoveBlack is set to True and you are playing black in an ICS game, the text specified by the premoveBlackText option is sent to the ICS as soon as the first move is received from your opponent, even if you make a different premove on the board before the first white move is received. These options can be set from the Premove section of the ICS Options dialog box. The default for premoveBlack is False.

/oneClickMove true|false

Sets the One-Click Move option. Default: False

/alarm or /xalarm, or /icsAlarm true|false

/icsAlarmTime milliseconds

When icsAlarm is set to True, the alarm sound is played when your clock counts down to icsAlarmTime seconds. For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the icsAlarmTime. The icsAlarmTime can be set by selecting ICS Alarm from the ICS options dialog. The default is 5 seconds.

/keepAlive time

When time is non-zero, send a date command every time minutes after your last move to the ICS, to prevent it from logging you off. (Do not use frivolously! The ICS operator might ban you.) Default: 0.

/chatBoxes handles

Sets the list of Chat Boxes to be opened at startup. The given string handles should be a semicolon-separated list, like shouts;53;Johnny to open 3 chat boxes, to capture all shouts (including c-shouts and it messages), the traffic on channel 53, and for a player named Johnny. Default: no chat windows.

xboard-4.8.0/winboard/help/html/02.htm0000644000175000001440000000265312420374633014365 00000000000000 Menus

The menus of WinBoard 4.5.0 have been re-organized, and the new menu structure has not been incorporated in this help file yet. New menus Edit, View and Engine have been added, and the Step menu has disappeared. Sorry about this, but we are working on a new way to generate Help files, and we did not want to delay release of 4.5.0 until that is done.

Items now in the Edit menu previously were in the File menu, (for Copy and Paste items), or the Step menu (Revert, Truncate, Forward, Backward, etc.). Items now in the View menu used to be in the Mode Menu, (opening and closing auxiliary windows), or the Option Menu (for options that determine look, such as Board and Fonts). Items in the Engine menu where in the Option (settings), Help (Hint, Book) or Step menu (Retract Move, Move Now).

MENUS

File Menu

Mode Menu

Action Menu

Step Menu

Options Menu

Help Menu

ICS Interaction Context Menu

xboard-4.8.0/winboard/help/html/12.htm0000644000175000001440000004307712420374633014373 00000000000000 Chess Engine Options

Chess Engine Options

/cp or /xcp, or /chessProgram true|false

If true, puts WinBoard in chess engine mode. In this mode, you can play against a chess program running on your PC or use it as an analysis partner.

/tc or /timeControl minutes[:seconds]

Each player begins with his clock set to the timeControl period. Default: 5 minutes. The additional options movesPerSession and timeIncrement are mutually exclusive.

/mps or /movesPerSession moves

When both players have made movesPerSession moves, a new timeControl period is added to both clocks. Default: 40 moves.

/inc or /timeIncrement seconds

If this option is specified, movesPerSession is ignored. Instead, after each player's move, timeIncrement seconds are added to his clock. Use -timeIncrement 0 if you want to require the entire game to be played in one timeControl period, with no increment. Default: -1, which specifies movesPerSession mode.

/clock or /xclock, or /clockMode true|false

Determines whether or not to display the chess clocks. If clockMode is False, the clocks are not shown, but the side that is to play next is still highlighted. Also, unless searchTime is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves.

/st or /searchTime minutes[:seconds]

Tells the chess engine to spend at most the given amount of time searching for each of its moves. Without this option, the engine chooses its search time based on the number of moves and amount of time remaining until the next time control. Setting this option also sets clockMode to False.

/depth or /searchDepth number

Tells the chess engine to look ahead at most the given number of moves when searching for a move to make. Without this option, the engine chooses its search depth based on the number of moves and amount of time remaining until the next time control. With the option, the engine will cut off its search early if it reaches the specified depth.

/firstNPS number

/secondNPS number

Tells the chess engine to use an internal time standard based on its node count, rather then wall-clock time, to make its timing decisions. The time in virtual seconds should be obtained by dividing the node count through the given number, like the number was a rate in nodes per second. WinBoard will manage the clocks in accordance with this, relying on the number of nodes reported by the engine in its thinking output. If number equals zero, it can obviously not be used to convert nodes to seconds, and the time reported by the engine is used to decrement the WinBoard clock. The engine is supposed to report in CPU time it uses, rather than wall-clock time in this mode. This option can provide fairer conditions for engine-engine matches on heavily loaded machines, or with very fast games (where the wall clock is too inaccurate). Show Thinking must be on for this option to work. Not many engines might support this yet!

/firstTimeOdds factor

/secondTimeOdds factor

Reduces the time given to the mentioned engine by the given factor. If pondering is off, the effect is indistinguishable from what would happen if the engine was running on a factor times slower machine.

/timeOddsMode mode

This option determines how the case is handled when both engines have a time-odds handicap. If mode=1, the engine that gets the most time will always get the nominal time, as specified by the time-control options, and its opponents time is normalized similarly. If mode=0, both play with reduced time.

/ponder or /xponder, or /ponderNextMove true|false

Sets the Ponder Next Move option. Default: True.

/thinking or /xthinking, or /showThinking true|false

Sets the Show Thinking option. Default: False.

/periodic or /xperiodic, or /periodicUpdates true|false

Sets the Periodic Updates option. Default: True.

/mg or /matchGames n

Automatically runs an n-game match between two chess engines, with alternating colors. If the loadGameFile or loadPositionFile option is set, WinBoard will start each game with the given opening moves or the given position; otherwise, the games will start with the standard initial chess position. If the saveGameFile option is set, a move record for the match will be appended to the specified file. If the savePositionFile option is set, the final position reached in each game of the match will be appended to the specified file. When the match is over, WinBoard will display the match score and exit. Default: 0 (do not run a match).

/mm or /xmm, or /matchMode true|false

Provided for backward compatibility. If true and matchGames=0, sets matchGames=1.

/matchPause number

Sets the length of the pause between games in match mode to number msec. Default value is 10000, i.e. 10 sec. (If this pause is too short, engines not implementing ping will sometimes send the last move of their previous game only when a new game has started, at which time the move is illegal, and causes them to forfeit the game.)

/fd or /firstDirectory dir
/sd
or /secondDirectory dir
/fcp
or /firstChessProgram command
/scp
or /secondChessProgram command

Names of the chess engines and working directories in which they are to be run. The second chess engine is started only in Two Machines (match) mode. These arguments are parsed as filenames; that is, the \ character is interpreted literally, not as a C-style escape.

The dir argument specifies the initial working directory for the chess engine. It should usually be the directory where the engine and its working files are installed. If dir is not an absolute pathname, it is interpreted relative to the directory from which WinBoard.exe itself was loaded. The dir argument is ignored if the chess engine is being run on a remote machine (see firstHost and secondHost below). The default value for dir "", meaning that the chess engine is expected to be installed in the same directory as WinBoard.

The command argument is actually the command line to the chess engine, so if the engine itself needs command line arguments, you can include them by enclosing command in single or double quotes. If the engine name or an engine argument has a space in it, use single quotes around the whole command, and inside them use double quotes around each item that contains spaces. If the engine name has more than one period in it (for example, QChess1.5.exe), you must include the ".exe" extension; otherwise you can leave it out. The default value for command is "", which brings up the startup dialog to ask which engines you want.

Examples:

WinBoard /cp /fd="C:\Program Files\Crafty" /fcp=WCrafty-15.12.exe /scp=GNUChess
WinBoard /cp /fd="C:\Miracle Games" /fcp='"Miracle Chess.exe" /wow' /scp=GNUChess

The basic rule is thus that what is inside the quotes delimiting the argument to /fcp and /scp, all goes to the engine, and is ignored by WinBoard. WinBoard 4.3.13 and later, however, knows an exception to this: If, within the quotes, the word WBopt appears, everything that follows this word will be interpreted as a WinBoard argument, in stead of being passed to the engine on startup of the latter. (The WBopt itself is also not passed to the engine.) This possibility of hiding WinBoard arguments in the engine command is provided in order to create options that follow the engine in a tournament, when a tournament manager like PSWBTM is used to invoke WinBoard. Because, in order to apply to a given engine, some options need to know if they apply to first or second engine, which might vary during the tournament, options hidden inside the engine command-line can contain %s which will be replaced at the time the option is used by first or second, as applicable.

Examples:

WinBoard /cp /fd="C:\Engines\Crafty" /fcp=WCrafty-15.12 WBopt /%sTimeOdds=2 /scp=GNUChess

Meaning that Crafty will have to play with half the time GNUChess will get.





/fh or /firstHost host
/sh
or /secondHost host

Hosts on which the chess engines are to run. The default for each is "localhost". If you specify another host, WinBoard uses rsh to run the chess program there. The /fd and /sd flags do not work in conjunction with these flags; if you need a remote chess engine to run somewhere other than your default login directory on the remote machine, you will have to include a "cd" command in the argument to /fcp or /scp.

/firstInitString or /initString string
/secondInitString string

The strings that are sent to initialize the chess engines. Default: "new\nrandom\n". The "\n" sequences represent newlines. You can type "\n" on the command line or in a settings file, and WinBoard will convert it to a newline.

All chess engines require the "new" command to start a new game.

You can remove the "random" command if you like; including it causes GNU Chess to randomize its move selection slightly so that it doesn't play the same moves in every game. Even without "random", GNU Chess randomizes its choice of moves from its opening book. You can also try adding other commands to the initString; see the GNU Chess documentation (gnuchess.txt) for details. Crafty ignores the "random" command; see its documentation for the commands it accepts.

/firstComputerString string
/secondComputerString string

If the chess engine is playing against another computer program (whether locally or on a chess server), by default the command "computer\n" is sent to it. Some chess engines change their playing style when they receive this command. If you do not want the engine to know when it is playing another computer, you can set the string to "".

Note that the computer string is sent to the engine after most other initialization commands, and is thus ideal for hiding a WinBoard-protocol command in that should be sent only to one engine, when the WinBoard option that normally specifies this command cannot be differentiated by engine, but s always sent to both engines. E.g. if you want one of the engines to ponder, and the other not. Because it is sent last, in can overrule earlier commands.

/fb or /xfb, or /firstPlaysBlack true|false

In games between two chess programs, the firstChessProgram normally plays white. (This is a change from earlier versions of WinBoard.) If this option is True, firstChessProgram plays black. In a multi-game match, this option affects the colors only for the first game; they still alternate in subsequent games.

/reuse or /xreuse, or /reuseFirst true|false
/reuse2
or /xreuse2, or /reuseSecond true|false

If this option is True (the default), WinBoard uses the same chess engine process repeatedly when playing multiple games. If the option is False, WinBoard kills off the chess engine after every game and starts a fresh one for the next game. Starting a fresh chess engine can be slow, so it is not recommended. However, some chess engines may not work properly when reused, such as versions of Crafty earlier than 12.0.

/firstProtocolVersion ver
/secondProtocolVersion ver

This option specifies which version of the chess engine communication protocol to use. By default, version-number is 2. In version 1, the "protover" command is not sent to the engine; since version 1 is a subset of version 2, nothing else changes. Other values for version-number are not supported.

/firstScoreAbs true|false
/secondScoreAbs true|false

If this option is true, the score reported by the engine is taken to be that in favor of white, even when the engine plays black. Important when winboard uses the score for adjudications, or in PGN reporting. This can be a useful option in combination with WBopt in the engine command-line, see under /fcp.

/niceEngines priority

This option allows you to lower the priority of the engine processes, so that the generally insatiable hunger for CPU time of chess engines does not interfere so much with smooth operation of WinBoard (or the rest of your system). Try priority = 10 or even 20 to lower the priority of the engines. Negative values could increase the engine priority, which is not recommended.

/firstOptions string
/secondOptions string

The given string is a comma-separated list of (option name, option value) pairs, like the following example: style=Karpov,blunder rate=0. If the options announced by the engine at startup through the feature commands of WinBoard protocol matches one of the option names (i.e. style or blunder rate), it would be set to the given value (i.e. Karpov or 0) through a corresponding option command to the engine. This provided that the type of the value (text or numeric) matches as well.

/firstNeedsNoncompliantFEN string
/secondNeedsNoncompliantFEN string

The castling rights and e.p. fields of the FEN sent to the mentioned engine with the setboard command will be replaced by the given string. This can for instance be used to run engines that do not understand Chess960 FENs in variant fischerandom, to make them at least understand the opening position, through setting the string to KQkq -. (Note you also have to give the e.p. field!) Other possible applications are to provide work-arounds for engines that want to see castling and e.p. fields in variants that do not have castling or e.p. (shatranj, courier, xiangqi, shogi) so that WinBoard would normally omit them (string = - -, or to add variant-specific fields that are not yet supported by WinBoard (e.g. to indicate the number of checks in 3check).

xboard-4.8.0/winboard/help/html/09.htm0000644000175000001440000000720712420374633014374 00000000000000 ICS Interaction Context Menu

ICS Interaction Context Menu

To see this menu, press the right mouse button anywhere in the output (upper) pane of the ICS Interaction window. Pressing the right mouse button in the input (lower) pane gives a standard editing context menu, not described here. Use the help command on ICS to learn what these commands mean.

You can customize the lower part of this menu (below the Paste option) by setting the icsMenu option. The easiest way to accomplish this is to edit your settings file with Notepad or another plain text editor. Sorry, there is no graphical user interface for customizing the menu.

Copy and Paste

Copies the current selection to the clipboard, then pastes it to the input box. As a shortcut to this function, you can press the middle mouse button (if you have one), or Shift plus the right mouse button.

Copy

Copies the current selection to the clipboard.

Paste

Pastes the clipboard contents to the input box.

Who

Sends the command who to ICS.

Players

Sends the command players to ICS.

Games

Sends the command games to ICS.

Sought

Sends the command sought to ICS.

Tell (name)

Inserts tell name into the input box. The string name is the current selection if it is not empty. Otherwise name is the word surrounding the mouse position, where a word is a string of letters, digits, or hyphens (-), such as an ICS user handle or game number.

Open Chat Box (name)

Causes WinBoard to open a new Chat Window, with name in the chat Partner field, where name is as defined above.

Message (name)

Inserts message name into the input box, where name is as defined above.

Finger (name)

Sends the command finger name to ICS, where name is as defined above.

Vars (name)

Sends the command vars name to ICS, where name is as defined above.

Observe (name)

Sends the command observe name to ICS, where name is as defined above. Here name can be either a user handle or a game number.

Match (name)

Sends the command match name to ICS, where name is as defined above.

Play (name)

Sends the command play name to ICS, where name is as defined above. Here name can be either a user handle or a seek ad number.

xboard-4.8.0/winboard/help/html/03.htm0000644000175000001440000002274612420374633014373 00000000000000 File Menu

File Menu

New Game (former Reset)

Resets WinBoard and the chess engine (if any) to the beginning of a new chess game. In Internet Chess Server mode, clears the current state of WinBoard, then resynchronizes with ICS by sending a refresh command. If you want to stop playing, observing, or examining a game on ICS, use an appropriate command from the Action menu, not New Game.

New Shuffle Game

Brings you to a dialog box where you can enter the number of an opening setup for shuffle variants like FRC, or ask for a random number. After pressing OK, a new game is set up, using this position. The chosen position will continue to be used on every subsequent New Game, even if you are playing a variant that normally is not shuffled, until you select a new variant through the New Variant menu. If you enter -1 for the position number, new random number is drawn before every game.

The type of shuffling that is done in reaction to a given position number obeys restrictions that depend on the selected variant. In variants that allow castling, Kings remain on the central files, Rooks in the corners. In games with FRC-style castlings, the King starts between the Rooks, but apart from that they could be anywhere. In games without castling, there are no restrictions on King and Rook placement. Pairs of color-bound pieces (such as Bishops) will be placed on oppositely colored squares. In ICS mode this feature has no effect, as the ICS determines the starting position.

New Variant

Select a new variant. There are controls to enter a board width, board height and holdings size, but normally you leave them at -1, which means the default value for the selected variant will be used (e.g. 8x8 for normal Chess, 9x10 for xiangqi, 10x8 for capablanca, holdings for 5 pieces in crazyhouse). You can set a deviating value for each of the three parameters (e.g. to play a crazyhouse version of xiangqi or capablanca you would set the holdings to 6 or 7). If the board width deviates from the default, the game will start with an empty board.

The variant will remain in force until you select a new one; i.e. subsequent New Game commands will start a new game of the same variant. In ICS mode this command has no effect, as the ICS determines which variant will be played.

Load Game

Plays a game from a record file. A popup dialog prompts you for the filename. If the file contains more than one game, a second popup dialog displays a list of games (with information drawn from their PGN tags, if any), and you can select the one you want.

The game file parser will accept PGN (portable game notation), or in fact almost any file that contains moves in algebraic notation. Notation of the form P@f7 is accepted for piece-drops in bughouse games; this is a nonstandard extension to PGN. If the file includes a PGN position (FEN tag), or a WinBoard position diagram bracketed by "[--" and "--]" before the first move, the game starts from that position. Text enclosed in parentheses, square brackets, or curly braces is assumed to be commentary and is displayed in a pop-up window. Any other text in the file is ignored. PGN variations (enclosed in parentheses) appear in the comment popup amongst genuine comments; to walk the variation tree, you have to right-click them in this window. This will cause WinBoard to load them as the current line. You can revert to the previous line with the Revert command. (Beware! Currently WinBoards PGN parser is limited to 3 levels of nesting in variations.) The nonstandard PGN tag [Variant "varname"] functions similarly to the variant command-line option, allowing games in certain chess variants to be loaded. Note that it has to appear before any FEN tag! There is also a heuristic to recognize chess variants from the Event tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games.

Load Next Game

Loads the next game from the last game record file you loaded.

Load Previous Game

Loads the previous game from the last game record file you loaded. Not available if the last game was loaded from a pipe.

Reload Same Game

Reloads the last game you loaded. Not available if the last game was loaded from a pipe.

Save Game

Appends a record of the current game to a file. A popup dialog prompts you for the filename. If the game did not begin with the standard starting position, the game file includes the starting position used. Game files are saved in the PGN (portable game notation) format, unless the oldSaveStyle option is True, in which case they are saved in an older format that is specific to WinBoard. Both formats are human-readable, and both can be read back by the Load Game command. Notation of the form P@f7 is generated for piece-drops in bughouse games; this is a nonstandard extension to PGN.

Copy Game To Clipboard

Copies the record of the current game to the Windows clipboard in PGN (portable game notation) format.

Paste Game From Clipboard

Plays a game from the Windows clipboard. See Load Game for a discussion of game file format and parser behavior.

Load Position

Sets up a position from a position file. A popup dialog prompts you for the filename. Position files must be in FEN (Forsythe-Edwards notation), or in the format that the Save Position command writes when oldSaveStyle is turned on. Note that many variants require an extension of the original FEN standard. WinBoard tries to be as universal as possible in understanding FENs when different standards are raound, but has to make a choice when writing them. In FRC is uses Shredder-FEN (Haha castling notation) , but it understands KQkq as the outermost Rook, so it also reads X-FEN. In Crazyhouse / Bughouse it appends the holdings immediately behind the board info between brackets [], but on input it also understands bFEN (which puts it behind a slash / as if it were an extra board rank). It uses a tilde ~ behind a piece to indicate it is really a promoted Pawn (like bFEN). In Shogi the holdings are printed like in Crazyhouse, but promoted pieces are represented by a plus sign + before the letter of the original piece. Letters used for the pieces can be set with the /pieceToCharTable command-line option.

Load Next Position

Loads the next position from the last position file you loaded.

Load Previous Position

Loads the previous position from the last position file you loaded. Not available if the last position was loaded from a pipe.

Reload Same Position

Reloads the last position you loaded. Not available if the last position was loaded from a pipe.

Save Position

Appends a diagram of the current position to a file. A popup dialog prompts you for the filename. Positions are saved in FEN (Forsythe-Edwards notation) format, unless the oldSaveStyle option is True, in which case they are saved in an older, human-readable format that is specific to WinBoard. Both formats can be read back by the Load Position command; however, currently Load Position can load only the first position in a file.

Save Diagram

Writes the current board display as a bitmap file. With this command you can use WinBoard as a diagram generator.

Copy Position To Clipboard

Places a diagram of the current position (in Forsythe-Edwards notation) into the Windows clipboard.

Paste Position From Clipboard

Sets up a position from the Windows clipboard. Position must be in FEN (Forsythe-Edwards notation). Puts WinBoard into Edit Game mode if it was not there already.

Exit

Exits from WinBoard.

xboard-4.8.0/winboard/help/html/13.htm0000644000175000001440000000556512420374633014374 00000000000000 UCI Engine Support

UCI Engine Support

/fUCI or /firstIsUCI true|false

/sUCI or /secondIsUCI true|false

Indicates if the mentioned engine executable file is an UCI engine, and should be run with the aid of the Polyglot adapter rather than directly. WinBoard will then pass the other UCI options and engine name to Polyglot through a .ini temporary file ceated for the purpose.

/PolyglotDir filename

Gives the name of the folder in which Polyglot is installed.

/usePolyglotBook true|false

Specifies if the Polygot book should be used.

/PolyglotBook filename

Gives the filename of the opening book that Polyglot should use.

/fNoOwnBookUCI or /firstXBook or /firstHasOwnBookUCI true|false

/sNoOwnBookUCI or /secondXBook or /secondHasOwnBookUCI true|false

Indicates if the mentioned engine lacks an opening book or not. Engines that have an own opening book will not use the GUI book (as given by /polyglotBook) even if /usePolyglotBook is set to true.

/defaultHashSize number

Sets the size of the hash table to number MegaBytes.

/defaultCacheSizeEGTB number

Sets the size of the EGTB cache to number MegaBytes.

/defaultPathEGTB filename

Gives the name of the folder where the end-game tablebases are installed.

xboard-4.8.0/winboard/help/html/10.htm0000644000175000001440000000163012420374633014356 00000000000000 Buttons

BUTTONS

<<

Same as Back to Start.

<

Same as Backward.

P

Same as Pause. The button label changes to C while WinBoard is pausing.

>

Same as Forward.

>>

Same as Forward to End.

Note that using the mouse wheel has the same effect as using the < or > button.

xboard-4.8.0/winboard/help/html/18.htm0000644000175000001440000002515412420374633014375 00000000000000 Other Options

Other Options

/ncp or /xncp, or /noChessProgram true|false

If this option is True, WinBoard acts as a passive chessboard; it does not start a chess program or connect to ICS. This option also sets clockMode to False. Default: False.

/mode or /initialMode modename

If this option is given, WinBoard selects the given modename from the Mode menu after starting and (if applicable) processing the loadGameFile or loadPositionFile option. Default: "". Other supported values are TwoMachines, AnalyzeFile, Analysis, MachineWhite, MachineBlack, EditGame, EditPosition, and Training.

/variant varname

Activates preliminary, partial support for playing chess variants against a local engine or editing variant games. This flag is not needed in ICS mode. Recognized variant names are:

normalNormal chess
wildcastleShuffle chess, king can castle from d file
nocastleShuffle chess, no castling allowed
fischerandomFischer Random shuffle chess
bughouseBughouse, ICC/FICS rules
crazyhouseCrazyhouse, ICC/FICS rules
losersLose all pieces or get mated (ICC wild 17)
suicideLose all pieces including king (FICS)
giveawayTry to have no legal moves (ICC wild 26)
twokingsWeird ICC wild 9
kriegspielOpponent's pieces are invisible
atomicCapturing piece explodes (ICC wild 27)
3checkWin by giving check 3 times (ICC wild 25)
xiangqiChinese Chess (on a 9x10 board)
shogiJapanese Chess (on a 9x9 board, with piece drops)
capablancaCapablanca Chess (10x8 board, with Archbishop and Chancellor pieces)
gothicsimilar, with a better initial position
caparandomAn FRC-like version of Capablanca Chess (10x8 board)
janusA game with two Archbishops (10x8 board)
shatranjAncient Arabic Chess, with Elephants and General replacing B and Q.
courierMedieval intermedite between shatranj and modern Chess (on 12x8 board)
falconA patented Chess variant with two Falcon pieces (10x8) board
berolinaPawns capture straight ahead, and move diagonal (legality testing off!)
cylinderPieces wrap around the board, as if it were a cylinder (legality testing off!)
fairyA variant in which all pieces known to WinBoard can participate
knightmateKing moves a Knight, and vice versa
makrukThai Chess (shatranj-like, pawns promote on 6th rank)
superSuperchess, a shuffle variant with B+N, R+N, K+N and Q+N compound
greatGreat Shatranj, whithout sliders, on 10x8 board (legality testing off!)

In the shuffle variants, WinBoard does now shuffle the pieces, although you can still do it by hand using Edit Position. Some variants are supported only in ICS mode, including bughouse, and kriegspiel. The winning/drawing conditions in crazyhouse (off-board interposition on mate) is not fully understood, but losers, suicide, giveaway, atomic, and 3check should be OK. In crazyhouse, WinBoard now does keep track of off-board pieces. In shatranj it does implement the baring rule when mate detection is switched on. In xiangqi it does implement the rules for perpetual checking and chasing (in Two-Machines mode).

/shuffleOpenings

This volatile option will cause shuffling of all pieces on the back rank, even in variants that normally have a fixed opening setup, according to the setting of the /defaultFrcPosition. It will remain in effect untill you select a new variant. In variants with normal castling, corner Rooks and King will be exempted from shuffling. Color-bound pieces such as Bishops will be kept on differently colored squares.

/boardHeight height

Allows you to set a non-standard number of board ranks in any variant. If the height is given as -1, the default height for the variant is used.

/boardWidth width

Allows you to set a non-standard number of board files in any variant. If the width is given as -1, the default width for the variant is used. Width a non-standard width, the initial position will always be an empty board, as the usual opening array will not fit.

/holdingsSize size

Allows you to set a non-standard size for the holdings in any variant. If the size is given as -1, the default holdings size for the variant is used. The first size piece types will go into the holdings on capture, and you will be able to drop them on the board in stead of making a normal move. If size equals 0, there will be no holdings.

/defaultFrcPosition number

Specifies the number of the opening position in shuffle games like FRC. A value of -1 means the position is randomly generated by WinBoard.

/pieceToCharTable characterstring

The characters that are used to represent the piece types WinBoard knows in FEN diagrams and SAN moves. The string argument has to have an even length (or it will be ignored), as white and black pieces have to be given separately (in that order). The last letter for each color will be the King. The letters before that will be PNBRQ and then a whole host of fairy pieces in an order that has not fully crystallized yet (currently FEACWMOHIJGDVSLU, F=Ferz, Elephant, A=Archbishop, C=Chancellor, W=Wazir, M=Commoner, O=Cannon, H=Nightrider). You should list at least all pieces that occur in the variant you are playing. If you have less than 44 characters in the string, the pieces not mentioned will get assigned a period, and you will not be able to distinguish them in FENs. You can also explicitly assign pieces a period, in which case they will not be counted in deciding which captured pieces can go into the holdings.

A tilde as a piece name does mean this piece is used to represent a promoted Pawn in Crazyhouse-like games, i.e. on capture it turns back onto a Pawn. A + similarly indicate the piece is a Shogi-style promoted piece, that should revert to its non-promoted version on capture (rather than to a Pawn).

Note that promoted pieces are represented by pieces 11 further in the list.

You should not have to use this option often: each variant has its own default setting for the piece representation in FEN, which should be sufficient in normal use.

/rsh or /remoteShell shellname

Name of the command used to run programs remotely. If this option is not given, WinBoard uses its own built-in implementation of the Unix rcmd protocol (the protocol used by rsh).

/ruser or /remoteUser username

User name on the remote system when running programs with the remoteShell. The default is your local user name.

/userName username

Name under which the Human player will be listed in the PGN file. (Default is the login name on your local computer.)

/delayBeforeQuit number

/delayAfterQuit number

These options specify how long WinBoard has to wait before sending a termination signal to rogue engine processes, that do not want to react to the quit command. The second one determines the pause after killing the engine, to make sure it dies.

/ini or /settingsFile filename
@ file-name

See Settings.

xboard-4.8.0/winboard/wclipbrd.h0000644000175000001440000000256312420374633013515 00000000000000/* * wclipbrd.c -- Clipboard routines for WinBoard * * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * Enhancements Copyright 2005 Alessandro Scotti * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ VOID CopyFENToClipboard(); VOID CopyGameToClipboard(); VOID CopyGameListToClipboard(); int CopyTextToClipboard(char *text); VOID PasteFENFromClipboard(); VOID PasteGameFromClipboard(); int PasteTextFromClipboard(char **text); VOID DeleteClipboardTempFiles(); VOID PasteGameOrFENFromClipboard(); /* [AS] */ xboard-4.8.0/xboard-config.desktop0000644000175000001440000000207512420374633014044 00000000000000[Desktop Entry] Name=Xboard Name[af]=X-bord Name[ar]=Xboard Name[bg]=Xboard Name[bn]=এক্সবোর্ড Name[cs]=Xboard Name[da]=Xboard Name[de]=Xboard Name[el]=Xboard Name[es]=Xboard Name[et]=Xboard Name[fi]=XBoard Name[fr]=XBoard Name[gl]=Xboard Name[hi]=एक्सबोर्ड Name[hr]=Xboard Name[hu]=XBoard Name[it]=XBoard Name[ja]=Xboard Name[km]=XBoard Name[ko]=X보드 Name[lt]=Xboard Name[mr]=Xबोर्ड Name[nb]=Xboard Name[nl]=Xboard Name[pa]=Xboard Name[pl]=Xboard Name[pt]=Xboard Name[pt_BR]=Xboard Name[ru]=Xboard Name[sk]=Xboard Name[sv]=Xboard Name[ta]=பெயர்(எக்ஸ்போர்ட்.டெஸ்க்டாப்): எக்ஸ்போர்ட் Name[th]=Xboard Name[tr]=XBoard Name[uk]=Xboard Name[vi]=XBoard Name[xh]=Ibhodi ye-X Name[zh_CN]=X 国际象棋 Name[zh_TW]=Xboard 國際象棋 Name[zu]=I-Xboard Comment=Start preconfigured XBoard GenericName=X-windows chess board Type=Application Categories=Game;BoardGame; Exec=xboard -opt %f Icon=xboard NoDisplay=true Terminal=false MimeType=application/x-xboard-opt; xboard-4.8.0/DIFFSTAT0000644000175000001440000065152512422467050011066 00000000000000** Version 4.8.0 ** (git diff -b --stat --summary -M v4.7.3 HEAD) .gitignore | 20 + ABOUT-NLS | 1282 -------- ChangeLog | 1623 +++++++++++ DIFFSTAT | 439 +++ Makefile.am | 172 +- NEWS | 89 + SHORTLOG | 365 +++ args.h | 108 +- autogen.sh | 3 +- backend.c | 1314 +++++++-- backend.h | 26 +- board.c | 15 +- book.c | 12 + common.h | 66 +- conf/chu | 42 + conf/ics | 10 + conf/judkins | 19 + conf/judkins.fen | 2 + conf/mini | 24 + conf/mini.fen | 2 + conf/sho | 28 + conf/sho.fen | 2 + conf/shogi | 41 + conf/xiangqi | 30 + conf/xq | 36 + config.rpath | 672 ----- configure.ac | 173 +- dialogs.c | 713 ++++- dialogs.h | 17 +- draw.c | 136 +- draw.h | 3 +- engine-intf.html | 182 +- engineoutput.c | 148 +- engineoutput.h | 1 + evalgraph.c | 15 +- evalgraph.h | 3 +- frontend.h | 7 +- gamelist.c | 10 +- gtk/xboard.c | 341 ++- gtk/xboard.h | 39 +- gtk/xengineoutput.c | 21 +- gtk/xoptions.c | 179 +- m4/gettext.m4 | 383 --- m4/iconv.m4 | 214 -- m4/lib-ld.m4 | 110 - m4/lib-link.m4 | 774 ----- m4/lib-prefix.m4 | 224 -- m4/nls.m4 | 32 - m4/po.m4 | 449 --- m4/progtest.m4 | 92 - menus.c | 152 +- menus.h | 3 + moves.c | 1028 +++++-- moves.h | 12 +- nengineoutput.c | 14 +- nevalgraph.c | 17 +- ngamelist.c | 13 +- nhistory.c | 2 +- osxapp/Info.plist.in | 188 ++ osxapp/OSX-theme/gtk-2.0/assets/handle.png | Bin 0 -> 186 bytes .../gtk-2.0/assets/l-checkbox-checked-18.png | Bin 0 -> 814 bytes .../assets/l-checkbox-checked-insensitive-18.png | Bin 0 -> 639 bytes .../gtk-2.0/assets/l-checkbox-unchecked-18.png | Bin 0 -> 413 bytes .../assets/l-checkbox-unchecked-insensitive-18.png | Bin 0 -> 356 bytes .../gtk-2.0/assets/l-radio-selected-18.png | Bin 0 -> 890 bytes .../assets/l-radio-selected-insensitive-18.png | Bin 0 -> 643 bytes .../gtk-2.0/assets/l-radio-unselected-18.png | Bin 0 -> 606 bytes .../assets/l-radio-unselected-insensitive-18.png | Bin 0 -> 546 bytes .../gtk-2.0/assets/notebook-gap-bottom.png | Bin 0 -> 159 bytes .../OSX-theme/gtk-2.0/assets/notebook-gap-left.png | Bin 0 -> 85 bytes .../gtk-2.0/assets/notebook-gap-right.png | Bin 0 -> 84 bytes .../OSX-theme/gtk-2.0/assets/notebook-gap-top.png | Bin 0 -> 158 bytes osxapp/OSX-theme/gtk-2.0/assets/notebook.png | Bin 0 -> 227 bytes osxapp/OSX-theme/gtk-2.0/assets/null.png | Bin 0 -> 1164 bytes .../OSX-theme/gtk-2.0/assets/scroll-background.png | Bin 0 -> 155 bytes .../OSX-theme/gtk-2.0/assets/slider-horizontal.png | Bin 0 -> 828 bytes .../OSX-theme/gtk-2.0/assets/tab-bottom-active.png | Bin 0 -> 924 bytes osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png | Bin 0 -> 888 bytes .../OSX-theme/gtk-2.0/assets/tab-left-active.png | Bin 0 -> 451 bytes osxapp/OSX-theme/gtk-2.0/assets/tab-left.png | Bin 0 -> 763 bytes .../OSX-theme/gtk-2.0/assets/tab-right-active.png | Bin 0 -> 453 bytes osxapp/OSX-theme/gtk-2.0/assets/tab-right.png | Bin 0 -> 787 bytes osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png | Bin 0 -> 920 bytes osxapp/OSX-theme/gtk-2.0/assets/tab-top.png | Bin 0 -> 897 bytes osxapp/OSX-theme/gtk-2.0/assets/toolbar.png | Bin 0 -> 214 bytes osxapp/OSX-theme/gtk-2.0/gtkrc | 798 +++++ osxapp/PkgInfo | 1 + osxapp/XBoard.gtklauncher | 74 + osxapp/default/eo_Analyzing.png | Bin 0 -> 462 bytes osxapp/default/eo_Black.png | Bin 0 -> 292 bytes osxapp/default/eo_Clear.png | Bin 0 -> 159 bytes osxapp/default/eo_Ponder.png | Bin 0 -> 607 bytes osxapp/default/eo_Thinking.png | Bin 0 -> 492 bytes osxapp/default/eo_Unknown.png | Bin 0 -> 467 bytes osxapp/default/eo_White.png | Bin 0 -> 400 bytes osxapp/default/icon_black.png | Bin 0 -> 36898 bytes osxapp/default/icon_white.png | Bin 0 -> 36619 bytes osxapp/gtkrc | 4 + osxapp/icons/XBoard.icns | Bin 0 -> 200555 bytes osxapp/icons/fen.icns | Bin 0 -> 160673 bytes osxapp/icons/pgn.icns | Bin 0 -> 165002 bytes osxapp/icons/trn.icns | Bin 0 -> 161616 bytes osxapp/icons/xop.icns | Bin 0 -> 167993 bytes osxapp/info.command | 2 + osxapp/launcher_rc | 1 + osxapp/logos/207.99.83.228.png | Bin 0 -> 16710 bytes osxapp/logos/69.36.243.188.png | Bin 0 -> 7260 bytes osxapp/logos/dummy.png | Bin 0 -> 9465 bytes osxapp/logos/winboard.nl.png | Bin 0 -> 28755 bytes osxapp/man.command | 2 + osxapp/osx-localization/.DS_Store | Bin 0 -> 6148 bytes .../da.lproj/GtkosxApplication.strings | Bin 0 -> 1056 bytes .../de.lproj/GtkosxApplication.strings | Bin 0 -> 1104 bytes .../en.lproj/GtkosxApplication.strings | Bin 0 -> 1066 bytes .../es.lproj/GtkosxApplication.strings | Bin 0 -> 1078 bytes .../it.lproj/GtkosxApplication.strings | Bin 0 -> 1116 bytes .../nl.lproj/GtkosxApplication.strings | Bin 0 -> 1100 bytes .../pl.lproj/GtkosxApplication.strings | Bin 0 -> 1084 bytes .../ru.lproj/GtkosxApplication.strings | Bin 0 -> 1088 bytes .../tr.lproj/GtkosxApplication.strings | Bin 0 -> 1038 bytes .../uk.lproj/GtkosxApplication.strings | Bin 0 -> 610 bytes .../vi.lproj/GtkosxApplication.strings | Bin 0 -> 1064 bytes .../zh_CN.lproj/GtkosxApplication.strings | Bin 0 -> 944 bytes .../zh_HK.lproj/GtkosxApplication.strings | Bin 0 -> 934 bytes .../zh_TW.lproj/GtkosxApplication.strings | Bin 0 -> 944 bytes osxapp/pango.modules | 5 + parser.c | 29 +- pgntags.c | 8 + pixmaps/ANALYZING_14.xpm | 23 - pixmaps/BLACK_14.xpm | 23 - pixmaps/CLEAR_14.xpm | 23 - pixmaps/PONDER_14.xpm | 23 - pixmaps/THINKING_14.xpm | 23 - pixmaps/UNKNOWN_14.xpm | 23 - pixmaps/WHITE_14.xpm | 23 - pixmaps/board32.png | Bin 0 -> 291 bytes pixmaps/board32.xpm | 42 - pixmaps/board48.png | Bin 0 -> 306 bytes pixmaps/board48.xpm | 58 - pixmaps/cross32.png | Bin 0 -> 370 bytes pixmaps/cross32.xpm | 42 - pixmaps/cross48.png | Bin 0 -> 390 bytes pixmaps/cross48.xpm | 58 - pixmaps/ini32.png | Bin 0 -> 339 bytes pixmaps/ini32.xpm | 41 - pixmaps/ini48.png | Bin 0 -> 388 bytes pixmaps/ini48.xpm | 57 - png/xqboard.png | Bin 4423 -> 2534 bytes po/LINGUAS | 2 +- po/Makefile.in.in | 446 --- po/Makevars.template | 41 - po/Rules-quot | 47 - po/boldquot.sed | 10 - po/da.po | 1656 ++++++----- po/de.po | 1851 ++++++------ po/en@boldquot.header | 25 - po/en@quot.header | 22 - po/es.po | 2783 +++++++++--------- po/insert-header.sin | 23 - po/it.po | 1612 +++++----- po/nl.po | 3014 +++++++++++++++++++ po/pl.po | 3077 ++++++++++++++++++++ po/quot.sed | 6 - po/remove-potcdate.sin | 19 - po/ru.po | 1607 +++++----- po/tr.po | 1588 +++++----- po/uk.po | 1682 ++++++----- po/vi.po | 1596 +++++----- po/xboard.pot | 1573 +++++----- po/zh_CN.po | 1604 +++++----- po/zh_HK.po | 1605 +++++----- po/zh_TW.po | 1604 +++++----- sounds/roar.wav | Bin 0 -> 24664 bytes svg/BlackClaw.svg | 162 ++ svg/BlackDolphin.svg | 104 + svg/BlackHCrown.svg | 129 + svg/BlackHSword.svg | 115 + svg/BlackLeopard.svg | 168 ++ svg/BlackLion.svg | 172 ++ svg/BlackPromoBishop.svg | 92 + svg/BlackPromoDragon.svg | 109 + svg/BlackPromoHSword.svg | 110 + svg/BlackPromoHorse.svg | 88 + svg/BlackPromoRook.svg | 104 + svg/BlackPromoSword.svg | 108 + svg/BlackSword.svg | 113 + svg/WhiteClaw.svg | 161 + svg/WhiteDolphin.svg | 105 + svg/WhiteHCrown.svg | 129 + svg/WhiteHSword.svg | 107 + svg/WhiteLeopard.svg | 169 ++ svg/WhiteLion.svg | 173 ++ svg/WhitePromoBishop.svg | 84 + svg/WhitePromoDragon.svg | 100 + svg/WhitePromoHSword.svg | 102 + svg/WhitePromoHorse.svg | 80 + svg/WhitePromoRook.svg | 94 + svg/WhitePromoSword.svg | 100 + svg/WhiteSword.svg | 105 + themes/shogi/BlackAdvisor.svg | 193 +- themes/shogi/BlackBishop.svg | 149 +- themes/shogi/BlackCrownedBishop.svg | 120 +- themes/shogi/BlackCrownedRook.svg | 159 +- themes/shogi/BlackElephant.svg | 65 + themes/shogi/BlackGold.svg | 179 +- themes/shogi/BlackGoldKnight.svg | 95 +- themes/shogi/BlackGoldLance.svg | 97 +- themes/shogi/BlackGoldPawn.svg | 87 +- themes/shogi/BlackGoldSilver.svg | 109 +- themes/shogi/BlackJewled.svg | 88 + themes/shogi/BlackKing.svg | 151 +- themes/shogi/BlackKnight.svg | 164 +- themes/shogi/BlackLance.svg | 162 +- themes/shogi/BlackPawn.svg | 136 +- themes/shogi/BlackPrince.svg | 70 + themes/shogi/BlackRook.svg | 160 +- themes/shogi/WhiteAdvisor.svg | 177 +- themes/shogi/WhiteBishop.svg | 132 +- themes/shogi/WhiteCrownedBishop.svg | 98 +- themes/shogi/WhiteCrownedRook.svg | 125 +- themes/shogi/WhiteElephant.svg | 65 + themes/shogi/WhiteGold.svg | 165 +- themes/shogi/WhiteGoldKnight.svg | 81 +- themes/shogi/WhiteGoldLance.svg | 83 +- themes/shogi/WhiteGoldPawn.svg | 73 +- themes/shogi/WhiteGoldSilver.svg | 87 +- themes/shogi/WhiteJewled.svg | 82 + themes/shogi/WhiteKing.svg | 142 +- themes/shogi/WhiteKnight.svg | 150 +- themes/shogi/WhiteLance.svg | 148 +- themes/shogi/WhitePawn.svg | 122 +- themes/shogi/WhitePrince.svg | 70 + themes/shogi/WhiteRook.svg | 148 +- usounds.c | 13 +- usystem.c | 39 +- usystem.h | 1 + winboard/bitmaps/ln33o.bmp | Bin 0 -> 326 bytes winboard/bitmaps/ln33s.bmp | Bin 0 -> 326 bytes winboard/bitmaps/ln33w.bmp | Bin 0 -> 326 bytes winboard/bitmaps/ln49o.bmp | Bin 0 -> 454 bytes winboard/bitmaps/ln49s.bmp | Bin 0 -> 454 bytes winboard/bitmaps/ln49w.bmp | Bin 0 -> 454 bytes winboard/bitmaps/ln72o.bmp | Bin 0 -> 926 bytes winboard/bitmaps/ln72s.bmp | Bin 0 -> 926 bytes winboard/bitmaps/ln72w.bmp | Bin 0 -> 926 bytes winboard/config.h | 8 +- winboard/defaults.h | 2 +- winboard/resource.h | 13 +- winboard/wclipbrd.c | 5 +- winboard/wedittags.c | 53 +- winboard/wengineoutput.c | 3 +- winboard/wevalgraph.c | 11 +- winboard/wgamelist.c | 38 +- winboard/winboard.c | 159 +- winboard/winboard.h | 9 + winboard/winboard.rc | 97 +- winboard/woptions.c | 66 +- winboard/wsettings.c | 13 +- winboard/wsnap.c | 72 +- xaw/xboard.c | 249 +- xaw/xboard.h | 2 +- xaw/xengineoutput.c | 54 +- xaw/xoptions.c | 71 +- xboard.conf.in => xboard.conf | 33 +- xboard.texi | 185 +- xboard2.h | 2 +- zic2xpm.c | 597 ---- zic2xpm.man | 73 - 268 files changed, 30688 insertions(+), 19408 deletions(-) delete mode 100644 ABOUT-NLS create mode 100644 conf/chu create mode 100644 conf/ics create mode 100644 conf/judkins create mode 100644 conf/judkins.fen create mode 100644 conf/mini create mode 100644 conf/mini.fen create mode 100644 conf/sho create mode 100644 conf/sho.fen create mode 100644 conf/shogi create mode 100644 conf/xiangqi create mode 100644 conf/xq delete mode 100755 config.rpath delete mode 100644 m4/gettext.m4 delete mode 100644 m4/iconv.m4 delete mode 100644 m4/lib-ld.m4 delete mode 100644 m4/lib-link.m4 delete mode 100644 m4/lib-prefix.m4 delete mode 100644 m4/nls.m4 delete mode 100644 m4/po.m4 delete mode 100644 m4/progtest.m4 create mode 100644 osxapp/Info.plist.in create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/handle.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-18.png create mode 100644 osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-checked-insensitive-18.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-18.png create mode 100644 osxapp/OSX-theme/gtk-2.0/assets/l-checkbox-unchecked-insensitive-18.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-18.png create mode 100644 osxapp/OSX-theme/gtk-2.0/assets/l-radio-selected-insensitive-18.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-18.png create mode 100644 osxapp/OSX-theme/gtk-2.0/assets/l-radio-unselected-insensitive-18.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-bottom.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-left.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-right.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/notebook-gap-top.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/notebook.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/null.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/scroll-background.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/slider-horizontal.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-bottom-active.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-bottom.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-left-active.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-left.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-right-active.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-right.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-top-active.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/tab-top.png create mode 100755 osxapp/OSX-theme/gtk-2.0/assets/toolbar.png create mode 100755 osxapp/OSX-theme/gtk-2.0/gtkrc create mode 100644 osxapp/PkgInfo create mode 100755 osxapp/XBoard.gtklauncher create mode 100644 osxapp/default/eo_Analyzing.png create mode 100644 osxapp/default/eo_Black.png create mode 100644 osxapp/default/eo_Clear.png create mode 100644 osxapp/default/eo_Ponder.png create mode 100644 osxapp/default/eo_Thinking.png create mode 100644 osxapp/default/eo_Unknown.png create mode 100644 osxapp/default/eo_White.png create mode 100644 osxapp/default/icon_black.png create mode 100644 osxapp/default/icon_white.png create mode 100644 osxapp/gtkrc create mode 100644 osxapp/icons/XBoard.icns create mode 100644 osxapp/icons/fen.icns create mode 100644 osxapp/icons/pgn.icns create mode 100644 osxapp/icons/trn.icns create mode 100644 osxapp/icons/xop.icns create mode 100755 osxapp/info.command create mode 100644 osxapp/launcher_rc create mode 100644 osxapp/logos/207.99.83.228.png create mode 100644 osxapp/logos/69.36.243.188.png create mode 100644 osxapp/logos/dummy.png create mode 100644 osxapp/logos/winboard.nl.png create mode 100755 osxapp/man.command create mode 100644 osxapp/osx-localization/.DS_Store create mode 100755 osxapp/osx-localization/da.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/de.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/en.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/es.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/it.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/nl.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/pl.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/ru.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/tr.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/uk.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/vi.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/zh_CN.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/zh_HK.lproj/GtkosxApplication.strings create mode 100755 osxapp/osx-localization/zh_TW.lproj/GtkosxApplication.strings create mode 100644 osxapp/pango.modules delete mode 100644 pixmaps/ANALYZING_14.xpm delete mode 100644 pixmaps/BLACK_14.xpm delete mode 100644 pixmaps/CLEAR_14.xpm delete mode 100644 pixmaps/PONDER_14.xpm delete mode 100644 pixmaps/THINKING_14.xpm delete mode 100644 pixmaps/UNKNOWN_14.xpm delete mode 100644 pixmaps/WHITE_14.xpm create mode 100644 pixmaps/board32.png delete mode 100644 pixmaps/board32.xpm create mode 100644 pixmaps/board48.png delete mode 100644 pixmaps/board48.xpm create mode 100644 pixmaps/cross32.png delete mode 100644 pixmaps/cross32.xpm create mode 100644 pixmaps/cross48.png delete mode 100644 pixmaps/cross48.xpm create mode 100644 pixmaps/ini32.png delete mode 100644 pixmaps/ini32.xpm create mode 100644 pixmaps/ini48.png delete mode 100644 pixmaps/ini48.xpm delete mode 100644 po/Makefile.in.in delete mode 100644 po/Makevars.template delete mode 100644 po/Rules-quot delete mode 100644 po/boldquot.sed delete mode 100644 po/en@boldquot.header delete mode 100644 po/en@quot.header delete mode 100644 po/insert-header.sin create mode 100644 po/nl.po create mode 100644 po/pl.po delete mode 100644 po/quot.sed delete mode 100644 po/remove-potcdate.sin create mode 100644 sounds/roar.wav create mode 100644 svg/BlackClaw.svg create mode 100644 svg/BlackDolphin.svg create mode 100644 svg/BlackHCrown.svg create mode 100644 svg/BlackHSword.svg create mode 100644 svg/BlackLeopard.svg create mode 100644 svg/BlackLion.svg create mode 100644 svg/BlackPromoBishop.svg create mode 100644 svg/BlackPromoDragon.svg create mode 100644 svg/BlackPromoHSword.svg create mode 100644 svg/BlackPromoHorse.svg create mode 100644 svg/BlackPromoRook.svg create mode 100644 svg/BlackPromoSword.svg create mode 100644 svg/BlackSword.svg create mode 100644 svg/WhiteClaw.svg create mode 100644 svg/WhiteDolphin.svg create mode 100644 svg/WhiteHCrown.svg create mode 100644 svg/WhiteHSword.svg create mode 100644 svg/WhiteLeopard.svg create mode 100644 svg/WhiteLion.svg create mode 100644 svg/WhitePromoBishop.svg create mode 100644 svg/WhitePromoDragon.svg create mode 100644 svg/WhitePromoHSword.svg create mode 100644 svg/WhitePromoHorse.svg create mode 100644 svg/WhitePromoRook.svg create mode 100644 svg/WhitePromoSword.svg create mode 100644 svg/WhiteSword.svg create mode 100644 themes/shogi/BlackElephant.svg create mode 100644 themes/shogi/BlackJewled.svg create mode 100644 themes/shogi/BlackPrince.svg create mode 100644 themes/shogi/WhiteElephant.svg create mode 100644 themes/shogi/WhiteJewled.svg create mode 100644 themes/shogi/WhitePrince.svg create mode 100644 winboard/bitmaps/ln33o.bmp create mode 100644 winboard/bitmaps/ln33s.bmp create mode 100644 winboard/bitmaps/ln33w.bmp create mode 100644 winboard/bitmaps/ln49o.bmp create mode 100644 winboard/bitmaps/ln49s.bmp create mode 100644 winboard/bitmaps/ln49w.bmp create mode 100644 winboard/bitmaps/ln72o.bmp create mode 100644 winboard/bitmaps/ln72s.bmp create mode 100644 winboard/bitmaps/ln72w.bmp rename xboard.conf.in => xboard.conf (65%) delete mode 100644 zic2xpm.c delete mode 100644 zic2xpm.man ** Version 4.7.3 ** (git diff -b --stat --summary -M v4.7.2 HEAD) COPYRIGHT | 2 +- README | 1 - args.h | 10 +- autogen.sh | 2 +- backend.c | 27 +++- backend.h | 42 +----- backendz.h | 2 +- board.c | 2 +- board.h | 2 +- book.c | 3 + childio.c | 2 +- childio.h | 2 +- cmail.in | 2 +- common.h | 42 +++++- configure.ac | 4 +- copyright.texi | 2 +- dialogs.c | 14 +- dialogs.h | 2 +- doc-maint/release.org | 0 draw.c | 2 +- draw.h | 2 +- engineoutput.c | 4 +- engineoutput.h | 2 +- evalgraph.c | 2 +- evalgraph.h | 2 +- frontend.h | 4 +- gamelist.c | 2 +- gtk/xboard.c | 84 +++++++++--- gtk/xboard.h | 2 +- gtk/xengineoutput.c | 2 +- gtk/xoptions.c | 55 ++++++-- gtk/xtimer.c | 2 +- history.c | 2 +- lists.c | 2 +- lists.h | 2 +- menus.c | 4 +- menus.h | 2 +- moves.c | 4 +- moves.h | 2 +- nengineoutput.c | 2 +- nevalgraph.c | 2 +- ngamelist.c | 2 +- nhistory.c | 2 +- parser.c | 6 +- parser.h | 2 +- pgntags.c | 2 +- po/da.po | 280 +++++++++++++++++++------------------- po/de.po | 280 +++++++++++++++++++------------------- po/es.po | 280 +++++++++++++++++++------------------- po/it.po | 280 +++++++++++++++++++------------------- po/lng2po.sh | 2 +- po/ru.po | 280 +++++++++++++++++++------------------- po/tr.po | 280 +++++++++++++++++++------------------- po/uk.po | 282 +++++++++++++++++++-------------------- po/vi.po | 280 +++++++++++++++++++------------------- po/xboard.pot | 282 +++++++++++++++++++-------------------- po/zh_CN.po | 280 +++++++++++++++++++------------------- po/zh_HK.po | 280 +++++++++++++++++++------------------- po/zh_TW.po | 280 +++++++++++++++++++------------------- themes/xiangqi/.DS_Store | Bin 6148 -> 0 bytes uci.c | 2 +- usounds.c | 2 +- usystem.c | 2 +- usystem.h | 2 +- winboard/config.h | 6 +- winboard/defaults.h | 2 +- winboard/help.c | 2 +- winboard/help/html/24.htm | 2 +- winboard/jaws.c | 2 +- winboard/language.txt | 2 +- winboard/language/deutsch.lng | 2 +- winboard/language/italiano.lng | 2 +- winboard/language/nederlands.lng | 2 +- winboard/language/romanian.lng | 2 +- winboard/language/russian.lng | 2 +- winboard/language/spanish.lng | 2 +- winboard/language/vietnamese.lng | 2 +- winboard/makefile.gcc | 5 +- winboard/wchat.c | 2 +- winboard/wclipbrd.c | 2 +- winboard/wclipbrd.h | 2 +- winboard/wedittags.c | 2 +- winboard/wengineoutput.c | 2 +- winboard/wevalgraph.c | 2 + winboard/wgamelist.c | 2 +- winboard/whistory.c | 2 + winboard/winboard.c | 46 +++++-- winboard/winboard.h | 4 +- winboard/winboard.rc | 4 +- winboard/wlayout.c | 14 +- winboard/woptions.c | 2 +- winboard/woptions.h | 2 +- winboard/wsettings.c | 23 ++++ winboard/wsockerr.c | 2 +- winboard/wsockerr.h | 2 +- xaw/xboard.c | 3 +- xaw/xboard.h | 2 +- xaw/xengineoutput.c | 3 +- xaw/xgamelist.c | 2 +- xaw/xgamelist.h | 2 +- xaw/xhistory.c | 2 +- xaw/xhistory.h | 2 +- xaw/xoptions.c | 14 +- xboard2.h | 22 +++ zippy.README | 0 zippy.c | 2 +- zippy.h | 2 +- zippy.lines | 0 108 files changed, 2077 insertions(+), 1867 deletions(-) delete mode 100644 themes/xiangqi/.DS_Store ** Version 4.7.2 ** (git diff -b --stat --summary -M v4.7.1 HEAD) backend.c | 10 ++++++---- book.c | 4 +++- parser.c | 4 +++- winboard/winboard.c | 8 ++++++-- winboard/wsettings.c | 9 ++++++--- zippy.c | 2 +- 6 files changed, 25 insertions(+), 12 deletions(-) ** Version 4.7.1 ** (git diff -b --stat --summary -M v4.7.0 HEAD) args.h | 10 ++- backend.c | 120 +++++++++++++++++------------ backend.h | 6 +- configure.ac | 2 +- dialogs.c | 19 ++--- gtk/xboard.c | 40 +++++++--- gtk/xoptions.c | 16 ++-- po/da.po | 2 +- po/de.po | 61 ++++++++++----- po/es.po | 2 +- po/it.po | 2 +- po/ru.po | 2 +- po/tr.po | 2 +- po/uk.po | 213 +++++++++++++++++++--------------------------------- po/vi.po | 2 +- po/xboard.pot | 4 +- po/zh_CN.po | 2 +- po/zh_HK.po | 2 +- po/zh_TW.po | 2 +- winboard/config.h | 6 +- winboard/wchat.c | 11 ++- xaw/xboard.c | 3 +- xaw/xengineoutput.c | 4 +- xaw/xhistory.c | 2 +- xaw/xoptions.c | 3 +- xboard.texi | 145 ++++++++++++++++++----------------- zippy.README | 9 ++- 27 files changed, 368 insertions(+), 324 deletions(-) ** Version 4.7.0 ** (git diff -b --stat --summary -M v4.6.2 HEAD) AUTHORS | 2117 +---------- COPYRIGHT | 2 +- ChangeLog | 2868 +++++++++++++- DIFFSTAT | 3076 ++++++++++++++- Makefile.am | 214 +- NEWS | 90 +- SHORTLOG | 442 ++- args.h | 105 +- autogen.sh | 2 +- backend.c | 942 ++++- backend.h | 64 +- backendz.h | 9 +- bitmaps/README.bitmaps | 101 - bitmaps/a33o.bm | 16 - bitmaps/a33s.bm | 16 - bitmaps/a37o.bm | 17 - bitmaps/a37s.bm | 17 - bitmaps/a40o.bm | 18 - bitmaps/a40s.bm | 18 - bitmaps/a45o.bm | 23 - bitmaps/a45s.bm | 23 - bitmaps/a49o.bm | 27 - bitmaps/a49s.bm | 27 - bitmaps/a54o.bm | 30 - bitmaps/a54s.bm | 30 - bitmaps/a58o.bm | 35 - bitmaps/a58s.bm | 35 - bitmaps/a64o.bm | 39 - bitmaps/a64s.bm | 39 - bitmaps/a72o.bm | 48 - bitmaps/a72s.bm | 48 - bitmaps/as45o.bm | 23 - bitmaps/as45s.bm | 23 - bitmaps/b108o.bm | 105 - bitmaps/b108s.bm | 105 - bitmaps/b116o.bm | 121 - bitmaps/b116s.bm | 121 - bitmaps/b129o.bm | 186 - bitmaps/b129s.bm | 186 - bitmaps/b21o.bm | 9 - bitmaps/b21s.bm | 9 - bitmaps/b25o.bm | 11 - bitmaps/b25s.bm | 11 - bitmaps/b29o.bm | 12 - bitmaps/b29s.bm | 12 - bitmaps/b33o.bm | 16 - bitmaps/b33s.bm | 16 - bitmaps/b37o.bm | 17 - bitmaps/b37s.bm | 17 - bitmaps/b40o.bm | 18 - bitmaps/b40s.bm | 18 - bitmaps/b45o.bm | 23 - bitmaps/b45s.bm | 23 - bitmaps/b49o.bm | 27 - bitmaps/b49s.bm | 27 - bitmaps/b54o.bm | 30 - bitmaps/b54s.bm | 30 - bitmaps/b58o.bm | 35 - bitmaps/b58s.bm | 35 - bitmaps/b64o.bm | 39 - bitmaps/b64s.bm | 39 - bitmaps/b72o.bm | 48 - bitmaps/b72s.bm | 48 - bitmaps/b80o.bm | 58 - bitmaps/b80s.bm | 58 - bitmaps/b87o.bm | 68 - bitmaps/b87s.bm | 68 - bitmaps/b95o.bm | 81 - bitmaps/b95s.bm | 81 - bitmaps/bitmaps.h | 530 --- bitmaps/c33o.bm | 16 - bitmaps/c33s.bm | 16 - bitmaps/c37o.bm | 17 - bitmaps/c37s.bm | 17 - bitmaps/c40o.bm | 18 - bitmaps/c40s.bm | 18 - bitmaps/c45o.bm | 23 - bitmaps/c45s.bm | 23 - bitmaps/c49o.bm | 27 - bitmaps/c49s.bm | 27 - bitmaps/c54o.bm | 30 - bitmaps/c54s.bm | 30 - bitmaps/c58o.bm | 35 - bitmaps/c58s.bm | 35 - bitmaps/c64o.bm | 39 - bitmaps/c64s.bm | 39 - bitmaps/c72o.bm | 48 - bitmaps/c72s.bm | 48 - bitmaps/d33o.bm | 16 - bitmaps/d33s.bm | 16 - bitmaps/d37o.bm | 17 - bitmaps/d37s.bm | 17 - bitmaps/d40o.bm | 18 - bitmaps/d40s.bm | 18 - bitmaps/d45o.bm | 23 - bitmaps/d45s.bm | 23 - bitmaps/d49o.bm | 27 - bitmaps/d49s.bm | 27 - bitmaps/d54o.bm | 30 - bitmaps/d54s.bm | 30 - bitmaps/d58o.bm | 35 - bitmaps/d58s.bm | 35 - bitmaps/d64o.bm | 39 - bitmaps/d64s.bm | 39 - bitmaps/d72o.bm | 48 - bitmaps/d72s.bm | 48 - bitmaps/dopkbm.sh | 16 - bitmaps/dopkbm1.sh | 27 - bitmaps/e33o.bm | 16 - bitmaps/e33s.bm | 16 - bitmaps/e49o.bm | 27 - bitmaps/e49s.bm | 27 - bitmaps/e72o.bm | 48 - bitmaps/e72s.bm | 48 - bitmaps/f33o.bm | 16 - bitmaps/f33s.bm | 16 - bitmaps/f49o.bm | 27 - bitmaps/f49s.bm | 27 - bitmaps/f72o.bm | 48 - bitmaps/f72s.bm | 48 - bitmaps/g33o.bm | 16 - bitmaps/g33s.bm | 16 - bitmaps/g49o.bm | 27 - bitmaps/g49s.bm | 27 - bitmaps/g72o.bm | 48 - bitmaps/g72s.bm | 48 - bitmaps/h33o.bm | 16 - bitmaps/h33s.bm | 16 - bitmaps/h49o.bm | 27 - bitmaps/h49s.bm | 27 - bitmaps/h72o.bm | 48 - bitmaps/h72s.bm | 48 - bitmaps/i33o.bm | 16 - bitmaps/i33s.bm | 16 - bitmaps/i49o.bm | 27 - bitmaps/i49s.bm | 27 - bitmaps/i72o.bm | 48 - bitmaps/i72s.bm | 48 - bitmaps/icon_b.bm | 13 - bitmaps/icon_outline.bm | 14 - bitmaps/j33o.bm | 16 - bitmaps/j33s.bm | 16 - bitmaps/j49o.bm | 27 - bitmaps/j49s.bm | 27 - bitmaps/j72o.bm | 48 - bitmaps/j72s.bm | 48 - bitmaps/k108o.bm | 105 - bitmaps/k108s.bm | 105 - bitmaps/k116o.bm | 121 - bitmaps/k116s.bm | 121 - bitmaps/k129o.bm | 186 - bitmaps/k129s.bm | 186 - bitmaps/k21o.bm | 9 - bitmaps/k21s.bm | 9 - bitmaps/k25o.bm | 11 - bitmaps/k25s.bm | 11 - bitmaps/k29o.bm | 12 - bitmaps/k29s.bm | 12 - bitmaps/k33o.bm | 16 - bitmaps/k33s.bm | 16 - bitmaps/k37o.bm | 17 - bitmaps/k37s.bm | 17 - bitmaps/k40o.bm | 18 - bitmaps/k40s.bm | 18 - bitmaps/k45o.bm | 23 - bitmaps/k45s.bm | 23 - bitmaps/k49o.bm | 27 - bitmaps/k49s.bm | 27 - bitmaps/k54o.bm | 30 - bitmaps/k54s.bm | 30 - bitmaps/k58o.bm | 35 - bitmaps/k58s.bm | 35 - bitmaps/k64o.bm | 39 - bitmaps/k64s.bm | 39 - bitmaps/k72o.bm | 48 - bitmaps/k72s.bm | 48 - bitmaps/k80o.bm | 58 - bitmaps/k80s.bm | 58 - bitmaps/k87o.bm | 68 - bitmaps/k87s.bm | 68 - bitmaps/k95o.bm | 81 - bitmaps/k95s.bm | 81 - bitmaps/l33o.bm | 16 - bitmaps/l33s.bm | 16 - bitmaps/l37o.bm | 17 - bitmaps/l37s.bm | 17 - bitmaps/l40o.bm | 18 - bitmaps/l40s.bm | 18 - bitmaps/l45o.bm | 23 - bitmaps/l45s.bm | 23 - bitmaps/l49o.bm | 27 - bitmaps/l49s.bm | 27 - bitmaps/l54o.bm | 30 - bitmaps/l54s.bm | 30 - bitmaps/l58o.bm | 35 - bitmaps/l58s.bm | 35 - bitmaps/l64o.bm | 39 - bitmaps/l64s.bm | 39 - bitmaps/l72o.bm | 48 - bitmaps/l72s.bm | 48 - bitmaps/m33o.bm | 16 - bitmaps/m33s.bm | 16 - bitmaps/m49o.bm | 27 - bitmaps/m49s.bm | 27 - bitmaps/m72o.bm | 48 - bitmaps/m72s.bm | 48 - bitmaps/n108o.bm | 105 - bitmaps/n108s.bm | 105 - bitmaps/n116o.bm | 121 - bitmaps/n116s.bm | 121 - bitmaps/n129o.bm | 186 - bitmaps/n129s.bm | 186 - bitmaps/n21o.bm | 9 - bitmaps/n21s.bm | 9 - bitmaps/n25o.bm | 11 - bitmaps/n25s.bm | 11 - bitmaps/n29o.bm | 12 - bitmaps/n29s.bm | 12 - bitmaps/n33o.bm | 16 - bitmaps/n33s.bm | 16 - bitmaps/n37o.bm | 17 - bitmaps/n37s.bm | 17 - bitmaps/n40o.bm | 18 - bitmaps/n40s.bm | 18 - bitmaps/n45o.bm | 23 - bitmaps/n45s.bm | 23 - bitmaps/n49o.bm | 27 - bitmaps/n49s.bm | 27 - bitmaps/n54o.bm | 30 - bitmaps/n54s.bm | 30 - bitmaps/n58o.bm | 35 - bitmaps/n58s.bm | 35 - bitmaps/n64o.bm | 39 - bitmaps/n64s.bm | 39 - bitmaps/n72o.bm | 48 - bitmaps/n72s.bm | 48 - bitmaps/n80o.bm | 58 - bitmaps/n80s.bm | 58 - bitmaps/n87o.bm | 68 - bitmaps/n87s.bm | 68 - bitmaps/n95o.bm | 81 - bitmaps/n95s.bm | 81 - bitmaps/o33o.bm | 16 - bitmaps/o33s.bm | 16 - bitmaps/o49o.bm | 27 - bitmaps/o49s.bm | 27 - bitmaps/o72o.bm | 48 - bitmaps/o72s.bm | 48 - bitmaps/p108o.bm | 105 - bitmaps/p108s.bm | 105 - bitmaps/p116o.bm | 121 - bitmaps/p116s.bm | 121 - bitmaps/p129o.bm | 186 - bitmaps/p129s.bm | 186 - bitmaps/p21o.bm | 9 - bitmaps/p21s.bm | 9 - bitmaps/p25o.bm | 11 - bitmaps/p25s.bm | 11 - bitmaps/p29o.bm | 12 - bitmaps/p29s.bm | 12 - bitmaps/p33o.bm | 16 - bitmaps/p33s.bm | 16 - bitmaps/p37o.bm | 17 - bitmaps/p37s.bm | 17 - bitmaps/p40o.bm | 18 - bitmaps/p40s.bm | 18 - bitmaps/p45o.bm | 23 - bitmaps/p45s.bm | 23 - bitmaps/p49o.bm | 27 - bitmaps/p49s.bm | 27 - bitmaps/p54o.bm | 30 - bitmaps/p54s.bm | 30 - bitmaps/p58o.bm | 35 - bitmaps/p58s.bm | 35 - bitmaps/p64o.bm | 39 - bitmaps/p64s.bm | 39 - bitmaps/p72o.bm | 48 - bitmaps/p72s.bm | 48 - bitmaps/p80o.bm | 58 - bitmaps/p80s.bm | 58 - bitmaps/p87o.bm | 68 - bitmaps/p87s.bm | 68 - bitmaps/p95o.bm | 81 - bitmaps/p95s.bm | 81 - bitmaps/q108o.bm | 105 - bitmaps/q108s.bm | 105 - bitmaps/q116o.bm | 121 - bitmaps/q116s.bm | 121 - bitmaps/q129o.bm | 186 - bitmaps/q129s.bm | 186 - bitmaps/q21o.bm | 9 - bitmaps/q21s.bm | 9 - bitmaps/q25o.bm | 11 - bitmaps/q25s.bm | 11 - bitmaps/q29o.bm | 12 - bitmaps/q29s.bm | 12 - bitmaps/q33o.bm | 16 - bitmaps/q33s.bm | 16 - bitmaps/q37o.bm | 17 - bitmaps/q37s.bm | 17 - bitmaps/q40o.bm | 18 - bitmaps/q40s.bm | 18 - bitmaps/q45o.bm | 23 - bitmaps/q45s.bm | 23 - bitmaps/q49o.bm | 27 - bitmaps/q49s.bm | 27 - bitmaps/q54o.bm | 30 - bitmaps/q54s.bm | 30 - bitmaps/q58o.bm | 35 - bitmaps/q58s.bm | 35 - bitmaps/q64o.bm | 39 - bitmaps/q64s.bm | 39 - bitmaps/q72o.bm | 48 - bitmaps/q72s.bm | 48 - bitmaps/q80o.bm | 58 - bitmaps/q80s.bm | 58 - bitmaps/q87o.bm | 68 - bitmaps/q87s.bm | 68 - bitmaps/q95o.bm | 81 - bitmaps/q95s.bm | 81 - bitmaps/r108o.bm | 105 - bitmaps/r108s.bm | 105 - bitmaps/r116o.bm | 121 - bitmaps/r116s.bm | 121 - bitmaps/r129o.bm | 186 - bitmaps/r129s.bm | 186 - bitmaps/r21o.bm | 9 - bitmaps/r21s.bm | 9 - bitmaps/r25o.bm | 11 - bitmaps/r25s.bm | 11 - bitmaps/r29o.bm | 12 - bitmaps/r29s.bm | 12 - bitmaps/r33o.bm | 16 - bitmaps/r33s.bm | 16 - bitmaps/r37o.bm | 17 - bitmaps/r37s.bm | 17 - bitmaps/r40o.bm | 18 - bitmaps/r40s.bm | 18 - bitmaps/r45o.bm | 23 - bitmaps/r45s.bm | 23 - bitmaps/r49o.bm | 27 - bitmaps/r49s.bm | 27 - bitmaps/r54o.bm | 30 - bitmaps/r54s.bm | 30 - bitmaps/r58o.bm | 35 - bitmaps/r58s.bm | 35 - bitmaps/r64o.bm | 39 - bitmaps/r64s.bm | 39 - bitmaps/r72o.bm | 48 - bitmaps/r72s.bm | 48 - bitmaps/r80o.bm | 58 - bitmaps/r80s.bm | 58 - bitmaps/r87o.bm | 68 - bitmaps/r87s.bm | 68 - bitmaps/r95o.bm | 81 - bitmaps/r95s.bm | 81 - bitmaps/s49o.bm | 27 - bitmaps/s49s.bm | 27 - bitmaps/s72o.bm | 48 - bitmaps/s72s.bm | 48 - bitmaps/test.c | 14 - bitmaps/u49o.bm | 27 - bitmaps/u49s.bm | 27 - bitmaps/u72o.bm | 48 - bitmaps/u72s.bm | 48 - bitmaps/v33o.bm | 16 - bitmaps/v33s.bm | 16 - bitmaps/v49o.bm | 27 - bitmaps/v49s.bm | 27 - bitmaps/v72o.bm | 48 - bitmaps/v72s.bm | 48 - bitmaps/w33o.bm | 16 - bitmaps/w33s.bm | 16 - bitmaps/w49o.bm | 27 - bitmaps/w49s.bm | 27 - bitmaps/w72o.bm | 48 - bitmaps/w72s.bm | 48 - bitmaps/wl49o.bm | 27 - bitmaps/wl49s.bm | 27 - bitmaps/wl72o.bm | 48 - bitmaps/wl72s.bm | 48 - bitmaps/wn49o.bm | 27 - bitmaps/wn49s.bm | 27 - bitmaps/wn72o.bm | 48 - bitmaps/wn72s.bm | 48 - bitmaps/wp49o.bm | 27 - bitmaps/wp49s.bm | 27 - bitmaps/wp72o.bm | 48 - bitmaps/wp72s.bm | 48 - bitmaps/ws49o.bm | 27 - bitmaps/ws49s.bm | 27 - bitmaps/ws72o.bm | 48 - bitmaps/ws72s.bm | 48 - board.c | 1244 ++++++ board.h | 98 + book.c | 362 +- childio.c | 2 +- childio.h | 2 +- cmail.in | 2 +- common.h | 49 +- configure.ac | 136 +- copyright.texi | 2 +- dialogs.c | 2588 +++++++++++++ dialogs.h | 196 + doc-maint/coding-standards.org | 6 + doc-maint/gendocs.sh | 361 ++ doc-maint/make-xboard-release | 186 + doc-maint/release.org | 71 + doc-maint/web-pages.org | 40 + draw.c | 927 +++++ draw.h | 76 + engine-intf.html | 45 + engineoutput.c | 28 +- engineoutput.h | 25 +- evalgraph.c | 4 +- evalgraph.h | 12 +- filebrowser/README | 3 - filebrowser/dir.c | 169 - filebrowser/draw.c | 981 ----- filebrowser/path.c | 905 ----- filebrowser/selfile.c | 902 ----- filebrowser/selfile.h | 170 - filebrowser/xstat.h | 23 - frontend.h | 34 +- gamelist.c | 5 +- gettext.h | 6 +- gtk/.dirstamp | 0 gtk/xboard.c | 2126 +++++++++++ gtk/xboard.h | 177 + gtk/xengineoutput.c | 137 + gtk/xoptions.c | 1587 ++++++++ gtk/xtimer.c | 237 ++ history.c | 3 +- install-sh | 0 lists.c | 2 +- lists.h | 18 +- menus.c | 1213 ++++++ menus.h | 197 + moves.c | 13 +- moves.h | 2 +- nengineoutput.c | 194 + nevalgraph.c | 189 + ngamelist.c | 377 ++ nhistory.c | 124 + parser.c | 6 +- parser.h | 2 +- pgntags.c | 2 +- pixmaps/README.pixmaps | 8 - pixmaps/add33.xpm | 42 - pixmaps/add37.xpm | 46 - pixmaps/add40.xpm | 49 - pixmaps/add45.xpm | 54 - pixmaps/add49.xpm | 58 - pixmaps/add54.xpm | 63 - pixmaps/add58.xpm | 67 - pixmaps/add64.xpm | 73 - pixmaps/add72.xpm | 81 - pixmaps/adl33.xpm | 42 - pixmaps/adl37.xpm | 46 - pixmaps/adl40.xpm | 49 - pixmaps/adl45.xpm | 54 - pixmaps/adl49.xpm | 58 - pixmaps/adl54.xpm | 63 - pixmaps/adl58.xpm | 67 - pixmaps/adl64.xpm | 73 - pixmaps/adl72.xpm | 81 - pixmaps/ald33.xpm | 42 - pixmaps/ald37.xpm | 46 - pixmaps/ald40.xpm | 49 - pixmaps/ald45.xpm | 54 - pixmaps/ald49.xpm | 58 - pixmaps/ald54.xpm | 63 - pixmaps/ald58.xpm | 67 - pixmaps/ald64.xpm | 73 - pixmaps/ald72.xpm | 81 - pixmaps/all33.xpm | 42 - pixmaps/all37.xpm | 46 - pixmaps/all40.xpm | 49 - pixmaps/all45.xpm | 54 - pixmaps/all49.xpm | 58 - pixmaps/all54.xpm | 63 - pixmaps/all58.xpm | 67 - pixmaps/all64.xpm | 73 - pixmaps/all72.xpm | 81 - pixmaps/asdd33.xpm | 42 - pixmaps/asdd49.xpm | 58 - pixmaps/asdd72.xpm | 81 - pixmaps/asdl33.xpm | 42 - pixmaps/asdl49.xpm | 58 - pixmaps/asdl72.xpm | 81 - pixmaps/asld33.xpm | 42 - pixmaps/asld49.xpm | 58 - pixmaps/asld72.xpm | 81 - pixmaps/asll33.xpm | 42 - pixmaps/asll49.xpm | 58 - pixmaps/asll72.xpm | 81 - pixmaps/bdd108.xpm | 117 - pixmaps/bdd116.xpm | 125 - pixmaps/bdd129.xpm | 138 - pixmaps/bdd21.xpm | 30 - pixmaps/bdd25.xpm | 34 - pixmaps/bdd29.xpm | 38 - pixmaps/bdd33.xpm | 42 - pixmaps/bdd37.xpm | 46 - pixmaps/bdd40.xpm | 49 - pixmaps/bdd45.xpm | 54 - pixmaps/bdd49.xpm | 58 - pixmaps/bdd54.xpm | 63 - pixmaps/bdd58.xpm | 67 - pixmaps/bdd64.xpm | 73 - pixmaps/bdd72.xpm | 81 - pixmaps/bdd80.xpm | 89 - pixmaps/bdd87.xpm | 96 - pixmaps/bdd95.xpm | 104 - pixmaps/bdl108.xpm | 117 - pixmaps/bdl116.xpm | 125 - pixmaps/bdl129.xpm | 138 - pixmaps/bdl21.xpm | 30 - pixmaps/bdl25.xpm | 34 - pixmaps/bdl29.xpm | 38 - pixmaps/bdl33.xpm | 42 - pixmaps/bdl37.xpm | 46 - pixmaps/bdl40.xpm | 49 - pixmaps/bdl45.xpm | 54 - pixmaps/bdl49.xpm | 58 - pixmaps/bdl54.xpm | 63 - pixmaps/bdl58.xpm | 67 - pixmaps/bdl64.xpm | 73 - pixmaps/bdl72.xpm | 81 - pixmaps/bdl80.xpm | 89 - pixmaps/bdl87.xpm | 96 - pixmaps/bdl95.xpm | 104 - pixmaps/bld108.xpm | 117 - pixmaps/bld116.xpm | 125 - pixmaps/bld129.xpm | 138 - pixmaps/bld21.xpm | 30 - pixmaps/bld25.xpm | 34 - pixmaps/bld29.xpm | 38 - pixmaps/bld33.xpm | 42 - pixmaps/bld37.xpm | 43 - pixmaps/bld40.xpm | 49 - pixmaps/bld45.xpm | 54 - pixmaps/bld49.xpm | 58 - pixmaps/bld54.xpm | 63 - pixmaps/bld58.xpm | 67 - pixmaps/bld64.xpm | 73 - pixmaps/bld72.xpm | 81 - pixmaps/bld80.xpm | 89 - pixmaps/bld87.xpm | 96 - pixmaps/bld95.xpm | 104 - pixmaps/bll108.xpm | 117 - pixmaps/bll116.xpm | 125 - pixmaps/bll129.xpm | 138 - pixmaps/bll21.xpm | 30 - pixmaps/bll25.xpm | 34 - pixmaps/bll29.xpm | 38 - pixmaps/bll33.xpm | 42 - pixmaps/bll37.xpm | 43 - pixmaps/bll40.xpm | 49 - pixmaps/bll45.xpm | 54 - pixmaps/bll49.xpm | 58 - pixmaps/bll54.xpm | 63 - pixmaps/bll58.xpm | 67 - pixmaps/bll64.xpm | 73 - pixmaps/bll72.xpm | 81 - pixmaps/bll80.xpm | 89 - pixmaps/bll87.xpm | 96 - pixmaps/bll95.xpm | 104 - pixmaps/cdd33.xpm | 42 - pixmaps/cdd37.xpm | 46 - pixmaps/cdd40.xpm | 49 - pixmaps/cdd45.xpm | 54 - pixmaps/cdd49.xpm | 58 - pixmaps/cdd54.xpm | 63 - pixmaps/cdd58.xpm | 67 - pixmaps/cdd64.xpm | 73 - pixmaps/cdd72.xpm | 81 - pixmaps/cdl33.xpm | 42 - pixmaps/cdl37.xpm | 46 - pixmaps/cdl40.xpm | 49 - pixmaps/cdl45.xpm | 54 - pixmaps/cdl49.xpm | 58 - pixmaps/cdl54.xpm | 63 - pixmaps/cdl58.xpm | 67 - pixmaps/cdl64.xpm | 73 - pixmaps/cdl72.xpm | 81 - pixmaps/cld33.xpm | 42 - pixmaps/cld37.xpm | 46 - pixmaps/cld40.xpm | 49 - pixmaps/cld45.xpm | 54 - pixmaps/cld49.xpm | 58 - pixmaps/cld54.xpm | 63 - pixmaps/cld58.xpm | 67 - pixmaps/cld64.xpm | 73 - pixmaps/cld72.xpm | 81 - pixmaps/cll33.xpm | 42 - pixmaps/cll37.xpm | 46 - pixmaps/cll40.xpm | 49 - pixmaps/cll45.xpm | 54 - pixmaps/cll49.xpm | 58 - pixmaps/cll54.xpm | 63 - pixmaps/cll58.xpm | 67 - pixmaps/cll64.xpm | 73 - pixmaps/cll72.xpm | 81 - pixmaps/convbm | 35 - pixmaps/convbm.sed | 4 - pixmaps/convbm2.sed | 5 - pixmaps/convert.c | 168 - pixmaps/cvdd33.xpm | 42 - pixmaps/cvdd37.xpm | 46 - pixmaps/cvdd40.xpm | 49 - pixmaps/cvdd45.xpm | 54 - pixmaps/cvdd49.xpm | 58 - pixmaps/cvdd54.xpm | 63 - pixmaps/cvdd58.xpm | 67 - pixmaps/cvdd64.xpm | 73 - pixmaps/cvdd72.xpm | 81 - pixmaps/cvdl33.xpm | 42 - pixmaps/cvdl37.xpm | 46 - pixmaps/cvdl40.xpm | 49 - pixmaps/cvdl45.xpm | 54 - pixmaps/cvdl49.xpm | 58 - pixmaps/cvdl54.xpm | 63 - pixmaps/cvdl58.xpm | 67 - pixmaps/cvdl64.xpm | 73 - pixmaps/cvdl72.xpm | 81 - pixmaps/cvld33.xpm | 42 - pixmaps/cvld37.xpm | 46 - pixmaps/cvld40.xpm | 49 - pixmaps/cvld45.xpm | 54 - pixmaps/cvld49.xpm | 58 - pixmaps/cvld54.xpm | 63 - pixmaps/cvld58.xpm | 67 - pixmaps/cvld64.xpm | 73 - pixmaps/cvld72.xpm | 81 - pixmaps/cvll33.xpm | 42 - pixmaps/cvll37.xpm | 46 - pixmaps/cvll40.xpm | 49 - pixmaps/cvll45.xpm | 54 - pixmaps/cvll49.xpm | 58 - pixmaps/cvll54.xpm | 63 - pixmaps/cvll58.xpm | 67 - pixmaps/cvll64.xpm | 73 - pixmaps/cvll72.xpm | 81 - pixmaps/dkdd33.xpm | 42 - pixmaps/dkdd49.xpm | 58 - pixmaps/dkdd72.xpm | 81 - pixmaps/dkdl33.xpm | 42 - pixmaps/dkdl49.xpm | 58 - pixmaps/dkdl72.xpm | 81 - pixmaps/dkld33.xpm | 42 - pixmaps/dkld49.xpm | 58 - pixmaps/dkld72.xpm | 81 - pixmaps/dkll33.xpm | 42 - pixmaps/dkll49.xpm | 58 - pixmaps/dkll72.xpm | 81 - pixmaps/edd33.xpm | 42 - pixmaps/edd49.xpm | 58 - pixmaps/edd72.xpm | 81 - pixmaps/edl33.xpm | 42 - pixmaps/edl49.xpm | 58 - pixmaps/edl72.xpm | 81 - pixmaps/eld33.xpm | 42 - pixmaps/eld49.xpm | 58 - pixmaps/eld72.xpm | 81 - pixmaps/ell33.xpm | 42 - pixmaps/ell49.xpm | 58 - pixmaps/ell72.xpm | 81 - pixmaps/fdd33.xpm | 42 - pixmaps/fdd49.xpm | 58 - pixmaps/fdd72.xpm | 81 - pixmaps/fdl33.xpm | 42 - pixmaps/fdl49.xpm | 58 - pixmaps/fdl72.xpm | 81 - pixmaps/fld33.xpm | 42 - pixmaps/fld49.xpm | 58 - pixmaps/fld72.xpm | 81 - pixmaps/fll33.xpm | 42 - pixmaps/fll49.xpm | 58 - pixmaps/fll72.xpm | 81 - pixmaps/gdd33.xpm | 42 - pixmaps/gdd49.xpm | 58 - pixmaps/gdd72.xpm | 81 - pixmaps/gdl33.xpm | 42 - pixmaps/gdl49.xpm | 58 - pixmaps/gdl72.xpm | 81 - pixmaps/gld33.xpm | 42 - pixmaps/gld49.xpm | 58 - pixmaps/gld72.xpm | 81 - pixmaps/gll33.xpm | 42 - pixmaps/gll49.xpm | 58 - pixmaps/gll72.xpm | 81 - pixmaps/hdd33.xpm | 42 - pixmaps/hdd49.xpm | 58 - pixmaps/hdd72.xpm | 81 - pixmaps/hdl33.xpm | 42 - pixmaps/hdl49.xpm | 58 - pixmaps/hdl72.xpm | 81 - pixmaps/hld33.xpm | 42 - pixmaps/hld49.xpm | 58 - pixmaps/hld72.xpm | 81 - pixmaps/hll33.xpm | 42 - pixmaps/hll49.xpm | 58 - pixmaps/hll72.xpm | 81 - pixmaps/ini32.xpm | 41 + pixmaps/ini48.xpm | 57 + pixmaps/kdd108.xpm | 117 - pixmaps/kdd116.xpm | 125 - pixmaps/kdd129.xpm | 138 - pixmaps/kdd21.xpm | 30 - pixmaps/kdd25.xpm | 34 - pixmaps/kdd29.xpm | 38 - pixmaps/kdd33.xpm | 42 - pixmaps/kdd37.xpm | 46 - pixmaps/kdd40.xpm | 46 - pixmaps/kdd45.xpm | 54 - pixmaps/kdd49.xpm | 58 - pixmaps/kdd54.xpm | 63 - pixmaps/kdd58.xpm | 67 - pixmaps/kdd64.xpm | 73 - pixmaps/kdd72.xpm | 81 - pixmaps/kdd80.xpm | 89 - pixmaps/kdd87.xpm | 96 - pixmaps/kdd95.xpm | 104 - pixmaps/kdl108.xpm | 117 - pixmaps/kdl116.xpm | 125 - pixmaps/kdl129.xpm | 138 - pixmaps/kdl21.xpm | 30 - pixmaps/kdl25.xpm | 34 - pixmaps/kdl29.xpm | 38 - pixmaps/kdl33.xpm | 42 - pixmaps/kdl37.xpm | 46 - pixmaps/kdl40.xpm | 46 - pixmaps/kdl45.xpm | 54 - pixmaps/kdl49.xpm | 58 - pixmaps/kdl54.xpm | 63 - pixmaps/kdl58.xpm | 67 - pixmaps/kdl64.xpm | 73 - pixmaps/kdl72.xpm | 81 - pixmaps/kdl80.xpm | 89 - pixmaps/kdl87.xpm | 96 - pixmaps/kdl95.xpm | 104 - pixmaps/kld108.xpm | 117 - pixmaps/kld116.xpm | 125 - pixmaps/kld129.xpm | 138 - pixmaps/kld21.xpm | 30 - pixmaps/kld25.xpm | 34 - pixmaps/kld29.xpm | 38 - pixmaps/kld33.xpm | 42 - pixmaps/kld37.xpm | 46 - pixmaps/kld40.xpm | 46 - pixmaps/kld45.xpm | 54 - pixmaps/kld49.xpm | 58 - pixmaps/kld54.xpm | 63 - pixmaps/kld58.xpm | 67 - pixmaps/kld64.xpm | 73 - pixmaps/kld72.xpm | 81 - pixmaps/kld80.xpm | 89 - pixmaps/kld87.xpm | 96 - pixmaps/kld95.xpm | 104 - pixmaps/kll108.xpm | 117 - pixmaps/kll116.xpm | 125 - pixmaps/kll129.xpm | 138 - pixmaps/kll21.xpm | 30 - pixmaps/kll25.xpm | 34 - pixmaps/kll29.xpm | 38 - pixmaps/kll33.xpm | 42 - pixmaps/kll37.xpm | 46 - pixmaps/kll40.xpm | 46 - pixmaps/kll45.xpm | 54 - pixmaps/kll49.xpm | 58 - pixmaps/kll54.xpm | 63 - pixmaps/kll58.xpm | 67 - pixmaps/kll64.xpm | 73 - pixmaps/kll72.xpm | 81 - pixmaps/kll80.xpm | 89 - pixmaps/kll87.xpm | 96 - pixmaps/kll95.xpm | 104 - pixmaps/ldd33.xpm | 42 - pixmaps/ldd37.xpm | 46 - pixmaps/ldd40.xpm | 49 - pixmaps/ldd45.xpm | 54 - pixmaps/ldd49.xpm | 58 - pixmaps/ldd54.xpm | 63 - pixmaps/ldd58.xpm | 67 - pixmaps/ldd64.xpm | 73 - pixmaps/ldd72.xpm | 81 - pixmaps/ldl33.xpm | 42 - pixmaps/ldl37.xpm | 46 - pixmaps/ldl40.xpm | 49 - pixmaps/ldl45.xpm | 54 - pixmaps/ldl49.xpm | 58 - pixmaps/ldl54.xpm | 63 - pixmaps/ldl58.xpm | 67 - pixmaps/ldl64.xpm | 73 - pixmaps/ldl72.xpm | 81 - pixmaps/lld33.xpm | 42 - pixmaps/lld37.xpm | 46 - pixmaps/lld40.xpm | 49 - pixmaps/lld45.xpm | 54 - pixmaps/lld49.xpm | 58 - pixmaps/lld54.xpm | 63 - pixmaps/lld58.xpm | 67 - pixmaps/lld64.xpm | 73 - pixmaps/lld72.xpm | 81 - pixmaps/lll33.xpm | 42 - pixmaps/lll37.xpm | 46 - pixmaps/lll40.xpm | 49 - pixmaps/lll45.xpm | 54 - pixmaps/lll49.xpm | 58 - pixmaps/lll54.xpm | 63 - pixmaps/lll58.xpm | 67 - pixmaps/lll64.xpm | 73 - pixmaps/lll72.xpm | 81 - pixmaps/marble_d.xpm | 238 -- pixmaps/marble_l.xpm | 359 -- pixmaps/mdd33.xpm | 42 - pixmaps/mdd49.xpm | 58 - pixmaps/mdd72.xpm | 81 - pixmaps/mdl33.xpm | 42 - pixmaps/mdl49.xpm | 58 - pixmaps/mdl72.xpm | 81 - pixmaps/mld33.xpm | 42 - pixmaps/mld49.xpm | 58 - pixmaps/mld72.xpm | 81 - pixmaps/mll33.xpm | 42 - pixmaps/mll49.xpm | 58 - pixmaps/mll72.xpm | 81 - pixmaps/ndd108.xpm | 117 - pixmaps/ndd116.xpm | 125 - pixmaps/ndd129.xpm | 138 - pixmaps/ndd21.xpm | 30 - pixmaps/ndd25.xpm | 34 - pixmaps/ndd29.xpm | 35 - pixmaps/ndd33.xpm | 42 - pixmaps/ndd37.xpm | 43 - pixmaps/ndd40.xpm | 46 - pixmaps/ndd45.xpm | 51 - pixmaps/ndd49.xpm | 55 - pixmaps/ndd54.xpm | 63 - pixmaps/ndd58.xpm | 67 - pixmaps/ndd64.xpm | 73 - pixmaps/ndd72.xpm | 81 - pixmaps/ndd80.xpm | 89 - pixmaps/ndd87.xpm | 96 - pixmaps/ndd95.xpm | 104 - pixmaps/ndl108.xpm | 117 - pixmaps/ndl116.xpm | 125 - pixmaps/ndl129.xpm | 138 - pixmaps/ndl21.xpm | 30 - pixmaps/ndl25.xpm | 34 - pixmaps/ndl29.xpm | 35 - pixmaps/ndl33.xpm | 42 - pixmaps/ndl37.xpm | 43 - pixmaps/ndl40.xpm | 46 - pixmaps/ndl45.xpm | 51 - pixmaps/ndl49.xpm | 55 - pixmaps/ndl54.xpm | 63 - pixmaps/ndl58.xpm | 67 - pixmaps/ndl64.xpm | 73 - pixmaps/ndl72.xpm | 81 - pixmaps/ndl80.xpm | 89 - pixmaps/ndl87.xpm | 96 - pixmaps/ndl95.xpm | 104 - pixmaps/nld108.xpm | 117 - pixmaps/nld116.xpm | 125 - pixmaps/nld129.xpm | 138 - pixmaps/nld21.xpm | 30 - pixmaps/nld25.xpm | 34 - pixmaps/nld29.xpm | 38 - pixmaps/nld33.xpm | 42 - pixmaps/nld37.xpm | 46 - pixmaps/nld40.xpm | 46 - pixmaps/nld45.xpm | 51 - pixmaps/nld49.xpm | 58 - pixmaps/nld54.xpm | 63 - pixmaps/nld58.xpm | 67 - pixmaps/nld64.xpm | 73 - pixmaps/nld72.xpm | 81 - pixmaps/nld80.xpm | 89 - pixmaps/nld87.xpm | 96 - pixmaps/nld95.xpm | 104 - pixmaps/nll108.xpm | 117 - pixmaps/nll116.xpm | 125 - pixmaps/nll129.xpm | 138 - pixmaps/nll21.xpm | 30 - pixmaps/nll25.xpm | 34 - pixmaps/nll29.xpm | 38 - pixmaps/nll33.xpm | 42 - pixmaps/nll37.xpm | 46 - pixmaps/nll40.xpm | 46 - pixmaps/nll45.xpm | 51 - pixmaps/nll49.xpm | 58 - pixmaps/nll54.xpm | 63 - pixmaps/nll58.xpm | 67 - pixmaps/nll64.xpm | 73 - pixmaps/nll72.xpm | 81 - pixmaps/nll80.xpm | 89 - pixmaps/nll87.xpm | 96 - pixmaps/nll95.xpm | 104 - pixmaps/odd33.xpm | 42 - pixmaps/odd49.xpm | 58 - pixmaps/odd72.xpm | 81 - pixmaps/odl33.xpm | 42 - pixmaps/odl49.xpm | 58 - pixmaps/odl72.xpm | 81 - pixmaps/old33.xpm | 42 - pixmaps/old49.xpm | 58 - pixmaps/old72.xpm | 81 - pixmaps/oll33.xpm | 42 - pixmaps/oll49.xpm | 58 - pixmaps/oll72.xpm | 81 - pixmaps/pdd108.xpm | 116 - pixmaps/pdd116.xpm | 124 - pixmaps/pdd129.xpm | 137 - pixmaps/pdd21.xpm | 29 - pixmaps/pdd25.xpm | 33 - pixmaps/pdd29.xpm | 37 - pixmaps/pdd33.xpm | 41 - pixmaps/pdd37.xpm | 45 - pixmaps/pdd40.xpm | 48 - pixmaps/pdd45.xpm | 53 - pixmaps/pdd49.xpm | 57 - pixmaps/pdd54.xpm | 62 - pixmaps/pdd58.xpm | 66 - pixmaps/pdd64.xpm | 72 - pixmaps/pdd72.xpm | 80 - pixmaps/pdd80.xpm | 88 - pixmaps/pdd87.xpm | 95 - pixmaps/pdd95.xpm | 103 - pixmaps/pdl108.xpm | 116 - pixmaps/pdl116.xpm | 124 - pixmaps/pdl129.xpm | 137 - pixmaps/pdl21.xpm | 29 - pixmaps/pdl25.xpm | 33 - pixmaps/pdl29.xpm | 37 - pixmaps/pdl33.xpm | 41 - pixmaps/pdl37.xpm | 45 - pixmaps/pdl40.xpm | 48 - pixmaps/pdl45.xpm | 53 - pixmaps/pdl49.xpm | 57 - pixmaps/pdl54.xpm | 62 - pixmaps/pdl58.xpm | 66 - pixmaps/pdl64.xpm | 72 - pixmaps/pdl72.xpm | 80 - pixmaps/pdl80.xpm | 88 - pixmaps/pdl87.xpm | 95 - pixmaps/pdl95.xpm | 103 - pixmaps/pixmaps.h | 1349 ------- pixmaps/pld108.xpm | 117 - pixmaps/pld116.xpm | 125 - pixmaps/pld129.xpm | 138 - pixmaps/pld21.xpm | 30 - pixmaps/pld25.xpm | 34 - pixmaps/pld29.xpm | 38 - pixmaps/pld33.xpm | 42 - pixmaps/pld37.xpm | 46 - pixmaps/pld40.xpm | 49 - pixmaps/pld45.xpm | 54 - pixmaps/pld49.xpm | 58 - pixmaps/pld54.xpm | 63 - pixmaps/pld58.xpm | 67 - pixmaps/pld64.xpm | 73 - pixmaps/pld72.xpm | 81 - pixmaps/pld80.xpm | 89 - pixmaps/pld87.xpm | 96 - pixmaps/pld95.xpm | 104 - pixmaps/pll108.xpm | 117 - pixmaps/pll116.xpm | 125 - pixmaps/pll129.xpm | 138 - pixmaps/pll21.xpm | 30 - pixmaps/pll25.xpm | 34 - pixmaps/pll29.xpm | 38 - pixmaps/pll33.xpm | 42 - pixmaps/pll37.xpm | 46 - pixmaps/pll40.xpm | 49 - pixmaps/pll45.xpm | 54 - pixmaps/pll49.xpm | 58 - pixmaps/pll54.xpm | 63 - pixmaps/pll58.xpm | 67 - pixmaps/pll64.xpm | 73 - pixmaps/pll72.xpm | 81 - pixmaps/pll80.xpm | 89 - pixmaps/pll87.xpm | 96 - pixmaps/pll95.xpm | 104 - pixmaps/qdd108.xpm | 117 - pixmaps/qdd116.xpm | 125 - pixmaps/qdd129.xpm | 138 - pixmaps/qdd21.xpm | 30 - pixmaps/qdd25.xpm | 31 - pixmaps/qdd29.xpm | 38 - pixmaps/qdd33.xpm | 42 - pixmaps/qdd37.xpm | 46 - pixmaps/qdd40.xpm | 49 - pixmaps/qdd45.xpm | 54 - pixmaps/qdd49.xpm | 58 - pixmaps/qdd54.xpm | 63 - pixmaps/qdd58.xpm | 67 - pixmaps/qdd64.xpm | 73 - pixmaps/qdd72.xpm | 78 - pixmaps/qdd80.xpm | 89 - pixmaps/qdd87.xpm | 96 - pixmaps/qdd95.xpm | 104 - pixmaps/qdl108.xpm | 117 - pixmaps/qdl116.xpm | 125 - pixmaps/qdl129.xpm | 138 - pixmaps/qdl21.xpm | 30 - pixmaps/qdl25.xpm | 31 - pixmaps/qdl29.xpm | 38 - pixmaps/qdl33.xpm | 42 - pixmaps/qdl37.xpm | 46 - pixmaps/qdl40.xpm | 49 - pixmaps/qdl45.xpm | 54 - pixmaps/qdl49.xpm | 58 - pixmaps/qdl54.xpm | 63 - pixmaps/qdl58.xpm | 67 - pixmaps/qdl64.xpm | 73 - pixmaps/qdl72.xpm | 78 - pixmaps/qdl80.xpm | 89 - pixmaps/qdl87.xpm | 96 - pixmaps/qdl95.xpm | 104 - pixmaps/qld108.xpm | 117 - pixmaps/qld116.xpm | 125 - pixmaps/qld129.xpm | 138 - pixmaps/qld21.xpm | 30 - pixmaps/qld25.xpm | 31 - pixmaps/qld29.xpm | 38 - pixmaps/qld33.xpm | 42 - pixmaps/qld37.xpm | 46 - pixmaps/qld40.xpm | 49 - pixmaps/qld45.xpm | 54 - pixmaps/qld49.xpm | 58 - pixmaps/qld54.xpm | 63 - pixmaps/qld58.xpm | 67 - pixmaps/qld64.xpm | 73 - pixmaps/qld72.xpm | 78 - pixmaps/qld80.xpm | 89 - pixmaps/qld87.xpm | 96 - pixmaps/qld95.xpm | 104 - pixmaps/qll108.xpm | 117 - pixmaps/qll116.xpm | 125 - pixmaps/qll129.xpm | 138 - pixmaps/qll21.xpm | 30 - pixmaps/qll25.xpm | 31 - pixmaps/qll29.xpm | 38 - pixmaps/qll33.xpm | 42 - pixmaps/qll37.xpm | 46 - pixmaps/qll40.xpm | 49 - pixmaps/qll45.xpm | 54 - pixmaps/qll49.xpm | 58 - pixmaps/qll54.xpm | 63 - pixmaps/qll58.xpm | 67 - pixmaps/qll64.xpm | 73 - pixmaps/qll72.xpm | 78 - pixmaps/qll80.xpm | 89 - pixmaps/qll87.xpm | 96 - pixmaps/qll95.xpm | 104 - pixmaps/rdd108.xpm | 117 - pixmaps/rdd116.xpm | 125 - pixmaps/rdd129.xpm | 138 - pixmaps/rdd21.xpm | 30 - pixmaps/rdd25.xpm | 34 - pixmaps/rdd29.xpm | 38 - pixmaps/rdd33.xpm | 42 - pixmaps/rdd37.xpm | 46 - pixmaps/rdd40.xpm | 46 - pixmaps/rdd45.xpm | 54 - pixmaps/rdd49.xpm | 58 - pixmaps/rdd54.xpm | 63 - pixmaps/rdd58.xpm | 67 - pixmaps/rdd64.xpm | 73 - pixmaps/rdd72.xpm | 81 - pixmaps/rdd80.xpm | 89 - pixmaps/rdd87.xpm | 96 - pixmaps/rdd95.xpm | 104 - pixmaps/rdl108.xpm | 117 - pixmaps/rdl116.xpm | 125 - pixmaps/rdl129.xpm | 138 - pixmaps/rdl21.xpm | 30 - pixmaps/rdl25.xpm | 34 - pixmaps/rdl29.xpm | 38 - pixmaps/rdl33.xpm | 42 - pixmaps/rdl37.xpm | 46 - pixmaps/rdl40.xpm | 46 - pixmaps/rdl45.xpm | 54 - pixmaps/rdl49.xpm | 58 - pixmaps/rdl54.xpm | 63 - pixmaps/rdl58.xpm | 67 - pixmaps/rdl64.xpm | 73 - pixmaps/rdl72.xpm | 81 - pixmaps/rdl80.xpm | 89 - pixmaps/rdl87.xpm | 96 - pixmaps/rdl95.xpm | 104 - pixmaps/rld108.xpm | 117 - pixmaps/rld116.xpm | 125 - pixmaps/rld129.xpm | 138 - pixmaps/rld21.xpm | 30 - pixmaps/rld25.xpm | 34 - pixmaps/rld29.xpm | 38 - pixmaps/rld33.xpm | 42 - pixmaps/rld37.xpm | 46 - pixmaps/rld40.xpm | 49 - pixmaps/rld45.xpm | 54 - pixmaps/rld49.xpm | 58 - pixmaps/rld54.xpm | 63 - pixmaps/rld58.xpm | 67 - pixmaps/rld64.xpm | 73 - pixmaps/rld72.xpm | 81 - pixmaps/rld80.xpm | 89 - pixmaps/rld87.xpm | 96 - pixmaps/rld95.xpm | 104 - pixmaps/rll108.xpm | 117 - pixmaps/rll116.xpm | 125 - pixmaps/rll129.xpm | 138 - pixmaps/rll21.xpm | 30 - pixmaps/rll25.xpm | 34 - pixmaps/rll29.xpm | 38 - pixmaps/rll33.xpm | 42 - pixmaps/rll37.xpm | 46 - pixmaps/rll40.xpm | 49 - pixmaps/rll45.xpm | 54 - pixmaps/rll49.xpm | 58 - pixmaps/rll54.xpm | 63 - pixmaps/rll58.xpm | 67 - pixmaps/rll64.xpm | 73 - pixmaps/rll72.xpm | 81 - pixmaps/rll80.xpm | 89 - pixmaps/rll87.xpm | 96 - pixmaps/rll95.xpm | 104 - pixmaps/sdd49.xpm | 58 - pixmaps/sdd72.xpm | 81 - pixmaps/sdl49.xpm | 58 - pixmaps/sdl72.xpm | 81 - pixmaps/sld49.xpm | 58 - pixmaps/sld72.xpm | 81 - pixmaps/sll49.xpm | 58 - pixmaps/sll72.xpm | 81 - pixmaps/test.c | 13 - pixmaps/udd49.xpm | 58 - pixmaps/udd72.xpm | 81 - pixmaps/udl49.xpm | 58 - pixmaps/udl72.xpm | 81 - pixmaps/uld49.xpm | 58 - pixmaps/uld72.xpm | 81 - pixmaps/ull49.xpm | 58 - pixmaps/ull72.xpm | 81 - pixmaps/vdd33.xpm | 42 - pixmaps/vdd49.xpm | 58 - pixmaps/vdd72.xpm | 81 - pixmaps/vdl33.xpm | 42 - pixmaps/vdl49.xpm | 58 - pixmaps/vdl72.xpm | 81 - pixmaps/vld33.xpm | 42 - pixmaps/vld49.xpm | 58 - pixmaps/vld72.xpm | 81 - pixmaps/vll33.xpm | 42 - pixmaps/vll49.xpm | 58 - pixmaps/vll72.xpm | 81 - pixmaps/wdd33.xpm | 42 - pixmaps/wdd49.xpm | 58 - pixmaps/wdd72.xpm | 81 - pixmaps/wdl33.xpm | 42 - pixmaps/wdl49.xpm | 58 - pixmaps/wdl72.xpm | 81 - pixmaps/wld33.xpm | 42 - pixmaps/wld49.xpm | 58 - pixmaps/wld72.xpm | 81 - pixmaps/wldd49.xpm | 58 - pixmaps/wldd72.xpm | 81 - pixmaps/wldl49.xpm | 58 - pixmaps/wldl72.xpm | 81 - pixmaps/wll33.xpm | 42 - pixmaps/wll49.xpm | 58 - pixmaps/wll72.xpm | 81 - pixmaps/wlld49.xpm | 58 - pixmaps/wlld72.xpm | 81 - pixmaps/wlll49.xpm | 58 - pixmaps/wlll72.xpm | 81 - pixmaps/wndd49.xpm | 58 - pixmaps/wndd72.xpm | 81 - pixmaps/wndl49.xpm | 58 - pixmaps/wndl72.xpm | 81 - pixmaps/wnld49.xpm | 58 - pixmaps/wnld72.xpm | 81 - pixmaps/wnll49.xpm | 58 - pixmaps/wnll72.xpm | 81 - pixmaps/wood_d.xpm | 239 -- pixmaps/wood_l.xpm | 192 - pixmaps/wpdd49.xpm | 58 - pixmaps/wpdd72.xpm | 81 - pixmaps/wpdl49.xpm | 58 - pixmaps/wpdl72.xpm | 81 - pixmaps/wpld49.xpm | 58 - pixmaps/wpld72.xpm | 81 - pixmaps/wpll49.xpm | 58 - pixmaps/wpll72.xpm | 81 - pixmaps/wsdd49.xpm | 58 - pixmaps/wsdd72.xpm | 81 - pixmaps/wsdl49.xpm | 58 - pixmaps/wsdl72.xpm | 81 - pixmaps/wsld49.xpm | 58 - pixmaps/wsld72.xpm | 81 - pixmaps/wsll49.xpm | 58 - pixmaps/wsll72.xpm | 81 - pixmaps/xqboard.xpm | 498 --- pixmaps/xqwood.xpm | 597 --- png/BlackAdvisor.png | Bin 0 -> 1928 bytes png/BlackArchbishop.png | Bin 0 -> 1856 bytes png/BlackBishop.png | Bin 0 -> 1478 bytes png/BlackCanon.png | Bin 0 -> 1302 bytes png/BlackChancellor.png | Bin 0 -> 2147 bytes png/BlackCobra.png | Bin 0 -> 1308 bytes png/BlackCommoner.png | Bin 0 -> 1954 bytes png/BlackCrownedBishop.png | Bin 0 -> 1537 bytes png/BlackCrownedRook.png | Bin 0 -> 1133 bytes png/BlackElephant.png | Bin 0 -> 2437 bytes png/BlackGold.png | Bin 0 -> 2198 bytes png/BlackGoldKnight.png | Bin 0 -> 2219 bytes png/BlackGoldLance.png | Bin 0 -> 2268 bytes png/BlackGoldPawn.png | Bin 0 -> 1936 bytes png/BlackGoldSilver.png | Bin 0 -> 2161 bytes png/BlackHawk.png | Bin 0 -> 2071 bytes png/BlackKing.png | Bin 0 -> 3255 bytes png/BlackKnight.png | Bin 0 -> 2715 bytes png/BlackLance.png | Bin 0 -> 810 bytes png/BlackMarshall.png | Bin 0 -> 2143 bytes png/BlackNightrider.png | Bin 0 -> 2930 bytes png/BlackPawn.png | Bin 0 -> 800 bytes png/BlackPrincess.png | Bin 0 -> 1845 bytes png/BlackQueen.png | Bin 0 -> 2165 bytes png/BlackRook.png | Bin 0 -> 885 bytes png/BlackUnicorn.png | Bin 0 -> 2035 bytes png/WhiteAdvisor.png | Bin 0 -> 2836 bytes png/WhiteArchbishop.png | Bin 0 -> 2452 bytes png/WhiteBishop.png | Bin 0 -> 2607 bytes png/WhiteCanon.png | Bin 0 -> 1914 bytes png/WhiteChancellor.png | Bin 0 -> 2490 bytes png/WhiteCobra.png | Bin 0 -> 2336 bytes png/WhiteCommoner.png | Bin 0 -> 2879 bytes png/WhiteCrownedBishop.png | Bin 0 -> 2626 bytes png/WhiteCrownedRook.png | Bin 0 -> 1492 bytes png/WhiteElephant.png | Bin 0 -> 3871 bytes png/WhiteGold.png | Bin 0 -> 3141 bytes png/WhiteGoldKnight.png | Bin 0 -> 3183 bytes png/WhiteGoldLance.png | Bin 0 -> 3240 bytes png/WhiteGoldPawn.png | Bin 0 -> 2909 bytes png/WhiteGoldSilver.png | Bin 0 -> 3166 bytes png/WhiteHawk.png | Bin 0 -> 3078 bytes png/WhiteKing.png | Bin 0 -> 3159 bytes png/WhiteKnight.png | Bin 0 -> 2926 bytes png/WhiteLance.png | Bin 0 -> 1611 bytes png/WhiteMarshall.png | Bin 0 -> 2876 bytes png/WhiteNightrider.png | Bin 0 -> 2926 bytes png/WhitePawn.png | Bin 0 -> 1609 bytes png/WhitePrincess.png | Bin 0 -> 3630 bytes png/WhiteQueen.png | Bin 0 -> 4397 bytes png/WhiteRook.png | Bin 0 -> 1072 bytes png/WhiteUnicorn.png | Bin 0 -> 3162 bytes png/hatch.png | Bin 0 -> 397 bytes png/marble_d.png | Bin 0 -> 40546 bytes png/marble_l.png | Bin 0 -> 47660 bytes png/wood_d.png | Bin 0 -> 34729 bytes png/wood_l.png | Bin 0 -> 30195 bytes png/xqboard.png | Bin 0 -> 4423 bytes png/xqwood.png | Bin 0 -> 359345 bytes po/POTFILES.in | 25 +- po/da.po | 3791 ++++++++++--------- po/de.po | 3806 ++++++++++--------- po/es.po | 3341 ++++++++-------- po/it.po | 3331 ++++++++-------- po/lng2po.sh | 2 +- po/ru.po | 3343 ++++++++-------- po/tr.po | 3017 ++++++++------- po/uk.po | 3831 ++++++++++--------- po/vi.po | 3120 ++++++++------- po/xboard.pot | 2609 +++++++------ po/zh_CN.po | 3332 ++++++++-------- po/zh_HK.po | 3316 ++++++++-------- po/zh_TW.po | 3302 ++++++++-------- shogipixmaps/bdd64.xpm | 73 - shogipixmaps/bdl64.xpm | 73 - shogipixmaps/bld64.xpm | 74 - shogipixmaps/bll64.xpm | 74 - shogipixmaps/fdd64.xpm | 73 - shogipixmaps/fdl64.xpm | 73 - shogipixmaps/fld64.xpm | 74 - shogipixmaps/fll64.xpm | 74 - shogipixmaps/kdd64.xpm | 73 - shogipixmaps/kdl64.xpm | 73 - shogipixmaps/kld64.xpm | 73 - shogipixmaps/kll64.xpm | 73 - shogipixmaps/ldd64.xpm | 73 - shogipixmaps/ldl64.xpm | 73 - shogipixmaps/lld64.xpm | 73 - shogipixmaps/lll64.xpm | 73 - shogipixmaps/ndd64.xpm | 73 - shogipixmaps/ndl64.xpm | 73 - shogipixmaps/nld64.xpm | 74 - shogipixmaps/nll64.xpm | 74 - shogipixmaps/pdd64.xpm | 73 - shogipixmaps/pdl64.xpm | 73 - shogipixmaps/pld64.xpm | 74 - shogipixmaps/pll64.xpm | 74 - shogipixmaps/qdd64.xpm | 73 - shogipixmaps/qdl64.xpm | 73 - shogipixmaps/qld64.xpm | 73 - shogipixmaps/qll64.xpm | 73 - shogipixmaps/rdd64.xpm | 73 - shogipixmaps/rdl64.xpm | 73 - shogipixmaps/rld64.xpm | 73 - shogipixmaps/rll64.xpm | 73 - shogipixmaps/wdd64.xpm | 73 - shogipixmaps/wdl64.xpm | 73 - shogipixmaps/wld64.xpm | 73 - shogipixmaps/wldd64.xpm | 73 - shogipixmaps/wldl64.xpm | 73 - shogipixmaps/wll64.xpm | 73 - shogipixmaps/wlld64.xpm | 73 - shogipixmaps/wlll64.xpm | 73 - shogipixmaps/wndd64.xpm | 73 - shogipixmaps/wndl64.xpm | 73 - shogipixmaps/wnld64.xpm | 73 - shogipixmaps/wnll64.xpm | 73 - shogipixmaps/wpdd64.xpm | 73 - shogipixmaps/wpdl64.xpm | 73 - shogipixmaps/wpld64.xpm | 73 - shogipixmaps/wpll64.xpm | 73 - shogipixmaps/wsdd64.xpm | 73 - shogipixmaps/wsdl64.xpm | 73 - shogipixmaps/wsld64.xpm | 73 - shogipixmaps/wsll64.xpm | 73 - svg/BlackAdvisor.svg | 70 + svg/BlackArchbishop.svg | 92 + svg/BlackBishop.svg | 78 + svg/BlackCanon.svg | 68 + svg/BlackChancellor.svg | 73 + svg/BlackCobra.svg | 78 + svg/BlackCommoner.svg | 71 + svg/BlackCrownedBishop.svg | 73 + svg/BlackCrownedRook.svg | 82 + svg/BlackElephant.svg | 98 + svg/BlackGold.svg | 63 + svg/BlackGoldKnight.svg | 63 + svg/BlackGoldLance.svg | 63 + svg/BlackGoldPawn.svg | 58 + svg/BlackGoldSilver.svg | 63 + svg/BlackHawk.svg | 98 + svg/BlackKing.svg | 83 + svg/BlackKnight.svg | 48 + svg/BlackLance.svg | 58 + svg/BlackMarshall.svg | 77 + svg/BlackNightrider.svg | 58 + svg/BlackPawn.svg | 38 + svg/BlackPrincess.svg | 98 + svg/BlackQueen.svg | 58 + svg/BlackRook.svg | 78 + svg/BlackUnicorn.svg | 63 + svg/WhiteAdvisor.svg | 65 + svg/WhiteArchbishop.svg | 86 + svg/WhiteBishop.svg | 72 + svg/WhiteCanon.svg | 62 + svg/WhiteChancellor.svg | 91 + svg/WhiteCobra.svg | 68 + svg/WhiteCommoner.svg | 63 + svg/WhiteCrownedBishop.svg | 68 + svg/WhiteCrownedRook.svg | 73 + svg/WhiteElephant.svg | 87 + svg/WhiteGold.svg | 63 + svg/WhiteGoldKnight.svg | 63 + svg/WhiteGoldLance.svg | 63 + svg/WhiteGoldPawn.svg | 58 + svg/WhiteGoldSilver.svg | 63 + svg/WhiteHawk.svg | 94 + svg/WhiteKing.svg | 73 + svg/WhiteKnight.svg | 58 + svg/WhiteLance.svg | 58 + svg/WhiteMarshall.svg | 80 + svg/WhiteNightrider.svg | 58 + svg/WhitePawn.svg | 38 + svg/WhitePrincess.svg | 98 + svg/WhiteQueen.svg | 110 + svg/WhiteRook.svg | 68 + svg/WhiteUnicorn.svg | 77 + svg/eo_Analyzing.svg | 115 + svg/eo_Black.svg | 84 + svg/eo_Clear.svg | 36 + svg/eo_Ponder.svg | 111 + svg/eo_Thinking.svg | 132 + svg/eo_Unknown.svg | 84 + svg/eo_White.svg | 84 + svg/icon_black.svg | 41 + svg/icon_white.svg | 41 + themes/Mono/BlackAdvisor.svg | 92 + themes/Mono/BlackArchbishop.svg | 111 + themes/Mono/BlackBishop.svg | 100 + themes/Mono/BlackCanon.svg | 92 + themes/Mono/BlackChancellor.svg | 90 + themes/Mono/BlackCobra.svg | 99 + themes/Mono/BlackCommoner.svg | 92 + themes/Mono/BlackCrownedBishop.svg | 95 + themes/Mono/BlackCrownedRook.svg | 106 + themes/Mono/BlackElephant.svg | 120 + themes/Mono/BlackGold.svg | 85 + themes/Mono/BlackGoldKnight.svg | 85 + themes/Mono/BlackGoldLance.svg | 85 + themes/Mono/BlackGoldPawn.svg | 80 + themes/Mono/BlackGoldSilver.svg | 85 + themes/Mono/BlackHawk.svg | 125 + themes/Mono/BlackKing.svg | 104 + themes/Mono/BlackKnight.svg | 66 + themes/Mono/BlackLance.svg | 81 + themes/Mono/BlackMarshall.svg | 99 + themes/Mono/BlackNightrider.svg | 76 + themes/Mono/BlackPawn.svg | 65 + themes/Mono/BlackPrincess.svg | 120 + themes/Mono/BlackQueen.svg | 80 + themes/Mono/BlackRook.svg | 106 + themes/Mono/BlackUnicorn.svg | 81 + themes/Mono/WhiteAdvisor.svg | 89 + themes/Mono/WhiteArchbishop.svg | 112 + themes/Mono/WhiteBishop.svg | 97 + themes/Mono/WhiteCanon.svg | 86 + themes/Mono/WhiteChancellor.svg | 105 + themes/Mono/WhiteCobra.svg | 92 + themes/Mono/WhiteCommoner.svg | 87 + themes/Mono/WhiteCrownedBishop.svg | 92 + themes/Mono/WhiteCrownedRook.svg | 97 + themes/Mono/WhiteElephant.svg | 107 + themes/Mono/WhiteGold.svg | 87 + themes/Mono/WhiteGoldKnight.svg | 80 + themes/Mono/WhiteGoldLance.svg | 87 + themes/Mono/WhiteGoldPawn.svg | 82 + themes/Mono/WhiteGoldSilver.svg | 87 + themes/Mono/WhiteHawk.svg | 120 + themes/Mono/WhiteKing.svg | 97 + themes/Mono/WhiteKnight.svg | 75 + themes/Mono/WhiteLance.svg | 75 + themes/Mono/WhiteMarshall.svg | 106 + themes/Mono/WhiteNightrider.svg | 72 + themes/Mono/WhitePawn.svg | 62 + themes/Mono/WhitePrincess.svg | 122 + themes/Mono/WhiteQueen.svg | 134 + themes/Mono/WhiteRook.svg | 92 + themes/Mono/WhiteUnicorn.svg | 85 + themes/Mono/eo_Analyzing.svg | 71 + themes/Mono/eo_Black.svg | 64 + themes/Mono/eo_Clear.svg | 36 + themes/Mono/eo_Ponder.svg | 71 + themes/Mono/eo_Thinking.svg | 185 + themes/Mono/eo_Unknown.svg | 36 + themes/Mono/eo_White.svg | 36 + themes/Mono/icon_black.svg | 41 + themes/Mono/icon_white.svg | 41 + themes/Mono/shogi_bishop.svg | 119 + themes/Mono/shogi_bishop_promoted.svg | 83 + themes/Mono/shogi_gold.svg | 153 + themes/Mono/shogi_king.svg | 125 + themes/Mono/shogi_knight.svg | 138 + themes/Mono/shogi_knight_promoted.svg | 65 + themes/Mono/shogi_lance.svg | 134 + themes/Mono/shogi_lance_promoted.svg | 65 + themes/Mono/shogi_pawn.svg | 108 + themes/Mono/shogi_pawn_promoted.svg | 54 + themes/Mono/shogi_rook.svg | 137 + themes/Mono/shogi_rook_promoted.svg | 112 + themes/Mono/shogi_silver.svg | 163 + themes/Mono/shogi_silver_promoted.svg | 73 + themes/shogi/BlackAdvisor.svg | 187 + themes/shogi/BlackBishop.svg | 143 + themes/shogi/BlackCrownedBishop.svg | 107 + themes/shogi/BlackCrownedRook.svg | 136 + themes/shogi/BlackGold.svg | 177 + themes/shogi/BlackGoldKnight.svg | 89 + themes/shogi/BlackGoldLance.svg | 89 + themes/shogi/BlackGoldPawn.svg | 78 + themes/shogi/BlackGoldSilver.svg | 97 + themes/shogi/BlackKing.svg | 149 + themes/shogi/BlackKnight.svg | 162 + themes/shogi/BlackLance.svg | 158 + themes/shogi/BlackPawn.svg | 132 + themes/shogi/BlackRook.svg | 161 + themes/shogi/WhiteAdvisor.svg | 163 + themes/shogi/WhiteBishop.svg | 119 + themes/shogi/WhiteCrownedBishop.svg | 83 + themes/shogi/WhiteCrownedRook.svg | 112 + themes/shogi/WhiteGold.svg | 153 + themes/shogi/WhiteGoldKnight.svg | 65 + themes/shogi/WhiteGoldLance.svg | 65 + themes/shogi/WhiteGoldPawn.svg | 54 + themes/shogi/WhiteGoldSilver.svg | 73 + themes/shogi/WhiteKing.svg | 125 + themes/shogi/WhiteKnight.svg | 138 + themes/shogi/WhiteLance.svg | 134 + themes/shogi/WhitePawn.svg | 108 + themes/shogi/WhiteRook.svg | 137 + themes/xiangqi/.DS_Store | Bin 0 -> 6148 bytes themes/xiangqi/BlackAdvisor.svg | 86 + themes/xiangqi/BlackCanon.svg | 81 + themes/xiangqi/BlackElephant.svg | 80 + themes/xiangqi/BlackGold.svg | 80 + themes/xiangqi/BlackKnight.svg | 81 + themes/xiangqi/BlackPawn.svg | 83 + themes/xiangqi/BlackRook.svg | 80 + themes/xiangqi/WhiteAdvisor.svg | 90 + themes/xiangqi/WhiteCanon.svg | 85 + themes/xiangqi/WhiteElephant.svg | 85 + themes/xiangqi/WhiteGold.svg | 85 + themes/xiangqi/WhiteKnight.svg | 85 + themes/xiangqi/WhitePawn.svg | 85 + themes/xiangqi/WhiteRook.svg | 86 + uci.c | 2 +- usounds.c | 174 + usystem.c | 792 ++++ usystem.h | 75 + winboard/config.h | 6 +- winboard/defaults.h | 2 +- winboard/help.c | 2 +- winboard/help/html/24.htm | 2 +- winboard/jaws.c | 2 +- winboard/language.txt | 45 +- winboard/language/deutsch.lng | 2 +- winboard/language/italiano.lng | 2 +- winboard/language/nederlands.lng | 46 +- winboard/language/romanian.lng | 2 +- winboard/language/russian.lng | 2 +- winboard/language/spanish.lng | 2 +- winboard/language/vietnamese.lng | 2 +- winboard/resource.h | 7 +- winboard/wchat.c | 2 +- winboard/wclipbrd.c | 2 +- winboard/wclipbrd.h | 2 +- winboard/wedittags.c | 2 +- winboard/wengineoutput.c | 4 +- winboard/wevalgraph.c | 4 +- winboard/wgamelist.c | 23 +- winboard/winboard.c | 259 +- winboard/winboard.h | 6 +- winboard/winboard.rc | 28 +- winboard/wlayout.c | 12 +- winboard/woptions.c | 46 +- winboard/woptions.h | 2 +- winboard/wsettings.c | 250 +- winboard/wsockerr.c | 2 +- winboard/wsockerr.h | 2 +- xaw/.dirstamp | 0 xaw/xboard.c | 2600 +++++++++++++ xaw/xboard.h | 176 + xaw/xengineoutput.c | 285 ++ xaw/xgamelist.c | 117 + xaw/xgamelist.h | 31 + xaw/xhistory.c | 111 + xaw/xhistory.h | 30 + xaw/xoptions.c | 1365 +++++++ xboard-config.desktop | 52 + xboard.c | 8845 ------------------------------------------- xboard.conf.in | 19 +- xboard.h | 177 - xboard.texi | 289 +- xboard.xml | 6 + xboard2.h | 9 + xedittags.c | 128 - xedittags.h | 31 - xengineoutput.c | 617 --- xevalgraph.c | 443 --- xevalgraph.h | 29 - xgamelist.c | 930 ----- xgamelist.h | 35 - xhistory.c | 168 - xhistory.h | 32 - xoptions.c | 1912 ---------- zic2xpm.c | 2 +- zic2xpm.man | 2 +- zippy.c | 12 +- zippy.h | 2 +- 1574 files changed, 63046 insertions(+), 113777 deletions(-) delete mode 100644 bitmaps/README.bitmaps delete mode 100644 bitmaps/a33o.bm delete mode 100644 bitmaps/a33s.bm delete mode 100644 bitmaps/a37o.bm delete mode 100644 bitmaps/a37s.bm delete mode 100644 bitmaps/a40o.bm delete mode 100644 bitmaps/a40s.bm delete mode 100644 bitmaps/a45o.bm delete mode 100644 bitmaps/a45s.bm delete mode 100644 bitmaps/a49o.bm delete mode 100644 bitmaps/a49s.bm delete mode 100644 bitmaps/a54o.bm delete mode 100644 bitmaps/a54s.bm delete mode 100644 bitmaps/a58o.bm delete mode 100644 bitmaps/a58s.bm delete mode 100644 bitmaps/a64o.bm delete mode 100644 bitmaps/a64s.bm delete mode 100644 bitmaps/a72o.bm delete mode 100644 bitmaps/a72s.bm delete mode 100644 bitmaps/as45o.bm delete mode 100644 bitmaps/as45s.bm delete mode 100644 bitmaps/b108o.bm delete mode 100644 bitmaps/b108s.bm delete mode 100644 bitmaps/b116o.bm delete mode 100644 bitmaps/b116s.bm delete mode 100644 bitmaps/b129o.bm delete mode 100644 bitmaps/b129s.bm delete mode 100644 bitmaps/b21o.bm delete mode 100644 bitmaps/b21s.bm delete mode 100644 bitmaps/b25o.bm delete mode 100644 bitmaps/b25s.bm delete mode 100644 bitmaps/b29o.bm delete mode 100644 bitmaps/b29s.bm delete mode 100644 bitmaps/b33o.bm delete mode 100644 bitmaps/b33s.bm delete mode 100644 bitmaps/b37o.bm delete mode 100644 bitmaps/b37s.bm delete mode 100644 bitmaps/b40o.bm delete mode 100644 bitmaps/b40s.bm delete mode 100644 bitmaps/b45o.bm delete mode 100644 bitmaps/b45s.bm delete mode 100644 bitmaps/b49o.bm delete mode 100644 bitmaps/b49s.bm delete mode 100644 bitmaps/b54o.bm delete mode 100644 bitmaps/b54s.bm delete mode 100644 bitmaps/b58o.bm delete mode 100644 bitmaps/b58s.bm delete mode 100644 bitmaps/b64o.bm delete mode 100644 bitmaps/b64s.bm delete mode 100644 bitmaps/b72o.bm delete mode 100644 bitmaps/b72s.bm delete mode 100644 bitmaps/b80o.bm delete mode 100644 bitmaps/b80s.bm delete mode 100644 bitmaps/b87o.bm delete mode 100644 bitmaps/b87s.bm delete mode 100644 bitmaps/b95o.bm delete mode 100644 bitmaps/b95s.bm delete mode 100644 bitmaps/bitmaps.h delete mode 100644 bitmaps/c33o.bm delete mode 100644 bitmaps/c33s.bm delete mode 100644 bitmaps/c37o.bm delete mode 100644 bitmaps/c37s.bm delete mode 100644 bitmaps/c40o.bm delete mode 100644 bitmaps/c40s.bm delete mode 100644 bitmaps/c45o.bm delete mode 100644 bitmaps/c45s.bm delete mode 100644 bitmaps/c49o.bm delete mode 100644 bitmaps/c49s.bm delete mode 100644 bitmaps/c54o.bm delete mode 100644 bitmaps/c54s.bm delete mode 100644 bitmaps/c58o.bm delete mode 100644 bitmaps/c58s.bm delete mode 100644 bitmaps/c64o.bm delete mode 100644 bitmaps/c64s.bm delete mode 100644 bitmaps/c72o.bm delete mode 100644 bitmaps/c72s.bm delete mode 100644 bitmaps/d33o.bm delete mode 100644 bitmaps/d33s.bm delete mode 100644 bitmaps/d37o.bm delete mode 100644 bitmaps/d37s.bm delete mode 100644 bitmaps/d40o.bm delete mode 100644 bitmaps/d40s.bm delete mode 100644 bitmaps/d45o.bm delete mode 100644 bitmaps/d45s.bm delete mode 100644 bitmaps/d49o.bm delete mode 100644 bitmaps/d49s.bm delete mode 100644 bitmaps/d54o.bm delete mode 100644 bitmaps/d54s.bm delete mode 100644 bitmaps/d58o.bm delete mode 100644 bitmaps/d58s.bm delete mode 100644 bitmaps/d64o.bm delete mode 100644 bitmaps/d64s.bm delete mode 100644 bitmaps/d72o.bm delete mode 100644 bitmaps/d72s.bm delete mode 100644 bitmaps/dopkbm.sh delete mode 100644 bitmaps/dopkbm1.sh delete mode 100644 bitmaps/e33o.bm delete mode 100644 bitmaps/e33s.bm delete mode 100644 bitmaps/e49o.bm delete mode 100644 bitmaps/e49s.bm delete mode 100644 bitmaps/e72o.bm delete mode 100644 bitmaps/e72s.bm delete mode 100644 bitmaps/f33o.bm delete mode 100644 bitmaps/f33s.bm delete mode 100644 bitmaps/f49o.bm delete mode 100644 bitmaps/f49s.bm delete mode 100644 bitmaps/f72o.bm delete mode 100644 bitmaps/f72s.bm delete mode 100644 bitmaps/g33o.bm delete mode 100644 bitmaps/g33s.bm delete mode 100644 bitmaps/g49o.bm delete mode 100644 bitmaps/g49s.bm delete mode 100644 bitmaps/g72o.bm delete mode 100644 bitmaps/g72s.bm delete mode 100644 bitmaps/h33o.bm delete mode 100644 bitmaps/h33s.bm delete mode 100644 bitmaps/h49o.bm delete mode 100644 bitmaps/h49s.bm delete mode 100644 bitmaps/h72o.bm delete mode 100644 bitmaps/h72s.bm delete mode 100644 bitmaps/i33o.bm delete mode 100644 bitmaps/i33s.bm delete mode 100644 bitmaps/i49o.bm delete mode 100644 bitmaps/i49s.bm delete mode 100644 bitmaps/i72o.bm delete mode 100644 bitmaps/i72s.bm delete mode 100644 bitmaps/icon_b.bm delete mode 100644 bitmaps/icon_outline.bm delete mode 100644 bitmaps/j33o.bm delete mode 100644 bitmaps/j33s.bm delete mode 100644 bitmaps/j49o.bm delete mode 100644 bitmaps/j49s.bm delete mode 100644 bitmaps/j72o.bm delete mode 100644 bitmaps/j72s.bm delete mode 100644 bitmaps/k108o.bm delete mode 100644 bitmaps/k108s.bm delete mode 100644 bitmaps/k116o.bm delete mode 100644 bitmaps/k116s.bm delete mode 100644 bitmaps/k129o.bm delete mode 100644 bitmaps/k129s.bm delete mode 100644 bitmaps/k21o.bm delete mode 100644 bitmaps/k21s.bm delete mode 100644 bitmaps/k25o.bm delete mode 100644 bitmaps/k25s.bm delete mode 100644 bitmaps/k29o.bm delete mode 100644 bitmaps/k29s.bm delete mode 100644 bitmaps/k33o.bm delete mode 100644 bitmaps/k33s.bm delete mode 100644 bitmaps/k37o.bm delete mode 100644 bitmaps/k37s.bm delete mode 100644 bitmaps/k40o.bm delete mode 100644 bitmaps/k40s.bm delete mode 100644 bitmaps/k45o.bm delete mode 100644 bitmaps/k45s.bm delete mode 100644 bitmaps/k49o.bm delete mode 100644 bitmaps/k49s.bm delete mode 100644 bitmaps/k54o.bm delete mode 100644 bitmaps/k54s.bm delete mode 100644 bitmaps/k58o.bm delete mode 100644 bitmaps/k58s.bm delete mode 100644 bitmaps/k64o.bm delete mode 100644 bitmaps/k64s.bm delete mode 100644 bitmaps/k72o.bm delete mode 100644 bitmaps/k72s.bm delete mode 100644 bitmaps/k80o.bm delete mode 100644 bitmaps/k80s.bm delete mode 100644 bitmaps/k87o.bm delete mode 100644 bitmaps/k87s.bm delete mode 100644 bitmaps/k95o.bm delete mode 100644 bitmaps/k95s.bm delete mode 100644 bitmaps/l33o.bm delete mode 100644 bitmaps/l33s.bm delete mode 100644 bitmaps/l37o.bm delete mode 100644 bitmaps/l37s.bm delete mode 100644 bitmaps/l40o.bm delete mode 100644 bitmaps/l40s.bm delete mode 100644 bitmaps/l45o.bm delete mode 100644 bitmaps/l45s.bm delete mode 100644 bitmaps/l49o.bm delete mode 100644 bitmaps/l49s.bm delete mode 100644 bitmaps/l54o.bm delete mode 100644 bitmaps/l54s.bm delete mode 100644 bitmaps/l58o.bm delete mode 100644 bitmaps/l58s.bm delete mode 100644 bitmaps/l64o.bm delete mode 100644 bitmaps/l64s.bm delete mode 100644 bitmaps/l72o.bm delete mode 100644 bitmaps/l72s.bm delete mode 100644 bitmaps/m33o.bm delete mode 100644 bitmaps/m33s.bm delete mode 100644 bitmaps/m49o.bm delete mode 100644 bitmaps/m49s.bm delete mode 100644 bitmaps/m72o.bm delete mode 100644 bitmaps/m72s.bm delete mode 100644 bitmaps/n108o.bm delete mode 100644 bitmaps/n108s.bm delete mode 100644 bitmaps/n116o.bm delete mode 100644 bitmaps/n116s.bm delete mode 100644 bitmaps/n129o.bm delete mode 100644 bitmaps/n129s.bm delete mode 100644 bitmaps/n21o.bm delete mode 100644 bitmaps/n21s.bm delete mode 100644 bitmaps/n25o.bm delete mode 100644 bitmaps/n25s.bm delete mode 100644 bitmaps/n29o.bm delete mode 100644 bitmaps/n29s.bm delete mode 100644 bitmaps/n33o.bm delete mode 100644 bitmaps/n33s.bm delete mode 100644 bitmaps/n37o.bm delete mode 100644 bitmaps/n37s.bm delete mode 100644 bitmaps/n40o.bm delete mode 100644 bitmaps/n40s.bm delete mode 100644 bitmaps/n45o.bm delete mode 100644 bitmaps/n45s.bm delete mode 100644 bitmaps/n49o.bm delete mode 100644 bitmaps/n49s.bm delete mode 100644 bitmaps/n54o.bm delete mode 100644 bitmaps/n54s.bm delete mode 100644 bitmaps/n58o.bm delete mode 100644 bitmaps/n58s.bm delete mode 100644 bitmaps/n64o.bm delete mode 100644 bitmaps/n64s.bm delete mode 100644 bitmaps/n72o.bm delete mode 100644 bitmaps/n72s.bm delete mode 100644 bitmaps/n80o.bm delete mode 100644 bitmaps/n80s.bm delete mode 100644 bitmaps/n87o.bm delete mode 100644 bitmaps/n87s.bm delete mode 100644 bitmaps/n95o.bm delete mode 100644 bitmaps/n95s.bm delete mode 100644 bitmaps/o33o.bm delete mode 100644 bitmaps/o33s.bm delete mode 100644 bitmaps/o49o.bm delete mode 100644 bitmaps/o49s.bm delete mode 100644 bitmaps/o72o.bm delete mode 100644 bitmaps/o72s.bm delete mode 100644 bitmaps/p108o.bm delete mode 100644 bitmaps/p108s.bm delete mode 100644 bitmaps/p116o.bm delete mode 100644 bitmaps/p116s.bm delete mode 100644 bitmaps/p129o.bm delete mode 100644 bitmaps/p129s.bm delete mode 100644 bitmaps/p21o.bm delete mode 100644 bitmaps/p21s.bm delete mode 100644 bitmaps/p25o.bm delete mode 100644 bitmaps/p25s.bm delete mode 100644 bitmaps/p29o.bm delete mode 100644 bitmaps/p29s.bm delete mode 100644 bitmaps/p33o.bm delete mode 100644 bitmaps/p33s.bm delete mode 100644 bitmaps/p37o.bm delete mode 100644 bitmaps/p37s.bm delete mode 100644 bitmaps/p40o.bm delete mode 100644 bitmaps/p40s.bm delete mode 100644 bitmaps/p45o.bm delete mode 100644 bitmaps/p45s.bm delete mode 100644 bitmaps/p49o.bm delete mode 100644 bitmaps/p49s.bm delete mode 100644 bitmaps/p54o.bm delete mode 100644 bitmaps/p54s.bm delete mode 100644 bitmaps/p58o.bm delete mode 100644 bitmaps/p58s.bm delete mode 100644 bitmaps/p64o.bm delete mode 100644 bitmaps/p64s.bm delete mode 100644 bitmaps/p72o.bm delete mode 100644 bitmaps/p72s.bm delete mode 100644 bitmaps/p80o.bm delete mode 100644 bitmaps/p80s.bm delete mode 100644 bitmaps/p87o.bm delete mode 100644 bitmaps/p87s.bm delete mode 100644 bitmaps/p95o.bm delete mode 100644 bitmaps/p95s.bm delete mode 100644 bitmaps/q108o.bm delete mode 100644 bitmaps/q108s.bm delete mode 100644 bitmaps/q116o.bm delete mode 100644 bitmaps/q116s.bm delete mode 100644 bitmaps/q129o.bm delete mode 100644 bitmaps/q129s.bm delete mode 100644 bitmaps/q21o.bm delete mode 100644 bitmaps/q21s.bm delete mode 100644 bitmaps/q25o.bm delete mode 100644 bitmaps/q25s.bm delete mode 100644 bitmaps/q29o.bm delete mode 100644 bitmaps/q29s.bm delete mode 100644 bitmaps/q33o.bm delete mode 100644 bitmaps/q33s.bm delete mode 100644 bitmaps/q37o.bm delete mode 100644 bitmaps/q37s.bm delete mode 100644 bitmaps/q40o.bm delete mode 100644 bitmaps/q40s.bm delete mode 100644 bitmaps/q45o.bm delete mode 100644 bitmaps/q45s.bm delete mode 100644 bitmaps/q49o.bm delete mode 100644 bitmaps/q49s.bm delete mode 100644 bitmaps/q54o.bm delete mode 100644 bitmaps/q54s.bm delete mode 100644 bitmaps/q58o.bm delete mode 100644 bitmaps/q58s.bm delete mode 100644 bitmaps/q64o.bm delete mode 100644 bitmaps/q64s.bm delete mode 100644 bitmaps/q72o.bm delete mode 100644 bitmaps/q72s.bm delete mode 100644 bitmaps/q80o.bm delete mode 100644 bitmaps/q80s.bm delete mode 100644 bitmaps/q87o.bm delete mode 100644 bitmaps/q87s.bm delete mode 100644 bitmaps/q95o.bm delete mode 100644 bitmaps/q95s.bm delete mode 100644 bitmaps/r108o.bm delete mode 100644 bitmaps/r108s.bm delete mode 100644 bitmaps/r116o.bm delete mode 100644 bitmaps/r116s.bm delete mode 100644 bitmaps/r129o.bm delete mode 100644 bitmaps/r129s.bm delete mode 100644 bitmaps/r21o.bm delete mode 100644 bitmaps/r21s.bm delete mode 100644 bitmaps/r25o.bm delete mode 100644 bitmaps/r25s.bm delete mode 100644 bitmaps/r29o.bm delete mode 100644 bitmaps/r29s.bm delete mode 100644 bitmaps/r33o.bm delete mode 100644 bitmaps/r33s.bm delete mode 100644 bitmaps/r37o.bm delete mode 100644 bitmaps/r37s.bm delete mode 100644 bitmaps/r40o.bm delete mode 100644 bitmaps/r40s.bm delete mode 100644 bitmaps/r45o.bm delete mode 100644 bitmaps/r45s.bm delete mode 100644 bitmaps/r49o.bm delete mode 100644 bitmaps/r49s.bm delete mode 100644 bitmaps/r54o.bm delete mode 100644 bitmaps/r54s.bm delete mode 100644 bitmaps/r58o.bm delete mode 100644 bitmaps/r58s.bm delete mode 100644 bitmaps/r64o.bm delete mode 100644 bitmaps/r64s.bm delete mode 100644 bitmaps/r72o.bm delete mode 100644 bitmaps/r72s.bm delete mode 100644 bitmaps/r80o.bm delete mode 100644 bitmaps/r80s.bm delete mode 100644 bitmaps/r87o.bm delete mode 100644 bitmaps/r87s.bm delete mode 100644 bitmaps/r95o.bm delete mode 100644 bitmaps/r95s.bm delete mode 100644 bitmaps/s49o.bm delete mode 100644 bitmaps/s49s.bm delete mode 100644 bitmaps/s72o.bm delete mode 100644 bitmaps/s72s.bm delete mode 100644 bitmaps/test.c delete mode 100644 bitmaps/u49o.bm delete mode 100644 bitmaps/u49s.bm delete mode 100644 bitmaps/u72o.bm delete mode 100644 bitmaps/u72s.bm delete mode 100644 bitmaps/v33o.bm delete mode 100644 bitmaps/v33s.bm delete mode 100644 bitmaps/v49o.bm delete mode 100644 bitmaps/v49s.bm delete mode 100644 bitmaps/v72o.bm delete mode 100644 bitmaps/v72s.bm delete mode 100644 bitmaps/w33o.bm delete mode 100644 bitmaps/w33s.bm delete mode 100644 bitmaps/w49o.bm delete mode 100644 bitmaps/w49s.bm delete mode 100644 bitmaps/w72o.bm delete mode 100644 bitmaps/w72s.bm delete mode 100644 bitmaps/wl49o.bm delete mode 100644 bitmaps/wl49s.bm delete mode 100644 bitmaps/wl72o.bm delete mode 100644 bitmaps/wl72s.bm delete mode 100644 bitmaps/wn49o.bm delete mode 100644 bitmaps/wn49s.bm delete mode 100644 bitmaps/wn72o.bm delete mode 100644 bitmaps/wn72s.bm delete mode 100644 bitmaps/wp49o.bm delete mode 100644 bitmaps/wp49s.bm delete mode 100644 bitmaps/wp72o.bm delete mode 100644 bitmaps/wp72s.bm delete mode 100644 bitmaps/ws49o.bm delete mode 100644 bitmaps/ws49s.bm delete mode 100644 bitmaps/ws72o.bm delete mode 100644 bitmaps/ws72s.bm create mode 100644 board.c create mode 100644 board.h create mode 100644 dialogs.c create mode 100644 dialogs.h create mode 100644 doc-maint/coding-standards.org create mode 100755 doc-maint/gendocs.sh create mode 100644 doc-maint/make-xboard-release create mode 100644 doc-maint/release.org create mode 100644 doc-maint/web-pages.org create mode 100644 draw.c create mode 100644 draw.h delete mode 100644 filebrowser/README delete mode 100644 filebrowser/dir.c delete mode 100644 filebrowser/draw.c delete mode 100644 filebrowser/path.c delete mode 100644 filebrowser/selfile.c delete mode 100644 filebrowser/selfile.h delete mode 100644 filebrowser/xstat.h create mode 100644 gtk/.dirstamp create mode 100644 gtk/xboard.c create mode 100644 gtk/xboard.h create mode 100644 gtk/xengineoutput.c create mode 100644 gtk/xoptions.c create mode 100644 gtk/xtimer.c create mode 100644 menus.c create mode 100644 menus.h create mode 100644 nengineoutput.c create mode 100644 nevalgraph.c create mode 100644 ngamelist.c create mode 100644 nhistory.c delete mode 100644 pixmaps/README.pixmaps delete mode 100644 pixmaps/add33.xpm delete mode 100644 pixmaps/add37.xpm delete mode 100644 pixmaps/add40.xpm delete mode 100644 pixmaps/add45.xpm delete mode 100644 pixmaps/add49.xpm delete mode 100644 pixmaps/add54.xpm delete mode 100644 pixmaps/add58.xpm delete mode 100644 pixmaps/add64.xpm delete mode 100644 pixmaps/add72.xpm delete mode 100644 pixmaps/adl33.xpm delete mode 100644 pixmaps/adl37.xpm delete mode 100644 pixmaps/adl40.xpm delete mode 100644 pixmaps/adl45.xpm delete mode 100644 pixmaps/adl49.xpm delete mode 100644 pixmaps/adl54.xpm delete mode 100644 pixmaps/adl58.xpm delete mode 100644 pixmaps/adl64.xpm delete mode 100644 pixmaps/adl72.xpm delete mode 100644 pixmaps/ald33.xpm delete mode 100644 pixmaps/ald37.xpm delete mode 100644 pixmaps/ald40.xpm delete mode 100644 pixmaps/ald45.xpm delete mode 100644 pixmaps/ald49.xpm delete mode 100644 pixmaps/ald54.xpm delete mode 100644 pixmaps/ald58.xpm delete mode 100644 pixmaps/ald64.xpm delete mode 100644 pixmaps/ald72.xpm delete mode 100644 pixmaps/all33.xpm delete mode 100644 pixmaps/all37.xpm delete mode 100644 pixmaps/all40.xpm delete mode 100644 pixmaps/all45.xpm delete mode 100644 pixmaps/all49.xpm delete mode 100644 pixmaps/all54.xpm delete mode 100644 pixmaps/all58.xpm delete mode 100644 pixmaps/all64.xpm delete mode 100644 pixmaps/all72.xpm delete mode 100644 pixmaps/asdd33.xpm delete mode 100644 pixmaps/asdd49.xpm delete mode 100644 pixmaps/asdd72.xpm delete mode 100644 pixmaps/asdl33.xpm delete mode 100644 pixmaps/asdl49.xpm delete mode 100644 pixmaps/asdl72.xpm delete mode 100644 pixmaps/asld33.xpm delete mode 100644 pixmaps/asld49.xpm delete mode 100644 pixmaps/asld72.xpm delete mode 100644 pixmaps/asll33.xpm delete mode 100644 pixmaps/asll49.xpm delete mode 100644 pixmaps/asll72.xpm delete mode 100644 pixmaps/bdd108.xpm delete mode 100644 pixmaps/bdd116.xpm delete mode 100644 pixmaps/bdd129.xpm delete mode 100644 pixmaps/bdd21.xpm delete mode 100644 pixmaps/bdd25.xpm delete mode 100644 pixmaps/bdd29.xpm delete mode 100644 pixmaps/bdd33.xpm delete mode 100644 pixmaps/bdd37.xpm delete mode 100644 pixmaps/bdd40.xpm delete mode 100644 pixmaps/bdd45.xpm delete mode 100644 pixmaps/bdd49.xpm delete mode 100644 pixmaps/bdd54.xpm delete mode 100644 pixmaps/bdd58.xpm delete mode 100644 pixmaps/bdd64.xpm delete mode 100644 pixmaps/bdd72.xpm delete mode 100644 pixmaps/bdd80.xpm delete mode 100644 pixmaps/bdd87.xpm delete mode 100644 pixmaps/bdd95.xpm delete mode 100644 pixmaps/bdl108.xpm delete mode 100644 pixmaps/bdl116.xpm delete mode 100644 pixmaps/bdl129.xpm delete mode 100644 pixmaps/bdl21.xpm delete mode 100644 pixmaps/bdl25.xpm delete mode 100644 pixmaps/bdl29.xpm delete mode 100644 pixmaps/bdl33.xpm delete mode 100644 pixmaps/bdl37.xpm delete mode 100644 pixmaps/bdl40.xpm delete mode 100644 pixmaps/bdl45.xpm delete mode 100644 pixmaps/bdl49.xpm delete mode 100644 pixmaps/bdl54.xpm delete mode 100644 pixmaps/bdl58.xpm delete mode 100644 pixmaps/bdl64.xpm delete mode 100644 pixmaps/bdl72.xpm delete mode 100644 pixmaps/bdl80.xpm delete mode 100644 pixmaps/bdl87.xpm delete mode 100644 pixmaps/bdl95.xpm delete mode 100644 pixmaps/bld108.xpm delete mode 100644 pixmaps/bld116.xpm delete mode 100644 pixmaps/bld129.xpm delete mode 100644 pixmaps/bld21.xpm delete mode 100644 pixmaps/bld25.xpm delete mode 100644 pixmaps/bld29.xpm delete mode 100644 pixmaps/bld33.xpm delete mode 100644 pixmaps/bld37.xpm delete mode 100644 pixmaps/bld40.xpm delete mode 100644 pixmaps/bld45.xpm delete mode 100644 pixmaps/bld49.xpm delete mode 100644 pixmaps/bld54.xpm delete mode 100644 pixmaps/bld58.xpm delete mode 100644 pixmaps/bld64.xpm delete mode 100644 pixmaps/bld72.xpm delete mode 100644 pixmaps/bld80.xpm delete mode 100644 pixmaps/bld87.xpm delete mode 100644 pixmaps/bld95.xpm delete mode 100644 pixmaps/bll108.xpm delete mode 100644 pixmaps/bll116.xpm delete mode 100644 pixmaps/bll129.xpm delete mode 100644 pixmaps/bll21.xpm delete mode 100644 pixmaps/bll25.xpm delete mode 100644 pixmaps/bll29.xpm delete mode 100644 pixmaps/bll33.xpm delete mode 100644 pixmaps/bll37.xpm delete mode 100644 pixmaps/bll40.xpm delete mode 100644 pixmaps/bll45.xpm delete mode 100644 pixmaps/bll49.xpm delete mode 100644 pixmaps/bll54.xpm delete mode 100644 pixmaps/bll58.xpm delete mode 100644 pixmaps/bll64.xpm delete mode 100644 pixmaps/bll72.xpm delete mode 100644 pixmaps/bll80.xpm delete mode 100644 pixmaps/bll87.xpm delete mode 100644 pixmaps/bll95.xpm delete mode 100644 pixmaps/cdd33.xpm delete mode 100644 pixmaps/cdd37.xpm delete mode 100644 pixmaps/cdd40.xpm delete mode 100644 pixmaps/cdd45.xpm delete mode 100644 pixmaps/cdd49.xpm delete mode 100644 pixmaps/cdd54.xpm delete mode 100644 pixmaps/cdd58.xpm delete mode 100644 pixmaps/cdd64.xpm delete mode 100644 pixmaps/cdd72.xpm delete mode 100644 pixmaps/cdl33.xpm delete mode 100644 pixmaps/cdl37.xpm delete mode 100644 pixmaps/cdl40.xpm delete mode 100644 pixmaps/cdl45.xpm delete mode 100644 pixmaps/cdl49.xpm delete mode 100644 pixmaps/cdl54.xpm delete mode 100644 pixmaps/cdl58.xpm delete mode 100644 pixmaps/cdl64.xpm delete mode 100644 pixmaps/cdl72.xpm delete mode 100644 pixmaps/cld33.xpm delete mode 100644 pixmaps/cld37.xpm delete mode 100644 pixmaps/cld40.xpm delete mode 100644 pixmaps/cld45.xpm delete mode 100644 pixmaps/cld49.xpm delete mode 100644 pixmaps/cld54.xpm delete mode 100644 pixmaps/cld58.xpm delete mode 100644 pixmaps/cld64.xpm delete mode 100644 pixmaps/cld72.xpm delete mode 100644 pixmaps/cll33.xpm delete mode 100644 pixmaps/cll37.xpm delete mode 100644 pixmaps/cll40.xpm delete mode 100644 pixmaps/cll45.xpm delete mode 100644 pixmaps/cll49.xpm delete mode 100644 pixmaps/cll54.xpm delete mode 100644 pixmaps/cll58.xpm delete mode 100644 pixmaps/cll64.xpm delete mode 100644 pixmaps/cll72.xpm delete mode 100644 pixmaps/convbm delete mode 100644 pixmaps/convbm.sed delete mode 100644 pixmaps/convbm2.sed delete mode 100644 pixmaps/convert.c delete mode 100644 pixmaps/cvdd33.xpm delete mode 100644 pixmaps/cvdd37.xpm delete mode 100644 pixmaps/cvdd40.xpm delete mode 100644 pixmaps/cvdd45.xpm delete mode 100644 pixmaps/cvdd49.xpm delete mode 100644 pixmaps/cvdd54.xpm delete mode 100644 pixmaps/cvdd58.xpm delete mode 100644 pixmaps/cvdd64.xpm delete mode 100644 pixmaps/cvdd72.xpm delete mode 100644 pixmaps/cvdl33.xpm delete mode 100644 pixmaps/cvdl37.xpm delete mode 100644 pixmaps/cvdl40.xpm delete mode 100644 pixmaps/cvdl45.xpm delete mode 100644 pixmaps/cvdl49.xpm delete mode 100644 pixmaps/cvdl54.xpm delete mode 100644 pixmaps/cvdl58.xpm delete mode 100644 pixmaps/cvdl64.xpm delete mode 100644 pixmaps/cvdl72.xpm delete mode 100644 pixmaps/cvld33.xpm delete mode 100644 pixmaps/cvld37.xpm delete mode 100644 pixmaps/cvld40.xpm delete mode 100644 pixmaps/cvld45.xpm delete mode 100644 pixmaps/cvld49.xpm delete mode 100644 pixmaps/cvld54.xpm delete mode 100644 pixmaps/cvld58.xpm delete mode 100644 pixmaps/cvld64.xpm delete mode 100644 pixmaps/cvld72.xpm delete mode 100644 pixmaps/cvll33.xpm delete mode 100644 pixmaps/cvll37.xpm delete mode 100644 pixmaps/cvll40.xpm delete mode 100644 pixmaps/cvll45.xpm delete mode 100644 pixmaps/cvll49.xpm delete mode 100644 pixmaps/cvll54.xpm delete mode 100644 pixmaps/cvll58.xpm delete mode 100644 pixmaps/cvll64.xpm delete mode 100644 pixmaps/cvll72.xpm delete mode 100644 pixmaps/dkdd33.xpm delete mode 100644 pixmaps/dkdd49.xpm delete mode 100644 pixmaps/dkdd72.xpm delete mode 100644 pixmaps/dkdl33.xpm delete mode 100644 pixmaps/dkdl49.xpm delete mode 100644 pixmaps/dkdl72.xpm delete mode 100644 pixmaps/dkld33.xpm delete mode 100644 pixmaps/dkld49.xpm delete mode 100644 pixmaps/dkld72.xpm delete mode 100644 pixmaps/dkll33.xpm delete mode 100644 pixmaps/dkll49.xpm delete mode 100644 pixmaps/dkll72.xpm delete mode 100644 pixmaps/edd33.xpm delete mode 100644 pixmaps/edd49.xpm delete mode 100644 pixmaps/edd72.xpm delete mode 100644 pixmaps/edl33.xpm delete mode 100644 pixmaps/edl49.xpm delete mode 100644 pixmaps/edl72.xpm delete mode 100644 pixmaps/eld33.xpm delete mode 100644 pixmaps/eld49.xpm delete mode 100644 pixmaps/eld72.xpm delete mode 100644 pixmaps/ell33.xpm delete mode 100644 pixmaps/ell49.xpm delete mode 100644 pixmaps/ell72.xpm delete mode 100644 pixmaps/fdd33.xpm delete mode 100644 pixmaps/fdd49.xpm delete mode 100644 pixmaps/fdd72.xpm delete mode 100644 pixmaps/fdl33.xpm delete mode 100644 pixmaps/fdl49.xpm delete mode 100644 pixmaps/fdl72.xpm delete mode 100644 pixmaps/fld33.xpm delete mode 100644 pixmaps/fld49.xpm delete mode 100644 pixmaps/fld72.xpm delete mode 100644 pixmaps/fll33.xpm delete mode 100644 pixmaps/fll49.xpm delete mode 100644 pixmaps/fll72.xpm delete mode 100644 pixmaps/gdd33.xpm delete mode 100644 pixmaps/gdd49.xpm delete mode 100644 pixmaps/gdd72.xpm delete mode 100644 pixmaps/gdl33.xpm delete mode 100644 pixmaps/gdl49.xpm delete mode 100644 pixmaps/gdl72.xpm delete mode 100644 pixmaps/gld33.xpm delete mode 100644 pixmaps/gld49.xpm delete mode 100644 pixmaps/gld72.xpm delete mode 100644 pixmaps/gll33.xpm delete mode 100644 pixmaps/gll49.xpm delete mode 100644 pixmaps/gll72.xpm delete mode 100644 pixmaps/hdd33.xpm delete mode 100644 pixmaps/hdd49.xpm delete mode 100644 pixmaps/hdd72.xpm delete mode 100644 pixmaps/hdl33.xpm delete mode 100644 pixmaps/hdl49.xpm delete mode 100644 pixmaps/hdl72.xpm delete mode 100644 pixmaps/hld33.xpm delete mode 100644 pixmaps/hld49.xpm delete mode 100644 pixmaps/hld72.xpm delete mode 100644 pixmaps/hll33.xpm delete mode 100644 pixmaps/hll49.xpm delete mode 100644 pixmaps/hll72.xpm create mode 100644 pixmaps/ini32.xpm create mode 100644 pixmaps/ini48.xpm delete mode 100644 pixmaps/kdd108.xpm delete mode 100644 pixmaps/kdd116.xpm delete mode 100644 pixmaps/kdd129.xpm delete mode 100644 pixmaps/kdd21.xpm delete mode 100644 pixmaps/kdd25.xpm delete mode 100644 pixmaps/kdd29.xpm delete mode 100644 pixmaps/kdd33.xpm delete mode 100644 pixmaps/kdd37.xpm delete mode 100644 pixmaps/kdd40.xpm delete mode 100644 pixmaps/kdd45.xpm delete mode 100644 pixmaps/kdd49.xpm delete mode 100644 pixmaps/kdd54.xpm delete mode 100644 pixmaps/kdd58.xpm delete mode 100644 pixmaps/kdd64.xpm delete mode 100644 pixmaps/kdd72.xpm delete mode 100644 pixmaps/kdd80.xpm delete mode 100644 pixmaps/kdd87.xpm delete mode 100644 pixmaps/kdd95.xpm delete mode 100644 pixmaps/kdl108.xpm delete mode 100644 pixmaps/kdl116.xpm delete mode 100644 pixmaps/kdl129.xpm delete mode 100644 pixmaps/kdl21.xpm delete mode 100644 pixmaps/kdl25.xpm delete mode 100644 pixmaps/kdl29.xpm delete mode 100644 pixmaps/kdl33.xpm delete mode 100644 pixmaps/kdl37.xpm delete mode 100644 pixmaps/kdl40.xpm delete mode 100644 pixmaps/kdl45.xpm delete mode 100644 pixmaps/kdl49.xpm delete mode 100644 pixmaps/kdl54.xpm delete mode 100644 pixmaps/kdl58.xpm delete mode 100644 pixmaps/kdl64.xpm delete mode 100644 pixmaps/kdl72.xpm delete mode 100644 pixmaps/kdl80.xpm delete mode 100644 pixmaps/kdl87.xpm delete mode 100644 pixmaps/kdl95.xpm delete mode 100644 pixmaps/kld108.xpm delete mode 100644 pixmaps/kld116.xpm delete mode 100644 pixmaps/kld129.xpm delete mode 100644 pixmaps/kld21.xpm delete mode 100644 pixmaps/kld25.xpm delete mode 100644 pixmaps/kld29.xpm delete mode 100644 pixmaps/kld33.xpm delete mode 100644 pixmaps/kld37.xpm delete mode 100644 pixmaps/kld40.xpm delete mode 100644 pixmaps/kld45.xpm delete mode 100644 pixmaps/kld49.xpm delete mode 100644 pixmaps/kld54.xpm delete mode 100644 pixmaps/kld58.xpm delete mode 100644 pixmaps/kld64.xpm delete mode 100644 pixmaps/kld72.xpm delete mode 100644 pixmaps/kld80.xpm delete mode 100644 pixmaps/kld87.xpm delete mode 100644 pixmaps/kld95.xpm delete mode 100644 pixmaps/kll108.xpm delete mode 100644 pixmaps/kll116.xpm delete mode 100644 pixmaps/kll129.xpm delete mode 100644 pixmaps/kll21.xpm delete mode 100644 pixmaps/kll25.xpm delete mode 100644 pixmaps/kll29.xpm delete mode 100644 pixmaps/kll33.xpm delete mode 100644 pixmaps/kll37.xpm delete mode 100644 pixmaps/kll40.xpm delete mode 100644 pixmaps/kll45.xpm delete mode 100644 pixmaps/kll49.xpm delete mode 100644 pixmaps/kll54.xpm delete mode 100644 pixmaps/kll58.xpm delete mode 100644 pixmaps/kll64.xpm delete mode 100644 pixmaps/kll72.xpm delete mode 100644 pixmaps/kll80.xpm delete mode 100644 pixmaps/kll87.xpm delete mode 100644 pixmaps/kll95.xpm delete mode 100644 pixmaps/ldd33.xpm delete mode 100644 pixmaps/ldd37.xpm delete mode 100644 pixmaps/ldd40.xpm delete mode 100644 pixmaps/ldd45.xpm delete mode 100644 pixmaps/ldd49.xpm delete mode 100644 pixmaps/ldd54.xpm delete mode 100644 pixmaps/ldd58.xpm delete mode 100644 pixmaps/ldd64.xpm delete mode 100644 pixmaps/ldd72.xpm delete mode 100644 pixmaps/ldl33.xpm delete mode 100644 pixmaps/ldl37.xpm delete mode 100644 pixmaps/ldl40.xpm delete mode 100644 pixmaps/ldl45.xpm delete mode 100644 pixmaps/ldl49.xpm delete mode 100644 pixmaps/ldl54.xpm delete mode 100644 pixmaps/ldl58.xpm delete mode 100644 pixmaps/ldl64.xpm delete mode 100644 pixmaps/ldl72.xpm delete mode 100644 pixmaps/lld33.xpm delete mode 100644 pixmaps/lld37.xpm delete mode 100644 pixmaps/lld40.xpm delete mode 100644 pixmaps/lld45.xpm delete mode 100644 pixmaps/lld49.xpm delete mode 100644 pixmaps/lld54.xpm delete mode 100644 pixmaps/lld58.xpm delete mode 100644 pixmaps/lld64.xpm delete mode 100644 pixmaps/lld72.xpm delete mode 100644 pixmaps/lll33.xpm delete mode 100644 pixmaps/lll37.xpm delete mode 100644 pixmaps/lll40.xpm delete mode 100644 pixmaps/lll45.xpm delete mode 100644 pixmaps/lll49.xpm delete mode 100644 pixmaps/lll54.xpm delete mode 100644 pixmaps/lll58.xpm delete mode 100644 pixmaps/lll64.xpm delete mode 100644 pixmaps/lll72.xpm delete mode 100644 pixmaps/marble_d.xpm delete mode 100644 pixmaps/marble_l.xpm delete mode 100644 pixmaps/mdd33.xpm delete mode 100644 pixmaps/mdd49.xpm delete mode 100644 pixmaps/mdd72.xpm delete mode 100644 pixmaps/mdl33.xpm delete mode 100644 pixmaps/mdl49.xpm delete mode 100644 pixmaps/mdl72.xpm delete mode 100644 pixmaps/mld33.xpm delete mode 100644 pixmaps/mld49.xpm delete mode 100644 pixmaps/mld72.xpm delete mode 100644 pixmaps/mll33.xpm delete mode 100644 pixmaps/mll49.xpm delete mode 100644 pixmaps/mll72.xpm delete mode 100644 pixmaps/ndd108.xpm delete mode 100644 pixmaps/ndd116.xpm delete mode 100644 pixmaps/ndd129.xpm delete mode 100644 pixmaps/ndd21.xpm delete mode 100644 pixmaps/ndd25.xpm delete mode 100644 pixmaps/ndd29.xpm delete mode 100644 pixmaps/ndd33.xpm delete mode 100644 pixmaps/ndd37.xpm delete mode 100644 pixmaps/ndd40.xpm delete mode 100644 pixmaps/ndd45.xpm delete mode 100644 pixmaps/ndd49.xpm delete mode 100644 pixmaps/ndd54.xpm delete mode 100644 pixmaps/ndd58.xpm delete mode 100644 pixmaps/ndd64.xpm delete mode 100644 pixmaps/ndd72.xpm delete mode 100644 pixmaps/ndd80.xpm delete mode 100644 pixmaps/ndd87.xpm delete mode 100644 pixmaps/ndd95.xpm delete mode 100644 pixmaps/ndl108.xpm delete mode 100644 pixmaps/ndl116.xpm delete mode 100644 pixmaps/ndl129.xpm delete mode 100644 pixmaps/ndl21.xpm delete mode 100644 pixmaps/ndl25.xpm delete mode 100644 pixmaps/ndl29.xpm delete mode 100644 pixmaps/ndl33.xpm delete mode 100644 pixmaps/ndl37.xpm delete mode 100644 pixmaps/ndl40.xpm delete mode 100644 pixmaps/ndl45.xpm delete mode 100644 pixmaps/ndl49.xpm delete mode 100644 pixmaps/ndl54.xpm delete mode 100644 pixmaps/ndl58.xpm delete mode 100644 pixmaps/ndl64.xpm delete mode 100644 pixmaps/ndl72.xpm delete mode 100644 pixmaps/ndl80.xpm delete mode 100644 pixmaps/ndl87.xpm delete mode 100644 pixmaps/ndl95.xpm delete mode 100644 pixmaps/nld108.xpm delete mode 100644 pixmaps/nld116.xpm delete mode 100644 pixmaps/nld129.xpm delete mode 100644 pixmaps/nld21.xpm delete mode 100644 pixmaps/nld25.xpm delete mode 100644 pixmaps/nld29.xpm delete mode 100644 pixmaps/nld33.xpm delete mode 100644 pixmaps/nld37.xpm delete mode 100644 pixmaps/nld40.xpm delete mode 100644 pixmaps/nld45.xpm delete mode 100644 pixmaps/nld49.xpm delete mode 100644 pixmaps/nld54.xpm delete mode 100644 pixmaps/nld58.xpm delete mode 100644 pixmaps/nld64.xpm delete mode 100644 pixmaps/nld72.xpm delete mode 100644 pixmaps/nld80.xpm delete mode 100644 pixmaps/nld87.xpm delete mode 100644 pixmaps/nld95.xpm delete mode 100644 pixmaps/nll108.xpm delete mode 100644 pixmaps/nll116.xpm delete mode 100644 pixmaps/nll129.xpm delete mode 100644 pixmaps/nll21.xpm delete mode 100644 pixmaps/nll25.xpm delete mode 100644 pixmaps/nll29.xpm delete mode 100644 pixmaps/nll33.xpm delete mode 100644 pixmaps/nll37.xpm delete mode 100644 pixmaps/nll40.xpm delete mode 100644 pixmaps/nll45.xpm delete mode 100644 pixmaps/nll49.xpm delete mode 100644 pixmaps/nll54.xpm delete mode 100644 pixmaps/nll58.xpm delete mode 100644 pixmaps/nll64.xpm delete mode 100644 pixmaps/nll72.xpm delete mode 100644 pixmaps/nll80.xpm delete mode 100644 pixmaps/nll87.xpm delete mode 100644 pixmaps/nll95.xpm delete mode 100644 pixmaps/odd33.xpm delete mode 100644 pixmaps/odd49.xpm delete mode 100644 pixmaps/odd72.xpm delete mode 100644 pixmaps/odl33.xpm delete mode 100644 pixmaps/odl49.xpm delete mode 100644 pixmaps/odl72.xpm delete mode 100644 pixmaps/old33.xpm delete mode 100644 pixmaps/old49.xpm delete mode 100644 pixmaps/old72.xpm delete mode 100644 pixmaps/oll33.xpm delete mode 100644 pixmaps/oll49.xpm delete mode 100644 pixmaps/oll72.xpm delete mode 100644 pixmaps/pdd108.xpm delete mode 100644 pixmaps/pdd116.xpm delete mode 100644 pixmaps/pdd129.xpm delete mode 100644 pixmaps/pdd21.xpm delete mode 100644 pixmaps/pdd25.xpm delete mode 100644 pixmaps/pdd29.xpm delete mode 100644 pixmaps/pdd33.xpm delete mode 100644 pixmaps/pdd37.xpm delete mode 100644 pixmaps/pdd40.xpm delete mode 100644 pixmaps/pdd45.xpm delete mode 100644 pixmaps/pdd49.xpm delete mode 100644 pixmaps/pdd54.xpm delete mode 100644 pixmaps/pdd58.xpm delete mode 100644 pixmaps/pdd64.xpm delete mode 100644 pixmaps/pdd72.xpm delete mode 100644 pixmaps/pdd80.xpm delete mode 100644 pixmaps/pdd87.xpm delete mode 100644 pixmaps/pdd95.xpm delete mode 100644 pixmaps/pdl108.xpm delete mode 100644 pixmaps/pdl116.xpm delete mode 100644 pixmaps/pdl129.xpm delete mode 100644 pixmaps/pdl21.xpm delete mode 100644 pixmaps/pdl25.xpm delete mode 100644 pixmaps/pdl29.xpm delete mode 100644 pixmaps/pdl33.xpm delete mode 100644 pixmaps/pdl37.xpm delete mode 100644 pixmaps/pdl40.xpm delete mode 100644 pixmaps/pdl45.xpm delete mode 100644 pixmaps/pdl49.xpm delete mode 100644 pixmaps/pdl54.xpm delete mode 100644 pixmaps/pdl58.xpm delete mode 100644 pixmaps/pdl64.xpm delete mode 100644 pixmaps/pdl72.xpm delete mode 100644 pixmaps/pdl80.xpm delete mode 100644 pixmaps/pdl87.xpm delete mode 100644 pixmaps/pdl95.xpm delete mode 100644 pixmaps/pixmaps.h delete mode 100644 pixmaps/pld108.xpm delete mode 100644 pixmaps/pld116.xpm delete mode 100644 pixmaps/pld129.xpm delete mode 100644 pixmaps/pld21.xpm delete mode 100644 pixmaps/pld25.xpm delete mode 100644 pixmaps/pld29.xpm delete mode 100644 pixmaps/pld33.xpm delete mode 100644 pixmaps/pld37.xpm delete mode 100644 pixmaps/pld40.xpm delete mode 100644 pixmaps/pld45.xpm delete mode 100644 pixmaps/pld49.xpm delete mode 100644 pixmaps/pld54.xpm delete mode 100644 pixmaps/pld58.xpm delete mode 100644 pixmaps/pld64.xpm delete mode 100644 pixmaps/pld72.xpm delete mode 100644 pixmaps/pld80.xpm delete mode 100644 pixmaps/pld87.xpm delete mode 100644 pixmaps/pld95.xpm delete mode 100644 pixmaps/pll108.xpm delete mode 100644 pixmaps/pll116.xpm delete mode 100644 pixmaps/pll129.xpm delete mode 100644 pixmaps/pll21.xpm delete mode 100644 pixmaps/pll25.xpm delete mode 100644 pixmaps/pll29.xpm delete mode 100644 pixmaps/pll33.xpm delete mode 100644 pixmaps/pll37.xpm delete mode 100644 pixmaps/pll40.xpm delete mode 100644 pixmaps/pll45.xpm delete mode 100644 pixmaps/pll49.xpm delete mode 100644 pixmaps/pll54.xpm delete mode 100644 pixmaps/pll58.xpm delete mode 100644 pixmaps/pll64.xpm delete mode 100644 pixmaps/pll72.xpm delete mode 100644 pixmaps/pll80.xpm delete mode 100644 pixmaps/pll87.xpm delete mode 100644 pixmaps/pll95.xpm delete mode 100644 pixmaps/qdd108.xpm delete mode 100644 pixmaps/qdd116.xpm delete mode 100644 pixmaps/qdd129.xpm delete mode 100644 pixmaps/qdd21.xpm delete mode 100644 pixmaps/qdd25.xpm delete mode 100644 pixmaps/qdd29.xpm delete mode 100644 pixmaps/qdd33.xpm delete mode 100644 pixmaps/qdd37.xpm delete mode 100644 pixmaps/qdd40.xpm delete mode 100644 pixmaps/qdd45.xpm delete mode 100644 pixmaps/qdd49.xpm delete mode 100644 pixmaps/qdd54.xpm delete mode 100644 pixmaps/qdd58.xpm delete mode 100644 pixmaps/qdd64.xpm delete mode 100644 pixmaps/qdd72.xpm delete mode 100644 pixmaps/qdd80.xpm delete mode 100644 pixmaps/qdd87.xpm delete mode 100644 pixmaps/qdd95.xpm delete mode 100644 pixmaps/qdl108.xpm delete mode 100644 pixmaps/qdl116.xpm delete mode 100644 pixmaps/qdl129.xpm delete mode 100644 pixmaps/qdl21.xpm delete mode 100644 pixmaps/qdl25.xpm delete mode 100644 pixmaps/qdl29.xpm delete mode 100644 pixmaps/qdl33.xpm delete mode 100644 pixmaps/qdl37.xpm delete mode 100644 pixmaps/qdl40.xpm delete mode 100644 pixmaps/qdl45.xpm delete mode 100644 pixmaps/qdl49.xpm delete mode 100644 pixmaps/qdl54.xpm delete mode 100644 pixmaps/qdl58.xpm delete mode 100644 pixmaps/qdl64.xpm delete mode 100644 pixmaps/qdl72.xpm delete mode 100644 pixmaps/qdl80.xpm delete mode 100644 pixmaps/qdl87.xpm delete mode 100644 pixmaps/qdl95.xpm delete mode 100644 pixmaps/qld108.xpm delete mode 100644 pixmaps/qld116.xpm delete mode 100644 pixmaps/qld129.xpm delete mode 100644 pixmaps/qld21.xpm delete mode 100644 pixmaps/qld25.xpm delete mode 100644 pixmaps/qld29.xpm delete mode 100644 pixmaps/qld33.xpm delete mode 100644 pixmaps/qld37.xpm delete mode 100644 pixmaps/qld40.xpm delete mode 100644 pixmaps/qld45.xpm delete mode 100644 pixmaps/qld49.xpm delete mode 100644 pixmaps/qld54.xpm delete mode 100644 pixmaps/qld58.xpm delete mode 100644 pixmaps/qld64.xpm delete mode 100644 pixmaps/qld72.xpm delete mode 100644 pixmaps/qld80.xpm delete mode 100644 pixmaps/qld87.xpm delete mode 100644 pixmaps/qld95.xpm delete mode 100644 pixmaps/qll108.xpm delete mode 100644 pixmaps/qll116.xpm delete mode 100644 pixmaps/qll129.xpm delete mode 100644 pixmaps/qll21.xpm delete mode 100644 pixmaps/qll25.xpm delete mode 100644 pixmaps/qll29.xpm delete mode 100644 pixmaps/qll33.xpm delete mode 100644 pixmaps/qll37.xpm delete mode 100644 pixmaps/qll40.xpm delete mode 100644 pixmaps/qll45.xpm delete mode 100644 pixmaps/qll49.xpm delete mode 100644 pixmaps/qll54.xpm delete mode 100644 pixmaps/qll58.xpm delete mode 100644 pixmaps/qll64.xpm delete mode 100644 pixmaps/qll72.xpm delete mode 100644 pixmaps/qll80.xpm delete mode 100644 pixmaps/qll87.xpm delete mode 100644 pixmaps/qll95.xpm delete mode 100644 pixmaps/rdd108.xpm delete mode 100644 pixmaps/rdd116.xpm delete mode 100644 pixmaps/rdd129.xpm delete mode 100644 pixmaps/rdd21.xpm delete mode 100644 pixmaps/rdd25.xpm delete mode 100644 pixmaps/rdd29.xpm delete mode 100644 pixmaps/rdd33.xpm delete mode 100644 pixmaps/rdd37.xpm delete mode 100644 pixmaps/rdd40.xpm delete mode 100644 pixmaps/rdd45.xpm delete mode 100644 pixmaps/rdd49.xpm delete mode 100644 pixmaps/rdd54.xpm delete mode 100644 pixmaps/rdd58.xpm delete mode 100644 pixmaps/rdd64.xpm delete mode 100644 pixmaps/rdd72.xpm delete mode 100644 pixmaps/rdd80.xpm delete mode 100644 pixmaps/rdd87.xpm delete mode 100644 pixmaps/rdd95.xpm delete mode 100644 pixmaps/rdl108.xpm delete mode 100644 pixmaps/rdl116.xpm delete mode 100644 pixmaps/rdl129.xpm delete mode 100644 pixmaps/rdl21.xpm delete mode 100644 pixmaps/rdl25.xpm delete mode 100644 pixmaps/rdl29.xpm delete mode 100644 pixmaps/rdl33.xpm delete mode 100644 pixmaps/rdl37.xpm delete mode 100644 pixmaps/rdl40.xpm delete mode 100644 pixmaps/rdl45.xpm delete mode 100644 pixmaps/rdl49.xpm delete mode 100644 pixmaps/rdl54.xpm delete mode 100644 pixmaps/rdl58.xpm delete mode 100644 pixmaps/rdl64.xpm delete mode 100644 pixmaps/rdl72.xpm delete mode 100644 pixmaps/rdl80.xpm delete mode 100644 pixmaps/rdl87.xpm delete mode 100644 pixmaps/rdl95.xpm delete mode 100644 pixmaps/rld108.xpm delete mode 100644 pixmaps/rld116.xpm delete mode 100644 pixmaps/rld129.xpm delete mode 100644 pixmaps/rld21.xpm delete mode 100644 pixmaps/rld25.xpm delete mode 100644 pixmaps/rld29.xpm delete mode 100644 pixmaps/rld33.xpm delete mode 100644 pixmaps/rld37.xpm delete mode 100644 pixmaps/rld40.xpm delete mode 100644 pixmaps/rld45.xpm delete mode 100644 pixmaps/rld49.xpm delete mode 100644 pixmaps/rld54.xpm delete mode 100644 pixmaps/rld58.xpm delete mode 100644 pixmaps/rld64.xpm delete mode 100644 pixmaps/rld72.xpm delete mode 100644 pixmaps/rld80.xpm delete mode 100644 pixmaps/rld87.xpm delete mode 100644 pixmaps/rld95.xpm delete mode 100644 pixmaps/rll108.xpm delete mode 100644 pixmaps/rll116.xpm delete mode 100644 pixmaps/rll129.xpm delete mode 100644 pixmaps/rll21.xpm delete mode 100644 pixmaps/rll25.xpm delete mode 100644 pixmaps/rll29.xpm delete mode 100644 pixmaps/rll33.xpm delete mode 100644 pixmaps/rll37.xpm delete mode 100644 pixmaps/rll40.xpm delete mode 100644 pixmaps/rll45.xpm delete mode 100644 pixmaps/rll49.xpm delete mode 100644 pixmaps/rll54.xpm delete mode 100644 pixmaps/rll58.xpm delete mode 100644 pixmaps/rll64.xpm delete mode 100644 pixmaps/rll72.xpm delete mode 100644 pixmaps/rll80.xpm delete mode 100644 pixmaps/rll87.xpm delete mode 100644 pixmaps/rll95.xpm delete mode 100644 pixmaps/sdd49.xpm delete mode 100644 pixmaps/sdd72.xpm delete mode 100644 pixmaps/sdl49.xpm delete mode 100644 pixmaps/sdl72.xpm delete mode 100644 pixmaps/sld49.xpm delete mode 100644 pixmaps/sld72.xpm delete mode 100644 pixmaps/sll49.xpm delete mode 100644 pixmaps/sll72.xpm delete mode 100644 pixmaps/test.c delete mode 100644 pixmaps/udd49.xpm delete mode 100644 pixmaps/udd72.xpm delete mode 100644 pixmaps/udl49.xpm delete mode 100644 pixmaps/udl72.xpm delete mode 100644 pixmaps/uld49.xpm delete mode 100644 pixmaps/uld72.xpm delete mode 100644 pixmaps/ull49.xpm delete mode 100644 pixmaps/ull72.xpm delete mode 100644 pixmaps/vdd33.xpm delete mode 100644 pixmaps/vdd49.xpm delete mode 100644 pixmaps/vdd72.xpm delete mode 100644 pixmaps/vdl33.xpm delete mode 100644 pixmaps/vdl49.xpm delete mode 100644 pixmaps/vdl72.xpm delete mode 100644 pixmaps/vld33.xpm delete mode 100644 pixmaps/vld49.xpm delete mode 100644 pixmaps/vld72.xpm delete mode 100644 pixmaps/vll33.xpm delete mode 100644 pixmaps/vll49.xpm delete mode 100644 pixmaps/vll72.xpm delete mode 100644 pixmaps/wdd33.xpm delete mode 100644 pixmaps/wdd49.xpm delete mode 100644 pixmaps/wdd72.xpm delete mode 100644 pixmaps/wdl33.xpm delete mode 100644 pixmaps/wdl49.xpm delete mode 100644 pixmaps/wdl72.xpm delete mode 100644 pixmaps/wld33.xpm delete mode 100644 pixmaps/wld49.xpm delete mode 100644 pixmaps/wld72.xpm delete mode 100644 pixmaps/wldd49.xpm delete mode 100644 pixmaps/wldd72.xpm delete mode 100644 pixmaps/wldl49.xpm delete mode 100644 pixmaps/wldl72.xpm delete mode 100644 pixmaps/wll33.xpm delete mode 100644 pixmaps/wll49.xpm delete mode 100644 pixmaps/wll72.xpm delete mode 100644 pixmaps/wlld49.xpm delete mode 100644 pixmaps/wlld72.xpm delete mode 100644 pixmaps/wlll49.xpm delete mode 100644 pixmaps/wlll72.xpm delete mode 100644 pixmaps/wndd49.xpm delete mode 100644 pixmaps/wndd72.xpm delete mode 100644 pixmaps/wndl49.xpm delete mode 100644 pixmaps/wndl72.xpm delete mode 100644 pixmaps/wnld49.xpm delete mode 100644 pixmaps/wnld72.xpm delete mode 100644 pixmaps/wnll49.xpm delete mode 100644 pixmaps/wnll72.xpm delete mode 100644 pixmaps/wood_d.xpm delete mode 100644 pixmaps/wood_l.xpm delete mode 100644 pixmaps/wpdd49.xpm delete mode 100644 pixmaps/wpdd72.xpm delete mode 100644 pixmaps/wpdl49.xpm delete mode 100644 pixmaps/wpdl72.xpm delete mode 100644 pixmaps/wpld49.xpm delete mode 100644 pixmaps/wpld72.xpm delete mode 100644 pixmaps/wpll49.xpm delete mode 100644 pixmaps/wpll72.xpm delete mode 100644 pixmaps/wsdd49.xpm delete mode 100644 pixmaps/wsdd72.xpm delete mode 100644 pixmaps/wsdl49.xpm delete mode 100644 pixmaps/wsdl72.xpm delete mode 100644 pixmaps/wsld49.xpm delete mode 100644 pixmaps/wsld72.xpm delete mode 100644 pixmaps/wsll49.xpm delete mode 100644 pixmaps/wsll72.xpm delete mode 100644 pixmaps/xqboard.xpm delete mode 100644 pixmaps/xqwood.xpm create mode 100644 png/BlackAdvisor.png create mode 100644 png/BlackArchbishop.png create mode 100644 png/BlackBishop.png create mode 100644 png/BlackCanon.png create mode 100644 png/BlackChancellor.png create mode 100644 png/BlackCobra.png create mode 100644 png/BlackCommoner.png create mode 100644 png/BlackCrownedBishop.png create mode 100644 png/BlackCrownedRook.png create mode 100644 png/BlackElephant.png create mode 100644 png/BlackGold.png create mode 100644 png/BlackGoldKnight.png create mode 100644 png/BlackGoldLance.png create mode 100644 png/BlackGoldPawn.png create mode 100644 png/BlackGoldSilver.png create mode 100644 png/BlackHawk.png create mode 100644 png/BlackKing.png create mode 100644 png/BlackKnight.png create mode 100644 png/BlackLance.png create mode 100644 png/BlackMarshall.png create mode 100644 png/BlackNightrider.png create mode 100644 png/BlackPawn.png create mode 100644 png/BlackPrincess.png create mode 100644 png/BlackQueen.png create mode 100644 png/BlackRook.png create mode 100644 png/BlackUnicorn.png create mode 100644 png/WhiteAdvisor.png create mode 100644 png/WhiteArchbishop.png create mode 100644 png/WhiteBishop.png create mode 100644 png/WhiteCanon.png create mode 100644 png/WhiteChancellor.png create mode 100644 png/WhiteCobra.png create mode 100644 png/WhiteCommoner.png create mode 100644 png/WhiteCrownedBishop.png create mode 100644 png/WhiteCrownedRook.png create mode 100644 png/WhiteElephant.png create mode 100644 png/WhiteGold.png create mode 100644 png/WhiteGoldKnight.png create mode 100644 png/WhiteGoldLance.png create mode 100644 png/WhiteGoldPawn.png create mode 100644 png/WhiteGoldSilver.png create mode 100644 png/WhiteHawk.png create mode 100644 png/WhiteKing.png create mode 100644 png/WhiteKnight.png create mode 100644 png/WhiteLance.png create mode 100644 png/WhiteMarshall.png create mode 100644 png/WhiteNightrider.png create mode 100644 png/WhitePawn.png create mode 100644 png/WhitePrincess.png create mode 100644 png/WhiteQueen.png create mode 100644 png/WhiteRook.png create mode 100644 png/WhiteUnicorn.png create mode 100644 png/hatch.png create mode 100644 png/marble_d.png create mode 100644 png/marble_l.png create mode 100644 png/wood_d.png create mode 100644 png/wood_l.png create mode 100644 png/xqboard.png create mode 100644 png/xqwood.png delete mode 100644 shogipixmaps/bdd64.xpm delete mode 100644 shogipixmaps/bdl64.xpm delete mode 100644 shogipixmaps/bld64.xpm delete mode 100644 shogipixmaps/bll64.xpm delete mode 100644 shogipixmaps/fdd64.xpm delete mode 100644 shogipixmaps/fdl64.xpm delete mode 100644 shogipixmaps/fld64.xpm delete mode 100644 shogipixmaps/fll64.xpm delete mode 100644 shogipixmaps/kdd64.xpm delete mode 100644 shogipixmaps/kdl64.xpm delete mode 100644 shogipixmaps/kld64.xpm delete mode 100644 shogipixmaps/kll64.xpm delete mode 100644 shogipixmaps/ldd64.xpm delete mode 100644 shogipixmaps/ldl64.xpm delete mode 100644 shogipixmaps/lld64.xpm delete mode 100644 shogipixmaps/lll64.xpm delete mode 100644 shogipixmaps/ndd64.xpm delete mode 100644 shogipixmaps/ndl64.xpm delete mode 100644 shogipixmaps/nld64.xpm delete mode 100644 shogipixmaps/nll64.xpm delete mode 100644 shogipixmaps/pdd64.xpm delete mode 100644 shogipixmaps/pdl64.xpm delete mode 100644 shogipixmaps/pld64.xpm delete mode 100644 shogipixmaps/pll64.xpm delete mode 100644 shogipixmaps/qdd64.xpm delete mode 100644 shogipixmaps/qdl64.xpm delete mode 100644 shogipixmaps/qld64.xpm delete mode 100644 shogipixmaps/qll64.xpm delete mode 100644 shogipixmaps/rdd64.xpm delete mode 100644 shogipixmaps/rdl64.xpm delete mode 100644 shogipixmaps/rld64.xpm delete mode 100644 shogipixmaps/rll64.xpm delete mode 100644 shogipixmaps/wdd64.xpm delete mode 100644 shogipixmaps/wdl64.xpm delete mode 100644 shogipixmaps/wld64.xpm delete mode 100644 shogipixmaps/wldd64.xpm delete mode 100644 shogipixmaps/wldl64.xpm delete mode 100644 shogipixmaps/wll64.xpm delete mode 100644 shogipixmaps/wlld64.xpm delete mode 100644 shogipixmaps/wlll64.xpm delete mode 100644 shogipixmaps/wndd64.xpm delete mode 100644 shogipixmaps/wndl64.xpm delete mode 100644 shogipixmaps/wnld64.xpm delete mode 100644 shogipixmaps/wnll64.xpm delete mode 100644 shogipixmaps/wpdd64.xpm delete mode 100644 shogipixmaps/wpdl64.xpm delete mode 100644 shogipixmaps/wpld64.xpm delete mode 100644 shogipixmaps/wpll64.xpm delete mode 100644 shogipixmaps/wsdd64.xpm delete mode 100644 shogipixmaps/wsdl64.xpm delete mode 100644 shogipixmaps/wsld64.xpm delete mode 100644 shogipixmaps/wsll64.xpm create mode 100644 svg/BlackAdvisor.svg create mode 100644 svg/BlackArchbishop.svg create mode 100644 svg/BlackBishop.svg create mode 100644 svg/BlackCanon.svg create mode 100644 svg/BlackChancellor.svg create mode 100644 svg/BlackCobra.svg create mode 100644 svg/BlackCommoner.svg create mode 100644 svg/BlackCrownedBishop.svg create mode 100644 svg/BlackCrownedRook.svg create mode 100644 svg/BlackElephant.svg create mode 100644 svg/BlackGold.svg create mode 100644 svg/BlackGoldKnight.svg create mode 100644 svg/BlackGoldLance.svg create mode 100644 svg/BlackGoldPawn.svg create mode 100644 svg/BlackGoldSilver.svg create mode 100644 svg/BlackHawk.svg create mode 100644 svg/BlackKing.svg create mode 100644 svg/BlackKnight.svg create mode 100644 svg/BlackLance.svg create mode 100644 svg/BlackMarshall.svg create mode 100644 svg/BlackNightrider.svg create mode 100644 svg/BlackPawn.svg create mode 100644 svg/BlackPrincess.svg create mode 100644 svg/BlackQueen.svg create mode 100644 svg/BlackRook.svg create mode 100644 svg/BlackUnicorn.svg create mode 100644 svg/WhiteAdvisor.svg create mode 100644 svg/WhiteArchbishop.svg create mode 100644 svg/WhiteBishop.svg create mode 100644 svg/WhiteCanon.svg create mode 100644 svg/WhiteChancellor.svg create mode 100644 svg/WhiteCobra.svg create mode 100644 svg/WhiteCommoner.svg create mode 100644 svg/WhiteCrownedBishop.svg create mode 100644 svg/WhiteCrownedRook.svg create mode 100644 svg/WhiteElephant.svg create mode 100644 svg/WhiteGold.svg create mode 100644 svg/WhiteGoldKnight.svg create mode 100644 svg/WhiteGoldLance.svg create mode 100644 svg/WhiteGoldPawn.svg create mode 100644 svg/WhiteGoldSilver.svg create mode 100644 svg/WhiteHawk.svg create mode 100644 svg/WhiteKing.svg create mode 100644 svg/WhiteKnight.svg create mode 100644 svg/WhiteLance.svg create mode 100644 svg/WhiteMarshall.svg create mode 100644 svg/WhiteNightrider.svg create mode 100644 svg/WhitePawn.svg create mode 100644 svg/WhitePrincess.svg create mode 100644 svg/WhiteQueen.svg create mode 100644 svg/WhiteRook.svg create mode 100644 svg/WhiteUnicorn.svg create mode 100644 svg/eo_Analyzing.svg create mode 100644 svg/eo_Black.svg create mode 100644 svg/eo_Clear.svg create mode 100644 svg/eo_Ponder.svg create mode 100644 svg/eo_Thinking.svg create mode 100644 svg/eo_Unknown.svg create mode 100644 svg/eo_White.svg create mode 100644 svg/icon_black.svg create mode 100644 svg/icon_white.svg create mode 100644 themes/Mono/BlackAdvisor.svg create mode 100644 themes/Mono/BlackArchbishop.svg create mode 100644 themes/Mono/BlackBishop.svg create mode 100644 themes/Mono/BlackCanon.svg create mode 100644 themes/Mono/BlackChancellor.svg create mode 100644 themes/Mono/BlackCobra.svg create mode 100644 themes/Mono/BlackCommoner.svg create mode 100644 themes/Mono/BlackCrownedBishop.svg create mode 100644 themes/Mono/BlackCrownedRook.svg create mode 100644 themes/Mono/BlackElephant.svg create mode 100644 themes/Mono/BlackGold.svg create mode 100644 themes/Mono/BlackGoldKnight.svg create mode 100644 themes/Mono/BlackGoldLance.svg create mode 100644 themes/Mono/BlackGoldPawn.svg create mode 100644 themes/Mono/BlackGoldSilver.svg create mode 100644 themes/Mono/BlackHawk.svg create mode 100644 themes/Mono/BlackKing.svg create mode 100644 themes/Mono/BlackKnight.svg create mode 100644 themes/Mono/BlackLance.svg create mode 100644 themes/Mono/BlackMarshall.svg create mode 100644 themes/Mono/BlackNightrider.svg create mode 100644 themes/Mono/BlackPawn.svg create mode 100644 themes/Mono/BlackPrincess.svg create mode 100644 themes/Mono/BlackQueen.svg create mode 100644 themes/Mono/BlackRook.svg create mode 100644 themes/Mono/BlackUnicorn.svg create mode 100644 themes/Mono/WhiteAdvisor.svg create mode 100644 themes/Mono/WhiteArchbishop.svg create mode 100644 themes/Mono/WhiteBishop.svg create mode 100644 themes/Mono/WhiteCanon.svg create mode 100644 themes/Mono/WhiteChancellor.svg create mode 100644 themes/Mono/WhiteCobra.svg create mode 100644 themes/Mono/WhiteCommoner.svg create mode 100644 themes/Mono/WhiteCrownedBishop.svg create mode 100644 themes/Mono/WhiteCrownedRook.svg create mode 100644 themes/Mono/WhiteElephant.svg create mode 100644 themes/Mono/WhiteGold.svg create mode 100644 themes/Mono/WhiteGoldKnight.svg create mode 100644 themes/Mono/WhiteGoldLance.svg create mode 100644 themes/Mono/WhiteGoldPawn.svg create mode 100644 themes/Mono/WhiteGoldSilver.svg create mode 100644 themes/Mono/WhiteHawk.svg create mode 100644 themes/Mono/WhiteKing.svg create mode 100644 themes/Mono/WhiteKnight.svg create mode 100644 themes/Mono/WhiteLance.svg create mode 100644 themes/Mono/WhiteMarshall.svg create mode 100644 themes/Mono/WhiteNightrider.svg create mode 100644 themes/Mono/WhitePawn.svg create mode 100644 themes/Mono/WhitePrincess.svg create mode 100644 themes/Mono/WhiteQueen.svg create mode 100644 themes/Mono/WhiteRook.svg create mode 100644 themes/Mono/WhiteUnicorn.svg create mode 100644 themes/Mono/eo_Analyzing.svg create mode 100644 themes/Mono/eo_Black.svg create mode 100644 themes/Mono/eo_Clear.svg create mode 100644 themes/Mono/eo_Ponder.svg create mode 100644 themes/Mono/eo_Thinking.svg create mode 100644 themes/Mono/eo_Unknown.svg create mode 100644 themes/Mono/eo_White.svg create mode 100644 themes/Mono/icon_black.svg create mode 100644 themes/Mono/icon_white.svg create mode 100644 themes/Mono/shogi_bishop.svg create mode 100644 themes/Mono/shogi_bishop_promoted.svg create mode 100644 themes/Mono/shogi_gold.svg create mode 100644 themes/Mono/shogi_king.svg create mode 100644 themes/Mono/shogi_knight.svg create mode 100644 themes/Mono/shogi_knight_promoted.svg create mode 100644 themes/Mono/shogi_lance.svg create mode 100644 themes/Mono/shogi_lance_promoted.svg create mode 100644 themes/Mono/shogi_pawn.svg create mode 100644 themes/Mono/shogi_pawn_promoted.svg create mode 100644 themes/Mono/shogi_rook.svg create mode 100644 themes/Mono/shogi_rook_promoted.svg create mode 100644 themes/Mono/shogi_silver.svg create mode 100644 themes/Mono/shogi_silver_promoted.svg create mode 100644 themes/shogi/BlackAdvisor.svg create mode 100644 themes/shogi/BlackBishop.svg create mode 100644 themes/shogi/BlackCrownedBishop.svg create mode 100644 themes/shogi/BlackCrownedRook.svg create mode 100644 themes/shogi/BlackGold.svg create mode 100644 themes/shogi/BlackGoldKnight.svg create mode 100644 themes/shogi/BlackGoldLance.svg create mode 100644 themes/shogi/BlackGoldPawn.svg create mode 100644 themes/shogi/BlackGoldSilver.svg create mode 100644 themes/shogi/BlackKing.svg create mode 100644 themes/shogi/BlackKnight.svg create mode 100644 themes/shogi/BlackLance.svg create mode 100644 themes/shogi/BlackPawn.svg create mode 100644 themes/shogi/BlackRook.svg create mode 100644 themes/shogi/WhiteAdvisor.svg create mode 100644 themes/shogi/WhiteBishop.svg create mode 100644 themes/shogi/WhiteCrownedBishop.svg create mode 100644 themes/shogi/WhiteCrownedRook.svg create mode 100644 themes/shogi/WhiteGold.svg create mode 100644 themes/shogi/WhiteGoldKnight.svg create mode 100644 themes/shogi/WhiteGoldLance.svg create mode 100644 themes/shogi/WhiteGoldPawn.svg create mode 100644 themes/shogi/WhiteGoldSilver.svg create mode 100644 themes/shogi/WhiteKing.svg create mode 100644 themes/shogi/WhiteKnight.svg create mode 100644 themes/shogi/WhiteLance.svg create mode 100644 themes/shogi/WhitePawn.svg create mode 100644 themes/shogi/WhiteRook.svg create mode 100644 themes/xiangqi/.DS_Store create mode 100644 themes/xiangqi/BlackAdvisor.svg create mode 100644 themes/xiangqi/BlackCanon.svg create mode 100644 themes/xiangqi/BlackElephant.svg create mode 100644 themes/xiangqi/BlackGold.svg create mode 100644 themes/xiangqi/BlackKnight.svg create mode 100644 themes/xiangqi/BlackPawn.svg create mode 100644 themes/xiangqi/BlackRook.svg create mode 100644 themes/xiangqi/WhiteAdvisor.svg create mode 100644 themes/xiangqi/WhiteCanon.svg create mode 100644 themes/xiangqi/WhiteElephant.svg create mode 100644 themes/xiangqi/WhiteGold.svg create mode 100644 themes/xiangqi/WhiteKnight.svg create mode 100644 themes/xiangqi/WhitePawn.svg create mode 100644 themes/xiangqi/WhiteRook.svg create mode 100644 usounds.c create mode 100644 usystem.c create mode 100644 usystem.h create mode 100644 xaw/.dirstamp create mode 100644 xaw/xboard.c create mode 100644 xaw/xboard.h create mode 100644 xaw/xengineoutput.c create mode 100644 xaw/xgamelist.c create mode 100644 xaw/xgamelist.h create mode 100644 xaw/xhistory.c create mode 100644 xaw/xhistory.h create mode 100644 xaw/xoptions.c create mode 100644 xboard-config.desktop delete mode 100644 xboard.c delete mode 100644 xboard.h create mode 100644 xboard2.h delete mode 100644 xedittags.c delete mode 100644 xedittags.h delete mode 100644 xengineoutput.c delete mode 100644 xevalgraph.c delete mode 100644 xevalgraph.h delete mode 100644 xgamelist.c delete mode 100644 xgamelist.h delete mode 100644 xhistory.c delete mode 100644 xhistory.h delete mode 100644 xoptions.c ** Version 4.6.2 ** (git diff -b --stat --summary -M v4.6.1 HEAD) backend.c | 16 +++++++++------- configure.ac | 2 +- winboard/config.h | 6 +++--- winboard/language.txt | 2 ++ winboard/language/nederlands.lng | 2 ++ winboard/winboard.c | 1 + 6 files changed, 18 insertions(+), 11 deletions(-) ** Version 4.6.1 ** (git diff -b --stat --summary -M v4.6.0 HEAD) ChangeLog | 228 +++++++++++ DIFFSTAT | 38 ++ NEWS | 28 ++ SHORTLOG | 45 +++ args.h | 5 +- autogen.sh | 2 +- backend.c | 89 ++++- common.h | 1 + configure.ac | 2 +- engineoutput.c | 19 +- evalgraph.c | 4 +- moves.c | 3 +- po/da.po | 987 +++++++++++++++++++++++------------------------ po/de.po | 980 +++++++++++++++++++++++------------------------ po/es.po | 980 +++++++++++++++++++++++------------------------ po/it.po | 980 +++++++++++++++++++++++------------------------ po/ru.po | 980 +++++++++++++++++++++++------------------------ po/tr.po | 980 +++++++++++++++++++++++------------------------ po/uk.po | 1032 +++++++++++++++++++++++++------------------------- po/vi.po | 980 +++++++++++++++++++++++------------------------ po/xboard.pot | 981 +++++++++++++++++++++++------------------------ po/zh_CN.po | 980 +++++++++++++++++++++++------------------------ po/zh_HK.po | 980 +++++++++++++++++++++++------------------------ po/zh_TW.po | 980 +++++++++++++++++++++++------------------------ winboard/config.h | 6 +- winboard/wsettings.c | 13 +- xboard.c | 25 +- xboard.h | 8 +- xboard.texi | 107 ++---- xengineoutput.c | 6 +- xevalgraph.c | 6 +- xgamelist.c | 103 +++-- xoptions.c | 19 +- 33 files changed, 6499 insertions(+), 6078 deletions(-) ** Version 4.6.0 ** (git diff -b --stat --summary -M v4.5.3a HEAD) .gitignore | 3 + ABOUT-NLS | 1282 ++++++++++ COPYRIGHT | 2 +- ChangeLog | 3106 ++++++++++++++++++++++-- DIFFSTAT | 210 ++ Makefile.am | 56 +- NEWS | 35 + SHORTLOG | 435 ++++ args.h | 139 +- autogen.sh | 2 +- backend.c | 3426 ++++++++++++++++++-------- backend.h | 55 +- backendz.h | 2 +- bitmaps/bitmaps.h | 2 +- book.c | 261 ++- childio.c | 26 +- childio.h | 2 +- common.h | 142 +- config.rpath | 280 ++- configure.ac | 37 +- copyright.texi | 2 +- engineoutput.c | 100 +- engineoutput.h | 3 +- evalgraph.c | 85 +- evalgraph.h | 3 +- filebrowser/dir.c | 2 +- filebrowser/draw.c | 42 + filebrowser/path.c | 19 +- filebrowser/selfile.c | 66 +- filebrowser/selfile.h | 2 - frontend.h | 16 +- gamelist.c | 137 +- gettext.h | 262 ++- history.c | 33 +- lists.c | 41 +- lists.h | 2 +- m4/gettext.m4 | 383 +++ m4/iconv.m4 | 214 ++ m4/lib-ld.m4 | 110 + m4/lib-link.m4 | 774 ++++++ m4/lib-prefix.m4 | 224 ++ m4/nls.m4 | 32 + m4/po.m4 | 449 ++++ m4/progtest.m4 | 92 + moves.c | 341 ++-- moves.h | 8 +- parser.c | 4644 ++++------------------------------- parser.h | 2 +- parser.l | 1203 --------- pgntags.c | 145 +- pixmaps/board32.xpm | 42 + pixmaps/board48.xpm | 58 + pixmaps/cross32.xpm | 42 + pixmaps/cross48.xpm | 58 + po/LINGUAS | 3 +- po/Makefile.in.in | 162 +- po/Makevars | 2 +- po/Makevars.template | 41 + po/POTFILES.in | 10 +- po/Rules-quot | 47 + po/boldquot.sed | 10 + po/da.po | 2977 ++++++++++++++++++++++ po/de.po | 3464 +++++++++++++++++++------- po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/es.po | 2925 ++++++++++++++++++++++ po/insert-header.sin | 23 + po/it.po | 2933 ++++++++++++++++++++++ po/lng2po.sh | 96 + po/metascript | 125 + po/normalize.pl | 10 + po/quot.sed | 6 + po/ru.po | 2919 ++++++++++++++++++++++ po/strip-bad-utf8.pl | 14 + po/tr.po | 3306 +++++++++++++++++++------ po/uk.po | 3002 ++++++++++++++++++++++ po/vi.po | 2904 ++++++++++++++++++++++ po/xboard.pot | 2958 +++++++++++++++++------ po/zh_CN.po | 2917 ++++++++++++++++++++++ po/zh_HK.po | 2922 ++++++++++++++++++++++ po/zh_TW.po | 2915 ++++++++++++++++++++++ uci.c | 7 +- winboard/bitmaps/cross.ico | Bin 0 -> 766 bytes winboard/bitmaps/ni49o.bmp | Bin 454 -> 0 bytes winboard/bitmaps/ni49s.bmp | Bin 454 -> 0 bytes winboard/bitmaps/ni49w.bmp | Bin 454 -> 0 bytes winboard/bitmaps/ni72o.bmp | Bin 926 -> 0 bytes winboard/bitmaps/ni72s.bmp | Bin 926 -> 0 bytes winboard/bitmaps/ni72w.bmp | Bin 926 -> 0 bytes winboard/config.h | 6 +- winboard/defaults.h | 3 +- winboard/help.c | 2 +- winboard/help/html/24.htm | 2 +- winboard/jaws.c | 47 +- winboard/language.txt | 138 +- winboard/language/chinese(simp).lng | 787 ++++++ winboard/language/chinese(trad).lng | 785 ++++++ winboard/language/deutsch.lng | 971 ++++++++ winboard/language/italiano.lng | 976 ++++++++ winboard/language/nederlands.lng | 1216 +++++++++ winboard/language/romanian.lng | 1042 ++++++++ winboard/language/russian.lng | 994 ++++++++ winboard/language/spanish.lng | 953 +++++++ winboard/language/vietnamese.lng | 973 ++++++++ winboard/makefile.gcc | 15 +- winboard/makefile.ms | 3 - winboard/resource.h | 31 + winboard/wchat.c | 2 +- winboard/wclipbrd.c | 2 +- winboard/wclipbrd.h | 2 +- winboard/wedittags.c | 16 +- winboard/wengineoutput.c | 10 +- winboard/wevalgraph.c | 3 +- winboard/wgamelist.c | 39 +- winboard/winboard.c | 483 +++-- winboard/winboard.h | 11 +- winboard/winboard.rc | 158 +- winboard/winboard.rtf | 1644 +++++++------ winboard/woptions.c | 163 ++- winboard/woptions.h | 2 +- winboard/wsettings.c | 437 +++- winboard/wsockerr.c | 2 +- winboard/wsockerr.h | 2 +- xboard-fen-viewer.desktop | 52 + xboard-pgn-viewer.desktop | 52 + xboard-tourney.desktop | 52 + xboard.c | 2653 +++++++++----------- xboard.conf.in | 16 +- xboard.h | 26 +- xboard.png | Bin 15116 -> 1726 bytes xboard.texi | 1092 +++++++-- xboard.xml | 61 + xedittags.c | 316 +--- xedittags.h | 2 +- xengineoutput.c | 96 +- xevalgraph.c | 69 +- xevalgraph.h | 2 +- xgamelist.c | 205 +- xgamelist.h | 3 +- xhistory.c | 461 +--- xhistory.h | 4 +- xoptions.c | 1482 ++++++------ zic2xpm.c | 67 +- zic2xpm.man | 2 +- zippy.c | 54 +- zippy.h | 2 +- 146 files changed, 60376 insertions(+), 14197 deletions(-) create mode 100644 ABOUT-NLS create mode 100644 m4/gettext.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/progtest.m4 delete mode 100644 parser.l create mode 100644 pixmaps/board32.xpm create mode 100644 pixmaps/board48.xpm create mode 100644 pixmaps/cross32.xpm create mode 100644 pixmaps/cross48.xpm mode change 100755 => 100644 po/Makefile.in.in create mode 100644 po/Makevars.template create mode 100644 po/Rules-quot create mode 100644 po/boldquot.sed create mode 100644 po/da.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/es.po create mode 100644 po/insert-header.sin create mode 100644 po/it.po create mode 100755 po/lng2po.sh create mode 100644 po/metascript create mode 100755 po/normalize.pl create mode 100644 po/quot.sed mode change 100755 => 100644 po/remove-potcdate.sin create mode 100644 po/ru.po create mode 100755 po/strip-bad-utf8.pl create mode 100644 po/uk.po create mode 100644 po/vi.po mode change 100755 => 100644 po/xboard.pot create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_TW.po create mode 100644 winboard/bitmaps/cross.ico delete mode 100644 winboard/bitmaps/ni49o.bmp delete mode 100644 winboard/bitmaps/ni49s.bmp delete mode 100644 winboard/bitmaps/ni49w.bmp delete mode 100644 winboard/bitmaps/ni72o.bmp delete mode 100644 winboard/bitmaps/ni72s.bmp delete mode 100644 winboard/bitmaps/ni72w.bmp create mode 100644 winboard/language/chinese(simp).lng create mode 100644 winboard/language/chinese(trad).lng create mode 100644 winboard/language/deutsch.lng create mode 100644 winboard/language/italiano.lng create mode 100644 winboard/language/nederlands.lng create mode 100644 winboard/language/romanian.lng create mode 100644 winboard/language/russian.lng create mode 100644 winboard/language/spanish.lng create mode 100644 winboard/language/vietnamese.lng create mode 100644 xboard-fen-viewer.desktop create mode 100644 xboard-pgn-viewer.desktop create mode 100644 xboard-tourney.desktop create mode 100644 xboard.xml ** Version 4.5.3a ** (git diff -b --stat --summary -M v4.5.3 HEAD) winboard/makefile.gcc | 2 +- winboard/winboard.c | 10 +++++----- winboard/winboard.h | 2 +- winboard/woptions.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) ** Version 4.5.3 ** (git diff -b --stat --summary -M v4.5.2a HEAD) args.h | 27 +++++++++++++--------- backend.c | 54 +++++++++++++++++++++++++++++++++++-------- backend.h | 4 ++- book.c | 1 + configure.ac | 2 +- engineoutput.c | 14 +++++----- filebrowser/dir.c | 13 +++++----- filebrowser/draw.c | 7 +----- filebrowser/path.c | 10 +------- filebrowser/selfile.c | 17 +++---------- filebrowser/selfile.h | 17 +++++++++++++ history.c | 6 +++- moves.c | 6 ++-- uci.c | 2 +- winboard/config.h | 6 ++-- winboard/jaws.c | 37 +++++++++++++++++++++++++----- winboard/language.txt | 40 +------------------------------- winboard/makefile.gcc | 10 ++++++- winboard/winboard.c | 6 +++- winboard/winboard.h | 1 + winboard/winboard.rc | 32 +++++++++++++------------- winboard/wsettings.c | 33 +++++++++++++++++--------- xboard.c | 24 ++++++++++++------- xboard.h | 28 ++++++++++++++++++++++ xboard.png | Bin 1342 -> 15116 bytes xboard.svg | 26 ++++++++++++++------ xedittags.c | 11 --------- xengineoutput.c | 16 ------------- xevalgraph.c | 14 ----------- xgamelist.c | 61 +++++++++++++++++++++++++++++++----------------- xhistory.c | 6 ----- xoptions.c | 50 +++++++++++----------------------------- 32 files changed, 308 insertions(+), 273 deletions(-) ** Version 4.5.2a (Winboard only) ** (git diff -b --stat --summary -M v4.5.2 HEAD) winboard/wsettings.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) ** Version 4.5.2 ** (git diff -b --stat --summary -M v4.5.1 HEAD) ChangeLog | 361 +++++++++ DIFFSTAT | 31 + Makefile.am | 92 +++- NEWS | 20 + SHORTLOG | 50 ++ args.h | 13 +- backend.c | 112 ++-- backend.h | 7 +- common.h | 1 + configure.ac | 6 +- engineoutput.c | 1 - filebrowser/dir.c | 13 + filebrowser/draw.c | 9 +- filebrowser/path.c | 10 + filebrowser/selfile.c | 149 ++++- filebrowser/selfile.h | 6 + history.c | 1 - moves.c | 1 + parser.l | 4 +- shogipixmaps/add64.xpm | 73 -- shogipixmaps/adl64.xpm | 73 -- shogipixmaps/ald64.xpm | 73 -- shogipixmaps/all64.xpm | 73 -- shogipixmaps/ddd64.xpm | 73 -- shogipixmaps/ddl64.xpm | 73 -- shogipixmaps/dld64.xpm | 73 -- shogipixmaps/dll64.xpm | 73 -- shogipixmaps/qdd64.xpm | 2 +- shogipixmaps/qdl64.xpm | 2 +- shogipixmaps/qld64.xpm | 2 +- shogipixmaps/qll64.xpm | 112 ++-- shogipixmaps/wldd64.xpm | 2 +- shogipixmaps/wldl64.xpm | 2 +- uci.c | 4 - winboard/bitmaps/convert.c | 1 + winboard/config.h | 6 +- winboard/wgamelist.c | 9 +- winboard/winboard.c | 13 +- winboard/winboard.h | 1 + winboard/woptions.c | 2 +- winboard/wsettings.c | 24 +- xboard.c | 962 ++++++++++-------------- xboard.conf.in | 37 +- xboard.h | 2 + xboard.texi | 467 ++++++++---- xgamelist.c | 1 + xoptions.c | 1790 +++++++++++++++++++++++--------------------- 47 files changed, 2591 insertions(+), 2321 deletions(-) delete mode 100644 shogipixmaps/add64.xpm delete mode 100644 shogipixmaps/adl64.xpm delete mode 100644 shogipixmaps/ald64.xpm delete mode 100644 shogipixmaps/all64.xpm delete mode 100644 shogipixmaps/ddd64.xpm delete mode 100644 shogipixmaps/ddl64.xpm delete mode 100644 shogipixmaps/dld64.xpm delete mode 100644 shogipixmaps/dll64.xpm ** Version 4.5.1 ** (git diff -b --stat --summary -M v4.5.0 HEAD) ChangeLog | 142 ++++++++++++++++++++++++++++++++++++++++++++ DIFFSTAT | 26 ++++++++ Makefile.am | 2 +- NEWS | 32 ++++++++++ SHORTLOG | 27 ++++++++ backend.c | 11 ++-- childio.c | 1 + configure.ac | 40 ++++++------- filebrowser/dir.c | 18 ++---- filebrowser/draw.c | 34 ++++++---- filebrowser/path.c | 99 ++++++++++++++++--------------- filebrowser/selfile.c | 12 ++++- moves.c | 5 +- winboard/config.h | 6 +- winboard/help.c | 1 + winboard/help/html/01.htm | 2 +- winboard/help/html/02.htm | 14 ++++- winboard/help/winboard.chm | Bin 86507 -> 86883 bytes winboard/makefile.ms | 4 +- winboard/wchat.c | 2 +- winboard/winboard.c | 29 +++++---- winboard/winboard.dsp | 6 ++- winboard/woptions.c | 3 +- winboard/wsettings.c | 5 +- xboard.c | 5 +- xboard.texi | 10 ++-- 26 files changed, 398 insertions(+), 138 deletions(-) ** Version 4.5.0 ** (git diff -b --stat --summary -M v4.4.4 HEAD) AUTHORS | 16 +- COPYRIGHT | 2 +- ChangeLog | 2326 +++++++++++++++++++-- DIFFSTAT | 271 +++- FAQ.html | 15 + Makefile.am | 55 +- NEWS | 818 +++++++- README | 8 +- SHORTLOG | 293 +++ args.h | 1425 +++++++++++++ autogen.sh | 2 +- backend.c | 3916 ++++++++++++++++++++++------------ backend.h | 48 +- backendz.h | 2 +- bitmaps/bitmaps.h | 2 +- book.c | 39 +- childio.c | 9 +- childio.h | 2 +- cmail.in | 2 +- common.h | 118 +- config.rpath | 2 +- configure.ac | 20 +- copyright.texi | 2 +- engineoutput.c | 518 +++++ engineoutput.h | 69 + evalgraph.c | 339 +++ evalgraph.h | 60 + filebrowser/README | 3 + filebrowser/dir.c | 163 ++ filebrowser/draw.c | 935 ++++++++ filebrowser/path.c | 917 ++++++++ filebrowser/selfile.c | 756 +++++++ filebrowser/selfile.h | 149 ++ filebrowser/xstat.h | 23 + frontend.h | 35 +- gamelist.c | 186 ++- gettext.h | 2 +- history.c | 246 +++ lists.c | 2 +- lists.h | 2 +- moves.c | 666 ++++--- moves.h | 20 +- winboard/parser.c => parser.c | 2669 ++++++++++++----------- parser.h | 9 +- parser.l | 228 ++- pgntags.c | 26 +- pixmaps/convert.c | 29 +- pixmaps/marble_d.xpm | 238 ++ pixmaps/marble_l.xpm | 359 ++++ pixmaps/pixmaps.h | 2 +- pixmaps/wood_d.xpm | 239 +++ pixmaps/wood_l.xpm | 192 ++ pixmaps/xqboard.xpm | 498 +++++ pixmaps/xqwood.xpm | 597 ++++++ readme_HGM.txt | 411 ---- shogipixmaps/add64.xpm | 73 + shogipixmaps/adl64.xpm | 73 + shogipixmaps/ald64.xpm | 73 + shogipixmaps/all64.xpm | 73 + shogipixmaps/bdd64.xpm | 73 + shogipixmaps/bdl64.xpm | 73 + shogipixmaps/bld64.xpm | 74 + shogipixmaps/bll64.xpm | 74 + shogipixmaps/ddd64.xpm | 73 + shogipixmaps/ddl64.xpm | 73 + shogipixmaps/dld64.xpm | 73 + shogipixmaps/dll64.xpm | 73 + shogipixmaps/fdd64.xpm | 73 + shogipixmaps/fdl64.xpm | 73 + shogipixmaps/fld64.xpm | 74 + shogipixmaps/fll64.xpm | 74 + shogipixmaps/kdd64.xpm | 73 + shogipixmaps/kdl64.xpm | 73 + shogipixmaps/kld64.xpm | 73 + shogipixmaps/kll64.xpm | 73 + shogipixmaps/ldd64.xpm | 73 + shogipixmaps/ldl64.xpm | 73 + shogipixmaps/lld64.xpm | 73 + shogipixmaps/lll64.xpm | 73 + shogipixmaps/ndd64.xpm | 73 + shogipixmaps/ndl64.xpm | 73 + shogipixmaps/nld64.xpm | 74 + shogipixmaps/nll64.xpm | 74 + shogipixmaps/pdd64.xpm | 73 + shogipixmaps/pdl64.xpm | 73 + shogipixmaps/pld64.xpm | 74 + shogipixmaps/pll64.xpm | 74 + shogipixmaps/qdd64.xpm | 73 + shogipixmaps/qdl64.xpm | 73 + shogipixmaps/qld64.xpm | 73 + shogipixmaps/qll64.xpm | 73 + shogipixmaps/rdd64.xpm | 73 + shogipixmaps/rdl64.xpm | 73 + shogipixmaps/rld64.xpm | 73 + shogipixmaps/rll64.xpm | 73 + shogipixmaps/wdd64.xpm | 73 + shogipixmaps/wdl64.xpm | 73 + shogipixmaps/wld64.xpm | 73 + shogipixmaps/wldd64.xpm | 73 + shogipixmaps/wldl64.xpm | 73 + shogipixmaps/wll64.xpm | 73 + shogipixmaps/wlld64.xpm | 73 + shogipixmaps/wlll64.xpm | 73 + shogipixmaps/wndd64.xpm | 73 + shogipixmaps/wndl64.xpm | 73 + shogipixmaps/wnld64.xpm | 73 + shogipixmaps/wnll64.xpm | 73 + shogipixmaps/wpdd64.xpm | 73 + shogipixmaps/wpdl64.xpm | 73 + shogipixmaps/wpld64.xpm | 73 + shogipixmaps/wpll64.xpm | 73 + shogipixmaps/wsdd64.xpm | 73 + shogipixmaps/wsdl64.xpm | 73 + shogipixmaps/wsld64.xpm | 73 + shogipixmaps/wsll64.xpm | 73 + uci.c | 105 +- winboard/WB4Jaws.dev | 94 +- winboard/Winboard.dev | 94 +- winboard/bitmaps/wl33o.bmp | Bin 0 -> 326 bytes winboard/bitmaps/wl33s.bmp | Bin 0 -> 326 bytes winboard/bitmaps/wn33o.bmp | Bin 0 -> 326 bytes winboard/bitmaps/wn33s.bmp | Bin 0 -> 326 bytes winboard/bitmaps/wp33o.bmp | Bin 0 -> 326 bytes winboard/bitmaps/wp33s.bmp | Bin 0 -> 326 bytes winboard/bitmaps/ws33o.bmp | Bin 0 -> 326 bytes winboard/bitmaps/ws33s.bmp | Bin 0 -> 326 bytes winboard/config.h | 6 +- winboard/defaults.h | 11 +- winboard/help.c | 4 +- winboard/help/html/01.htm | 8 +- winboard/help/html/03.htm | 2 +- winboard/help/html/04.htm | 35 +- winboard/help/html/05.htm | 6 + winboard/help/html/06.htm | 9 +- winboard/help/html/07.htm | 57 +- winboard/help/html/09.htm | 6 + winboard/help/html/14.htm | 42 + winboard/help/html/15.htm | 16 +- winboard/help/html/16.htm | 19 +- winboard/help/html/18.htm | 12 +- winboard/help/html/24.htm | 2 +- winboard/help/winboard.chm | Bin 79031 -> 86507 bytes winboard/help/winboard.hhk | 138 ++- winboard/help/winboard.hhp | 13 +- winboard/jaws.c | 131 +- winboard/language.txt | 1425 +++++++++---- winboard/makefile.gcc | 38 +- winboard/makefile.ms | 34 +- winboard/resource.h | 87 + winboard/wchat.c | 165 ++- winboard/wclipbrd.c | 65 +- winboard/wclipbrd.h | 2 +- winboard/wedittags.c | 42 +- winboard/wengineo.c | 856 -------- winboard/wengineoutput.c | 436 ++++ winboard/wevalgraph.c | 359 +--- winboard/wgamelist.c | 97 +- winboard/wgamelist.h | 28 - winboard/whistory.c | 264 +-- winboard/winboard.c | 3449 +++++++++++------------------- winboard/winboard.dsp | 18 +- winboard/winboard.h | 57 +- winboard/winboard.rc | 776 ++++---- winboard/winboard.rtf | 1719 ++++++++------- winboard/wlayout.c | 3 +- winboard/woptions.c | 424 ++-- winboard/woptions.h | 2 +- winboard/wsettings.c | 28 +- winboard/wsockerr.c | 2 +- winboard/wsockerr.h | 2 +- xboard.c | 2912 ++++++++++++------------- xboard.conf.in | 77 + xboard.desktop | 154 ++ xboard.h | 26 +- xboard.texi | 960 ++++++--- xedittags.c | 13 +- xedittags.h | 3 +- xengineoutput.c | 597 ++---- xevalgraph.c | 456 ++++ winboard/wedittags.h => xevalgraph.h | 14 +- xgamelist.c | 413 ++++- xgamelist.h | 5 +- xhistory.c | 76 +- xhistory.h | 4 +- xoptions.c | 243 ++- zic2xpm.c | 19 +- zic2xpm.man | 2 +- zippy.c | 88 +- zippy.h | 2 +- 189 files changed, 29433 insertions(+), 12188 deletions(-) create mode 100644 args.h create mode 100644 engineoutput.c create mode 100644 engineoutput.h create mode 100644 evalgraph.c create mode 100644 evalgraph.h create mode 100644 filebrowser/README create mode 100644 filebrowser/dir.c create mode 100644 filebrowser/draw.c create mode 100644 filebrowser/path.c create mode 100644 filebrowser/selfile.c create mode 100644 filebrowser/selfile.h create mode 100644 filebrowser/xstat.h create mode 100644 history.c rename winboard/parser.c => parser.c (51%) mode change 100755 => 100644 parser.l create mode 100644 pixmaps/marble_d.xpm create mode 100644 pixmaps/marble_l.xpm create mode 100644 pixmaps/wood_d.xpm create mode 100644 pixmaps/wood_l.xpm create mode 100644 pixmaps/xqboard.xpm create mode 100644 pixmaps/xqwood.xpm delete mode 100644 readme_HGM.txt create mode 100644 shogipixmaps/add64.xpm create mode 100644 shogipixmaps/adl64.xpm create mode 100644 shogipixmaps/ald64.xpm create mode 100644 shogipixmaps/all64.xpm create mode 100644 shogipixmaps/bdd64.xpm create mode 100644 shogipixmaps/bdl64.xpm create mode 100644 shogipixmaps/bld64.xpm create mode 100644 shogipixmaps/bll64.xpm create mode 100644 shogipixmaps/ddd64.xpm create mode 100644 shogipixmaps/ddl64.xpm create mode 100644 shogipixmaps/dld64.xpm create mode 100644 shogipixmaps/dll64.xpm create mode 100644 shogipixmaps/fdd64.xpm create mode 100644 shogipixmaps/fdl64.xpm create mode 100644 shogipixmaps/fld64.xpm create mode 100644 shogipixmaps/fll64.xpm create mode 100644 shogipixmaps/kdd64.xpm create mode 100644 shogipixmaps/kdl64.xpm create mode 100644 shogipixmaps/kld64.xpm create mode 100644 shogipixmaps/kll64.xpm create mode 100644 shogipixmaps/ldd64.xpm create mode 100644 shogipixmaps/ldl64.xpm create mode 100644 shogipixmaps/lld64.xpm create mode 100644 shogipixmaps/lll64.xpm create mode 100644 shogipixmaps/ndd64.xpm create mode 100644 shogipixmaps/ndl64.xpm create mode 100644 shogipixmaps/nld64.xpm create mode 100644 shogipixmaps/nll64.xpm create mode 100644 shogipixmaps/pdd64.xpm create mode 100644 shogipixmaps/pdl64.xpm create mode 100644 shogipixmaps/pld64.xpm create mode 100644 shogipixmaps/pll64.xpm create mode 100644 shogipixmaps/qdd64.xpm create mode 100644 shogipixmaps/qdl64.xpm create mode 100644 shogipixmaps/qld64.xpm create mode 100644 shogipixmaps/qll64.xpm create mode 100644 shogipixmaps/rdd64.xpm create mode 100644 shogipixmaps/rdl64.xpm create mode 100644 shogipixmaps/rld64.xpm create mode 100644 shogipixmaps/rll64.xpm create mode 100644 shogipixmaps/wdd64.xpm create mode 100644 shogipixmaps/wdl64.xpm create mode 100644 shogipixmaps/wld64.xpm create mode 100644 shogipixmaps/wldd64.xpm create mode 100644 shogipixmaps/wldl64.xpm create mode 100644 shogipixmaps/wll64.xpm create mode 100644 shogipixmaps/wlld64.xpm create mode 100644 shogipixmaps/wlll64.xpm create mode 100644 shogipixmaps/wndd64.xpm create mode 100644 shogipixmaps/wndl64.xpm create mode 100644 shogipixmaps/wnld64.xpm create mode 100644 shogipixmaps/wnll64.xpm create mode 100644 shogipixmaps/wpdd64.xpm create mode 100644 shogipixmaps/wpdl64.xpm create mode 100644 shogipixmaps/wpld64.xpm create mode 100644 shogipixmaps/wpll64.xpm create mode 100644 shogipixmaps/wsdd64.xpm create mode 100644 shogipixmaps/wsdl64.xpm create mode 100644 shogipixmaps/wsld64.xpm create mode 100644 shogipixmaps/wsll64.xpm create mode 100644 winboard/bitmaps/wl33o.bmp create mode 100644 winboard/bitmaps/wl33s.bmp create mode 100644 winboard/bitmaps/wn33o.bmp create mode 100644 winboard/bitmaps/wn33s.bmp create mode 100644 winboard/bitmaps/wp33o.bmp create mode 100644 winboard/bitmaps/wp33s.bmp create mode 100644 winboard/bitmaps/ws33o.bmp create mode 100644 winboard/bitmaps/ws33s.bmp delete mode 100644 winboard/wengineo.c create mode 100644 winboard/wengineoutput.c delete mode 100644 winboard/wgamelist.h create mode 100644 xboard.conf.in create mode 100644 xboard.desktop create mode 100644 xevalgraph.c rename winboard/wedittags.h => xevalgraph.h (74%) ** Version 4.4.4 ** (git diff -b --stat --summary -M v4.4.3...HEAD) backend.c | 69 +++++++++++++++++++++++-------------------------- backend.h | 2 +- configure.ac | 10 +++--- moves.c | 4 +- parser.l | 16 ++++++------ winboard/config.h | 6 ++-- winboard/wgamelist.c | 4 +- winboard/winboard.c | 29 +++++++++++++++++--- winboard/woptions.c | 3 +- xboard.c | 2 +- xoptions.c | 2 +- zippy.c | 11 +------ 12 files changed, 82 insertions(+), 76 deletions(-) ** Version 4.4.3 ** (git diff -b --stat --summary -M v4.4.2...HEAD) AUTHORS | 16 +- COPYRIGHT | 2 +- ChangeLog | 323 ++++ DIFFSTAT | 84 + Makefile.am | 7 +- NEWS | 35 + SHORTLOG | 57 + autogen.sh | 2 +- backend.c | 224 ++- backend.h | 10 +- backendz.h | 2 +- bitmaps/bitmaps.h | 2 +- childio.c | 2 +- childio.h | 2 +- cmail.in | 2 +- common.h | 4 +- config.rpath | 2 +- configure.ac | 6 +- copyright.texi | 2 +- frontend.h | 2 +- gamelist.c | 2 +- gettext.h | 2 +- lists.c | 2 +- lists.h | 2 +- moves.c | 26 +- moves.h | 8 +- parser.h | 2 +- parser.l | 14 +- pgntags.c | 2 +- pixmaps/pixmaps.h | 2 +- winboard/config.h | 6 +- winboard/defaults.h | 2 +- winboard/help.c | 2 +- winboard/help/html/18.htm | 4 +- winboard/help/winboard.hhk | 4 +- winboard/jaws.c | 16 +- winboard/makefile.gcc | 8 +- winboard/makefile.ms | 8 +- winboard/parser.c | 3866 +++++++++++++++++++++++--------------------- winboard/resource.h | 1 + winboard/wchat.c | 30 +- winboard/wclipbrd.c | 2 +- winboard/wclipbrd.h | 2 +- winboard/wedittags.c | 2 +- winboard/wedittags.h | 2 +- winboard/wengineo.c | 1 + winboard/wgamelist.c | 2 +- winboard/wgamelist.h | 2 +- winboard/winboard.c | 29 +- winboard/winboard.h | 2 +- winboard/winboard.rc | 2 + winboard/winboard.rtf | 2 +- winboard/woptions.c | 8 +- winboard/woptions.h | 2 +- winboard/wsockerr.c | 2 +- winboard/wsockerr.h | 2 +- xboard.c | 13 +- xboard.h | 2 +- xboard.png | Bin 0 -> 1342 bytes xboard.svg | 119 ++ xboard.texi | 5 +- xedittags.c | 2 +- xedittags.h | 2 +- xengineoutput.c | 2 +- xgamelist.c | 2 +- xgamelist.h | 2 +- xhistory.c | 2 +- xhistory.h | 2 +- xoptions.c | 15 +- zic2xpm.c | 2 +- zic2xpm.man | 2 +- zippy.c | 2 +- zippy.h | 2 +- 73 files changed, 2973 insertions(+), 2060 deletions(-) mode change 100755 => 100644 backend.c mode change 100755 => 100644 gamelist.c mode change 100755 => 100644 gettext.h mode change 100755 => 100644 winboard/woptions.c create mode 100644 xboard.png create mode 100644 xboard.svg ** Version 4.4.2 ** (git diff --stat --summary -M v4.4.1...HEAD) Makefile.am | 6 +- backend.c | 108 +++++++++++++++++++++++------------------------ backend.h | 1 + configure.ac | 12 ++++- moves.c | 36 +--------------- pixmaps/asdd72.xpm | 26 ++++++------ pixmaps/asdl72.xpm | 26 ++++++------ pixmaps/cvdd37.xpm | 32 +++++++------- pixmaps/cvdd45.xpm | 42 +++++++++--------- pixmaps/cvdd49.xpm | 48 +++++++++++----------- pixmaps/cvdl37.xpm | 32 +++++++------- pixmaps/cvdl45.xpm | 42 +++++++++--------- pixmaps/cvdl49.xpm | 48 +++++++++++----------- pixmaps/hdd49.xpm | 64 ++++++++++++++-------------- pixmaps/hdd72.xpm | 108 ++++++++++++++++++++++++------------------------ pixmaps/hdl49.xpm | 64 ++++++++++++++-------------- pixmaps/hdl72.xpm | 108 ++++++++++++++++++++++++------------------------ shogibitmaps/README | 2 - shogibitmaps/sa58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sb58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sc58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sf58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sg58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sh58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sk58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sk58w.bmp | Bin 526 -> 0 bytes shogibitmaps/sl58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sl58w.bmp | Bin 526 -> 0 bytes shogibitmaps/sn58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sn58w.bmp | Bin 526 -> 0 bytes shogibitmaps/sp58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sp58w.bmp | Bin 526 -> 0 bytes shogibitmaps/sr58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sr58w.bmp | Bin 526 -> 0 bytes shogibitmaps/ss58o.bmp | Bin 526 -> 0 bytes shogibitmaps/su58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sw58o.bmp | Bin 526 -> 0 bytes shogibitmaps/sw58w.bmp | Bin 526 -> 0 bytes winboard/config.h | 6 +- winboard/makefile.gcc | 2 +- winboard/makefile.ms | 2 +- winboard/wchat.c | 5 +- winboard/wclipbrd.c | 3 +- winboard/winboard.c | 9 +--- winboard/woptions.c | 4 +- xboard.c | 1 + xengineoutput.c | 4 ++ xhistory.c | 25 ++++++----- xoptions.c | 5 +- 49 files changed, 424 insertions(+), 447 deletions(-) delete mode 100644 shogibitmaps/README delete mode 100644 shogibitmaps/sa58o.bmp delete mode 100644 shogibitmaps/sb58o.bmp delete mode 100644 shogibitmaps/sc58o.bmp delete mode 100644 shogibitmaps/sf58o.bmp delete mode 100644 shogibitmaps/sg58o.bmp delete mode 100644 shogibitmaps/sh58o.bmp delete mode 100644 shogibitmaps/sk58o.bmp delete mode 100644 shogibitmaps/sk58w.bmp delete mode 100644 shogibitmaps/sl58o.bmp delete mode 100644 shogibitmaps/sl58w.bmp delete mode 100644 shogibitmaps/sn58o.bmp delete mode 100644 shogibitmaps/sn58w.bmp delete mode 100644 shogibitmaps/sp58o.bmp delete mode 100644 shogibitmaps/sp58w.bmp delete mode 100644 shogibitmaps/sr58o.bmp delete mode 100644 shogibitmaps/sr58w.bmp delete mode 100644 shogibitmaps/ss58o.bmp delete mode 100644 shogibitmaps/su58o.bmp delete mode 100644 shogibitmaps/sw58o.bmp delete mode 100644 shogibitmaps/sw58w.bmp ** Version 4.4.1 ** (git diff --stat --summary -M vold...vnew) .gitignore | 27 +- ChangeLog | 1445 +++++++++++++++++++++++++++++++------------- Makefile.am | 41 +- NEWS | 24 + README | 1 - ToDo => TODO | 0 backend.c | 1322 +++++++++++++++++++++++++---------------- backend.h | 15 +- backendz.h | 1 + bitmaps/a49c.bm | 27 - bitmaps/b129o.bm | 189 ++++++- bitmaps/b129s.bm | 189 ++++++- bitmaps/bitmaps.h | 1060 ++++++++++++++++---------------- bitmaps/fixup.sed | 3 - bitmaps/h129o.bm | 5 - bitmaps/k129o.bm | 189 ++++++- bitmaps/k129s.bm | 189 ++++++- bitmaps/m33s.bm | 18 +- bitmaps/n129o.bm | 189 ++++++- bitmaps/n129s.bm | 189 ++++++- bitmaps/p129o.bm | 189 ++++++- bitmaps/p129s.bm | 189 ++++++- bitmaps/q129o.bm | 189 ++++++- bitmaps/q129s.bm | 189 ++++++- bitmaps/r129o.bm | 189 ++++++- bitmaps/r129s.bm | 189 ++++++- bitmaps/unsigned.sh | 8 - bitmaps/v54o.bm | 30 - bitmaps/v54s.bm | 30 - bitmaps/w54o.bm | 27 - bitmaps/w54s.bm | 27 - book.c | 6 +- cmail.in | 6 +- common.h | 14 +- configure.ac | 2 +- copyright.texi | 1 + engine-intf.html | 1118 ++++++++++++++++------------------ frontend.h | 15 +- gamelist.c | 27 +- moves.c | 49 +- parser.h | 4 +- parser.l | 15 +- pgntags.c | 4 + pixmaps/add33.xpm | 23 +- pixmaps/add37.xpm | 21 +- pixmaps/add40.xpm | 23 +- pixmaps/add45.xpm | 27 +- pixmaps/add49.xpm | 29 +- pixmaps/add54.xpm | 39 +- pixmaps/add58.xpm | 35 +- pixmaps/add64.xpm | 39 +- pixmaps/add72.xpm | 41 +- pixmaps/adl33.xpm | 23 +- pixmaps/adl37.xpm | 21 +- pixmaps/adl40.xpm | 23 +- pixmaps/adl45.xpm | 27 +- pixmaps/adl49.xpm | 29 +- pixmaps/adl54.xpm | 39 +- pixmaps/adl58.xpm | 35 +- pixmaps/adl64.xpm | 39 +- pixmaps/adl72.xpm | 41 +- pixmaps/asdd33.xpm | 47 +- pixmaps/asdd45.xpm | 53 -- pixmaps/asdd49.xpm | 61 +- pixmaps/asdd72.xpm | 85 ++-- pixmaps/asdl33.xpm | 47 +- pixmaps/asdl45.xpm | 53 -- pixmaps/asdl49.xpm | 61 +- pixmaps/asdl72.xpm | 85 ++-- pixmaps/asld45.xpm | 54 -- pixmaps/asll45.xpm | 54 -- pixmaps/cdd33.xpm | 41 +- pixmaps/cdd37.xpm | 53 +- pixmaps/cdd40.xpm | 53 +- pixmaps/cdd45.xpm | 57 +- pixmaps/cdd49.xpm | 61 +- pixmaps/cdd54.xpm | 71 ++-- pixmaps/cdd58.xpm | 73 ++-- pixmaps/cdd64.xpm | 81 ++-- pixmaps/cdd72.xpm | 91 ++-- pixmaps/cdl33.xpm | 41 +- pixmaps/cdl37.xpm | 53 +- pixmaps/cdl40.xpm | 53 +- pixmaps/cdl45.xpm | 57 +- pixmaps/cdl49.xpm | 61 +- pixmaps/cdl54.xpm | 71 ++-- pixmaps/cdl58.xpm | 73 ++-- pixmaps/cdl64.xpm | 81 ++-- pixmaps/cdl72.xpm | 91 ++-- pixmaps/convert.c | 30 +- pixmaps/cvdd33.xpm | 39 +- pixmaps/cvdd37.xpm | 23 +- pixmaps/cvdd40.xpm | 49 +- pixmaps/cvdd45.xpm | 27 +- pixmaps/cvdd49.xpm | 31 +- pixmaps/cvdd54.xpm | 67 +- pixmaps/cvdd58.xpm | 77 ++-- pixmaps/cvdd64.xpm | 79 ++-- pixmaps/cvdd72.xpm | 87 ++-- pixmaps/cvdl33.xpm | 39 +- pixmaps/cvdl37.xpm | 23 +- pixmaps/cvdl40.xpm | 49 +- pixmaps/cvdl45.xpm | 27 +- pixmaps/cvdl49.xpm | 31 +- pixmaps/cvdl54.xpm | 67 +- pixmaps/cvdl58.xpm | 77 ++-- pixmaps/cvdl64.xpm | 79 ++-- pixmaps/cvdl72.xpm | 87 ++-- pixmaps/dkdd33.xpm | 19 +- pixmaps/dkdd49.xpm | 23 +- pixmaps/dkdd72.xpm | 37 +- pixmaps/dkdl33.xpm | 19 +- pixmaps/dkdl49.xpm | 23 +- pixmaps/dkdl72.xpm | 37 +- pixmaps/edd33.xpm | 49 +- pixmaps/edd49.xpm | 63 +- pixmaps/edd72.xpm | 101 ++-- pixmaps/edl33.xpm | 49 +- pixmaps/edl49.xpm | 63 +- pixmaps/edl72.xpm | 101 ++-- pixmaps/fdd33.xpm | 35 +- pixmaps/fdd49.xpm | 43 +- pixmaps/fdd72.xpm | 37 +- pixmaps/fdl33.xpm | 35 +- pixmaps/fdl49.xpm | 43 +- pixmaps/fdl72.xpm | 37 +- pixmaps/gdd33.xpm | 11 +- pixmaps/gdd49.xpm | 11 +- pixmaps/gdd72.xpm | 19 +- pixmaps/gdl33.xpm | 11 +- pixmaps/gdl49.xpm | 11 +- pixmaps/gdl72.xpm | 19 +- pixmaps/hdd33.xpm | 47 +- pixmaps/hdd49.xpm | 39 +- pixmaps/hdd72.xpm | 63 +- pixmaps/hdl33.xpm | 47 +- pixmaps/hdl49.xpm | 39 +- pixmaps/hdl72.xpm | 63 +- pixmaps/ldd33.xpm | 23 +- pixmaps/ldd37.xpm | 25 +- pixmaps/ldd40.xpm | 29 +- pixmaps/ldd45.xpm | 31 +- pixmaps/ldd49.xpm | 25 +- pixmaps/ldd54.xpm | 39 +- pixmaps/ldd58.xpm | 39 +- pixmaps/ldd64.xpm | 37 +- pixmaps/ldd72.xpm | 45 +- pixmaps/ldl33.xpm | 23 +- pixmaps/ldl37.xpm | 25 +- pixmaps/ldl40.xpm | 29 +- pixmaps/ldl45.xpm | 31 +- pixmaps/ldl49.xpm | 25 +- pixmaps/ldl54.xpm | 39 +- pixmaps/ldl58.xpm | 39 +- pixmaps/ldl64.xpm | 37 +- pixmaps/ldl72.xpm | 45 +- pixmaps/mdd33.xpm | 84 ++-- pixmaps/mdd49.xpm | 23 +- pixmaps/mdd72.xpm | 29 +- pixmaps/mdl33.xpm | 84 ++-- pixmaps/mdl49.xpm | 23 +- pixmaps/mdl72.xpm | 29 +- pixmaps/odd33.xpm | 19 +- pixmaps/odd49.xpm | 31 +- pixmaps/odd72.xpm | 45 +- pixmaps/odl33.xpm | 19 +- pixmaps/odl49.xpm | 31 +- pixmaps/odl72.xpm | 45 +- pixmaps/sdd49.xpm | 19 +- pixmaps/sdd72.xpm | 27 +- pixmaps/sdl49.xpm | 19 +- pixmaps/sdl72.xpm | 27 +- pixmaps/udd49.xpm | 49 +- pixmaps/udd72.xpm | 59 +- pixmaps/udl49.xpm | 49 +- pixmaps/udl72.xpm | 59 +- pixmaps/vdd33.xpm | 39 +- pixmaps/vdd49.xpm | 57 +- pixmaps/vdd54.xpm | 62 -- pixmaps/vdd72.xpm | 77 ++-- pixmaps/vdl33.xpm | 39 +- pixmaps/vdl49.xpm | 57 +- pixmaps/vdl54.xpm | 62 -- pixmaps/vdl72.xpm | 77 ++-- pixmaps/vld54.xpm | 63 -- pixmaps/vll54.xpm | 63 -- pixmaps/wdd33.xpm | 39 +- pixmaps/wdd49.xpm | 49 +- pixmaps/wdd54.xpm | 62 -- pixmaps/wdd72.xpm | 69 ++- pixmaps/wdl33.xpm | 39 +- pixmaps/wdl49.xpm | 49 +- pixmaps/wdl54.xpm | 62 -- pixmaps/wdl72.xpm | 69 ++- pixmaps/wld54.xpm | 63 -- pixmaps/wldd49.xpm | 49 +- pixmaps/wldd72.xpm | 69 ++- pixmaps/wldl49.xpm | 49 +- pixmaps/wldl72.xpm | 69 ++- pixmaps/wll54.xpm | 63 -- pixmaps/wndd49.xpm | 47 +- pixmaps/wndd72.xpm | 69 ++- pixmaps/wndl49.xpm | 47 +- pixmaps/wndl72.xpm | 69 ++- pixmaps/wpdd49.xpm | 37 +- pixmaps/wpdd72.xpm | 53 +- pixmaps/wpdl49.xpm | 37 +- pixmaps/wpdl72.xpm | 53 +- pixmaps/wsdd49.xpm | 49 +- pixmaps/wsdd72.xpm | 69 ++- pixmaps/wsdl49.xpm | 49 +- pixmaps/wsdl72.xpm | 69 ++- shiphtml | 25 - winboard/COMPILING | 26 +- winboard/WB4Jaws.dev | 30 +- winboard/Winboard.dev | 30 +- winboard/bitmaps/as45o.bmp | Bin 422 -> 0 bytes winboard/bitmaps/as45s.bmp | Bin 422 -> 0 bytes winboard/bitmaps/as45w.bmp | Bin 422 -> 0 bytes winboard/bitmaps/bas.gif | Bin 308 -> 0 bytes winboard/bitmaps/bcv.gif | Bin 295 -> 0 bytes winboard/bitmaps/bitmaps.h | 368 ----------- winboard/bitmaps/convert.c | 4 +- winboard/bitmaps/h129o.bmp | Bin 2642 -> 0 bytes winboard/bitmaps/m129o.bmp | Bin 2642 -> 0 bytes winboard/bitmaps/m33s.bmp | Bin 3354 -> 326 bytes winboard/bitmaps/v54o.bmp | Bin 494 -> 0 bytes winboard/bitmaps/v54s.bmp | Bin 494 -> 0 bytes winboard/bitmaps/v54w.bmp | Bin 494 -> 0 bytes winboard/bitmaps/w54o.bmp | Bin 454 -> 0 bytes winboard/bitmaps/w54s.bmp | Bin 454 -> 0 bytes winboard/bitmaps/w54w.bmp | Bin 454 -> 0 bytes winboard/bitmaps/was.gif | Bin 326 -> 0 bytes winboard/bitmaps/wcv.gif | Bin 314 -> 0 bytes winboard/config.h | 10 +- winboard/internationalize | 3 + winboard/jaws.c | 98 ++-- winboard/language.txt | 460 ++++++++++++++ winboard/makefile.gcc | 9 +- winboard/makefile.ms | 9 +- winboard/metascript.txt | 14 + winboard/resource.h | 9 + winboard/wchat.c | 256 ++++++++ winboard/wclipbrd.c | 13 - winboard/wevalgraph.c | 356 ++++++----- winboard/wgamelist.c | 5 +- winboard/winboard.c | 668 +++++++-------------- winboard/winboard.dsp | 4 + winboard/winboard.h | 1 + winboard/winboard.rc | 70 ++- winboard/winboard.rtf | 1002 ++++++++++++++++--------------- winboard/woptions.c | 60 +-- winboard/wsettings.c | 136 +---- xboard.c | 533 +++++++---------- xboard.texi | 166 +++--- xedittags.c | 16 - xengineoutput.c | 40 +- xhistory.c | 53 -- xoptions.c | 148 +---- zippy.c | 13 +- 260 files changed, 11230 insertions(+), 8943 deletions(-) rename ToDo => TODO (100%) mode change 100644 => 100755 backend.c delete mode 100644 bitmaps/a49c.bm delete mode 100644 bitmaps/fixup.sed delete mode 100644 bitmaps/h129o.bm delete mode 100644 bitmaps/unsigned.sh delete mode 100644 bitmaps/v54o.bm delete mode 100644 bitmaps/v54s.bm delete mode 100644 bitmaps/w54o.bm delete mode 100644 bitmaps/w54s.bm mode change 100644 => 100755 gamelist.c delete mode 100644 pixmaps/asdd45.xpm delete mode 100644 pixmaps/asdl45.xpm delete mode 100644 pixmaps/asld45.xpm delete mode 100644 pixmaps/asll45.xpm delete mode 100644 pixmaps/vdd54.xpm delete mode 100644 pixmaps/vdl54.xpm delete mode 100644 pixmaps/vld54.xpm delete mode 100644 pixmaps/vll54.xpm delete mode 100644 pixmaps/wdd54.xpm delete mode 100644 pixmaps/wdl54.xpm delete mode 100644 pixmaps/wld54.xpm delete mode 100644 pixmaps/wll54.xpm delete mode 100644 shiphtml delete mode 100644 winboard/bitmaps/as45o.bmp delete mode 100644 winboard/bitmaps/as45s.bmp delete mode 100644 winboard/bitmaps/as45w.bmp delete mode 100644 winboard/bitmaps/bas.gif delete mode 100644 winboard/bitmaps/bcv.gif delete mode 100644 winboard/bitmaps/bitmaps.h delete mode 100644 winboard/bitmaps/h129o.bmp delete mode 100644 winboard/bitmaps/m129o.bmp delete mode 100644 winboard/bitmaps/v54o.bmp delete mode 100644 winboard/bitmaps/v54s.bmp delete mode 100644 winboard/bitmaps/v54w.bmp delete mode 100644 winboard/bitmaps/w54o.bmp delete mode 100644 winboard/bitmaps/w54s.bmp delete mode 100644 winboard/bitmaps/w54w.bmp delete mode 100644 winboard/bitmaps/was.gif delete mode 100644 winboard/bitmaps/wcv.gif create mode 100644 winboard/internationalize create mode 100644 winboard/language.txt create mode 100644 winboard/metascript.txt create mode 100644 winboard/wchat.c mode change 100644 => 100755 winboard/winboard.dsp mode change 100644 => 100755 winboard/woptions.c xboard-4.8.0/parser.c0000644000175000001440000006100312421746612011364 00000000000000/* * parser.c -- * * Copyright 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #include "config.h" #include #include #include #include "common.h" #include "backend.h" #include "frontend.h" #include "parser.h" #include "moves.h" extern Board boards[MAX_MOVES]; extern int PosFlags(int nr); int yyboardindex; int yyskipmoves = FALSE; char currentMoveString[4096]; // a bit ridiculous size? char *yy_text; #define PARSEBUFSIZE 10000 static FILE *inputFile; static char *inPtr, *parsePtr, *parseStart; static char inputBuf[PARSEBUFSIZE]; static char yytext[PARSEBUFSIZE]; static char fromString = 0, lastChar = '\n'; #define NOTHING 0 #define NUMERIC 1 #define ALPHABETIC 2 #define BADNUMBER (-2000000000) int ReadLine () { // Read one line from the input file, and append to the buffer char c, *start = inPtr; if(fromString) return 0; // parsing string, so the end is a hard end if(!inputFile) return 0; while((c = fgetc(inputFile)) != EOF) { *inPtr++ = c; if(c == '\n') { *inPtr = NULLCHAR; return 1; } if(inPtr - inputBuf > PARSEBUFSIZE-2) inPtr--; //prevent crash on overflow } if(inPtr == start) return 0; *inPtr++ = '\n', *inPtr = NULLCHAR; // repair missing linefeed at EOF return 1; } int Scan (char c, char **p) { // line-spanning skip to mentioned character or EOF do { while(**p) if(*(*p)++ == c) return 0; } while(ReadLine()); // no closing bracket; force match for entire rest of file. return 1; } int SkipWhite (char **p) { // skip spaces tabs and newlines; return 1 if anything was skipped char *start = *p; do{ while(**p == ' ' || **p == '\t' || **p == '\n' || **p == '\r') (*p)++; } while(**p == NULLCHAR && ReadLine()); // continue as long as ReadLine reads something return *p != start; } static inline int Match (char *pattern, char **ptr) { char *p = pattern, *s = *ptr; while(*p && (*p == *s++ || s[-1] == '\r' && *p--)) p++; if(*p == 0) { *ptr = s; return 1; } return 0; // no match, no ptr update } static inline int Word (char *pattern, char **p) { if(Match(pattern, p)) return 1; if(*pattern >= 'a' && *pattern <= 'z' && *pattern - **p == 'a' - 'A') { // capitalized (*p)++; if(Match(pattern + 1, p)) return 1; (*p)--; } return 0; } int Verb (char *pattern, char **p) { int res = Word(pattern, p); if(res && !Match("s", p)) Match("ed", p); // eat conjugation suffix, if any return res; } int Number (char **p) { int val = 0; if(**p < '0' || **p > '9') return BADNUMBER; while(**p >= '0' && **p <= '9') { val = 10*val + *(*p)++ - '0'; } return val; } int RdTime (char c, char **p) { char *start = ++(*p), *sec; // increment *p, as it was pointing to the opening ( or { if(Number(p) == BADNUMBER) return 0; sec = *p; if(Match(":", p) && Number(p) != BADNUMBER && *p - sec == 3) { // well formed sec = *p; if(Match(".", p) && Number(p) != BADNUMBER && *(*p)++ == c) return 1; // well-formed fraction *p = sec; if(*(*p)++ == c) return 1; // matching bracket without fraction } *p = start; // failure return 0; } char PromoSuffix (char **p) { char *start = *p; if(**p == 'e' && (Match("ep", p) || Match("e.p.", p))) { *p = start; return NULLCHAR; } // non-compliant e.p. suffix is no promoChar! if(**p == '+' && IS_SHOGI(gameInfo.variant)) { (*p)++; return '+'; } if(**p == '=' || (gameInfo.variant == VariantSChess) && **p == '/') (*p)++; // optional = (or / for Seirawan gating) if(**p == '(' && (*p)[2] == ')' && isalpha( (*p)[1] )) { (*p) += 3; return ToLower((*p)[-2]); } if(isalpha(**p) && **p != 'x') return ToLower(*(*p)++); // reserve 'x' for multi-leg captures? if(*p != start) return **p == '+' ? *(*p)++ : '='; // must be the optional = (or =+) return NULLCHAR; // no suffix detected } int NextUnit (char **p) { // Main parser routine int coord[4], n, result, piece, i; char type[4], promoted, separator, slash, *oldp, *commentEnd, c; int wom = quickFlag ? quickFlag&1 : WhiteOnMove(yyboardindex); // ********* try white first, because it is so common ************************** if(**p == ' ' || **p == '\n' || **p == '\t') { parseStart = (*p)++; return Nothing; } if(**p == NULLCHAR) { // make sure there is something to parse if(fromString) return 0; // we are parsing string, so the end is really the end *p = inPtr = inputBuf; if(!ReadLine()) return 0; // EOF } else if(inPtr > inputBuf + PARSEBUFSIZE/2) { // buffer fills up with already parsed stuff char *q = *p, *r = inputBuf; while(*r++ = *q++); *p = inputBuf; inPtr = r - 1; } parseStart = oldp = *p; // remember where we begin // ********* attempt to recognize a SAN move in the leading non-blank text ***** piece = separator = promoted = slash = n = 0; for(i=0; i<4; i++) coord[i] = -1, type[i] = NOTHING; if(**p == '+') (*p)++, promoted++; if(**p >= 'a' && **p <= 'z' && (*p)[1]== '@') piece =*(*p)++ + 'A' - 'a'; else if(**p >= 'A' && **p <= 'Z') { piece = *(*p)++; // Note we could test for 2-byte non-ascii names here if(**p == '/') slash = *(*p)++; } while(n < 4) { if(**p >= 'a' && **p < 'x') coord[n] = *(*p)++ - 'a', type[n++] = ALPHABETIC; else if((i = Number(p)) != BADNUMBER) coord[n] = i, type[n++] = NUMERIC; else break; if(n == 2 && type[0] == type[1]) { // if two identical types, the opposite type in between must have been missing type[2] = type[1]; coord[2] = coord[1]; type[1] = NOTHING; coord[1] = -1; n++; } } // we always get here, and might have read a +, a piece, and upto 4 potential coordinates if(n <= 2) { // could be from-square or disambiguator, when -:xX follow, or drop with @ directly after piece, but also to-square if(**p == '-' || **p == ':' || **p == 'x' || **p == 'X' || // these cannot be move suffix, so to-square must follow (**p == '@' || **p == '*') && n == 0 && !promoted && piece) { // P@ must also be followed by to-square separator = *(*p)++; if(n == 1) coord[1] = coord[0]; // must be disambiguator, but we do not know which yet n = 2; while(n < 4) { // attempt to read to-square if(**p >= 'a' && **p < 'x') coord[n] = *(*p)++ - 'a', type[n++] = ALPHABETIC; else if((i = Number(p)) != BADNUMBER) coord[n] = i, type[n++] = NUMERIC; else break; } } else if((**p == '+' || **p == '=') && n == 1 && piece && type[0] == NUMERIC) { // can be traditional Xiangqi notation separator = *(*p)++; n = 2; if((i = Number(p)) != BADNUMBER) coord[n] = i, type[n++] = NUMERIC; } else if(n == 2) { // only one square mentioned, must be to-square while(n < 4) { coord[n] = coord[n-2], type[n] = type[n-2], coord[n-2] = -1, type[n-2] = NOTHING; n++; } } } else if(n == 3 && type[1] != NOTHING) { // must be hyphenless disambiguator + to-square for(i=3; i>0; i--) coord[i] = coord[i-1], type[i] = type[i-1]; // move to-square to where it belongs type[1] = NOTHING; // disambiguator goes in first two positions n = 4; } // we always get here; move must be completely read now, with to-square coord(s) at end if(n == 3) { // incomplete to-square. Could be Xiangqi traditional, or stuff like fxg if(piece && type[1] == NOTHING && type[0] == NUMERIC && type[2] == NUMERIC && (separator == '+' || separator == '=' || separator == '-')) { // Xiangqi traditional return ImpossibleMove; // for now treat as invalid } // fxg stuff, but also things like 0-0, 0-1 and 1-0 if(!piece && type[1] == NOTHING && type[0] == ALPHABETIC && type[2] == ALPHABETIC && (coord[0] != 14 || coord[2] != 14) /* reserve oo for castling! */ ) { piece = 'P'; n = 4; // kludge alert: fake full to-square } } else if(n == 1 && type[0] == NUMERIC && coord[0] > 1) { while(**p == '.') (*p)++; return Nothing; } // fast exit for move numbers if(n == 4 && type[2] != type[3] && // we have a valid to-square (kludge: type[3] can be NOTHING on fxg type move) (piece || !promoted) && // promoted indicator only valid on named piece type (type[2] == ALPHABETIC || IS_SHOGI(gameInfo.variant))) { // in Shogi also allow alphabetic rank DisambiguateClosure cl; int fromX, fromY, toX, toY; if(slash && (!piece || type[1] == NOTHING)) goto badMove; // slash after piece only in ICS long format if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */ if(type[2] == NUMERIC) { // alpha-rank coord[2] = BOARD_RGHT - BOARD_LEFT - coord[2]; coord[3] = BOARD_HEIGHT - coord[3]; if(coord[0] >= 0) coord[0] = BOARD_RGHT - BOARD_LEFT - coord[0]; if(coord[1] >= 0) coord[1] = BOARD_HEIGHT - coord[1]; } toX = cl.ftIn = (currentMoveString[2] = coord[2] + 'a') - AAA; toY = cl.rtIn = (currentMoveString[3] = coord[3] + '0') - ONE; if(type[3] == NOTHING) cl.rtIn = -1; // for fxg type moves ask for toY disambiguation else if(toY >= BOARD_HEIGHT || toY < 0) return ImpossibleMove; // vert off-board to-square if(toX < BOARD_LEFT || toX >= BOARD_RGHT) return ImpossibleMove; if(piece) { cl.pieceIn = CharToPiece(wom ? piece : ToLower(piece)); if(cl.pieceIn == EmptySquare) return ImpossibleMove; // non-existent piece if(promoted) cl.pieceIn = (ChessSquare) (CHUPROMOTED cl.pieceIn); } else cl.pieceIn = EmptySquare; if(separator == '@' || separator == '*') { // drop move. We only get here without from-square or promoted piece fromY = DROP_RANK; fromX = cl.pieceIn; currentMoveString[0] = piece; currentMoveString[1] = '@'; return LegalityTest(boards[yyboardindex], PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, fromY, fromX, toY, toX, NULLCHAR); } if(type[1] == NOTHING && type[0] != NOTHING) { // there is a disambiguator if(type[0] != type[2]) coord[0] = -1, type[1] = type[0], type[0] = NOTHING; // it was a rank-disambiguator } if( type[1] != type[2] && // means fromY is of opposite type as ToX, or NOTHING (type[0] == NOTHING || type[0] == type[2]) ) { // well formed fromX = (currentMoveString[0] = coord[0] + 'a') - AAA; fromY = (currentMoveString[1] = coord[1] + '0') - ONE; currentMoveString[4] = cl.promoCharIn = PromoSuffix(p); currentMoveString[5] = NULLCHAR; if(!cl.promoCharIn && (**p == '-' || **p == 'x')) { // Lion-type multi-leg move currentMoveString[5] = (killX = toX) + AAA; // what we thought was to-square is in fact kill-square currentMoveString[6] = (killY = toY) + ONE; // append it as suffix behind long algebraic move currentMoveString[4] = ';'; currentMoveString[7] = NULLCHAR; // read new to-square (VERY non-robust! Assumes correct (non-alpha-rank) syntax, and messes up on errors) toX = cl.ftIn = (currentMoveString[2] = *++*p) - AAA; ++*p; toY = cl.rtIn = (currentMoveString[3] = Number(p) + '0') - ONE; } if(type[0] != NOTHING && type[1] != NOTHING && type[3] != NOTHING) { // fully specified. ChessSquare realPiece = boards[yyboardindex][fromY][fromX]; // Note that Disambiguate does not work for illegal moves, but flags them as impossible if(piece) { // check if correct piece indicated if(PieceToChar(realPiece) == '~') realPiece = (ChessSquare) (DEMOTED realPiece); if(!(appData.icsActive && PieceToChar(realPiece) == '+') && // trust ICS if it moves promoted pieces piece && realPiece != cl.pieceIn) return ImpossibleMove; } else if(!separator && **p == '+') { // could be a protocol move, where bare '+' suffix means shogi-style promotion if(realPiece < (wom ? WhiteCannon : BlackCannon) && PieceToChar(PROMOTED realPiece) == '+') // seems to be that currentMoveString[4] = cl.promoCharIn = *(*p)++; // append promochar after all } result = LegalityTest(boards[yyboardindex], PosFlags(yyboardindex), fromY, fromX, toY, toX, cl.promoCharIn); if (currentMoveString[4] == NULLCHAR) { // suppy missing mandatory promotion character if(result == WhitePromotion || result == BlackPromotion) { switch(gameInfo.variant) { case VariantCourier: case VariantShatranj: currentMoveString[4] = PieceToChar(BlackFerz); break; case VariantGreat: currentMoveString[4] = PieceToChar(BlackMan); break; case VariantShogi: currentMoveString[4] = '+'; break; default: currentMoveString[4] = PieceToChar(BlackQueen); } } else if(result == WhiteNonPromotion || result == BlackNonPromotion) { currentMoveString[4] = '='; } } else if(appData.testLegality && gameInfo.variant != VariantSChess && // strip off unnecessary and false promo characters !(result == WhitePromotion || result == BlackPromotion || result == WhiteNonPromotion || result == BlackNonPromotion)) currentMoveString[4] = NULLCHAR; return result; } else if(cl.pieceIn == EmptySquare) cl.pieceIn = wom ? WhitePawn : BlackPawn; cl.ffIn = type[0] == NOTHING ? -1 : coord[0] + 'a' - AAA; cl.rfIn = type[1] == NOTHING ? -1 : coord[1] + '0' - ONE; Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl); if(cl.kind == ImpossibleMove && !piece && type[1] == NOTHING // fxg5 type && toY == (wom ? 4 : 3)) { // could be improperly written e.p. cl.rtIn += wom ? 1 : -1; // shift target square to e.p. square Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl); if((cl.kind != WhiteCapturesEnPassant && cl.kind != BlackCapturesEnPassant)) return ImpossibleMove; // nice try, but no cigar } currentMoveString[0] = cl.ff + AAA; currentMoveString[1] = cl.rf + ONE; currentMoveString[3] = cl.rt + ONE; if(killX < 0) // [HGM] lion: do not overwrite kill-square suffix currentMoveString[4] = cl.promoChar; if((cl.kind == WhiteCapturesEnPassant || cl.kind == BlackCapturesEnPassant) && (Match("ep", p) || Match("e.p.", p))); return (int) cl.kind; } } badMove:// we failed to find algebraic move *p = oldp; // Next we do some common symbols where the first character commits us to things that cannot possibly be a move // ********* PGN tags ****************************************** if(**p == '[') { oldp = ++(*p); if(Match("--", p)) { // "[--" could be start of position diagram if(!Scan(']', p) && (*p)[-3] == '-' && (*p)[-2] == '-') return PositionDiagram; *p = oldp; } SkipWhite(p); if(isdigit(**p) || isalpha(**p)) { do (*p)++; while(isdigit(**p) || isalpha(**p) || **p == '+' || **p == '-' || **p == '=' || **p == '_' || **p == '#'); SkipWhite(p); if(**p == '"') { (*p)++; while(**p != '\n' && (*(*p)++ != '"'|| (*p)[-2] == '\\')); // look for unescaped quote if((*p)[-1] !='"') { *p = oldp; Scan(']', p); return Comment; } // string closing delimiter missing SkipWhite(p); if(*(*p)++ == ']') return PGNTag; } } Scan(']', p); return Comment; } // ********* SAN Castings ************************************* if(**p == 'O' || **p == 'o' || **p == '0' && !Match("00:", p)) { // exclude 00 in time stamps int castlingType = 0; if(Match("O-O-O", p) || Match("o-o-o", p) || Match("0-0-0", p) || Match("OOO", p) || Match("ooo", p) || Match("000", p)) castlingType = 2; else if(Match("O-O", p) || Match("o-o", p) || Match("0-0", p) || Match("OO", p) || Match("oo", p) || Match("00", p)) castlingType = 1; if(castlingType) { //code from old parser, collapsed for both castling types, and streamlined a bit int rf, ff, rt, ft; ChessSquare king; char promo=NULLCHAR; if(gameInfo.variant == VariantSChess) promo = PromoSuffix(p); if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */ if (wom) { rf = 0; rt = 0; king = WhiteKing; } else { rf = BOARD_HEIGHT-1; rt = BOARD_HEIGHT-1; king = BlackKing; } ff = (BOARD_WIDTH-1)>>1; // this would be d-file if (boards[yyboardindex][rf][ff] == king) { /* ICS wild castling */ ft = castlingType == 1 ? BOARD_LEFT+1 : (gameInfo.variant == VariantJanus ? BOARD_RGHT-2 : BOARD_RGHT-3); } else { ff = BOARD_WIDTH>>1; // e-file ft = castlingType == 1 ? BOARD_RGHT-2 : BOARD_LEFT+2; } if(PosFlags(0) & F_FRC_TYPE_CASTLING) { if (wom) { ff = initialRights[2]; ft = initialRights[castlingType-1]; } else { ff = initialRights[5]; ft = initialRights[castlingType+2]; } if (appData.debugMode) fprintf(debugFP, "Parser FRC (type=%d) %d %d\n", castlingType, ff, ft); if(ff == NoRights || ft == NoRights) return ImpossibleMove; } sprintf(currentMoveString, "%c%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE,promo); if (appData.debugMode) fprintf(debugFP, "(%d-type) castling %d %d\n", castlingType, ff, ft); return (int) LegalityTest(boards[yyboardindex], PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.! rf, ff, rt, ft, promo); } } // ********* variations (nesting) ****************************** if(**p =='(') { if(RdTime(')', p)) return ElapsedTime; return Open; } if(**p ==')') { (*p)++; return Close; } if(**p == ';') { while(**p != '\n') (*p)++; return Comment; } // ********* Comments and result messages ********************** *p = oldp; commentEnd = NULL; result = 0; if(**p == '{') { if(RdTime('}', p)) return ElapsedTime; if(lastChar == '\n' && Match("--------------\n", p)) { char *q; i = Scan ('}', p); q = *p - 16; if(Match("\n--------------}\n", &q)) return PositionDiagram; } else i = Scan('}', p); commentEnd = *p; if(i) return Comment; // return comment that runs to EOF immediately } if(commentEnd) SkipWhite(p); if(Match("*", p)) result = GameUnfinished; else if(**p == '0') { if( Match("0-1", p) || Match("0/1", p) || Match("0:1", p) || Match("0 - 1", p) || Match("0 / 1", p) || Match("0 : 1", p)) result = BlackWins; } else if(**p == '1') { if( Match("1-0", p) || Match("1/0", p) || Match("1:0", p) || Match("1 - 0", p) || Match("1 / 0", p) || Match("1 : 0", p)) result = WhiteWins; else if(Match("1/2 - 1/2", p) || Match("1/2:1/2", p) || Match("1/2 : 1/2", p) || Match("1 / 2 - 1 / 2", p) || Match("1 / 2 : 1 / 2", p) || Match("1/2", p) || Match("1 / 2", p)) result = GameIsDrawn; } if(result) { if(Match(" (", p) && !Scan(')', p) || Match(" {", p) && !Scan('}', p)) { // there is a comment after the PGN result! if(commentEnd) { *p = commentEnd; return Comment; } // so comment before it is normal comment; return that first } return result; // this returns a possible preceeding comment as result details } if(commentEnd) { *p = commentEnd; return Comment; } // there was no PGN result following, so return as normal comment // ********* Move numbers (after castlings or PGN results!) *********** if((i = Number(p)) != BADNUMBER) { // a single number was read as part of our attempt to read a move char *numEnd = *p; if(**p == '.') (*p)++; SkipWhite(p); if(**p == '+' || isalpha(**p) || gameInfo.variant == VariantShogi && *p != numEnd && isdigit(**p)) { *p = numEnd; return i == 1 ? MoveNumberOne : Nothing; } *p = numEnd; return Nothing; } // ********* non-compliant game-result indicators ********************* if(Match("+-+", p) || Word("stalemate", p)) return GameIsDrawn; if(Match("++", p) || Verb("resign", p) || (Word("check", p) || 1) && Word("mate", p) ) return (wom ? BlackWins : WhiteWins); c = ToUpper(**p); if(Word("w", p) && (Match("hite", p) || 1) || Word("b", p) && (Match("lack", p) || 1) ) { if(**p != ' ') return Nothing; ++*p; if(Verb("disconnect", p)) return GameUnfinished; if(Verb("resign", p) || Verb("forfeit", p) || Word("mated", p) || Word("lost", p) || Word("loses", p)) return (c == 'W' ? BlackWins : WhiteWins); if(Word("mates", p) || Word("wins", p) || Word("won", p)) return (c != 'W' ? BlackWins : WhiteWins); return Nothing; } if(Word("draw", p)) { if(**p == 'n') (*p)++; if(**p != ' ') return GameIsDrawn; oldp = ++*p; if(Word("agreed", p)) return GameIsDrawn; if(Match("by ", p) && (Word("repetition", p) || Word("agreement", p)) ) return GameIsDrawn; *p = oldp; if(*(*p)++ == '(') { while(**p != '\n') if(*(*p)++ == ')') break; if((*p)[-1] == ')') return GameIsDrawn; } *p = oldp - 1; return GameIsDrawn; } // ********* Numeric annotation glyph ********************************** if(**p == '$') { (*p)++; if(Number(p) != BADNUMBER) return NAG; return Nothing; } // ********** by now we are getting down to the silly stuff ************ if(Word("gnu", p) || Match("GNU", p)) { if(**p == ' ') (*p)++; if(Word("chess", p) || Match("CHESS", p)) { char *q; if((q = strstr(*p, "game")) || (q = strstr(*p, "GAME")) || (q = strstr(*p, "Game"))) { (*p) = q + 4; return GNUChessGame; } } return Nothing; } if(lastChar == '\n' && (Match("# ", p) || Match("; ", p) || Match("% ", p))) { while(**p != '\n' && **p != ' ') (*p)++; if(**p == ' ' && (Match(" game file", p) || Match(" position file", p))) { while(**p != '\n') (*p)++; // skip to EOLN return XBoardGame; } *p = oldp; // we might need to re-match the skipped stuff } if(Match("@@@@", p) || Match("--", p) || Match("Z0", p) || Match("pass", p) || Match("null", p)) { strncpy(currentMoveString, "@@@@", 5); return yyboardindex & F_WHITE_ON_MOVE ? WhiteDrop : BlackDrop; } // ********* Efficient skipping of (mostly) alphabetic chatter ********** while(isdigit(**p) || isalpha(**p) || **p == '-') (*p)++; if(*p != oldp) { if(**p == '\'') { while(isdigit(**p) || isalpha(**p) || **p == '-' || **p == '\'') (*p)++; return Nothing; // random word } if(lastChar == '\n' && Match(": ", p)) { // mail header, skip indented lines do { while(**p != '\n') (*p)++; if(!ReadLine()) return Nothing; // append next line if not EOF } while(Match("\n ", p) || Match("\n\t", p)); } return Nothing; } // ********* Prevent 00 in unprotected time stamps to be mistaken for castling ******* if(Match(":00", p)) return Nothing; // ********* Could not match to anything. Return offending character **** (*p)++; return Nothing; } /* Return offset of next pattern in the current file. */ int yyoffset () { return ftell(inputFile) - (inPtr - parsePtr); // subtract what is read but not yet parsed } void yynewfile (FILE *f) { // prepare parse buffer for reading file inputFile = f; inPtr = parsePtr = inputBuf; fromString = 0; lastChar = '\n'; *inPtr = NULLCHAR; // make sure we will start by reading a line } void yynewstr P((char *s)) { parsePtr = s; inputFile = NULL; fromString = 1; } int yylex () { // this replaces the flex-generated parser int result = NextUnit(&parsePtr); char *p = parseStart, *q = yytext; while(p < parsePtr) *q++ = *p++; // copy the matched text to yytext[] *q = NULLCHAR; lastChar = q[-1]; return result; } int Myylex () { // [HGM] wrapper for yylex, which treats nesting of parentheses int symbol, nestingLevel = 0, i=0; char *p; static char buf[256*MSG_SIZ]; buf[0] = NULLCHAR; do { // eat away anything not at level 0 symbol = yylex(); if(symbol == Open) nestingLevel++; if(nestingLevel) { // save all parsed text between (and including) the () for(p=yytext; *p && i<256*MSG_SIZ-2;) buf[i++] = *p++; buf[i] = NULLCHAR; } if(symbol == 0) break; // ran into EOF if(symbol == Close) symbol = Comment, nestingLevel--; } while(nestingLevel || symbol == Nothing); yy_text = buf[0] ? buf : (char*)yytext; return symbol; } ChessMove yylexstr (int boardIndex, char *s, char *buf, int buflen) { ChessMove ret; char *savPP = parsePtr; fromString = 1; yyboardindex = boardIndex; parsePtr = s; ret = (ChessMove) Myylex(); strncpy(buf, yy_text, buflen-1); buf[buflen-1] = NULLCHAR; parsePtr = savPP; fromString = 0; return ret; } xboard-4.8.0/xboard.info0000644000175000001440000105740412422467104012070 00000000000000This is xboard.info, produced by makeinfo version 4.13 from xboard.texi. INFO-DIR-SECTION Games START-INFO-DIR-ENTRY * xboard: (xboard). An X Window System graphical chessboard. END-INFO-DIR-ENTRY  File: xboard.info, Node: Top, Next: Major modes, Up: (dir) Introduction ************ XBoard is a graphical chessboard that can serve as a user interface to chess engines (such as GNU Chess), the Internet Chess Servers, electronic mail correspondence chess, or your own collection of saved games. This manual documents version 4.8.0 of XBoard. * Menu: * Major modes:: The main things XBoard can do. * Basic operation:: Mouse and keyboard functions. * Menus:: Menus, buttons, and keys. * Options:: Command options supported by XBoard. * Chess Servers:: Using XBoard with an Internet Chess Server (ICS). * Firewalls:: Connecting to a chess server through a firewall. * Environment:: Environment variables. * Limitations:: Known limitations and/or bugs. * Problems:: How and where to report any problems you run into. * Contributors:: People who have helped developing XBoard. * CMail:: Using XBoard for electronic correspondence chess. * Other programs:: Other programs you can use with XBoard. * Copyright:: Copyright notice for this manual. * Copying:: The GNU General Public License. * Index:: Index of concepts and symbol names.  File: xboard.info, Node: Major modes, Next: Basic operation, Prev: Top, Up: Top 1 Major modes ************* XBoard always runs in one of four major modes. You select the major mode from the command line when you start up XBoard. xboard [options] As an interface to GNU Chess or another chess engine running on your machine, XBoard lets you play a game against the machine, set up arbitrary positions, force variations, watch a game between two chess engines, interactively analyze your stored games or set up and analyze arbitrary positions. (Note: Not all chess engines support analysis.) xboard -ics -icshost hostname [options] As Internet Chess Server (ICS) interface, XBoard lets you play against other ICS users, observe games they are playing, or review games that have recently finished. Most of the ICS "wild" chess variants are supported, including bughouse. xboard -ncp [options] XBoard can also be used simply as an electronic chessboard to play through games. It will read and write game files and allow you to play through variations manually. You can use it to browse games off the net or review games you have saved. These features are also available in the other modes. |pxboard If you want to pipe games into XBoard, use the supplied shell script `pxboard'. For example, from the news reader `xrn', find a message with one or more games in it, click the Save button, and type `|pxboard' as the file name. cmail [options] As an interface to electronic mail correspondence chess, XBoard works with the cmail program. See *note CMail:: below for instructions.  File: xboard.info, Node: Basic operation, Next: Menus, Prev: Major modes, Up: Top 2 Basic operation ***************** To move a piece, you can drag it with the left mouse button, or you can click the left mouse button once on the piece, then once more on the destination square. In crazyhouse, bughouse or shogi you can drag and drop pieces to the board from the holdings squares displayed next to the board. Old behavior, where right-clicking a square brings up a menu where you can select what piece to drop on it can still be selected through the `Drop Menu' option. Only in Edit Position mode right and middle clicking a square is still used to put a piece on it, and the piece to drop is selected by sweeping the mouse vertically with the button held down. The default function of the right mouse button in other modes is to display the position the chess program thinks it will end up in. While moving the mouse vertically with this button pressed XBoard will step through the principal variation to show how this position will be reached. Lines of play displayed in the engine-output window, or PGN variations in the comment window can similarly be played out on the board, by right-clicking on them. Only in Analysis mode, when you walk along a PV, releasing the mouse button will forward the game upto that point, like you entered all previous PV moves. As the display of the PV in that case starts after the first move a simple right-click will play the move the engine indicates. In Analysis mode you can also make a move by grabbing the piece with a double-click of the left mouse button (or while keeping the Ctrl key pressed). In this case the move you enter will not be played, but will be excluded from the analysis of the current position. (Or included if it was already excluded; it is a toggle.) This only works for engines that support this feature. When connected to an ICS, it is possible to call up a graphical representation of players seeking a game in stead of the chess board, when the latter is not in use (i.e. when you are not playing or observing). Left-clicking the display area will switch between this 'seek graph' and the chess board. Hovering the mouse pointer over a dot will show the details of the seek ad in the message field above the board. Left-clicking the dot will challenge that player. Right-clicking a dot will 'push it to the back', to reveal any dots that were hidden behind it. Right-clicking off dots will refresh the graph. Most other XBoard commands are available from the menu bar. The most frequently used commands also have shortcut keys or on-screen buttons. These shortcut keystrokes are mostly non-printable characters. Typing a letter or digit while the board window has focus will bring up a type-in box with the typed letter already in it. You can use that to type a move in siuations where it is your turn to enter a move, type a move number to call up the position after that move in the display, or, in Edit Position mode, type a FEN. Some rarely used parameters can only be set through options on the command line used to invoke XBoard. XBoard uses a settings file, in which it can remember any changes to the settings that are made through menus or command-line options, so they will still apply when you restart XBoard for another session. The settings can be saved into this file automatically when XBoard exits, or on explicit request of the user. The default name for the settings file is /etc/xboard/xboard.conf, but in a standard install this file is only used as a master settings file that determines the system-wide default settings, and defers reading and writing of user settings to a user-specific file like ~/.xboardrc in the user's home directory. When XBoard is iconized, its graphical icon is a white knight if it is White's turn to move, a black knight if it is Black's turn.  File: xboard.info, Node: Menus, Next: Options, Prev: Basic operation, Up: Top 3 Menus, buttons, and keys ************************** * Menu: * File Menu:: Accessing external games and positions. * Edit Menu:: Altering games, positions, PGN tags or comments. * View Menu:: Controlling XBoard's shape and looks. * Mode Menu:: Selecting XBoard's mode. * Action Menu:: Talking to the chess engine or ICS opponents. * Engine Menu:: Controlling settings and actions of the engine(s). * Options Menu:: User preferences. * Help Menu:: Getting help. * Keys:: Other shortcut keys.  File: xboard.info, Node: File Menu, Next: Edit Menu, Up: Menus 3.1 File Menu ============= New Game Resets XBoard and the chess engine to the beginning of a new chess game. The `Ctrl-N' key is a keyboard equivalent. In Internet Chess Server mode, clears the current state of XBoard, then resynchronizes with the ICS by sending a refresh command. If you want to stop playing, observing, or examining an ICS game, use an appropriate command from the Action menu, not `New Game'. *Note Action Menu::. New Shuffle Game Similar to `New Game', but allows you to specify a particular initial position (according to a standardized numbering system) in chess variants which use randomized opening positions (e.g. Chess960). You can also press the `Pick Fixed' button to let XBoard generate a random number for you. The thus selected opening position will then persistently be chosen on any following New Game command until you use this menu to select another. Selecting position number -1 (or pushing the `Randomize' button) will produce a newly randomized position on any new game. Using this menu item in variants that normally do not shuffle their opening position does cause these variants to become shuffle variants until you use the `New Shuffle Game' menu to explicitly switch the randomization off, or select a new variant. New Variant Allows you to select a new chess variant in non-ICS mode. (In ICS play, the ICS is responsible for deciding which variant will be played, and XBoard adapts automatically.) The shifted `Alt+V' key is a keyboard equivalent. If you play with an engine, the engine must be able to play the selected variant, or the command will be ignored. XBoard supports all major variants, such as xiangqi, shogi, chess, chess960, Capablanca Chess, shatranj, crazyhouse, bughouse. But not every board size has built-in bitmaps for un-orthodox pieces! Only sizes bulky (72) and middling (49) have all pieces, while size petite (33) has most. These sizes would have to be set at startup through the `size' command-line option when you start up XBoard for such variants to be playable. You can overrule the default board format of the selected variant, (e.g. to play suicide chess on a 6 x 6 board), in this dialog, but normally you would not do that, and leave them at '-1', which means 'default'. Load Game Plays a game from a record file. The `Ctrl-O' key is a keyboard equivalent. A pop-up dialog prompts you for the file name. If the file contains more than one game, a second pop-up dialog displays a list of games (with information drawn from their PGN tags, if any), and you can select the one you want. Alternatively, you can load the Nth game in the file directly, by typing the number `N' after the file name, separated by a space. The game file parser will accept PGN (portable game notation), or in fact almost any file that contains moves in algebraic notation. Notation of the form `P@f7' is accepted for piece-drops in bughouse games; this is a nonstandard extension to PGN. If the file includes a PGN position (FEN tag), or an old-style XBoard position diagram bracketed by `[--' and `--]' before the first move, the game starts from that position. Text enclosed in parentheses, square brackets, or curly braces is assumed to be commentary and is displayed in a pop-up window. Any other text in the file is ignored. PGN variations (enclosed in parentheses) also are treated as comments; however, if you rights-click them in the comment window, XBoard will shelve the current line, and load the the selected variation, so you can step through it. You can later revert to the previous line with the `Revert' command. This way you can walk quite complex varation trees with XBoard. The nonstandard PGN tag [Variant "varname"] functions similarly to the -variant command-line option (see below), allowing games in certain chess variants to be loaded. Note that it must appear before any FEN tag for XBoard to recognize variant FENs appropriately. There is also a heuristic to recognize chess variants from the Event tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games. Load Position Sets up a position from a position file. A pop-up dialog prompts you for the file name. The shifted `Ctrl-O' key is a keyboard equivalent. If the file contains more than one saved position, and you want to load the Nth one, type the number N after the file name, separated by a space. Position files must be in FEN (Forsythe-Edwards notation), or in the format that the Save Position command writes when oldSaveStyle is turned on. Load Next Position Loads the next position from the last position file you loaded. The shifted `PgDn' key is a keyboard equivalent. Load Previous Position Loads the previous position from the last position file you loaded. The shifted `PgUp' key is a keyboard equivalent. Not available if the last position was loaded from a pipe. Save Game Appends a record of the current game to a file. The `Ctrl-S' key is a keyboard equivalent. A pop-up dialog prompts you for the file name. If the game did not begin with the standard starting position, the game file includes the starting position used. Games are saved in the PGN (portable game notation) format, unless the oldSaveStyle option is true, in which case they are saved in an older format that is specific to XBoard. Both formats are human-readable, and both can be read back by the `Load Game' command. Notation of the form `P@f7' is accepted for piece-drops in bughouse games; this is a nonstandard extension to PGN. Save Position Appends a diagram of the current position to a file. The shifted `Ctrl+S' key is a keyboard equivalent. A pop-up dialog prompts you for the file name. Positions are saved in FEN (Forsythe-Edwards notation) format unless the `oldSaveStyle' option is true, in which case they are saved in an older, human-readable format that is specific to XBoard. Both formats can be read back by the `Load Position' command. Save Selected Games Will cause all games selected for display in the current Game List to be appended to a file of the user's choice. Save Games as Book Creates an opening book from the currently loaded game file, incorporating only the games currently selected in the Game List. The book will be saved on the file specified in the `Common Engine' options dialog. The value of `Book Depth' specified in that same dialog will be used to determine how many moves of each game will be added to the internal book buffer. This command can take a long time to process, and the size of the buffer is currently limited. At the end the buffer will be saved as a Polyglot book, but the buffer will not be cleared, so that you can continue adding games from other game files. Mail Move Reload CMail Message See *note CMail::. Exit Exits from XBoard. The `Ctrl-Q' key is a keyboard equivalent.  File: xboard.info, Node: Edit Menu, Next: View Menu, Prev: File Menu, Up: Menus 3.2 Edit Menu ============= Copy Game Copies a record of the current game to an internal clipboard in PGN format and sets the X selection to the game text. The `Ctrl-C' key is a keyboard equivalent. The game can be pasted to another application (such as a text editor or another copy of XBoard) using that application's paste command. In many X applications, such as xterm and emacs, the middle mouse button can be used for pasting; in XBoard, you must use the Paste Game command. Copy Position Copies the current position to an internal clipboard in FEN format and sets the X selection to the position text. The shifted `Ctrl-C' key is a keyboard equivalent. The position can be pasted to another application (such as a text editor or another copy of XBoard) using that application's paste command. In many X applications, such as xterm and emacs, the middle mouse button can be used for pasting; in XBoard, you must use the Paste Position command. Copy Game List Copies the current game list to the clipboard, and sets the X selection to this text. A format of comma-separated double-quoted strings is used, including all tags, so it can be easily imported into spread-sheet programs. Paste Game Interprets the current X selection as a game record and loads it, as with Load Game. The `Ctrl-V' key is a keyboard equivalent. Paste Position Interprets the current X selection as a FEN position and loads it, as with Load Position. The shifted `Ctrl-V' key is a keyboard equivalent. Edit Game Allows you to make moves for both Black and White, and to change moves after backing up with the `Backward' command. The clocks do not run. The `Ctrl-E' key is a keyboard equivalent. In chess engine mode, the chess engine continues to check moves for legality but does not participate in the game. You can bring the chess engine into the game by selecting `Machine White', `Machine Black', or `Two Machines'. In ICS mode, the moves are not sent to the ICS: `Edit Game' takes XBoard out of ICS Client mode and lets you edit games locally. If you want to edit games on ICS in a way that other ICS users can see, use the ICS `examine' command or start an ICS match against yourself. Edit Position Lets you set up an arbitrary board position. The shifted `Ctrl-E' key is a keyboard equivalent. Use mouse button 1 to drag pieces to new squares, or to delete a piece by dragging it off the board or dragging an empty square on top of it. To drop a new piece on a square, press mouse button 2 or 3 over the square. This puts a white or black pawn in the square, respectively, but you can change that to any other piece type by dragging the mouse down before you release the button. You will then see the piece on the originally clicked square cycle through the available pieces (including those of opposite color), and can release the button when you see the piece you want. To alter the side to move, you can click the clock (the words White and Black above the board) of the side you want to give the move to. To clear the board you can click the clock of the side that alread has the move (which is highlighted in black). The old behavior with a piece menu can still be configured with the aid of the `pieceMenu' option. Selecting `Edit Position' causes XBoard to discard all remembered moves in the current game. In ICS mode, changes made to the position by `Edit Position' are not sent to the ICS: `Edit Position' takes XBoard out of `ICS Client' mode and lets you edit positions locally. If you want to edit positions on ICS in a way that other ICS users can see, use the ICS `examine' command, or start an ICS match against yourself. (See also the ICS Client topic above.) Edit Tags Lets you edit the PGN (portable game notation) tags for the current game. After editing, the tags must still conform to the PGN tag syntax: ::= ::= [ ] ::= ::= See the PGN Standard for full details. Here is an example: [Event "Portoroz Interzonal"] [Site "Portoroz, Yugoslavia"] [Date "1958.08.16"] [Round "8"] [White "Robert J. Fischer"] [Black "Bent Larsen"] [Result "1-0"] Any characters that do not match this syntax are silently ignored. Note that the PGN standard requires all games to have at least the seven tags shown above. Any that you omit will be filled in by XBoard with `?' (unknown value), or `-' (inapplicable value). Edit Comment Adds or modifies a comment on the current position. Comments are saved by `Save Game' and are displayed by `Load Game', PGN variations will also be printed in this window, and can be promoted to main line by right-clicking them. `Forward', and `Backward'. Edit Book Pops up a window listing the moves available in the GUI book (specified in the `Common Engine Settings' dialog) from the currently displayed position, together with their weights and (optionally in braces) learn info. You can then edit this list, and the new list will be stored back into the book when you press OK. Note that the listed percentages are neither used, nor updated when you change the weights; they are just there as an optical aid. Revert Annotate If you are examining an ICS game and Pause mode is off, Revert issues the ICS command `revert'. In local mode, when you were editing or analyzing a game, and the `-variations' command-line option is switched on, you can start a new variation by holding the Shift key down while entering a move not at the end of the game. Variations can also become the currently displayed line by clicking a PGN variation displayed in the Comment window. This can be applied recursively, so that you can analyze variations on variations; each time you create a new variation by entering an alternative move with Shift pressed, or select a new one from the Comment window, the current variation will be shelved. `Revert' allows you to return to the most recently shelved variation. The difference between `Revert' and `Annotate' is that with the latter, the variation you are now abandoning will be added as a comment (in PGN variation syntax, i.e. between parentheses) to the original move where you deviated, for later recalling. The `Home' key is a keyboard equivalent to `Revert'. Truncate Game Discards all remembered moves of the game beyond the current position. Puts XBoard into `Edit Game' mode if it was not there already. The `End' key is a keyboard equivalent. Backward Steps backward through a series of remembered moves. The `[<]' button and the `Alt+LeftArrow' key are equivalents, as is turning the mouse wheel towards you. In addition, pressing the Control key steps back one move, and releasing it steps forward again. In most modes, `Backward' only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a chess engine, playing or observing a game on an ICS, or loading a game. If you select `Backward' in any of these situations, you will not be allowed to make a different move. Use `Retract Move' or `Edit Game' if you want to change past moves. If you are examining an ICS game, the behavior of `Backward' depends on whether XBoard is in Pause mode. If Pause mode is off, `Backward' issues the ICS backward command, which backs up everyone's view of the game and allows you to make a different move. If Pause mode is on, `Backward' only backs up your local view. Forward Steps forward through a series of remembered moves (undoing the effect of `Backward') or forward through a game file. The `[>]' button and the `Alt+RightArrow' key are equivalents, as is turning the mouse wheel away from you. If you are examining an ICS game, the behavior of Forward depends on whether XBoard is in Pause mode. If Pause mode is off, `Forward' issues the ICS forward command, which moves everyone's view of the game forward along the current line. If Pause mode is on, `Forward' only moves your local view forward, and it will not go past the position that the game was in when you paused. Back to Start Jumps backward to the first remembered position in the game. The `[<<]' button and the `Alt+Home' key are equivalents. In most modes, Back to Start only lets you look back at old positions; it does not retract moves. This is the case if you are playing against a local chess engine, playing or observing a game on a chess server, or loading a game. If you select `Back to Start' in any of these situations, you will not be allowed to make different moves. Use `Retract Move' or `Edit Game' if you want to change past moves; or use Reset to start a new game. If you are examining an ICS game, the behavior of `Back to Start' depends on whether XBoard is in Pause mode. If Pause mode is off, `Back to Start' issues the ICS `backward 999999' command, which backs up everyone's view of the game to the start and allows you to make different moves. If Pause mode is on, `Back to Start' only backs up your local view. Forward to End Jumps forward to the last remembered position in the game. The `[>>]' button and the `Alt+End' key are equivalents. If you are examining an ICS game, the behavior of `Forward to End' depends on whether XBoard is in Pause mode. If Pause mode is off, `Forward to End' issues the ICS `forward 999999' command, which moves everyone's view of the game forward to the end of the current line. If Pause mode is on, `Forward to End' only moves your local view forward, and it will not go past the position that the game was in when you paused.  File: xboard.info, Node: View Menu, Next: Mode Menu, Prev: Edit Menu, Up: Menus 3.3 View Menu ============= Flip View Inverts your view of the chess board for the duration of the current game. Starting a new game returns the board to normal. The `F2' key is a keyboard equivalent. Show Engine Output Shows or hides a window in which the thinking output of any loaded engines is displayed. The shifted `Alt+O' key is a keyboard equivalent. XBoard will display lines of thinking output of the same depth ordered by score, (highest score on top), rather than in the order the engine produced them. Usually this amounts to the same, as a normal engine search will only find new PV (and emit it as thinking output) when it searches a move with a higher score than the previous variation. But when the engine is in multi-variation mode this needs not always be true, and it is more convenient for someone analyzing games to see the moves sorted by score. The order in which the engine found them is only of interest to the engine author, and can still be deduced from the time or node count printed with the line. Right-clicking a line in this window, and then moving the mouse vertically with the right button kept down, will make XBoard play through the PV listed there. The use of the board window as 'variation board' will normally end when you release the right button, or when the opponent plays a move. But beware: in Analysis mode, moves thus played out will be added to the game. The Engine-Output pane for each engine will contain a header displaying the multi-PV status and a list of excluded moves in Analysis mode, which are also responsive to right-clicking. Show Move History Shows or hides a list of moves of the current game. The shifted `Alt+H' key is a keyboard equivalent. This list allows you to move the display to any earlier position in the game by clicking on the corresponding move. Show Evaluation Graph Shows or hides a window which displays a graph of how the engine score(s) evolved as a function of the move number. The shifted `Alt+E' key is a keyboard equivalent. Clicking on the graph will bring the corresponding position in the board display. Show Game List Shows or hides the list of games generated by the last `Load Game' command. The shifted `Alt+G' key is a keyboard equivalent. Tags Pops up a window which shows the PGN (portable game notation) tags for the current game. For now this is a duplicate of the `Edit Tags' item in the `Edit' menu. Comments Pops up a window which shows any comments to or variations on the current move. For now this is a duplicate of the `Edit Comment' item in the `Edit' menu. ICS Input Box If this option is set in ICS mode, XBoard creates an extra window that you can use for typing in ICS commands. The input box is especially useful if you want to type in something long or do some editing on your input, because output from ICS doesn't get mixed in with your typing as it would in the main terminal window. Open Chat Window This menu item opens a window in which you can conduct upto 5 chats with other ICS users (or channels). To use the window, write the name of your chat partner, the channel number, or the words 'shouts', 'whispers', 'cshouts' in the upper field (closing with ). Everything you type in the lowest field will then automatically be sent to the mentioned party, while everything that party sends to you will appear in the central text box, rather than appear in the ICS console. The row of buttons allow you to choose between chat; to start a new chat, just select an empty button, and complete the `Chat partner' field. Board Summons a dialog where you can customize the look of the chess board. Here you can specify the directory from which piece images should be taken, when you don't want to use the built-in piece images (see `pieceImageDirectory' option), external images to be used for the board squares (`liteBackTextureFile' and `darkBackTextureFile' options), and square and piece colors for the default pieces. Game List Tags a duplicate of the Game List dialog in the Options menu.  File: xboard.info, Node: Mode Menu, Next: Action Menu, Prev: View Menu, Up: Menus 3.4 Mode Menu ============= Machine White Tells the chess engine to play White. The `Ctrl-W' key is a keyboard equivalent. Machine Black Tells the chess engine to play Black. The `Ctrl-B' key is a keyboard equivalent. Two Machines Plays a game between two chess engines. The `Ctrl-T' key is a keyboard equivalent. Analysis Mode XBoard tells the chess engine to start analyzing the current game/position and shows you the analysis as you move pieces around. The `Ctrl-A' key is a keyboard equivalent. Note: Some chess engines do not support Analysis mode. To set up a position to analyze, you do the following: 1. Select Edit Position from the Mode Menu 2. Set up the position. Use the middle and right buttons to bring up the white and black piece menus. 3. When you are finished, click on either the Black or White clock to tell XBoard which side moves first. 4. Select Analysis Mode from the Mode Menu to start the analysis. You can now play legal moves to create follow-up positions for the engine to analyze, while the moves will be remembered as a stored game, and then step backward through this game to take the moves back. Note that you can also click on the clocks to set the opposite side to move (adding a so-called `null move' to the game). You can also tell the engine to exclude some moves from analysis. (Engines that do not support the exclude-moves feature will ignore this, however.) The general way to do this is to play the move you want to exclude starting with a double click on the piece. When you use drag-drop moving, the piece you grab with a double click will also remain on its square, to show you that you are not really making the move, but just forbid it from the current position. Playing a thus excluded move a second time will include it again. Excluded moves will be listed as text in a header line in the Engine Output window, and you can also re-include them by right-clicking them there. This header line will also contain the words 'best' and 'tail'; right-clicking those will exclude the currently best move, or all moves not explicitly listed in the header line. Once you leave the current position all memory of excluded moves will be lost when you return there. Selecting this menu item while already in `Analysis Mode' will toggle the participation of the second engine in the analysis. The output of this engine will then be shown in the lower pane of the Engine Output window. The analysis function can also be used when observing games on an ICS with an engine loaded (zippy mode); the engine then will analyse the positions as they occur in the observed game. Analyze Game This option subjects the currently loaded game to automatic analysis by the loaded engine. The `Ctrl-G' key is a keyboard equivalent. XBoard will start auto-playing the game from the currently displayed position, while the engine is analyzing the current position. The game will be annotated with the results of these analyses. In particlar, the score and depth will be added as a comment, and the PV will be added as a variation. Normally the analysis would stop after reaching the end of the game. But when a game is loaded from a multi-game file while `Analyze Game' was already switched on, the analysis will continue with the next game in the file until the end of the file is reached (or you switch to another mode). The time the engine spends on analyzing each move can be controlled through the command-line option `-timeDelay', which can also be set from the `Load Game Options' menu dialog. Note: Some chess engines do not support Analysis mode. Edit Game Duplicate of the item in the Edit menu. Note that `Edit Game' is the idle mode of XBoard, and can be used to get you out of other modes. E.g. to stop analyzing, stop a game between two engines or stop editing a position. Edit Position Duplicate of the item in the Edit menu. Training Training mode lets you interactively guess the moves of a game for one of the players. You guess the next move of the game by playing the move on the board. If the move played matches the next move of the game, the move is accepted and the opponent's response is auto-played. If the move played is incorrect, an error message is displayed. You can select this mode only while loading a game (that is, after selecting `Load Game' from the File menu). While XBoard is in `Training' mode, the navigation buttons are disabled. ICS Client This is the normal mode when XBoard is connected to a chess server. If you have moved into Edit Game or Edit Position mode, you can select this option to get out. To use xboard in ICS mode, run it in the foreground with the -ics option, and use the terminal you started it from to type commands and receive text responses from the chess server. See *note Chess Servers:: below for more information. XBoard activates some special position/game editing features when you use the `examine' or `bsetup' commands on ICS and you have `ICS Client' selected on the Mode menu. First, you can issue the ICS position-editing commands with the mouse. Move pieces by dragging with mouse button 1. To drop a new piece on a square, press mouse button 2 or 3 over the square. This brings up a menu of white pieces (button 2) or black pieces (button 3). Additional menu choices let you empty the square or clear the board. Click on the White or Black clock to set the side to play. You cannot set the side to play or drag pieces to arbitrary squares while examining on ICC, but you can do so in `bsetup' mode on FICS. In addition, the menu commands `Forward', `Backward', `Pause', and `Stop Examining' have special functions in this mode; see below. Machine Match Starts a match between two chess programs, with a number of games and other parameters set through the `Match Options' menu dialog. When a match is already running, selecting this item will make XBoard drop out of match mode after the current game finishes. Pause Pauses updates to the board, and if you are playing against a chess engine, also pauses your clock. To continue, select `Pause' again, and the display will automatically update to the latest position. The `P' button and keyboard `Pause' key are equivalents. If you select Pause when you are playing against a chess engine and it is not your move, the chess engine's clock will continue to run and it will eventually make a move, at which point both clocks will stop. Since board updates are paused, however, you will not see the move until you exit from Pause mode (or select Forward). This behavior is meant to simulate adjournment with a sealed move. If you select Pause while you are observing or examining a game on a chess server, you can step backward and forward in the current history of the examined game without affecting the other observers and examiners, and without having your display jump forward to the latest position each time a move is made. Select Pause again to reconnect yourself to the current state of the game on ICS. If you select `Pause' while you are loading a game, the game stops loading. You can load more moves manually by selecting `Forward', or resume automatic loading by selecting `Pause' again.  File: xboard.info, Node: Action Menu, Next: Engine Menu, Prev: Mode Menu, Up: Menus 3.5 Action Menu =============== Accept Accepts a pending match offer. The `F3' key is a keyboard equivalent. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice. Decline Declines a pending offer (match, draw, adjourn, etc.). The `F4' key is a keyboard equivalent. If there is more than one offer pending, you will have to type in a more specific command instead of using this menu choice. Call Flag Calls your opponent's flag, claiming a win on time, or claiming a draw if you are both out of time. The `F5' key is a keyboard equivalent. You can also call your opponent's flag by clicking on his clock. Draw Offers a draw to your opponent, accepts a pending draw offer from your opponent, or claims a draw by repetition or the 50-move rule, as appropriate. The `F6' key is a keyboard equivalent. Adjourn Asks your opponent to agree to adjourning the current game, or agrees to a pending adjournment offer from your opponent. The `F7' key is a keyboard equivalent. Abort Asks your opponent to agree to aborting the current game, or agrees to a pending abort offer from your opponent. The `F8' key is a keyboard equivalent. An aborted game ends immediately without affecting either player's rating. Resign Resigns the game to your opponent. The `F9' key is a keyboard equivalent. Stop Observing Ends your participation in observing a game, by issuing the ICS observe command with no arguments. ICS mode only. The `F10' key is a keyboard equivalent. Stop Examining Ends your participation in examining a game, by issuing the ICS unexamine command. ICS mode only. The `F11' key is a keyboard equivalent. Upload to Examine Create an examined game of the proper variant on the ICS, and send the game there that is currenty loaded in XBoard (e.g. through pasting or loading from file). You must be connected to an ICS for this to work. Adjudicate to White Adjudicate to Black Adjudicate Draw Terminate an ongoing game in Two-Machines mode (including match mode), with as result a win for white, for black, or a draw, respectively. The PGN file of the game will accompany the result string by the comment "user adjudication".  File: xboard.info, Node: Engine Menu, Next: Options Menu, Prev: Action Menu, Up: Menus 3.6 Engine Menu =============== Load Engine Pops up a dialog where you can select or specify an engine to be loaded. You will always have to indicate whether you want to load the engine as first or second engine, through the ‘Load menitioned engine as’ drop-down list at the bottom of the dialog. You can even replace engines during a game, without disturbing that game. (Beware that after loading an engine, XBoard will always be in Edit Game mode, so you will have to tell the new engine what to do before it does anything!) When you select an already installed engine from the ‘Select Engine from List’ drop-down list, all other fields of the dialog will be ignored. In other cases, you have to specify the engine executable, possible arguments on the engine command line (if the engine docs say the engine needs any), and the directory where the engine should look for its files (if this cannot be deduced automatically from the specification of the engine executable). You will also have to specify (with the aid of checkboxes) if the engine is UCI. If ‘Add this engine to the list’ is ticked (which it is by default), the engine will be added to the list of installed engines in your settings file, (provided you save the settings!), so that next time you can select it from the drop-down list. You can also specify a ‘nickname’, under which the engine will then appear in that drop-down list, and even choose to use that nickname for it in PGN files for engine-engine games. The info you supply with the checkboxes whether the engine should use GUI book, or (for variant engines) automatically switch to the current variant when loaded, will also be included in the list. For obsolete XBoard engines, which would normally take a long delay to load because XBoard is waiting for a response they will not give, you can tick ‘WB protocol v1’ to speed up the loading process. Engine #N Settings Pop up a menu dialog to alter the settings specific to the applicable engine. (The second engine is only accessible once it has been used in Two-Machines mode.) For each parameter the engine allows to be set, a control element will appear in this dialog that can be used to alter the value. Depending on the type of parameter (text string, number, multiple choice, on/off switch, instantaneous signal) the appropriate control will appear, with a description next to it. XBoard has no idea what these values mean; it just passes them on to the engine. How this dialog looks is completely determined by the engine, and XBoard just passes it on to the user. Many engines do not have any parameters that can be set by the user, and in that case the dialog will be empty (except for the OK and cancel buttons). UCI engines usually have many parameters. (But these are only visible with a sufficiently modern version of the Polyglot adapter needed to run UCI engines, e.g. Polyglot 1.4.55b.) For native XBoard engines this is less common. Hint Displays a move hint from the chess engine. Book Displays a list of possible moves from the chess engine's opening book. The exact format depends on what chess engine you are using. With GNU Chess 4, the first column gives moves, the second column gives one possible response for each move, and the third column shows the number of lines in the book that include the move from the first column. If you select this option and nothing happens, the chess engine is out of its book or does not support this feature. Move Now Forces the chess engine to move immediately. Chess engine mode only. The `Ctrl-M' key is a keyboard equivalent. Retract Move Retracts your last move. In chess engine mode, you can do this only after the chess engine has replied to your move; if the chess engine is still thinking, use `Move Now' first. In ICS mode, `Retract Move' issues the command `takeback 1' or `takeback 2' depending on whether it is your opponent's move or yours. The `Ctrl-X' key is a keyboard equivalent. Recently Used Engines At the bottom of the engine menu there can be a list of names of engines that you recently loaded through the Load Engine menu dialog in previous sessions. Clicking on such a name will load that engine as first engine, so you won't have to search for it in your list of installed engines, if that is very long. The maximum number of displayed engine names is set by the `recentEngines'command-line option.  File: xboard.info, Node: Options Menu, Next: Help Menu, Prev: Engine Menu, Up: Menus 3.7 Options Menu ================ 3.7.1 General Options --------------------- The following items to set option values appear in the dialog summoned by the general Options menu item. Absolute Analysis Scores Controls if scores on the Engine Output window during analysis will be printed from the white or the side-to-move point-of-view. Almost Always Queen If this option is on, 7th-rank pawns automatically change into Queens when you pick them up, and when you drag them to the promotion square and release them there, they will promote to that. But when you drag such a pawn backwards first, its identity will start to cycle through the other available pieces. This will continue until you start to move it forward; at which point the identity of the piece will be fixed, so that you can safely put it down on the promotion square. If this option is off, what happens depends on the option `alwaysPromoteToQueen', which would force promotion to Queen when true. Otherwise XBoard would bring up a dialog box whenever you move a pawn to the last rank, asking what piece you want to promote to. Animate Dragging If Animate Dragging is on, while you are dragging a piece with the mouse, an image of the piece follows the mouse cursor. If Animate Dragging is off, there is no visual feedback while you are dragging a piece, but if Animate Moving is on, the move will be animated when it is complete. Animate Moving If Animate Moving is on, all piece moves are animated. An image of the piece is shown moving from the old square to the new square when the move is completed (unless the move was already animated by Animate Dragging). If Animate Moving is off, a moved piece instantly disappears from its old square and reappears on its new square when the move is complete. The shifted `Ctrl-A' key is a keyboard equivalent. Auto Flag If this option is on and one player runs out of time before the other, XBoard will automatically call his flag, claiming a win on time. The shifted `Ctrl-F' key is a keyboard equivalent. In ICS mode, Auto Flag will only call your opponent's flag, not yours, and the ICS may award you a draw instead of a win if you have insufficient mating material. In local chess engine mode, XBoard may call either player's flag and will not take material into account (?). Auto Flip View If the Auto Flip View option is on when you start a game, the board will be automatically oriented so that your pawns move from the bottom of the window towards the top. If you are playing a game on an ICS, the board is always oriented at the start of the game so that your pawns move from the bottom of the window towards the top. Otherwise, the starting orientation is determined by the `flipView' command line option; if it is false (the default), White's pawns move from bottom to top at the start of each game; if it is true, Black's pawns move from bottom to top. *Note User interface options::. Blindfold If this option is on, XBoard displays the board as usual but does not display pieces or move highlights. You can still move in the usual way (with the mouse or by typing moves in ICS mode), even though the pieces are invisible. Drop Menu Controls if right-clicking the board in crazyhouse / bughouse will pop up a menu to drop a piece on the clicked square (old, deprecated behavior) or allow you to step through an engine PV (new, recommended behavior). Enable Variation Trees If this option is on, playing a move in Edit Game or Analyze mode while keeping the Shift key pressed will start a new variation. You can then recall the previous line through the `Revert' menu item. When off, playing a move will truncate the game and append the move irreversibly. Hide Thinking If this option is off, the chess engine's notion of the score and best line of play from the current position is displayed as it is thinking. The score indicates how many pawns ahead (or if negative, behind) the chess engine thinks it is. In matches between two machines, the score is prefixed by `W' or `B' to indicate whether it is showing White's thinking or Black's, and only the thinking of the engine that is on move is shown. The shifted `Ctrl-H' key is a keyboard equivalent. Highlight Last Move If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use Backward or Back to Start, the starting and ending squares of the last move to be unmade are highlighted. Highlight with Arrow Causes the highlighting described in Highlight Last Move to be done by drawing an arrow between the highlighted squares, so that it is visible even when the width of the grid lines is set to zero. Move Sound Enables the sounding of an audible signal when the computer performs a move. For the selection of the sound, see `Sound Options'. If you turn on this option when using XBoard with the Internet Chess Server, you will probably want to give the `set bell 0' command to the ICS, since otherwise the ICS will ring the terminal bell after every move (not just yours). (The `.icsrc' file is a good place for this; see *note ICS options::.) One-Click Moving If this option is on, XBoard does not wait for you to click both the from- and the to-square, or drag the piece, but performs a move as soon as it is uniqely specified. This applies to clicking an own piece that only has a single legal move, clicking an empty square or opponent piece where only one of your pieces can move (or capture) to. Furthermore, a double-click on a piece that can only make a single capture will cause that capture to be made. Promoting a Pawn by clicking its to-square will suppress the promotion popup or other methods for selecting an under-promotion, and make it promote to Queen. Periodic Updates If this option is off (or if you are using a chess engine that does not support periodic updates), the analysis window will only be updated when the analysis changes. If this option is on, the Analysis Window will be updated every two seconds. Play Move(s) of Clicked PV If this option is on, right-clicking a PV in the Engine Output window during Analyze mode will cause the first move of that PV to be played. You could also play more than one (or no) PV move by moving the mouse to engage in the PV walk such a right-click will start, to seek out another position along the PV where you want to continue the analysis, before releasing the mouse button. Ponder Next Move If this option is off, the chess engine will think only when it is on move. If the option is on, the engine will also think while waiting for you to make your move. The shifted `Ctrl-P' key is a keyboard equivalent. Popup Exit Message If this option is on, when XBoard wants to display a message just before exiting, it brings up a modal dialog box and waits for you to click OK before exiting. If the option is off, XBoard prints the message to standard error (the terminal) and exits immediately. Popup Move Errors If this option is off, when you make an error in moving (such as attempting an illegal move or moving the wrong color piece), the error message is displayed in the message area. If the option is on, move errors are displayed in small pop-up windows like other errors. You can dismiss an error pop-up either by clicking its OK button or by clicking anywhere on the board, including down-clicking to start a move. Scores in Move List If this option is on, XBoard will display the depth and score of engine moves in the Move List, in the format of a PGN comment. Show Coords If this option is on, XBoard displays algebraic coordinates along the board's left and bottom edges. Show Target Squares If this option is on, all squares a piece that is 'picked up' with the mouse can legally move to are highighted with a fat colored dot in the highlightColor (non-captures) or premoveHighlightColor (captures). Legality testing must be on for XBoard to know how the piece moves. Test Legality If this option is on, XBoard tests whether the moves you try to make with the mouse are legal and refuses to let you make an illegal move. The shifted `Ctrl-L' key is a keyboard equivalent. Moves loaded from a file with `Load Game' are also checked. If the option is off, all moves are accepted, but if a local chess engine or the ICS is active, they will still reject illegal moves. Turning off this option is useful if you are playing a chess variant with rules that XBoard does not understand. (Bughouse, suicide, and wild variants where the king may castle after starting on the d file are generally supported with Test Legality on.) Flash Moves Flash Rate If this option is non-zero, whenever a move is completed, the moved piece flashes the specified number of times. The flash-rate setting determines how rapidly this flashing occurs. Animation Speed Determines the duration (in msec) of an animation step, when `Animate Moving' is swiched on. Zoom factor in Evaluation Graph Sets the valueof the `evalZoom' option, indicating the factor by which the score interval (-1,1) should be blown up on the vertical axis of the Evaluation Graph. 3.7.2 Time Control ------------------ Pops up a sub-menu where you can set the time-control parameters interactively. Allows you to select classical or incremental time controls, set the moves per session, session duration, and time increment. Also allows specification of time-odds factors for one or both engines. If an engine is given a time-odds factor N, all time quota it gets, be it at the beginning of a session or through the time increment or fixed time per move, will be divided by N. The shifted `Alt+T' key is a keyboard equivalent. 3.7.3 Common Engine ------------------- Pops up a sub-menu where you can set some engine parameters common to most engines, such as hash-table size, tablebase cache size, maximum number of processors that SMP engines can use, and where to find the Polyglot adapter needed to run UCI engines under XBoard. The feature that allows setting of these parameters on engines is new since XBoard 4.3.15, so not many XBoard/WinBoard engines respond to it yet, but UCI engines should. It is also possible to specify a GUI opening book here, i.e. an opening book that XBoard consults for any position a playing engine gets in. It then forces the engine to play the book move, rather than to think up its own, if that position is found in the book. The book can switched on and off independently for either engine. The way book moves are chosen can be influenced through the settings of book depth and variety. After both sides have played more moves than the specified depth, the book will no longer be consulted. When the variety is set to 50, moves will be played with the probability specified in the book. When set to 0, only the move(s) with the highest probability will be played. When set to 100, all listed moves will be played with equal pobability. Other settings interpolate between that. The shifted `Alt+U' key is a keyboard equivalent. 3.7.4 Adjudications ------------------- Pops up a sub-menu where you can enable or disable various adjudications that XBoard can perform in engine-engine games. The shifted `Alt+J' key is a keyboard equivalent. You can instruct XBoard to detect and terminate the game on checkmate or stalemate, even if the engines would not do so, to verify engine result claims (forfeiting engines that make false claims), rather than naively following the engine, to declare draw on positions which can never be won for lack of mating material, (e.g. KBK), or which are impossible to win unless the opponent seeks its own demise (e.g. KBKN). For these adjudications to work, `Test Legality' should be switched on. It is also possible to instruct XBoard to enforce a 50-move or 3-fold-repeat rule and automatically declare draw (after a user-adjustable number of moves or repeats) even if the engines are prepared to go on. It is also possible to have XBoard declare draw on games that seem to drag on forever, or adjudicate a loss if both engines agree (for 3 consecutive moves) that one of them is behind more than a user-adjustable score threshold. For the latter adjudication to work, XBoard should be able to properly understand the engine's scores. To facilitate the latter, you can inform xboard here if the engines report scores from the viewpoint of white, or from that of their own color. 3.7.5 ICS Options ----------------- The following options occur in a dialog summoned by the ICS Options menu item. Auto Kibitz Setting this option when playing with or aginst a chess program on an ICS will cause the last line of thinking output of the engine before its move to be sent to the ICS in a kibitz command. In addition, any kibitz message received through the ICS from an opponent chess program will be diverted to the engine-output window, (and suppressed in the console), where you can play through its PV by right-clicking it. Auto Comment If this option is on, any remarks made on ICS while you are observing or playing a game are recorded as a comment on the current move. This includes remarks made with the ICS commands `say', `tell', `whisper', and `kibitz'. Limitation: remarks that you type yourself are not recognized; XBoard scans only the output from ICS, not the input you type to it. Auto Observe If this option is on and you add a player to your `gnotify' list on ICS, XBoard will automatically observe all of that player's games, unless you are doing something else (such as observing or playing a game of your own) when one starts. The games are displayed from the point of view of the player on your gnotify list; that is, his pawns move from the bottom of the window towards the top. Exceptions: If both players in a game are on your gnotify list, if your ICS `highlight' variable is set to 0, or if the ICS you are using does not properly support observing from Black's point of view, you will see the game from White's point of view. Auto Raise Board If this option is on, whenever a new game begins, the chessboard window is deiconized (if necessary) and raised to the top of the stack of windows. Auto Save If this option is true, at the end of every game XBoard prompts you for a file name and appends a record of the game to the file you specify. Disabled if the `saveGameFile' command-line option is set, as in that case all games are saved to the specified file. *Note Load and Save options::. Background Observe Setting this option will make XBoard suppress display of any boards from observed games while you are playing. In stead the last such board will be remembered, and shown to you when you right-click the board. This allows you to peek at your bughouse partner's game when you want, without disturbing your own game too much. Dual Board Setting this option in combination with `Background Observe' will display boards of observed games while you are playing on a second board next to that of your own game. Get Move List If this option is on, whenever XBoard receives the first board of a new ICS game (or a different game from the one it is currently displaying), it retrieves the list of past moves from the ICS. You can then review the moves with the `Forward' and `Backward' commands or save them with `Save Game'. You might want to turn off this option if you are observing several blitz games at once, to keep from wasting time and network bandwidth fetching the move lists over and over. When you turn this option on from the menu, XBoard immediately fetches the move list of the current game (if any). Quiet Play If this option is on, XBoard will automatically issue an ICS `set shout 0' command whenever you start a game and a `set shout 1' command whenever you finish one. Thus, you will not be distracted by shouts from other ICS users while playing. Seek Graph Setting this option will cause XBoard to display an graph of currently active seek ads when you left-click the board while idle and logged on to an ICS. Auto-Refresh Seek Graph In combination with the `Seek Graph' option this will cause automatic update of the seek graph while it is up. This only works on FICS and ICC, and requires a lot of bandwidth on a busy server. Premove Premove White Premove Black First White Move First Black Move If this option is on while playing a game on an ICS, you can register your next planned move before it is your turn. Move the piece with the mouse in the ordinary way, and the starting and ending squares will be highlighted with a special color (red by default). When it is your turn, if your registered move is legal, XBoard will send it to ICS immediately; if not, it will be ignored and you can make a different move. If you change your mind about your premove, either make a different move, or double-click on any piece to cancel the move entirely. You can also enter premoves for the first white and black moves of the game. ICS Alarm ICS Alarm Time When this option is on, an alarm sound is played when your clock counts down to the icsAlarmTime in an ICS game. (By default, the time is 5 seconds, but you can pecify other values with the Alarm Time spin control.) For games with time controls that include an increment, the alarm will sound each time the clock counts down to the icsAlarmTime. By default, the alarm sound is the terminal bell, but on some systems you can change it to a sound file using the soundIcsAlarm option; see below. Colorize Messages Ticking this options causes various types of ICS messages do be displayed with different foreground or background colors in the console. The colors can be individually selected for each type, through the accompanying text edits. 3.7.6 Match Options ------------------- Summons a dialog where you can set options important for playing automatic matches between two chess programs (e.g. by using the `Machine Match' menu item in the `Mode' menu). Tournament file To run a tournament, XBoard needs a file to record its progress, so it can resume the tourney when it is interrupted. When you want to conduct anything more complex than a simple two-player match with the currently loaded engines, (i.e. when you select a list of participants), you must not leave this field blank. When you enter the name of an existing tournament file, XBoard will ignore all other input specified in the dialog, and will take them from that tournament file. This resumes an interrupted tournament, or adds another XBoard agent playing games for it to those that are already doing so. Specifying a not-yet-existing file will cause XBoard to create it, according to the tournament parameters specified in the rest of the dialog, before it starts the tournament on ‘OK’. Provided that you specify participants; without participants no tournament file will be made, but other entered values (e.g. for the file with opening positions) will take effect. Default: configured by the `defaultTourneyName' option. Sync after round Sync after cycle The sync options, when on, will cause WinBoard to refrain from starting games of the next round or cycle before all games of the previous round or cycle are finished. This guarantees correct ordering in the games file, even when multiple XBoard instances are concurrently playing games for the same tourney. Default: sync after cycle, but not after round. Select Engine Tourney participants With the Select Engine drop-down list you can pick an engine from your list of installed engines in the settings file, to be added to the tournament. The engines selected so far will be listed in the ‘Tourney participants’ memo. The latter is a normal text edit, so you can use normal text-editing functions to delete engines you selected by accident, or change their order. Do not type names yourself there, because names that do not exactly match one of the names from the drop-down list will lead to undefined behavior. Tourney type Here you can specify the type of tournament you want. XBoard’s intrinsic tournament manager support round-robins (type = 0), where each participant plays every other participant, and (multi-)gauntlets, where one (or a few) so-called ‘gauntlet engines’ play an independent set of opponents. In the latter case, you specify the number of gauntlet engines. E.g. if you specified 10 engines, and tourney type = 2, the first 2 engines each play the remaining 8. A value of -1 instructs XBoard to play Swiss; for this to work an external pairing engine must be specified through the `pairingEngine' option. Each Swiss round will be considered a tourney cycle in that case. Default:0 Number of tourney cycles Default number of Games You can specify tourneys where every two opponents play each other multiple times. Such multiple games can be played in a row, as specified by the ‘number of games per pairing’, or by repeating the entire tournament schedule a number of times (specified by the ‘number of tourney cycles’). The total number of times two engine meet will be the product of these two. Default is 1 cycle; the number of games per pairing is the same as the default number of match games, stored in your settings file through the `defaultMatchGames' option. Save Tourney Games File where the tournament games are saved (duplicate of the item in the `Save Game Options'). Game File with Opening Lines File with Start Positions Game Number Position Number Rewind Index after These items optionally specify the file with move sequences or board positions the tourney games should start from. The corresponding numbers specify the number of the game or position in the file. Here a value -1 means automatic stepping through all games on the file, -2 automatic stepping every two games. The Rewind-Index parameter causes a stepping index to reset to one after reaching a specified value. A setting of -2 for the game number will also be effective in a tournament without specifying a game file, but playing from the GUI book instead. In this case the first (odd) games will randomly select from the book, but the second (even) games will select the same moves from the book as the previous game. (Note this leads to the same opening only if both engines use the GUI book!) Default: No game or position file will be used. The default index if such a file is used is 1. Disable own engine bools be default Setting this option reverses the default situation for use of the GUI opening book in tournaments from what it normally is, namely not using it. So unless the engine is installed with an option to explicitly specify it should not use the GUI book (i.e. `-firstHasOwnBookUCI true'), it will be made to use the GUI book. Replace Engine Upgrade Engine With these two buttons you can alter the participants of an already running tournament. After opening the Match Options dialog on an XBoard that is playing for the tourney, you will see all the tourney parameters in the dialog fields. You can then replace the name of one engine by that of another by editing the `participants' field. (But preserve the order of the others!) Pressing the button after that will cause the substitution. With the `Upgrade Engine' button the substitution will only affect future games. With `Replace Engine' all games the substituted engine has already played will be invalidated, and they will be replayed with the substitute engine. In this latter case the engine must not be playing when you do this, but otherwise there is no need to pause the tournament play for making a substitution. Clone Tourney Pressing this button after you have specified an existing tournament file will copy the contents of the latter to the dialog, and then puts the originally proposed name for the tourney file back. You can then run a tourney with the same parameters (possibly after changing the proposed name of the tourney file for the new tourney) by pressing 'OK'. 3.7.7 Load Game Options ----------------------- Summons a dialog where you can set the `autoDisplayComment' and `autoDisplayTags' options, (which control popups when viewing loaded games), and specify the rate at which loaded games are auto-played, in seconds per move (which can be a fractional number, like 1.6). You can also set search criteria for determining which games will be displayed in the Game List for a multi-game file, and thus be eligible for loading: Elo of strongest player Elo of weakest player year These numeric fields set thresholds (lower limits) on the Elo rating of the mentioned player, or the date the game was played. Defaults: 0 Search mode This setting determines which positions in a game will be considered a match to the position currently displayed in the board window when you press the `find position' button in the Game List. You can search for an exact match, a position that has all shown material in the same place, but might contain additional material, a position that has all Pawns in the same place, but can have the shown material anywhere, a position that can have all shown material anywhere, or a position that has material between certain limits anywhere. For the latter you have to place the material that must be present in the four lowest ranks of the board, and optional additional material in the four highest ranks of the board. You can request the optional material to be balanced. The `narrow' button is similar in fuction to the `find position' button, but only searches in the already selected games, rather than the complete game file, and can thus be used to refine a search based on multiple criteria. number of consecutive positions When you are searching by material, rather than for an exact match, this parameter indicates forhowmany consecutive game positions the same amount of material must be on the board before it is considered a match. Also match reversed colors Also match left-right flipped position When looking for matching positions rather than by material, these settings determine whether mirror images (in case of a vertical flip in combination with color reversal) will be also considered a match. The left-right flipping is only useful after all castling rights have expired (or in Xiangqi). 3.7.8 Save Game Options ----------------------- Summons a dialog where you can specify the files on which XBoard should automatically save any played or entered games, (the `saveGameFile' option), or the final position of such games (the `savePositionfile' option). You can also select 'auto-save' without a file name, in which case XBoard will prompt the user for a file name after each game. In ICS mode you can limit the auto-saving to your own games (i.e. suppress saving of observed games). You can also set the default value for the PGN Event tag that will be used for each new game you start. Various options for the format of the game can be specified as well, such as whether scores and depths of engine games should be saved as comments, and if a tag with info about the score with which the engine came out of book should be included. For Chess, always set the format to PGN, rather than "old save stye"! 3.7.9 Game List --------------- Pops up a dialog where you can select the PGN tags that should appear on the lines in the game list, and their order. 3.7.10 Sound Options -------------------- Summons a dialog where you can specify the sounds that should accompany various events that can occur XBoard. Most events are only relevant to ICS play, but the move sound is an important exception. For each event listed in the dialog, you can select a standard sound from a menu. You can also select a user-supplied sound file, by typing its name into the designated text-edit field first, and then selecting "Above WAV File" from the menu for the event. A dummy event has been provided for trying out the sounds with the "play" button next to it. The directory with standard sounds, and the external program for playing the sounds can be specified too, but normally you would not touch these once XBoard is properly installed. When a move sound other than 'None' is selected, XBoard alerts you by playing that sound after each of your opponent's moves (or after every move if you are observing a game on the Internet Chess Server). The sound is not played after moves you make or moves read from a saved game file. 3.7.11 Save Settings Now ------------------------ Selecting this menu item causes the current XBoard settings to be written to the settings file, so they will also apply in future sessions. Note that some settings are 'volatile', and are not saved, because XBoard considers it too unlikely that you want those to apply next time. In particular this applies to the Chess program names, and all options giving information on those Chess programs (such as their directory, if they have their own opening book, if they are UCI or native XBoard), or the variant you are playing. Such options would still be understood when they appear in the settings file in case they were put there with the aid of a text editor, but they would disappear from the file as soon as you save the settings. Note that XBoard no longer pays attention to options values specified in the .Xresources file. (Specifying key bindings there will still work, though.) To alter the default of volatile options, you can use the following method: Rename your ~/.xboardrc settings file (to ~/.yboardrc, say), and create a new file ~/.xboardrc, which only contains the options -settingsFile ~/.yboardrc -saveSettingsFile ~/.yboardrc This will cause your settings to be saved on ~/.yboardrc in the future, so that ~/.xboardrc is no longer overwritten. You can then safely specify volatile options in ~/.xboardrc, either before or after the settingsFile options. Note that when you specify persistent options after the settingsFile options in ~/.xboardrc, you will essentially turn them into volatile options with the specified value as default, because that value will overrule the value loaded from the settings file (being read later). 3.7.12 Save Settings on Exit ---------------------------- Setting this option has no immediate effect, but causes the settings to be saved when you quit XBoard. What happens then is otherwise identical to what happens when you use select "Save Settings Now", see there.  File: xboard.info, Node: Help Menu, Next: Keys, Prev: Options Menu, Up: Menus 3.8 Help Menu ============= Info XBoard Displays the XBoard documentation in info format. For this feature to work, you must have the GNU info program installed on your system, and the file `xboard.info' must either be present in the current working directory, or have been installed by the `make install' command when you built XBoard. Man XBoard Displays the XBoard documentation in man page format. The `F1' key is a keyboard equivalent. For this feature to work, the file `xboard.6' must have been installed by the `make install' command when you built XBoard, and the directory it was placed in must be on the search path for your system's `man' command. About XBoard Shows the current XBoard version number.  File: xboard.info, Node: Keys, Prev: Help Menu, Up: Menus 3.9 Other Shortcut Keys ======================= Show Last Move By hitting `Enter' the last move will be re-animated. Load Next Game Loads the next game from the last game record file you loaded. The `Alt+PgDn' key triggers this action. Load Previous Game Loads the previous game from the last game record file you loaded. The `Alt+PgUp' key triggers this action. Not available if the last game was loaded from a pipe. Reload Same Game Reloads the last game you loaded. Not available if the last game was loaded from a pipe. Currently no keystroke is assigned to this ReloadGameProc. Reload Same Position Reloads the last position you loaded. Not available if the last position was loaded from a pipe. Currently no keystroke is assigned to this ReloadPositionProc. In the Xaw build of XBoard you can add or remove shortcut keys using the X resources `paneA.translations'. Here is an example of what could go into your `.Xdefaults' file: XBoard*paneA.translations: \ Shift?: MenuItem(Help.About) \n\ Ctrly: MenuItem(Action.Accept) \n\ Ctrln: MenuItem(Action.Decline) \n\ Ctrli: MenuItem(Nothing) So the key should always be bound to the action 'MenuItem', with the (hierarchical) name of the menu item as argument. There are a few actions available for which no menu item exists: Binding a key to `Nothing' makes it do nothing, thus removing it as a shortcut key. Other such functions that can be bound to keys are: AboutGame, DebugProc (switches the -debug option on or off), LoadNextGame, LoadPrevGame, ReloadGame, ReloadPosition.  File: xboard.info, Node: Options, Next: Chess Servers, Prev: Menus, Up: Top 4 Options ********* This section documents the command-line options to XBoard. You can set these options in two ways: by typing them on the shell command line you use to start XBoard, or by editing the settings file (usually ~/.xboardrc) to alter the value of the setting that was saved there. Some of the options cannot be changed while XBoard is running; others set the initial state of items that can be changed with the *note Options:: menu. Most of the options have both a long name and a short name. To turn a boolean option on or off from the command line, either give its long name followed by the value true or false (`-longOptionName true'), or give just the short name to turn the option on (`-opt'), or the short name preceded by `x' to turn the option off (`-xopt'). For options that take strings or numbers as values, you can use the long or short option names interchangeably. * Menu: * Chess engine options:: Controlling the chess engine. * UCI + WB Engine Settings:: Setting some very common engine parameters * Tournament options:: Running tournaments and matches between engines. * ICS options:: Connecting to and using ICS. * Load and Save options:: Input/output options. * User interface options:: Look and feel options. * Adjudication Options:: Control adjudication of engine-engine games. * Other options:: Miscellaneous.  File: xboard.info, Node: Chess engine options, Next: UCI + WB Engine Settings, Up: Options 4.1 Chess Engine Options ======================== -tc or -timeControl minutes[:seconds] Each player begins with his clock set to the `timeControl' period. Default: 5 minutes. The additional options `movesPerSession' and `timeIncrement' are mutually exclusive. -mps or -movesPerSession moves When both players have made `movesPerSession' moves, a new `timeControl' period is added to both clocks. Default: 40 moves. -inc or -timeIncrement seconds If this option is specified, `movesPerSession' is ignored. Instead, after each player's move, `timeIncrement' seconds are added to his clock. Use `-inc 0' if you want to require the entire game to be played in one `timeControl' period, with no increment. Default: -1, which specifies `movesPerSession' mode. -clock/-xclock or -clockMode true/false Determines whether or not to display the chess clocks. If clockMode is false, the clocks are not shown, but the side that is to play next is still highlighted. Also, unless `searchTime' is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves. -st or -searchTime minutes[:seconds] Tells the chess engine to spend at most the given amount of time searching for each of its moves. Without this option, the chess engine chooses its search time based on the number of moves and amount of time remaining until the next time control. Setting this option also sets clockMode to false. -depth or -searchDepth number Tells the chess engine to look ahead at most the given number of moves when searching for a move to make. Without this option, the chess engine chooses its search depth based on the number of moves and amount of time remaining until the next time control. With the option, the engine will cut off its search early if it reaches the specified depth. -firstNPS number -secondNPS number Tells the chess engine to use an internal time standard based on its node count, rather then wall-clock time, to make its timing decisions. The time in virtual seconds should be obtained by dividing the node count through the given number, like the number was a rate in nodes per second. Xboard will manage the clocks in accordance with this, relying on the number of nodes reported by the engine in its thinking output. If the given number equals zero, it can obviously not be used to convert nodes to seconds, and the time reported by the engine is used to decrement the XBoard clock in stead. The engine is supposed to report in CPU time it uses, rather than wall-clock time, in this mode. This option can provide fairer conditions for engine-engine matches on heavily loaded machines, or with very fast games (where the wall clock is too inaccurate). `showThinking' must be on for this option to work. Default: -1 (off). Not many engines might support this yet! -firstTimeOdds factor -secondTimeOdds factor Reduces the time given to the mentioned engine by the given factor. If pondering is off, the effect is indistinguishable from what would happen if the engine was running on an n-times slower machine. Default: 1. -timeOddsMode mode This option determines how the case is handled where both engines have a time-odds handicap. If mode=1, the engine that gets the most time will always get the nominal time, as specified by the time-control options, and its opponent's time is renormalized accordingly. If mode=0, both play with reduced time. Default: 0. -hideThinkingFromHuman true/false Controls the Hide Thinking option. *Note Options Menu::. Default: true. (Replaces the Show-Thinking option of older xboard versions.) -thinking/-xthinking or -showThinking true/false Forces the engine to send thinking output to xboard. Used to be the only way to control if thinking output was displayed in older xboard versions, but as the thinking output in xboard 4.3 is also used for several other purposes (adjudication, storing in PGN file) the display of it is now controlled by the new option Hide Thinking. *Note Options Menu::. Default: false. (But if xboard needs the thinking output for some purpose, it makes the engine send it despite the setting of this option.) -ponder/-xponder or -ponderNextMove true/false Sets the Ponder Next Move menu option. *Note Options Menu::. Default: true. -smpCores number Specifies the maximum number of CPUs an SMP engine is allowed to use. Only works for engines that support the XBoard/WinBoard-protocol cores feature. -mg or -matchGames n Automatically runs an n-game match between two chess engines, with alternating colors. If the `loadGameFile' or `loadPositionFile' option is set, XBoard starts each game with the given opening moves or the given position; otherwise, the games start with the standard initial chess position. If the `saveGameFile' option is set, a move record for the match is appended to the specified file. If the `savePositionFile' option is set, the final position reached in each game of the match is appended to the specified file. When the match is over, XBoard displays the match score and exits. Default: 0 (do not run a match). -mm/-xmm or -matchMode true/false Setting `matchMode' to true is equivalent to setting `matchGames' to 1. -sameColorGames n Automatically runs an n-game match between two chess engines, without alternating colors. Otherwise the same applies as for the `-matchGames' option, over which it takes precedence if both are specified. (See there.) Default: 0 (do not run a match). -fcp or -firstChessProgram program Name of first chess engine. Default: `Fairy-Max'. -scp or -secondChessProgram program Name of second chess engine, if needed. A second chess engine is started only in Two Machines (match) mode. Default: `Fairy-Max'. -fe or -firstEngine nickname This is an alternative to the `fcp' option for specifying the first engine, for engines that were already configured (using the `Load Engine' dialog) in XBoard's settings file. It will not only retrieve the real name of the engine, but also all options configured with it. (E.g. if it is UCI, whether it should use book.) -se or -secondEngine nickname As `fe', but for the second engine. -fb/-xfb or -firstPlaysBlack true/false In games between two chess engines, firstChessProgram normally plays white. If this option is true, firstChessProgram plays black. In a multi-game match, this option affects the colors only for the first game; they still alternate in subsequent games. -fh or -firstHost host -sh or -secondHost host Hosts on which the chess engines are to run. The default for each is `localhost'. If you specify another host, XBoard uses `rsh' to run the chess engine there. (You can substitute a different remote shell program for rsh using the `remoteShell' option described below.) -fd or -firstDirectory dir -sd or -secondDirectory dir Working directories in which the chess engines are to be run. The default is "", which means to run the chess engine in the same working directory as XBoard itself. (See the CHESSDIR environment variable.) This option is effective only when the chess engine is being run on the local host; it does not work if the engine is run remotely using the -fh or -sh option. -initString string or -firstInitString -secondInitString string The string that is sent to initialize each chess engine for a new game. Default: new random Setting this option from the command line is tricky, because you must type in real newline characters, including one at the very end. In most shells you can do this by entering a `\' character followed by a newline. Using the character sequence `\n' in the string should work too, though. If you change this option, don't remove the `new' command; it is required by all chess engines to start a new game. You can remove the `random' command if you like; including it causes GNU Chess 4 to randomize its move selection slightly so that it doesn't play the same moves in every game. Even without `random', GNU Chess 4 randomizes its choice of moves from its opening book. Many other chess engines ignore this command entirely and always (or never) randomize. You can also try adding other commands to the initString; see the documentation of the chess engine you are using for details. -firstComputerString string -secondComputerString string The string that is sent to the chess engine if its opponent is another computer chess engine. The default is `computer\n'. Probably the only useful alternative is the empty string (`'), which keeps the engine from knowing that it is playing another computer. -reuse/-xreuse or -reuseFirst true/false -reuse2/-xreuse2 or -reuseSecond true/false If the option is false, XBoard kills off the chess engine after every game and starts it again for the next game. If the option is true (the default), XBoard starts the chess engine only once and uses it repeatedly to play multiple games. Some old chess engines may not work properly when reuse is turned on, but otherwise games will start faster if it is left on. -firstProtocolVersion version-number -secondProtocolVersion version-number This option specifies which version of the chess engine communication protocol to use. By default, version-number is 2. In version 1, the "protover" command is not sent to the engine; since version 1 is a subset of version 2, nothing else changes. Other values for version-number are not supported. -firstScoreAbs true/false -secondScoreAbs true/false If this option is set, the score reported by the engine is taken to be that in favor of white, even when the engine plays black. Important when XBoard uses the score for adjudications, or in PGN reporting. -niceEngines priority This option allows you to lower the priority of the engine processes, so that the generally insatiable hunger for CPU time of chess engines does not interfere so much with smooth operation of XBoard (or the rest of your system). Negative values could increase the engine priority, which is not recommended. -firstOptions string -secondOptions string The given string is a comma-separated list of (option name=option value) pairs, like the following example: "style=Karpov,blunder rate=0". If an option announced by the engine at startup through the feature commands of the XBoard/WinBoard protocol matches one of the option names (i.e. "style" or "blunder rate"), it would be set to the given value (i.e. "Karpov" or 0) through a corresponding option command to the engine. This provided that the type of the value (text or numeric) matches as well. -firstNeedsNoncompliantFEN string -secondNeedsNoncompliantFEN string The castling rights and e.p. fields of the FEN sent to the mentioned engine with the setboard command will be replaced by the given string. This can for instance be used to run engines that do not understand Chess960 FENs in variant fischerandom, to make them at least understand the opening position, through setting the string to "KQkq -". (Note you also have to give the e.p. field!) Other possible applications are to provide work-arounds for engines that want to see castling and e.p. fields in variants that do not have castling or e.p. (shatranj, courier, xiangqi, shogi) so that XBoard would normally omit them (string = "- -"), or to add variant-specific fields that are not yet supported by XBoard (e.g. to indicate the number of checks in 3check). -shuffleOpenings Forces shuffling of the opening setup in variants that normally have a fixed initial position. Shufflings are symmetric for black and white, and exempt King and Rooks in variants with normal castling. Remains in force until a new variant is selected.  File: xboard.info, Node: UCI + WB Engine Settings, Next: Tournament options, Prev: Chess engine options, Up: Options 4.2 UCI + WB Engine Settings ============================ -fUCI or -firstIsUCI true/false -sUCI or -secondIsUCI true/false Indicates if the mentioned engine executable file is an UCI engine, and should be run with the aid of the Polyglot adapter rather than directly. Xboard will then pass the other UCI options and engine name to Polyglot on its command line, according to the option `adapterCommand'. -fUCCI -sUCCI -fUSI -sUSI Options similar to `fUCI' and `sUCI', except that they use the indicated engine with the protocol adapter specified in the `uxiAdapter' option. This can then be configured for running an UCCI or USI adapter, as the need arises. -adapterCommand string The string conatins the command that should be issued by XBoard to start an engine that is accompanied by the `fUCI' option. Any identifier following a percent sign in the command (e.g. %fcp) will be considered the name of an XBoard option, and be replaced by the value of that option at the time the engine is started. For starting the second engine, any leading "f" or "first" in the option name will first be replaced by "s" or "second", before finding its value. Default: 'polyglot -noini -ec "%fcp" -ed "%fd"' -uxiAdapter string Similar to `adapterCommand', but used for engines accompanied by the `fUCCI' or `fUSI' option, so you can configure XBoard to be ready to handle more than one flavor of non-native protocols. Default: "" -polyglotDir filename Gives the name of the directory in which the Polyglot adapter for UCI engines resides. Default: "". -usePolyglotBook true/false Specifies if the Polyglot book should be used as GUI book. -polyglotBook filename Gives the filename of the opening book. The book is only used when the `usePolyglotBook' option is set to true, and the option `firstHasOwnBookUCI' or `secondHasOwnBookUCI' applying to the engine is set to false. The engine will be kept in force mode as long as the current position is in book, and XBoard will select the book moves for it. Default: "". -fNoOwnBookUCI or -firstXBook or -firstHasOwnBookUCI true/false -sNoOwnBookUCI or -secondXBook or -secondHasOwnBookUCI true/false Indicates if the mentioned engine has its own opening book it should play from, rather than using the external book through XBoard. Default: depends on setting of the option `discourageOwnBooks'. -discourageOwnBooks true/false When set, newly loaded engines will be assumed to use the GUI book, unless they explicitly specify differently. Otherwise they will be assumed to not use the GUI book, unless the specify differently (e.g. with `firstXBook'). Default: false. -bookDepth n Limits the use of the GUI book to the first n moves of each side. Default: 12. -bookVariation n A value n from 0 to 100 tunes the choice of moves from the GUI books from totally random to best-only. Default: 50 -mcBookMode When this volatile option is specified, the probing algorithm of the GUI book is altered to always select the move that is most under-represented based on its performance. When all moves are played in approximately the right proportion, a book miss will be reported, to give the engine opportunity to explore a new move. In addition score of the moves will be kept track of during the session in a book buffer. By playing an match in this mode, a book will be built from scratch. The only output are the saved games, which can be converted to an actual book later, with the `Save Games as Book' command. This command can also be used to pre-fill the book buffer before adding new games based on the probing algorithm. -fn string or -firstPgnName string -sn string or -secondPgnName string Indicates the name that should be used for the engine in PGN tags of engine-engine games. Intended to allow you to install verions of the same engine with different settings, and still distinguish them. Default: "". -defaultHashSize n Sets the size of the hash table to n MegaBytes. Together with the EGTB cache size this number is also used to calculate the memory setting of XBoard/WinBoard engines, for those that support the memory feature of the XBoard/WinBoard protocol. Default: 64. -defaultCacheSizeEGTB n Sets the size of the EGTB cache to n MegaBytes. Together with the hash-table size this number is also used to calculate the memory setting of XBoard/WinBoard engines, for those that support the memory feature of the XBoard/WinBoard protocol. Default: 4. -defaultPathEGTB filename Gives the name of the directory where the end-game tablebases are installed, for UCI engines. Default: "/usr/local/share/egtb". -egtFormats string Specifies which end-game tables are installed on the computer, and where. The argument is a comma-separated list of format specifications, each specification consisting of a format name, a colon, and a directory path name, e.g. "nalimov:/usr/local/share/egtb". If the name part matches that of a format that the engine requests through a feature command, xboard will relay the path name for this format to the engine through an egtpath command. One egtpath command for each matching format will be sent. Popular formats are "nalimov" DTM tablebases and "scorpio" bitbases. Default: "". -firstChessProgramNames={names} This option lets you customize the drop-down list of chess engine names that appears in the `Load Engine' and `Match Options' dialog. It consists of a list of strings, one per line. When an engine is loaded, the corresponding line is prefixed with "-fcp ", and processed like it appeared on the command line. That means that apart from the engine command, it can contain any list of XBoard options you want to use with this engine. (Commonly used options here are -fd, -firstXBook, -fUCI, -variant.) The value of this option is gradually built as you load new engines through the `Load Engine' menu dialog, with `Add to list' ticked. To change it, edit your settings file with a plain text editor.  File: xboard.info, Node: Tournament options, Next: ICS options, Prev: UCI + WB Engine Settings, Up: Options 4.3 Tournament options ====================== -defaultMatchGames n Sets the number of games that will be used for a match between two engines started from the menu to n. Also used as games per pairing in other tournament formats. Default: 10. -matchPause n Specifies the duration of the pause between two games of a match or tournament between engines as n milliseconds. Especially engines that do not support ping need this option, to prevent that the move they are thinking on when an opponent unexpectedly resigns will be counted for the next game, (leading to illegal moves there). Default: 10000. -tf filename or -tourneyFile filename Specifies the name of the tournament file used in match mode to conduct a multi-player tournament. This file is a special settings file, which stores the description of the tournament (including progress info), through normal options (e.g. for time control, load and save files), and through some special-purpose options listed below. -tt number or -tourneyType number Specifies the type of tourney: 0 = round-robin, N>0 = (multi-)gauntlet with N gauntlet engines, -1 = Swiss through external pairing engine. Volatile option, but stored in tourney file. -cy number or -tourneyCycles number Specifies the number of cycles in a tourney. Volatile option, but stored in tourney file. -participants list The list is a multi-line text string that specifies engines occurring in the `firstChesProgramNames' list in the settings file by their (implied or explicitly given) nicknames, one engine per line. The mentioned engines will play in the tourney. Volatile option, but stored in tourney file. -results string The string of +=- characters lists the result of all played games in a toruney. Games currently playing are listed as *, while a space indicates a game that is not yet played or playing . Volatile option, but stored in tourney file. -defaultTourneyName string Specifies the name of the tournament file XBoard should propose when the `Match Options' dialog is opened. Any %y, %M, %d, %h, %m, %s in the string are replaced by the current year, month, day of the month, hours, minutes, seconds of the current time, respectively, as two-digit number. A %Y would be replaced by the year as 4-digit number. Default: empty string. -pairingEngine filename Specifies the external program to be used to pair the participants in Swiss tourneys. XBoard communicates with this engine in the same way as it communicates with Chess engines. The only commands sent to the pairing engine are “results N string”, (where N is the number of participants, and string the results so far in the format of the results option), and “pairing N”, (where N is the number of the tourney game). To the latter the pairing engine should answer with “A-B”, where A and B are participant numbers (in the range 1-N). (There should be no reply to the results command.) Default: empty string. -afterGame string -afterTourney string When non-empty, the given string will be executed as a system command after each tournament game, orafterthe tourney completes, respectively. This can be used, for example, to autmatically run a cross-table generator on the PGN file where games are saved, to update the tourney standings. Default: "" -syncAfterRound true/false -syncAfterCycle true/false Controls whether different instances of XBoard concurrently running the same tournament will wait for each other. Defaults: sync after cycle, but not after round. -seedBase number Used to store the seed of the pseudo-random-number generator in the tourneyFile, so that separate instances of XBoard working on the same tourney can take coherent 'random' decisions, such as picking an opening for a given game number.  File: xboard.info, Node: ICS options, Next: Load and Save options, Prev: Tournament options, Up: Options 4.4 ICS options =============== -ics/-xics or -internetChessServerMode true/false Connect with an Internet Chess Server to play chess against its other users, observe games they are playing, or review games that have recently finished. Default: false. -icshost or -internetChessServerHost host The Internet host name or address of the chess server to connect to when in ICS mode. Default: `chessclub.com'. Another popular chess server to try is `freechess.org'. If your site doesn't have a working Internet name server, try specifying the host address in numeric form. You may also need to specify the numeric address when using the icshelper option with timestamp or timeseal (see below). -icsport or -internetChessServerPort port-number The port number to use when connecting to a chess server in ICS mode. Default: 5000. -icshelper or -internetChessServerHelper prog-name An external helper program used to communicate with the chess server. You would set it to "timestamp" for ICC (chessclub.com) or "timeseal" for FICS (freechess.org), after obtaining the correct version of timestamp or timeseal for your computer. See "help timestamp" on ICC and "help timeseal" on FICS. This option is shorthand for `-useTelnet -telnetProgram program'. -telnet/-xtelnet or -useTelnet true/false This option is poorly named; it should be called useHelper. If set to true, it instructs XBoard to run an external program to communicate with the Internet Chess Server. The program to use is given by the telnetProgram option. If the option is false (the default), XBoard opens a TCP socket and uses its own internal implementation of the telnet protocol to communicate with the ICS. *Note Firewalls::. -telnetProgram prog-name This option is poorly named; it should be called helperProgram. It gives the name of the telnet program to be used with the `gateway' and `useTelnet' options. The default is `telnet'. The telnet program is invoked with the value of `internetChessServerHost' as its first argument and the value of `internetChessServerPort' as its second argument. *Note Firewalls::. -gateway host-name If this option is set to a host name, XBoard communicates with the Internet Chess Server by using `rsh' to run the `telnetProgram' on the given host, instead of using its own internal implementation of the telnet protocol. You can substitute a different remote shell program for `rsh' using the `remoteShell' option described below. *Note Firewalls::. -internetChessServerCommPort or -icscomm dev-name If this option is set, XBoard communicates with the ICS through the given character I/O device instead of opening a TCP connection. Use this option if your system does not have any kind of Internet connection itself (not even a SLIP or PPP connection), but you do have dial-up access (or a hardwired terminal line) to an Internet service provider from which you can telnet to the ICS. The support for this option in XBoard is minimal. You need to set all communication parameters and tty modes before you enter XBoard. Use a script something like this: stty raw -echo 9600 > /dev/tty00 xboard -ics -icscomm /dev/tty00 Here replace `/dev/tty00' with the name of the device that your modem is connected to. You might have to add several more options to these stty commands. See the man pages for `stty' and `tty' if you run into problems. Also, on many systems stty works on its standard input instead of standard output, so you have to use `<' instead of `>'. If you are using linux, try starting with the script below. Change it as necessary for your installation. #!/bin/sh -f # configure modem and fire up XBoard # configure modem ( stty 2400 ; stty raw ; stty hupcl ; stty -clocal stty ignbrk ; stty ignpar ; stty ixon ; stty ixoff stty -iexten ; stty -echo ) < /dev/modem xboard -ics -icscomm /dev/modem After you start XBoard in this way, type whatever commands are necessary to dial out to your Internet provider and log in. Then telnet to ICS, using a command like `telnet chessclub.com 5000'. Important: See the paragraph below about extra echoes, in *note Limitations::. -icslogon or -internetChessServerLogonScript file-name Whenever XBoard connects to the Internet Chess Server, if it finds a file with the name given in this option, it feeds the file's contents to the ICS as commands. The default file name is `.icsrc'. Usually the first two lines of the file should be your ICS user name and password. The file can be either in $CHESSDIR, in XBoard's working directory if CHESSDIR is not set, or in your home directory. -msLoginDelay delay If you experience trouble logging on to an ICS when using the `-icslogon' option, inserting some delay between characters of the logon script may help. This option adds `delay' milliseconds of delay between characters. Good values to try are 100 and 250. -icsinput/-xicsinput or -internetChessServerInputBox true/false Sets the ICS Input Box menu option. *Note Mode Menu::. Default: false. -autocomm/-xautocomm or -autoComment true/false Sets the Auto Comment menu option. *Note Options Menu::. Default: false. -autoflag/-xautoflag or -autoCallFlag true/false Sets the Auto Flag menu option. *Note Options Menu::. Default: false. -autobs/-xautobs or -autoObserve true/false Sets the Auto Observe menu option. *Note Options Menu::. Default: false. -autoKibitz Enables kibitzing of the engines last thinking output (depth, score, time, speed, PV) before it moved to the ICS, in zippy mode. The option `showThinking' must be switched on for this option to work. Also diverts similar kibitz information of an opponent engine that is playing you through the ICS to the engine-output window, as if the engine was playing locally. -seekGraph true/false or -sg Enables displaying of the seek graph by left-clicking the board when you are logged on to an ICS and currently idle. The seek graph show all players currently seeking games on the ICS, plotted according to their rating and the time control of the game they seek, in three different colors (for rated, unrated and wild games). Computer ads are displayed as squares, human ads are dots. Default: false. -autoRefresh true/false Enables automatic updating of the seek graph, by having the ICS send a running update of all newly placed and removed seek ads. This consumes a substantial amount of communication bandwidth, and is only supported for FICS and ICC. Default: false. -backgroundObserve true/false When true, boards sent to you by the ICS from other games while you are playing (e.g. because you are observing them) will not be automatically displayed. Only a summary of time left and material of both players will appear in the message field above the board. XBoard will remember the last board it has received this way, and will display it in stead of the position in your own game when you press the right mouse button. No other information is stored on such games observed in the background; you cannot save such a game later, or step through its moves. This feature is provided solely for the benefit of bughouse players, to enable them to peek at their partner's game without the need to logon twice. Default: false. -dualBoard true/false In combination with -backgroundObserve true, this option will display the board of the background game side by side with that of your own game, so you can have it in view permanently. Any board or holdings info coming in will be displayed on the secondary board immediately. This feature is still experimental and largely unfinished. There is no animation or highlighting of moves on the secondary board. Default: false. -disguisePromotedPieces true/false When set promoted Pawns in crazyhouse/bughouse are displayed identical to primordial pieces of the same type, rather than distinguishable. Default: true. -moves/-xmoves or -getMoveList true/false Sets the Get Move List menu option. *Note Options Menu::. Default: true. -alarm/-xalarm or -icsAlarm true/false Sets the ICS Alarm menu option. *Note Options Menu::. Default: true. -icsAlarmTime ms Sets the time in milliseconds for the ICS Alarm menu option. *Note Options Menu::. Default: 5000. lowTimeWarning true/false Controls a color change of the board as a warning your time is running out. *Note Options Menu::. Default: false. -pre/-xpre \fRor\fB -premove true/false Sets the Premove menu option. *Note Options Menu::. Default: true. -prewhite/-xprewhite or -premoveWhite -preblack/-xpreblack or -premoveBlack -premoveWhiteText string -premoveBlackText string Set the menu options for specifying the first move for either color. *Note Options Menu::. Defaults: false and empty strings, so no pre-moves. -quiet/-xquiet or -quietPlay true/false Sets the Quiet Play menu option. *Note Options Menu::. Default: false. -colorizeMessages or -colorize/-xcolorize Setting colorizeMessages to true tells XBoard to colorize the messages received from the ICS. Colorization works only if your xterm supports ISO 6429 escape sequences for changing text colors. Default: true. -colorShout foreground,background,bold -colorSShout foreground,background,bold -colorCShout foreground,background,bold -colorChannel1 foreground,background,bold -colorChannel foreground,background,bold -colorKibitz foreground,background,bold -colorTell foreground,background,bold -colorChallege foreground,background,bold -colorRequest foreground,background,bold -colorSeek foreground,background,bold -colorNormal foreground,background,bold These options set the colors used when colorizing ICS messages. All ICS messages are grouped into one of these categories: shout, sshout, channel 1, other channel, kibitz, tell, challenge, request (including abort, adjourn, draw, pause, and takeback), or normal (all other messages). Each foreground or background argument can be one of the following: black, red, green, yellow, blue, magenta, cyan, white, or default. Here "default" means the default foreground or background color of your xterm. Bold can be 1 or 0. If background is omitted, "default" is assumed; if bold is omitted, 0 is assumed. -soundProgram progname If this option is set to a sound-playing program that is installed and working on your system, XBoard can play sound files when certain events occur, listed below. The default program name is "play". If any of the sound options is set to "$", the event rings the terminal bell by sending a ^G character to standard output, instead of playing a sound file. If an option is set to the empty string "", no sound is played for that event. -soundDirectory directoryname This option specifies where XBoard will look for sound files, when these are not given as an absolute path name. -soundShout filename -soundSShout filename -soundCShout filename -soundChannel filename -soundChannel1 filename -soundKibitz filename -soundTell filename -soundChallenge filename -soundRequest filename -soundSeek filename These sounds are triggered in the same way as the colorization events described above. They all default to "", no sound. They are played only if the colorizeMessages is on. CShout is synonymous with SShout. -soundMove filename This sound is used by the Move Sound menu option. Default: "$". -soundIcsAlarm filename This sound is used by the ICS Alarm menu option. Default: "$". -soundIcsWin filename This sound is played when you win an ICS game. Default: "" (no sound). -soundIcsLoss filename This sound is played when you lose an ICS game. Default: "" (no sound). -soundIcsDraw filename This sound is played when you draw an ICS game. Default: "" (no sound). -soundIcsUnfinished filename This sound is played when an ICS game that you are participating in is aborted, adjourned, or otherwise ends inconclusively. Default: "" (no sound).  File: xboard.info, Node: Load and Save options, Next: User interface options, Prev: ICS options, Up: Options 4.5 Load and Save options ========================= -lgf or -loadGameFile file -lgi or -loadGameIndex index If the `loadGameFile' option is set, XBoard loads the specified game file at startup. The file name `-' specifies the standard input. If there is more than one game in the file, XBoard pops up a menu of the available games, with entries based on their PGN (Portable Game Notation) tags. If the `loadGameIndex' option is set to `N', the menu is suppressed and the N th game found in the file is loaded immediately. The menu is also suppressed if `matchMode' is enabled or if the game file is a pipe; in these cases the first game in the file is loaded immediately. Use the `pxboard' shell script provided with XBoard if you want to pipe in files containing multiple games and still see the menu. If the loadGameIndex specifies an index -1, this triggers auto-increment of the index in `matchMode', which means that after every game the index is incremented by one, causing each game of the match to be played from the next game in the file. Similarly, specifying an index value of -2 causes the index to be incremented every two games, so that each game in the file is used twice (with reversed colors). The `rewindIndex' option causes the index to be reset to the first game of the file when it has reached a specified value. -rewindIndex n Causes a position file or game file to be rewound to its beginning after n positions or games in auto-increment `matchMode'. See `loadPositionIndex' and `loadGameIndex'. default: 0 (no rewind). -td or -timeDelay seconds Time delay between moves during `Load Game' or `Analyze File'. Fractional seconds are allowed; try `-td 0.4'. A time delay value of -1 tells XBoard not to step through game files automatically. Default: 1 second. -sgf or -saveGameFile file If this option is set, XBoard appends a record of every game played to the specified file. The file name `-' specifies the standard output. -autosave/-xautosave or -autoSaveGames true/false Sets the Auto Save menu option. *Note Options Menu::. Default: false. Ignored if `saveGameFile' is set. -onlyOwnGames true/false Suppresses auto-saving of ICS observed games. Default: false. -lpf or -loadPositionFile file -lpi or -loadPositionIndex index If the `loadPositionFile' option is set, XBoard loads the specified position file at startup. The file name `-' specifies the standard input. If the `loadPositionIndex' option is set to N, the Nth position found in the file is loaded; otherwise the first position is loaded. If the loadPositionIndex specifies an index -1, this triggers auto-increment of the index in `matchMode', which means that after every game the index is incremented by one, causing each game of the match to be played from the next position in the file. Similarly, specifying an index value of -2 causes the index to be incremented every two games, so that each position in the file is used twice (with the engines playing opposite colors). The `rewindIndex' option causes the index to be reset to the first position of the file when it has reached a specified value. -spf or -savePositionFile file If this option is set, XBoard appends the final position reached in every game played to the specified file. The file name `-' specifies the standard output. -pgnExtendedInfo true/false If this option is set, XBoard saves depth, score and time used for each move that the engine found as a comment in the PGN file. Default: false. -pgnEventHeader string Sets the name used in the PGN event tag to string. Default: "Computer Chess Game". -pgnNumberTag true/false Include the (unique) sequence number of a tournament game into the saved PGN file as a 'number' tag. Default: false. -saveOutOfBookInfo true/false Include the information on how the engine(s) game out of its opening book in a special 'annotator' tag with the PGN file. Default: true. -oldsave/-xoldsave or -oldSaveStyle true/false Sets the Old Save Style menu option. *Note Options Menu::. Default: false. -gameListTags string The character string lists the PGN tags that should be printed in the Game List, and their order. The meaning of the codes is e=event, s=site, d=date, o=round, p=players, r=result, w=white Elo, b=black Elo, t=time control, v=variant, a=out-of-book info, c=result comment. Default: "eprd" -ini or -settingsFile filename -saveSettingsFile filename @filename When XBoard encounters an option -settingsFile (or -ini for short), or @filename, it tries to read the mentioned file, and substitutes the contents of it (presumaby more command-line options) in place of the option. In the case of -ini or -settingsFile, the name of a successfully read settings file is also remembered as the file to use for saving settings (automatically on exit, or on user command). An option of the form @filename does not affect saving. The option -saveSettingsFile does specify a name of the file to use for saving, without reading any options from it, and is thus also effective when the file did not exist yet. So the settings will be saved to the file specified in the last -saveSettingsFile or succesfull -settingsFile / -ini command, if any, and in /etc/xboard/xboard.conf otherwise. Usualy the latter is only accessible for the system administrator, though, and will be used to contain system-wide default setings, amongst which a -saveSettingsFile and -settingsFile options to specify a settings file accessible to the individual user, such as ~/.xboardrc in the user's home directory. -saveSettingsOnExit true/false Controls saving of options on the settings file. *Note Options Menu::. Default: true.  File: xboard.info, Node: User interface options, Next: Adjudication Options, Prev: Load and Save options, Up: Options 4.6 User interface options ========================== -display -geometry -iconic -name These and most other standard Xt options are accepted. -noGUI Suppresses all GUI functions of XBoard (to speed up automated ultra-fast engine-engine games, which you don't want to watch). There will be no board or clock updates, no printing of moves, and no update of the icon on the task bar in this mode. -logoSize N This option controls the drawing of player logos next to the clocks. The integer N specifies the width of the logo in pixels; the logo height will always be half the width. When N = 0, no logos will be diplayed. Default: 0. -firstLogo imagefile -secondLogo imagefile Specify the images to be used as player logos when `logoSize' is non-zero, next to the white and black clocks, respectively. -autoLogo true/false -logoDir filename When `autoLogo' is set, XBoard will search for a PNG image file with the name of the engine or ICS in the directory specified by `logoDir'. -recentEngines number -recentEngineList list When the number is larger than zero, it determines how many recently used engines will be appended at the bottom of the `Engines' menu. The engines will be saved in your settings file as the option `recentEngineList', by their nicknames, and the most recently used one will always be sorted to the top. If the list after that is longer than the specified number, the last one is discarded. Changes in the list will only become visible the next session, provided you saved the settings. Default: 6. -autoInstall list When the list is set to a non-empty string, XBoard will scan the operating system's plugin directory for engines supporting UCI and XBoard protocol at startup. When it finds an engine that was installed after it last saved its settings, a line to launch that engine (as per specs in the plugin file) is appended to the -firstChessProgramNames list of installed engines. In the future it will be possible to use the list to limit this automatic adding of engines to a certain types of variants. -oneClickMove true/false When set, this option allows you to enter moves by only clicking the to- or from-square, when only a single legal move to or from that square is possible. Double-clicking a piece (or clicking an already selected piece) will instruct that piece to make the only capture it can legally do. Default: false. -movesound/-xmovesound or -ringBellAfterMoves true/false Sets the Move Sound menu option. *Note Options Menu::. Default: false. For compatibility with old XBoard versions, -bell/-xbell are also accepted as abbreviations for this option. -exit/-xexit or -popupExitMessage true/false Sets the Popup Exit Message menu option. *Note Options Menu::. Default: true. -popup/-xpopup or -popupMoveErrors true/false Sets the Popup Move Errors menu option. *Note Options Menu::. Default: false. -queen/-xqueen or -alwaysPromoteToQueen true/false Sets the Always Queen menu option. *Note Options Menu::. Default: false. -sweepPromotions true/false Sets the `Almost Always Promote to Queen' menu option. *Note Options Menu::. Default: false. -legal/-xlegal or -testLegality true/false Sets the Test Legality menu option. *Note Options Menu::. Default: true. -size or -boardSize (sizeName | n1,n2,n3,n4,n5,n6,n7) Determines how large the board will be, by selecting the pixel size of the pieces and setting a few related parameters. The sizeName can be one of: Titanic, giving 129x129 pixel pieces, Colossal 116x116, Giant 108x108, Huge 95x95, Big 87x87, Large 80x80, Bulky 72x72, Medium 64x64, Moderate 58x58, Average 54x54, Middling 49x49, Mediocre 45x45, Small 40x40, Slim 37x37, Petite 33x33, Dinky 29x29, Teeny 25x25, or Tiny 21x21. Xboard installs with a set of scalable (svg) piece images, which it scales to any of the requested sizes. The square size can further be continuously scaled by sizing the board window, but this only adapts the size of the pieces, and has no effect on the width of the grid lines or the font choice (both of which would depend on he selected boardSize). The default depends on the size of your screen; it is approximately the largest size that will fit without clipping. You can select other sizes or vary other layout parameters by providing a list of comma-separated values (with no spaces) as the argument. You do not need to provide all the values; for any you omit from the end of the list, defaults are taken from the nearest built-in size. The value `n1' gives the piece size, `n2' the width of the black border between squares, `n3' the desired size for the clockFont, `n4' the desired size for the coordFont, `n5' the desired size for the messageFont, `n6' the smallLayout flag (0 or 1), and `n7' the tinyLayout flag (0 or 1). All dimensions are in pixels. If the border between squares is eliminated (0 width), the various highlight options will not work, as there is nowhere to draw the highlight. If smallLayout is 1 and `titleInWindow' is true, the window layout is rearranged to make more room for the title. If tinyLayout is 1, the labels on the menu bar are abbreviated to one character each and the buttons in the button bar are made narrower. -overrideLineGap n When n >= 0, this forces the width of the black border between squares to n pixels for any board size. Mostly used to suppress the grid entirely by setting n = 0, e.g. in xiangqi or just getting a prettier picture. When n < 0 this the size-dependent width of the grid lines is used. Default: -1. -coords/-xcoords or -showCoords true/false Sets the Show Coords menu option. *Note Options Menu::. Default: false. The `coordFont' option specifies what font to use. -autoraise/-xautoraise or -autoRaiseBoard true/false Sets the Auto Raise Board menu option. *Note Options Menu::. Default: true. -autoflip/-xautoflip or -autoFlipView true/false Sets the Auto Flip View menu option. *Note Options Menu::. Default: true. -flip/-xflip or -flipView true/false If Auto Flip View is not set, or if you are observing but not participating in a game, then the positioning of the board at the start of each game depends on the flipView option. If flipView is false (the default), the board is positioned so that the white pawns move from the bottom to the top; if true, the black pawns move from the bottom to the top. In any case, the Flip menu option (see *note Options Menu::) can be used to flip the board after the game starts. -title/-xtitle or -titleInWindow true/false If this option is true, XBoard displays player names (for ICS games) and game file names (for `Load Game') inside its main window. If the option is false (the default), this information is displayed only in the window banner. You probably won't want to set this option unless the information is not showing up in the banner, as happens with a few X window managers. -buttons/-xbuttons or -showButtonBar True/False If this option is False, xboard omits the [<<] [<] [P] [>] [>>] button bar from the window, allowing the message line to be wider. You can still get the functions of these buttons using the menus or their keyboard shortcuts. Default: true. -evalZoom factor The score interval (-1,1) is blown up on the vertical axis of the Evaluation Graph by the given factor. Default: 1 -evalThreshold n Score below n (centiPawn) are plotted as 0 in the Evaluation Graph. Default: 25 -mono/-xmono or -monoMode true/false Determines whether XBoard displays its pieces and squares with two colors (true) or four (false). You shouldn't have to specify `monoMode'; XBoard will determine if it is necessary. -showTargetSquares true/false Determines whether XBoard can highlight the squares a piece has legal moves to, when you grab that piece with the mouse. Default: false. -flashCount count -flashRate rate -flash/-xflash These options enable flashing of pieces when they land on their destination square. `flashCount' tells XBoard how many times to flash a piece after it lands on its destination square. `flashRate' controls the rate of flashing (flashes/sec). Abbreviations: `flash' sets flashCount to 3. `xflash' sets flashCount to 0. Defaults: flashCount=0 (no flashing), flashRate=5. -highlight/-xhighlight or -highlightLastMove true/false Sets the Highlight Last Move menu option. *Note Options Menu::. Default: false. -highlightMoveWithArrow true/false Sets the Highlight with Arrow menu option. *Note Options Menu::. Default: false. -blind/-xblind or -blindfold true/false Sets the Blindfold menu option. *Note Options Menu::. Default: false. -periodic/-xperiodic or -periodicUpdates true/false Controls updating of current move andnode counts in analysis mode. Default: true. -fSAN -sSAN Causes the PV in thinking output of the mentioned engine to be converted to SAN before it is further processed. Warning: this might lose engine output not understood by the parser, and uses a lot of CPU power. Default: the PV is displayed exactly as the engine produced it. -showEvalInMoveHistory true/false Controls whether the evaluation scores and search depth of engine moves are displayed with the move in the move-history window. Default: true. -clockFont font The font used for the clocks. If the option value is a pattern that does not specify the font size, XBoard tries to choose an appropriate font for the board size being used. Default Xaw: -*-helvetica-bold-r-normal-*-*-*-*-*-*-*-*. Default GTK: Sans Bold %d. -coordFont font The font used for rank and file coordinate labels if `showCoords' is true. If the option value is a pattern that does not specify the font size, XBoard tries to choose an appropriate font for the board size being used. Default Xaw: -*-helvetica-bold-r-normal-*-*-*-*-*-*-*-*. Default GTK: Sans Bold %d. -messageFont font The font used for popup dialogs, menus, etc. If the option value is a pattern that does not specify the font size, XBoard tries to choose an appropriate font for the board size being used. Default Xaw: -*-helvetica-medium-r-normal-*-*-*-*-*-*-*-*. Default GTK: Sans Bold %d. The font used in the Edit Tags dialog. If the option value contains %d, XBoard will replace it by an appropriate font for the board size being used. (Only used in GTK build.) Default: Sans Normal %d. The font used in the Edit Comment dialog. If the option value contains %d, XBoard will replace it by an appropriate font for the board size being used. (Only used in GTK build.) Default: Sans Normal %d. The font used to display ICS output in the ICS Chat window. As ICS output often contains tables aligned by spaces, a mono-space font is recommended here. If the option value contains %d, XBoard will replace it by an appropriate font for the board size being used. (Only used in GTK build.) Default: Monospace Normal %d. The font used in Move History and Engine Output windows. As these windows display mainly moves, one could use a figurine font here. If the option value contains %d, XBoard will replace it by an appropriate font for the board size being used. (Only used in GTK build.) Default: Sans Normal %d. The font used in the listbox of the Game List window. If the option value contains %d, XBoard will replace it by an appropriate font for the board size being used. (Only used in GTK build.) Default: Sans Bold %d. -fontSizeTolerance tol In the font selection algorithm, a nonscalable font will be preferred over a scalable font if the nonscalable font's size differs by `tol' pixels or less from the desired size. A value of -1 will force a scalable font to always be used if available; a value of 0 will use a nonscalable font only if it is exactly the right size; a large value (say 1000) will force a nonscalable font to always be used if available. Default: 4. -pid or -pieceImageDirectory dir This options control what piece images xboard uses. XBoard will look in the specified directory for an image in png or svg format for every piece type, with names like BlackQueen.svg, WhiteKnight.svg etc. When neither of these is found (or no valid directory is specified) XBoard will use the svg piece that was installed with it (from the source-tree directory `svg'). Both svg and png images will be scaled by XBoard to the required size, but the png pieces lose much in quality when scaled too much. -whitePieceColor color -blackPieceColor color -lightSquareColor color -darkSquareColor color -highlightSquareColor color -preoveHighlightColor color -lowTimeWarningColor color Colors to use for the pieces, squares, and square highlights. Defaults: -whitePieceColor #FFFFCC -blackPieceColor #202020 -lightSquareColor #C8C365 -darkSquareColor #77A26D -highlightSquareColor #FFFF00 -premoveHighlightColor #FF0000 -lowTimeWarningColor #FF0000 On a grayscale monitor you might prefer: -whitePieceColor gray100 -blackPieceColor gray0 -lightSquareColor gray80 -darkSquareColor gray60 -highlightSquareColor gray100 -premoveHighlightColor gray70 -lowTimeWarningColor gray70 The PieceColor options only work properly if the image files defining the pieces were pure black & white (possibly anti-aliased to produce gray scales and semi-transparancy), like the pieces images that come with the install. Their effect on colored pieces is undefined. The SquareColor option only have an effect when no board textures are used. -trueColors true/false When set, this option suppresses the effect of the PieceColor options mentioned above. This is recommended for images that are already colored. -useBoardTexture true/false -liteBackTextureFile filename -darkBackTextureFile filename Indicate the png image files to be used for drawing the board squares, and if they should be used rather than using simple colors. The algorithm for cutting squares out of a given bitmap is such that the picture is perfectly reproduced when a bitmap the size of the complete board is given. If the filename ends in "-NxM.png", with integer N and M, it is assumed to contain a bitmap of a complete board of N files and M ranks, and XBoard will scale it to exactly match the current square size. If N=M=0 it scales the entire bitmap to the size of the board, irrespective of the number of files and ranks of the latter. Without any -NxM suffix textures are only blown up by an integer factor when they are smaller than the square size, or, when the name starts with "xq", too small to cover the complete Xiangqi board. Default: false and "" -drag/-xdrag or -animateDragging true/false Sets the Animate Dragging menu option. *Note Options Menu::. Default: true. -animate/-xanimate or -animateMoving true/false Sets the Animate Moving menu option. *Note Options Menu::. Default: true. -animateSpeed n Number of milliseconds delay between each animation frame when Animate Moves is on. -autoDisplayComment true/false -autoDisplayTags true/false If set to true, these options cause the window with the move comments, and the window with PGN tags, respectively, to pop up automatically when such tags or comments are encountered during the replaying a stored or loaded game. Default: true. -pasteSelection true/false If this option is set to true, the Paste Position and Paste Game options paste from the currently selected text. If false, they paste from the clipboard. Default: false. -autoCopyPV true|false When this option is set, the position displayed on the board when you terminate a PV walk (initiated by a right-click on board or engine-output window) will be automatically put on the clipboard as FEN. Default: false. -dropMenu true|false This option allows you to emulate old behavior, where the right mouse button brings up the (now deprecated) drop menu rather than displaying the position at the end of the principal variation. Default: False. -pieceMenu true|false This option allows you to emulate old behavior, where the right mouse button brings up the (now deprecated) piece menu in Edit Position mode. From this menu you can select the piece to put on the square you clicked to bring up the menu, or select items such as `clear board'. You can also `promote' or `demote' a clicked piece to convert it into an unorthodox piece that is not directly in the menu, or give the move to `black' or `white'. -variations true|false When this option is on, you can start new variations in Edit Game or Analyze mode by holding the Shift key down while entering a move. When it is off, the Shift key will be ignored. Default: False. -appendPV true|false When this option is on, right-clicking a PV in the Engine Output window will play the first move of that PV in Analyze mode, or as many moves as you walk through by moving the mouse. Default: False. -absoluteAnalysisScores true|false When true, scores on the Engine Output window during analysis will be printed from the white point-of-view, rather than the side-to-move point-of-view. Default: False. -scoreWhite true|false When true, scores will always be printed from the white point-of-view, rather than the side-to-move point-of-view. Default: False. -memoHeaders true|false When true, column headers will be displayed in the Engine Output window for the depth, score, time and nodes data. Right-clicking on these headers will hide or show the corresponding data. (Not intended for dynamic use, as already printed data of the current search will not be affected!) Defaul: False.  File: xboard.info, Node: Adjudication Options, Next: Other options, Prev: User interface options, Up: Options 4.7 Adjudication Options ======================== -adjudicateLossThreshold n If the given value is non-zero, XBoard adjudicates the game as a loss if both engines agree for a duration of 6 consecutive ply that the score is below the given score threshold for that engine. Make sure the score is interpreted properly by XBoard, using `-firstScoreAbs' and `-secondScoreAbs' if needed. Default: 0 (no adjudication) -adjudicateDrawMoves n If the given value is non-zero, XBoard adjudicates the game as a draw if after the given number of moves it was not yet decided. Default: 0 (no adjudication) -checkMates true/false If this option is set, XBoard detects all checkmates and stalemates, and ends the game as soon as they occur. Legality-testing must be switched on for this option to work. Default: true -testClaims true/false If this option is set, XBoard verifies all result claims made by engines, and those who send false claims will forfeit the game because of it. Legality-testing must be switched on for this option to work. Default: true -materialDraws true/false If this option is set, XBoard adjudicates games as draws when there is no sufficient material left to inflict a checkmate. This applies to KBKB with like bishops (any number, actually), and to KBK, KNK and KK. Legality-testing must be switched on for this option to work. Default: true -trivialDraws true/false If this option is set, XBoard adjudicates games as draws that cannot be usually won without opponent cooperation. This applies to KBKB with unlike bishops, and to KBKN, KNKN, KNNK, KRKR and KQKQ. The draw is called after 6 ply into these end-games, to allow quick mates that can occur in some exceptional positions to be found by the engines. KQKQ does not really belong in this category, and might be taken out in the future. (When bitbase-based adjudications are implemented.) Legality-testing must be on for this option to work. Default: false -ruleMoves n If the given value is non-zero, XBoard adjudicates the game as a draw after the given number of consecutive reversible moves. Engine draw claims are always accepted after 50 moves, irrespective of the given value of n. -repeatsToDraw n If the given value is non-zero, xboard adjudicates the game as a draw if a position is repeated the given number of times. Engines draw claims are always accepted after 3 repeats, (on the 3rd occurrence, actually), irrespective of the value of n. Beware that positions that have different castling or en-passant rights do not count as repeats, XBoard is fully e.p. and castling aware!  File: xboard.info, Node: Other options, Prev: Adjudication Options, Up: Options 4.8 Other options ================= -ncp/-xncp or -noChessProgram true/false If this option is true, XBoard acts as a passive chessboard; it does not start a chess engine at all. Turning on this option also turns off clockMode. Default: false. -viewer -viewerOptions string Presence of the volatile option `viewer' on the command line will cause the value of the persistent option `viewerOptions' as stored in the settings file to be appended to the command line. The `view' option will be used by desktop associations with game or position file types, so that `viewerOptions' can be used to configure the exact mode XBoard will start in when it should act on such a file (e.g. in -ncp mode, or analyzing with your favorite engine). The options are also automatically appended when Board is invoked with a single argument not being an option name, which is then assumed to be the name of a `loadGameFile' or (when the name ends in .fen) a `loadPositionFile'. Default: "-ncp -engineOutputUp false -saveSettingsOnExit false". -tourneyOptions string When XBoard is invoked with a single argument that is a file with .trn extension, it will assume this argument to be the value of a `tourneyFile' option, and apped the value of the persistent option `tourneyOptions' as stored in the settings file to the command line. Thus the value of `tourneyOptions' can be used to configure XBoard to automatically start running a tournament when it should act on such a file. Default: "-ncp -mm -saveSettingsOnExit false". -mode or -initialMode modename If this option is given, XBoard selects the given modename from the Mode menu after starting and (if applicable) processing the loadGameFile or loadPositionFile option. Default: "" (no selection). Other supported values are MachineWhite, MachineBlack, TwoMachines, Analysis, AnalyzeFile, EditGame, EditPosition, and Training. -variant varname Activates preliminary, partial support for playing chess variants against a local engine or editing variant games. This flag is not needed in ICS mode. Recognized variant names are: normal Normal chess wildcastle Shuffle chess, king can castle from d file nocastle Shuffle chess, no castling allowed fischerandom Fischer Random shuffle chess bughouse Bughouse, ICC/FICS rules crazyhouse Crazyhouse, ICC/FICS rules losers Lose all pieces or get mated (ICC wild 17) suicide Lose all pieces including king (FICS) giveaway Try to have no legal moves (ICC wild 26) twokings Weird ICC wild 9 kriegspiel Opponent's pieces are invisible atomic Capturing piece explodes (ICC wild 27) 3check Win by giving check 3 times (ICC wild 25) shatranj An ancient precursor of chess (ICC wild 28) xiangqi Chinese Chess (on a 9x10 board) shogi Japanese Chess (on a 9x9 board & piece drops) capablanca Capablanca Chess (10x8 board, with Archbishop and Chancellor pieces) gothic similar, with a better initial position caparandom An FRC-like version of Capablanca Chess (10x8) janus A game with two Archbishops (10x8 board) courier Medieval intermediate between shatranj and modern Chess (on 12x8 board) falcon Patented 10x8 variant with two Falcon pieces berolina Pawns capture straight ahead, and move diagonal cylinder Pieces wrap around the board edge knightmate King moves as Knight, and vice versa super Superchess (shuffle variant with 4 exo-pieces) makruk Thai Chess (shatranj-like, P promotes on 6th rank) asean ASEAN Chess (a modernized version of Makruk) spartan Spartan Chess (black has unorthodox pieces) fairy A catchall variant in which all piece types known to XBoard can participate (8x8) unknown Catchall for other unknown variants NOT ALL BOARDSIZES PROVIDE A COMPLETE SET OF BUILT-IN BITMAPS FOR ALL UN-ORTHODOX PIECES, though. Only in `boardSize' middling and bulky all 22 piece types are provided, while -boardSize petite has most of them. Archbishop, Chancellor and Amazon are supported in every size from petite to bulky. Kings or Amazons are substituted for missing bitmaps. You can still play variants needing un-orthodox pieces in other board sizes providing your own bitmaps through the `bitmapDirectory' or `pixmapDirectory' options. In the shuffle variants, XBoard now does shuffle the pieces, although you can still do it by hand using Edit Position. Some variants are supported only in ICS mode, including bughouse, and kriegspiel. The winning/drawing conditions in crazyhouse (off-board interposition on mate) are not fully understood, but losers, suicide, giveaway, atomic, and 3check should be OK. Berolina and cylinder chess can only be played with legality testing off. In crazyhouse, XBoard now does keep track of off-board pieces. In shatranj it does implement the baring rule when mate detection is switched on. -boardHeight N Allows you to set a non-standard number of board ranks in any variant. If the height is given as -1, the default height for the variant is used. Default: -1 -boardWidth N Allows you to set a non-standard number of board files in any variant. If the width is given as -1, the default width for the variant is used. With a non-standard width, the initial position will always be an empty board, as the usual opening array will not fit. Default: -1 -holdingsSize N Allows you to set a non-standard size for the holdings in any variant. If the size is given as -1, the default holdings size for the variant is used. The first N piece types will go into the holdings on capture, and you will be able to drop them on the board in stead of making a normal move. If size equals 0, there will be no holdings. Default: -1 -defaultFrcPosition N Specifies the number of the opening position in shuffle games like Chess960. A value of -1 means the position is randomly generated by XBoard at the beginning of every game. Default: -1 -pieceToCharTable string The characters that are used to represent the piece types XBoard knows in FEN diagrams and SAN moves. The string argument has to have an even length (or it will be ignored), as white and black pieces have to be given separately (in that order). The last letter for each color will be the King. The letters before that will be PNBRQ and then a whole host of fairy pieces in an order that has not fully crystallized yet (currently FEACWMOHIJGDVSLU, F=Ferz, Elephant, A=Archbishop, C=Chancellor, W=Wazir, M=Commoner, O=Cannon, H=Nightrider). You should list at least all pieces that occur in the variant you are playing. If you have less than 44 characters in the string, the pieces not mentioned will get assigned a period, and you will not be able to distinguish them in FENs. You can also explicitly assign pieces a period, in which case they will not be counted in deciding which captured pieces can go into the holdings. A tilde '~' as a piece name does mean this piece is used to represent a promoted Pawn in crazyhouse-like games, i.e. on capture it turns back onto a Pawn. A '+' similarly indicates the piece is a shogi-style promoted piece, that should revert to its non-promoted version on capture (rather than to a Pawn). Note that promoted pieces are represented by pieces 11 further in the list. You should not have to use this option often: each variant has its own default setting for the piece representation in FEN, which should be sufficient in normal use. Default: "" -pieceNickNames string The characters in the string are interpreted the same way as in the `pieceToCharTable' option. But on input, piece-ID letters are first looked up in the nicknames, and only if not defined there, in the normal pieceToCharTable. This allows you to have two letters designate the same piece, (e.g. N as an alternative to H for Horse in Xiangqi), to make reading of non-compliant notations easier. Default: "" -colorNickNames string The side-to-move field in a FEN will be first matched against the letters in the string (first character for white, second for black), before it is matched to the regular 'w' and 'b'. This makes it easier to read non-compliant FENs, which, say, use 'r' for white. Default: "" -debug/-xdebug or -debugMode true/false Turns on debugging printout. -debugFile filename or -nameOfDebugFile filename Sets the name of the file to which XBoard saves debug information (including all communication to and from the engines). A `%d' in the given file name (e.g. game%d.debug) will be replaced by the unique sequence number of a tournament game, so that the debug output of each game will be written on a separate file. -engineDebugOutput number Specifies how XBoard should handle unsolicited output from the engine, with respect to saving it in the debug file. The output is further (hopefully) ignored. If number=0, XBoard refrains from writing such spurious output to the debug file. If number=1, all engine output is written faithfully to the debug file. If number=2, any protocol-violating line is prefixed with a '#' character, as the engine itself should have done if it wanted to submit info for inclusion in the debug file. This option is provided for the benefit of applications that use the debug file as a source of information, such as the broadcaster of live games TLCV / TLCS. Such applications can be protected from spurious engine output that might otherwise confuse them. -rsh or -remoteShell shell-name Name of the command used to run programs remotely. The default is `rsh' or `remsh', determined when XBoard is configured and compiled. -ruser or -remoteUser user-name User name on the remote system when running programs with the `remoteShell'. The default is your local user name. -userName username Name under which the Human player will be listed in the PGN file. Default is the login name on your local computer. -delayBeforeQuit number -delayAfterQuit number These options order pauses before and after sending the "quit" command to an engine that must be terminated. The pause between quit and the previous command is specified in milliseconds. The pause after quit is used to schedule a kill signal to be sent to the engine process after the number of specified seconds plus one. This signal is a different one as the terminiation signal described in the protocol specs which engines can suppress or ignore, and which is sent directly after the "quit" command. Setting `delayAfterQuit' to -1 will suppress sending of the kill signal. Default: 0 -searchMode n The integer n encodes the mode for the `find position' function. Default: 1 (= Exact position match) -eloThresholdBoth elo -eloThresholdAny elo Defines a lower limit for the Elo rating, which has to be surpassed before a game will be considered when searching for a board position. Default: 0 -dateThreshold year Only games not played before the given year will be considered when searching for a board position  File: xboard.info, Node: Chess Servers, Next: Firewalls, Prev: Options, Up: Top 5 Chess Servers *************** An "Internet Chess Server", or "ICS", is a place on the Internet where people can get together to play chess, watch other people's games, or just chat. You can use either `telnet' or a client program like XBoard to connect to the server. There are thousands of registered users on the different ICS hosts, and it is not unusual to meet 200 on both chessclub.com and freechess.org. Most people can just type `xboard -ics' to start XBoard as an ICS client. Invoking XBoard in this way connects you to the Internet Chess Club (ICC), a commercial ICS. You can log in there as a guest even if you do not have a paid account. To connect to the largest Free ICS (FICS), use the command `xboard -ics -icshost freechess.org' instead, or substitute a different host name to connect to your favorite ICS. For a full description of command-line options that control the connection to ICS and change the default values of ICS options, see *note ICS options::. While you are running XBoard as an ICS client, you use the terminal window that you started XBoard from as a place to type in commands and read information that is not available on the chessboard. The first time you need to use the terminal is to enter your login name and password, if you are a registered player. (You don't need to do this manually; the `icsLogon' option can do it for you. *note ICS options::.) If you are not registered, enter `g' as your name, and the server will pick a unique guest name for you. Some useful ICS commands include `help ' to get help on the given . To get a list of possible topics type "help" without topic. Try the help command before you ask other people on the server for help. For example `help register' tells you how to become a registered ICS player. `who ' to see a list of people who are logged on. Administrators (people you should talk to if you have a problem) are marked with the character `*', an asterisk. The allow you to display only selected players: For example, `who of' shows a list of players who are interested in playing but do not have an opponent. `games' to see what games are being played `match [] []' to challenge another player to a game. Both opponents get minutes for the game, and seconds will be added after each move. If another player challenges you, the server asks if you want to accept the challenge; use the `accept' or `decline' commands to answer. `accept' `decline' to accept or decline another player's offer. The offer may be to start a new game, or to agree to a `draw', `adjourn' or `abort' the current game. *Note Action Menu::. If you have more than one pending offer (for example, if more than one player is challenging you, or if your opponent offers both a draw and to adjourn the game), you have to supply additional information, by typing something like `accept ', `accept draw', or `draw'. `draw' `adjourn' `abort' asks your opponent to terminate a game by mutual agreement. Adjourned games can be continued later. Your opponent can either `decline' your offer or accept it (by typing the same command or typing `accept'). In some cases these commands work immediately, without asking your opponent to agree. For example, you can abort the game unilaterally if your opponent is out of time, and you can claim a draw by repetition or the 50-move rule if available simply by typing `draw'. `finger ' to get information about the given . (Default: yourself.) `vars' to get a list of personal settings `set ' to modify these settings `observe ' to observe an ongoing game of the given . `examine' `oldmoves' to review a recently completed game Some special XBoard features are activated when you are in examine mode on ICS. See the descriptions of the menu commands `Forward', `Backward', `Pause', `ICS Client', and `Stop Examining' on the *note Edit Menu::, *note Mode Menu::, and *note Action Menu::.  File: xboard.info, Node: Firewalls, Next: Environment, Prev: Chess Servers, Up: Top 6 Firewalls *********** By default, XBoard communicates with an Internet Chess Server by opening a TCP socket directly from the machine it is running on to the ICS. If there is a firewall between your machine and the ICS, this won't work. Here are some recipes for getting around common kinds of firewalls using special options to XBoard. Important: See the paragraph in the below about extra echoes, in *note Limitations::. Suppose that you can't telnet directly to ICS, but you can telnet to a firewall host, log in, and then telnet from there to ICS. Let's say the firewall is called `firewall.example.com'. Set command-line options as follows: xboard -ics -icshost firewall.example.com -icsport 23 Then when you run XBoard in ICS mode, you will be prompted to log in to the firewall host. This works because port 23 is the standard telnet login service. Do so, then telnet to ICS, using a command like `telnet chessclub.com 5000', or whatever command the firewall provides for telnetting to port 5000. If your firewall lets you telnet (or rlogin) to remote hosts but doesn't let you telnet to port 5000, you may be able to connect to the chess server on port 23 instead, which is the port the telnet program uses by default. Some chess servers support this (including chessclub.com and freechess.org), while some do not. If your chess server does not allow connections on port 23 and your firewall does not allow you to connect to other ports, you may be able to connect by hopping through another host outside the firewall that you have an account on. For instance, suppose you have a shell account at `foo.edu'. Follow the recipe above, but instead of typing `telnet chessclub.com 5000' to the firewall, type `telnet foo.edu' (or `rlogin foo.edu'), log in there, and then type `telnet chessclub.com 5000'. Suppose that you can't telnet directly to ICS, but you can use rsh to run programs on a firewall host, and that host can telnet to ICS. Let's say the firewall is called `rsh.example.com'. Set command-line options as follows: xboard -ics -gateway rsh.example.com -icshost chessclub.com Then when you run XBoard in ICS mode, it will connect to the ICS by using `rsh' to run the command `telnet chessclub.com 5000' on host `rsh.example.com'. Suppose that you can telnet anywhere you want, but you have to run a special program called `ptelnet' to do so. First, we'll consider the easy case, in which `ptelnet chessclub.com 5000' gets you to the chess server. In this case set command line options as follows: xboard -ics -telnet -telnetProgram ptelnet Then when you run XBoard in ICS mode, it will issue the command `ptelnet chessclub.com 5000' to connect to the ICS. Next, suppose that `ptelnet chessclub.com 5000' doesn't work; that is, your `ptelnet' program doesn't let you connect to alternative ports. As noted above, your chess server may allow you to connect on port 23 instead. In that case, just add the option `-icsport ""' to the above command. But if your chess server doesn't let you connect on port 23, you will have to find some other host outside the firewall and hop through it. For instance, suppose you have a shell account at `foo.edu'. Set command line options as follows: xboard -ics -telnet -telnetProgram ptelnet -icshost foo.edu -icsport "" Then when you run XBoard in ICS mode, it will issue the command `ptelnet foo.edu' to connect to your account at `foo.edu'. Log in there, then type `telnet chessclub.com 5000'. ICC timestamp and FICS timeseal do not work through some firewalls. You can use them only if your firewall gives a clean TCP connection with a full 8-bit wide path. If your firewall allows you to get out only by running a special telnet program, you can't use timestamp or timeseal across it. But if you have access to a computer just outside your firewall, and you have much lower netlag when talking to that computer than to the ICS, it might be worthwhile running timestamp there. Follow the instructions above for hopping through a host outside the firewall (foo.edu in the example), but run timestamp or timeseal on that host instead of telnet. Suppose that you have a SOCKS firewall that will give you a clean 8-bit wide TCP connection to the chess server, but only after you authenticate yourself via the SOCKS protocol. In that case, you could make a socksified version of XBoard and run that. If you are using timestamp or timeseal, you will to socksify it, not XBoard; this may be difficult seeing that ICC and FICS do not provide source code for these programs. Socksification is beyond the scope of this document, but see the SOCKS Web site at http://www.socks.permeo.com/. If you are missing SOCKS, try http://www.funbureau.com/.  File: xboard.info, Node: Environment, Next: Limitations, Prev: Firewalls, Up: Top 7 Environment variables *********************** Game and position files are found in a directory named by the `CHESSDIR' environment variable. If this variable is not set, the current working directory is used. If `CHESSDIR' is set, XBoard actually changes its working directory to `$CHESSDIR', so any files written by the chess engine will be placed there too.  File: xboard.info, Node: Limitations, Next: Problems, Prev: Environment, Up: Top 8 Limitations and known bugs **************************** There is no way for two people running copies of XBoard to play each other without going through an Internet Chess Server. Under some circumstances, your ICS password may be echoed when you log on. If you are connecting to the ICS by running telnet on an Internet provider or firewall host, you may find that each line you type is echoed back an extra time after you hit . If your Internet provider is a Unix system, you can probably turn its echo off by typing `stty -echo' after you log in, and/or typing <^E> (Ctrl+E followed by the Enter key) to the telnet program after you have logged into ICS. It is a good idea to do this if you can, because the extra echo can occasionally confuse XBoard's parsing routines. The game parser recognizes only algebraic notation. Many of the following points used to be limitations in XBoard 4.2.7 and earlier, but are now fixed: The internal move legality tester in XBoard 4.3.xx does look at the game history, and is fully aware of castling or en-passant-capture rights. It permits castling with the king on the d file because this is possible in some "wild 1" games on ICS. The piece-drop menu does not check piece drops in bughouse to see if you actually hold the piece you are trying to drop. But this way of dropping pieces should be considered an obsolete feature, now that pieces can be dropped by dragging them from the holdings to the board. Anyway, if you would attempt an illegal move when using a chess engine or the ICS, XBoard will accept the error message that comes back, undo the move, and let you try another. FEN positions saved by XBoard do include correct information about whether castling or en passant are legal, and also handle the 50-move counter. The mate detector does not understand that non-contact mate is not really mate in bughouse. The only problem this causes while playing is minor: a "#" (mate indicator) character will show up after a non-contact mating move in the move list. XBoard will not assume the game is over at that point, not even when the option Detect Mates is on. Edit Game mode always uses the rules of the selected variant, which can be a variant that uses piece drops. You can load and edit games that contain piece drops. The (obsolete) piece menus are not active, but you can perform piece drops by dragging pieces from the holdings. Fischer Random castling is fully understood. You can enter castlings by dragging the King on top of your Rook. You can probably also play Fischer Random successfully on ICS by typing castling moves into the ICS Interaction window. The menus may not work if your keyboard is in Caps Lock or Num Lock mode. This seems to be a problem with the Athena menu widget, not an XBoard bug. Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested.  File: xboard.info, Node: Problems, Next: Contributors, Prev: Limitations, Up: Top 9 Reporting problems ******************** You can report bugs and problems with XBoard using the bug tracker at `https://savannah.gnu.org/projects/xboard/' or by sending mail to `'. It can also be useful to report or discuss bugs in the WinBoard Forum at `http://www.open-aurec.com/wbforum/', WinBoard development section. Please use the `script' program to start a typescript, run XBoard with the `-debug' option, and include the typescript output in your message. Also tell us what kind of machine and what operating system version you are using. The command `uname -a' will often tell you this. If you improve XBoard, please send a message about your changes, and we will get in touch with you about merging them in to the main line of development.  File: xboard.info, Node: Contributors, Next: CMail, Prev: Problems, Up: Top 10 Authors and contributors *************************** Chris Sears and Dan Sears wrote the original XBoard. They were responsible for versions 1.0 through 1.2. The color scheme was taken from Wayne Christopher's `XChess' program. Tim Mann was primarily responsible for XBoard versions 1.3 through 4.2.7, and for WinBoard (a port of XBoard to Microsoft Win32) from its inception through version 4.2.7. John Chanak contributed the initial implementation of ICS mode. Evan Welsh wrote `CMail', and Patrick Surry helped in designing, testing, and documenting it. Elmar Bartel contributed the new piece bitmaps introduced in version 3.2. Jochen Wiedmann converted the documentation to texinfo. Frank McIngvale added click/click moving, the Analysis modes, piece flashing, ZIICS import, and ICS text colorization to XBoard. Hugh Fisher added animated piece movement to XBoard, and Henrik Gram added it to WinBoard. Mark Williams contributed the initial (WinBoard-only) implementation of many new features added to both XBoard and WinBoard in version 4.1.0, including copy/paste, premove, icsAlarm, autoFlipView, training mode, auto raise, and blindfold. Ben Nye contributed X copy/paste code for XBoard. In a fork from version 4.2.7, Alessandro Scotti added many elements to the user interface of WinBoard, including the board textures and font-based rendering, the evaluation-graph, move-history and engine-output window. He was also responsible for adding the UCI support. H. G. Muller continued this fork of the project, producing version 4.3. He made WinBoard castling- and e.p.-aware, added variant support with adjustable board sizes, the crazyhouse holdings, and the fairy pieces. In addition he added most of the adjudication options, made WinBoard more robust in dealing with buggy and crashing engines, and extended time control with a time-odds and node-count-based modes. Most of the options that initially were WinBoard only have now been back-ported to XBoard. Michel van den Bergh provided the code for reading Polyglot opening books. Meanwhile, some work continued on the GNU XBoard project maintained at savannah.gnu.org, but version 4.2.8 was never released. Daniel Mehrmann was responsible for much of this work. Most recently, Arun Persaud worked with H. G. Muller to merge all the features of the never-released XBoard/WinBoard 4.2.8 of the GNU XBoard project and the never-released 4.3.16 from H. G.'s fork into a unified XBoard/WinBoard 4.4, which is now available both from the savannah.gnu.org web site and the WinBoard forum.  File: xboard.info, Node: CMail, Next: Other programs, Prev: Contributors, Up: Top 11 CMail ******** The `cmail' program can help you play chess by email with opponents of your choice using XBoard as an interface. You will usually run `cmail' without giving any options. * Menu: * CMail options:: Invoking CMail. * CMail game:: Starting a CMail game. * CMail answer:: Answering a move. * CMail multi:: Multiple games in one message. * CMail completion:: Completing a game. * CMail trouble:: Known CMail problems.  File: xboard.info, Node: CMail options, Next: CMail game, Up: CMail 11.1 CMail options ================== -h Displays `cmail' usage information. -c Shows the conditions of the GNU General Public License. *Note Copying::. -w Shows the warranty notice of the GNU General Public License. *Note Copying::. -v -xv Provides or inhibits verbose output from `cmail' and XBoard, useful for debugging. The `-xv' form also inhibits the cmail introduction message. -mail -xmail Invokes or inhibits the sending of a mail message containing the move. -xboard -xxboard Invokes or inhibits the running of XBoard on the game file. -reuse -xreuse Invokes or inhibits the reuse of an existing XBoard to display the current game. -remail Resends the last mail message for that game. This inhibits running XBoard. -game The name of the game to be processed. -wgames -bgames -games Number of games to start as White, as Black or in total. Default is 1 as white and none as black. If only one color is specified then none of the other color is assumed. If no color is specified then equal numbers of White and Black games are started, with the extra game being as White if an odd number of total games is specified. -me -opp A one-word alias for yourself or your opponent. -wname -bname -myname -oppname The full name of White, Black, yourself or your opponent. -wna -bna -na -oppna The email address of White, Black, yourself or your opponent. -dir The directory in which `cmail' keeps its files. This defaults to the environment variable `$CMAIL_DIR' or failing that, `$CHESSDIR', `$HOME/Chess' or `~/Chess'. It will be created if it does not exist. -arcdir The directory in which `cmail' archives completed games. Defaults to the environment variable `$CMAIL_ARCDIR' or, in its absence, the same directory as cmail keeps its working files (above). -mailprog The program used by cmail to send email messages. This defaults to the environment variable `$CMAIL_MAILPROG' or failing that `/usr/ucb/Mail', `/usr/ucb/mail' or `Mail'. You will need to set this variable if none of the above paths fit your system. -logFile A file in which to dump verbose debugging messages that are invoked with the `-v' option. -event The PGN Event tag (default `Email correspondence game'). -site The PGN Site tag (default `NET'). -round The PGN Round tag (default `-', not applicable). -mode The PGN Mode tag (default `EM', Electronic Mail). Other options Any option flags not listed above are passed through to XBoard. Invoking XBoard through CMail changes the default values of two XBoard options: The default value for `-noChessProgram' is changed to true; that is, by default no chess engine is started. The default value for `-timeDelay' is changed to 0; that is, by default XBoard immediately goes to the end of the game as played so far, rather than stepping through the moves one by one. You can still set these options to whatever values you prefer by supplying them on CMail's command line. *Note Options::.  File: xboard.info, Node: CMail game, Next: CMail answer, Prev: CMail options, Up: CMail 11.2 Starting a CMail Game ========================== Type `cmail' from a shell to start a game as white. After an opening message, you will be prompted for a game name, which is optional--if you simply press , the game name will take the form `you-VS-opponent'. You will next be prompted for the short name of your opponent. If you haven't played this person before, you will also be prompted for his/her email address. `cmail' will then invoke XBoard in the background. Make your first move and select `Mail Move' from the `File' menu. *Note File Menu::. If all is well, `cmail' will mail a copy of the move to your opponent. If you select `Exit' without having selected `Mail Move' then no move will be made.  File: xboard.info, Node: CMail answer, Next: CMail multi, Prev: CMail game, Up: CMail 11.3 Answering a Move ===================== When you receive a message from an opponent containing a move in one of your games, simply pipe the message through `cmail'. In some mailers this is as simple as typing `| cmail' when viewing the message, while in others you may have to save the message to a file and do `cmail < file' at the command line. In either case `cmail' will display the game using XBoard. If you didn't exit XBoard when you made your first move then `cmail' will do its best to use the existing XBoard instead of starting a new one. As before, simply make a move and select `Mail Move' from the `File' menu. *Note File Menu::. `cmail' will try to use the XBoard that was most recently used to display the current game. This means that many games can be in progress simultaneously, each with its own active XBoard. If you want to look at the history or explore a variation, go ahead, but you must return to the current position before XBoard will allow you to mail a move. If you edit the game's history you must select `Reload Same Game' from the `File' menu to get back to the original position, then make the move you want and select `Mail Move'. As before, if you decide you aren't ready to make a move just yet you can either select `Exit' without sending a move or just leave XBoard running until you are ready.  File: xboard.info, Node: CMail multi, Next: CMail completion, Prev: CMail answer, Up: CMail 11.4 Multi-Game Messages ======================== It is possible to have a `cmail' message carry more than one game. This feature was implemented to handle IECG (International Email Chess Group) matches, where a match consists of one game as white and one as black, with moves transmitted simultaneously. In case there are more general uses, `cmail' itself places no limit on the number of black/white games contained in a message; however, XBoard does.  File: xboard.info, Node: CMail completion, Next: CMail trouble, Prev: CMail multi, Up: CMail 11.5 Completing a Game ====================== Because XBoard can detect checkmate and stalemate, `cmail' handles game termination sensibly. As well as resignation, the `Action' menu allows draws to be offered and accepted for `cmail' games. For multi-game messages, only unfinished and just-finished games will be included in email messages. When all the games are finished, they are archived in the user's archive directory, and similarly in the opponent's when he or she pipes the final message through `cmail'. The archive file name includes the date the game was started.  File: xboard.info, Node: CMail trouble, Prev: CMail completion, Up: CMail 11.6 Known CMail Problems ========================= It's possible that a strange conjunction of conditions may occasionally mean that `cmail' has trouble reactivating an existing XBoard. If this should happen, simply trying it again should work. If not, remove the file that stores the XBoard's PID (`game.pid') or use the `-xreuse' option to force `cmail' to start a new XBoard. Versions of `cmail' after 2.16 no longer understand the old file format that XBoard used to use and so cannot be used to correspond with anyone using an older version. Versions of `cmail' older than 2.11 do not handle multi-game messages, so multi-game correspondence is not possible with opponents using an older version.  File: xboard.info, Node: Other programs, Next: Copyright, Prev: CMail, Up: Top 12 Other programs you can use with XBoard ***************************************** Here are some other programs you can use with XBoard * Menu: * GNU Chess:: The GNU Chess engine. * Fairy-Max:: The Fairy-Max chess engine. * HoiChess:: The HoiChess chess engine. * Crafty:: The Crafty chess engine.  File: xboard.info, Node: GNU Chess, Next: Fairy-Max, Up: Other programs 12.1 GNU Chess ============== The GNU Chess engine is available from: ftp://ftp.gnu.org/gnu/gnuchess/ You can use XBoard to play a game against GNU Chess, or to interface GNU Chess to an ICS.  File: xboard.info, Node: Fairy-Max, Next: HoiChess, Prev: GNU Chess, Up: Other programs 12.2 Fairy-Max ============== Fairy-Max is a derivative from the once World's smallest Chess program micro-Max, which measures only about 100 lines of source code. The main difference with micro-Max is that Fairy-Max loads its move-generator tables from a file, so that the rules for piece movement can be easily configured to implement unorthodox pieces. Fairy-Max can therefore play a large number of variants, normal Chess being one of those. In addition it plays Knightmate, Capablanca and Gothic Chess, Shatranj, Courier Chess, Cylinder chess, Berolina Chess, while the user can easily define new variants. It can be obtained from: http://home.hccnet.nl/h.g.muller/dwnldpage.html  File: xboard.info, Node: HoiChess, Next: Crafty, Prev: Fairy-Max, Up: Other programs 12.3 HoiChess ============= HoiChess is a not-so-very-strong Chess engine, which comes with a derivative HoiXiangqi, able to play Chinese Chess. It can be obtained from the standard Linux repositories through: sudo apt-get install hoichess  File: xboard.info, Node: Crafty, Prev: HoiChess, Up: Other programs 12.4 Crafty =========== Crafty is a chess engine written by Bob Hyatt. You can use XBoard to play a game against Crafty, hook Crafty up to an ICS, or use Crafty to interactively analyze games and positions for you. Crafty is a strong, rapidly evolving chess program. This rapid pace of development is good, because it means Crafty is always getting better. This can sometimes cause problems with backwards compatibility, but usually the latest version of Crafty will work well with the latest version of XBoard. Crafty can be obtained from its author's FTP site: ftp://ftp.cis.uab.edu/hyatt/. To use Crafty with XBoard, give the -fcp and -fd options as follows, where is the directory in which you installed Crafty and placed its book and other support files.  File: xboard.info, Node: Copyright, Next: Copying, Prev: Other programs, Up: Top Copyright ********* Copyright (C) 1991 Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Digital disclaims all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall Digital be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. Enhancements copyright (C) 1992-2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled "GNU General Public License," is included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the section entitled "GNU General Public License," and this permission notice, may be included in translations approved by the Free Software Foundation instead of in the original English.  File: xboard.info, Node: Copying, Next: Index, Prev: Copyright, Up: Top GNU GENERAL PUBLIC LICENSE ************************** Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR 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 3 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, see `http://www.gnu.org/licenses/'. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see `http://www.gnu.org/licenses/'. The GNU 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 Lesser General Public License instead of this License. But first, please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.  File: xboard.info, Node: Index, Prev: Copying, Up: Top Index ***** [index] * Menu: * -animateSpeed, option: User interface options. (line 350) * -autoDisplayComment, option: User interface options. (line 355) * -autoDisplayTags, option: User interface options. (line 355) * -pasteSelection, option: User interface options. (line 361) * .icsrc: ICS options. (line 101) * <, Button: Edit Menu. (line 150) * <<, Button: Edit Menu. (line 183) * >, Button: Edit Menu. (line 170) * >>, Button: Edit Menu. (line 202) * abort, ICS command: Chess Servers. (line 74) * Abort, Menu Item: Action Menu. (line 35) * About XBoard, Menu Item: Help Menu. (line 21) * Absolute Analysis Scores, Menu Item: Options Menu. (line 12) * absoluteAnalysisScores, option: User interface options. (line 399) * accept, ICS command: Chess Servers. (line 61) * Accept, Menu Item: Action Menu. (line 7) * Action, Menu: Action Menu. (line 6) * adapterCommand, option: UCI + WB Engine Settings. (line 24) * adjourn, ICS command: Chess Servers. (line 74) * Adjourn, Menu Item: Action Menu. (line 30) * Adjudicate Draw, Menu Item: Action Menu. (line 63) * Adjudicate to Black, Menu Item: Action Menu. (line 63) * Adjudicate to White, Menu Item: Action Menu. (line 63) * adjudicateDrawMoves, option: Adjudication Options. (line 15) * adjudicateLossThreshold, option: Adjudication Options. (line 7) * Adjudications, Menu Item: Options Menu. (line 247) * afterGame, option: Tournament options. (line 72) * afterTourney, option: Tournament options. (line 72) * alarm, option: ICS options. (line 187) * Almost Always Queen, Menu Item: Options Menu. (line 16) * Also match left-right flipped position, Menu Item: Options Menu. (line 560) * Also match reversed colors, Menu Item: Options Menu. (line 560) * alwaysPromoteToQueen, option: User interface options. (line 78) * Analysis Mode, Menu Item: Mode Menu. (line 19) * Analyze Game, Menu Item: Mode Menu. (line 67) * Animate Dragging, Menu Item: Options Menu. (line 30) * Animate Moving, Menu Item: Options Menu. (line 37) * animate, option: User interface options. (line 346) * animateDragging, option: User interface options. (line 342) * animateMoving, option: User interface options. (line 346) * Animation Speed, Menu Item: Options Menu. (line 199) * Annotate, Menu Item: Edit Menu. (line 126) * appendPV, option: User interface options. (line 393) * at sign, option: Load and Save options. (line 104) * Authors: Contributors. (line 6) * Auto Comment, Menu Item: Options Menu. (line 283) * Auto Flag, Menu Item: Options Menu. (line 46) * Auto Flip View, Menu Item: Options Menu. (line 56) * Auto Kibitz, Menu Item: Options Menu. (line 274) * Auto Observe, Menu Item: Options Menu. (line 291) * Auto Raise Board, Menu Item: Options Menu. (line 304) * Auto Save, Menu Item: Options Menu. (line 309) * Auto-Refresh Seek Graph, Menu Item: Options Menu. (line 351) * autobs, option: ICS options. (line 128) * autoCallFlag, option: ICS options. (line 124) * autocomm, option: ICS options. (line 120) * autoComment, option: ICS options. (line 120) * autoCopyPV, option: User interface options. (line 366) * autoflag, option: ICS options. (line 124) * autoflip, option: User interface options. (line 138) * autoFlipView, option: User interface options. (line 138) * autoInstall, option: User interface options. (line 48) * autoKibitz, option: ICS options. (line 132) * autoLogo, option: User interface options. (line 32) * autoObserve, option: ICS options. (line 128) * autoraise, option: User interface options. (line 134) * autoRaiseBoard, option: User interface options. (line 134) * autoRefresh, option: ICS options. (line 149) * autosave, option: Load and Save options. (line 45) * autoSaveGames, option: Load and Save options. (line 45) * Back to Start, Menu Item: Edit Menu. (line 183) * Background Observe, Menu Item: Options Menu. (line 316) * backgroundObserve, option: ICS options. (line 155) * Backward, Menu Item: Edit Menu. (line 150) * Basic operation: Basic operation. (line 6) * bell, option: User interface options. (line 65) * blackPieceColor, option: User interface options. (line 290) * blind, option: User interface options. (line 203) * Blindfold, Menu Item: Options Menu. (line 69) * blindfold, option: User interface options. (line 203) * board size: User interface options. (line 90) * Board, Menu Item: View Menu. (line 81) * boardHeight, option: Other options. (line 104) * boardSize, option: User interface options. (line 90) * boardWidth, option: Other options. (line 109) * Book, Menu Item: Engine Menu. (line 60) * bookDepth, option: UCI + WB Engine Settings. (line 68) * bookVariation, option: UCI + WB Engine Settings. (line 72) * Bug reports: Problems. (line 6) * Bugs <1>: Problems. (line 6) * Bugs: Limitations. (line 6) * buttons, option: User interface options. (line 160) * Call Flag, Menu Item: Action Menu. (line 19) * checkMates, option: Adjudication Options. (line 20) * Chess engine options: Chess engine options. (line 6) * CHESSDIR: Environment. (line 6) * clock, option: Chess engine options. (line 23) * clockFont, option: User interface options. (line 224) * clockMode, option: Chess engine options. (line 23) * CloneTourney, Menu Item: Options Menu. (line 510) * cmail: CMail. (line 6) * colorChallenge, option: ICS options. (line 230) * colorChannel, option: ICS options. (line 230) * colorChannel1, option: ICS options. (line 230) * colorCShout, option: ICS options. (line 230) * Colorize Messages, Menu Item: Options Menu. (line 386) * colorize, option: ICS options. (line 214) * colorizeMessages, option: ICS options. (line 214) * colorKibitz, option: ICS options. (line 230) * colorNickNames, option: Other options. (line 164) * colorNormal, option: ICS options. (line 230) * colorRequest, option: ICS options. (line 230) * Colors <1>: User interface options. (line 290) * Colors: ICS options. (line 214) * colorSeek, option: ICS options. (line 230) * colorShout, option: ICS options. (line 230) * colorSShout, option: ICS options. (line 230) * colorTell, option: ICS options. (line 230) * commentFont, option: User interface options. (line 246) * Comments, Menu Item: View Menu. (line 57) * Common Engine, Menu Item: Options Menu. (line 222) * Contributors: Contributors. (line 6) * coordFont, option: User interface options. (line 231) * coords, option: User interface options. (line 130) * Copy Game List, Menu Item: Edit Menu. (line 26) * Copy Game, Menu Item: Edit Menu. (line 7) * Copy Position, Menu Item: Edit Menu. (line 16) * cy, option: Tournament options. (line 34) * darkBackTextureFile, option: User interface options. (line 326) * darkSquareColor, option: User interface options. (line 290) * dateThreshold, option: Other options. (line 231) * debug, option: Other options. (line 171) * debugFile, option: Other options. (line 174) * debugMode, option: Other options. (line 171) * decline, ICS command: Chess Servers. (line 61) * Decline, Menu Item: Action Menu. (line 13) * Default number of Games, Menu Item: Options Menu. (line 452) * defaultCacheSizeEGTB, option: UCI + WB Engine Settings. (line 103) * defaultFrcPosition, option: Other options. (line 124) * defaultHashSize, option: UCI + WB Engine Settings. (line 97) * defaultMatchGames, option: Tournament options. (line 7) * defaultPathEGTB, option: UCI + WB Engine Settings. (line 109) * defaultTourneyName, option: Tournament options. (line 51) * delayAfterQuit, option: Other options. (line 209) * delayBeforeQuit, option: Other options. (line 209) * Disable own engine bools be default, Menu Item: Options Menu. (line 487) * discourageOwnBooks, option: UCI + WB Engine Settings. (line 62) * disguisePromotedPieces, option: ICS options. (line 178) * display, option: User interface options. (line 10) * drag, option: User interface options. (line 342) * draw, ICS command: Chess Servers. (line 74) * Draw, Menu Item: Action Menu. (line 25) * Drop Menu, Menu Item: Options Menu. (line 75) * dropMenu, option: User interface options. (line 372) * Dual Board, Menu Item: Options Menu. (line 323) * dualBoard, option: ICS options. (line 169) * Edit Book, Menu Item: Edit Menu. (line 115) * Edit Comment, Menu Item: Edit Menu. (line 108) * Edit Game, Menu Item: Edit Menu. (line 41) * Edit Menu: Edit Menu. (line 6) * Edit Position, Menu Item: Edit Menu. (line 57) * Edit Tags, Menu Item: Edit Menu. (line 84) * egtFormats, option: UCI + WB Engine Settings. (line 113) * Elo of strongest player, Menu Item: Options Menu. (line 530) * Elo of weakest player, Menu Item: Options Menu. (line 530) * eloThresholdAny, option: Other options. (line 226) * eloThresholdBoth, option: Other options. (line 226) * Enable Variation Trees, Menu Item: Options Menu. (line 81) * Engine #1 Settings, Menu Item: Engine Menu. (line 38) * Engine #2 Settings, Menu Item: Engine Menu. (line 38) * Engine Menu: Engine Menu. (line 6) * Engine Settings: UCI + WB Engine Settings. (line 6) * Engine Settings, Menu Item: Engine Menu. (line 38) * engineDebugOutput, option: Other options. (line 181) * Environment variables: Environment. (line 6) * evalThreshold, option: User interface options. (line 170) * evalZoom, option: User interface options. (line 166) * examine, ICS command: Chess Servers. (line 97) * Exit, Menu Item: File Menu. (line 142) * exit, option: User interface options. (line 70) * fb, option: Chess engine options. (line 141) * fcp, option: Chess engine options. (line 123) * fd, option: Chess engine options. (line 156) * fe, option: Chess engine options. (line 130) * fh, option: Chess engine options. (line 148) * File Menu: File Menu. (line 6) * File with Start Positions, Menu Item: Options Menu. (line 471) * find position, Menu Item: Options Menu. (line 535) * finger, ICS command: Chess Servers. (line 84) * First Black Move, Menu Item: Options Menu. (line 361) * First White Move, Menu Item: Options Menu. (line 361) * firstChessProgram, option: Chess engine options. (line 123) * firstComputerString, option: Chess engine options. (line 191) * firstDirectory, option: Chess engine options. (line 156) * firstEngine, option: Chess engine options. (line 130) * firstHasOwnBookUCI, option: UCI + WB Engine Settings. (line 56) * firstHost, option: Chess engine options. (line 148) * firstInitString, option: Chess engine options. (line 165) * firstIsUCI, option: UCI + WB Engine Settings. (line 8) * firstLogo, option: User interface options. (line 26) * firstNeedsNoncompliantFEN, option: Chess engine options. (line 241) * firstNPS, option: Chess engine options. (line 46) * firstOptions, option: Chess engine options. (line 230) * firstPgnName, option: UCI + WB Engine Settings. (line 91) * firstPlaysBlack, option: Chess engine options. (line 141) * firstProtocolVersion, option: Chess engine options. (line 208) * firstScoreAbs, option: Chess engine options. (line 216) * firstTimeOdds, option: Chess engine options. (line 64) * firstXBook, option: UCI + WB Engine Settings. (line 56) * Flash Moves, Menu Item: Options Menu. (line 194) * Flash Rate, Menu Item: Options Menu. (line 194) * flash, option: User interface options. (line 186) * flashCount, option: User interface options. (line 186) * flashRate, option: User interface options. (line 186) * Flip View, Menu Item: View Menu. (line 7) * flip, option: User interface options. (line 142) * flipView, option: User interface options. (line 142) * fn, option: UCI + WB Engine Settings. (line 91) * fNoOwnBookUCI, option: UCI + WB Engine Settings. (line 56) * Font, clock: User interface options. (line 224) * Font, comment: User interface options. (line 246) * Font, coordinates: User interface options. (line 231) * Font, gameList: User interface options. (line 259) * Font, ics: User interface options. (line 249) * Font, message: User interface options. (line 239) * Font, moveHistory: User interface options. (line 254) * Font, tags: User interface options. (line 243) * fontSizeTolerance, option: User interface options. (line 265) * Forward to End, Menu Item: Edit Menu. (line 202) * Forward, Menu Item: Edit Menu. (line 170) * fSAN, option: User interface options. (line 212) * fUCCI, option: UCI + WB Engine Settings. (line 18) * fUCI, option: UCI + WB Engine Settings. (line 8) * fUSI, option: UCI + WB Engine Settings. (line 18) * Game File with Opening Lines, Menu Item: Options Menu. (line 471) * Game List Tags, Menu Item <1>: Options Menu. (line 586) * Game List Tags, Menu Item: View Menu. (line 90) * Game Number, Menu Item: Options Menu. (line 471) * gameListFont, option: User interface options. (line 259) * gameListTags, option: Load and Save options. (line 95) * games, ICS command: Chess Servers. (line 50) * gateway, option: ICS options. (line 51) * General Options, Menu Item: Options Menu. (line 9) * geometry, option: User interface options. (line 10) * Get Move List, Menu Item: Options Menu. (line 328) * getMoveList, option: ICS options. (line 183) * Help Menu: Help Menu. (line 6) * help, ICS command: Chess Servers. (line 35) * Hide Thinking, Menu Item: Options Menu. (line 88) * highlight Arrow, option: User interface options. (line 199) * Highlight Last Move, Menu Item: Options Menu. (line 98) * Highlight with Arrow, Menu Item: Options Menu. (line 104) * highlight, option: User interface options. (line 195) * highlightLastMove, option: User interface options. (line 195) * highlightMoveWithArrow, option: User interface options. (line 199) * highlightSquareColor, option: User interface options. (line 290) * Hint, Menu Item: Engine Menu. (line 57) * holdingsSize, option: Other options. (line 116) * iconic, option: User interface options. (line 10) * ICS: Chess Servers. (line 6) * ICS Alarm Time, Menu Item: Options Menu. (line 376) * ICS Alarm, Menu Item: Options Menu. (line 376) * ICS Client, Menu Item: Mode Menu. (line 106) * ICS Input Box, Menu Item: View Menu. (line 62) * ICS options: ICS options. (line 6) * ICS Options, Menu Item: Options Menu. (line 271) * ICS, addresses: Chess Servers. (line 6) * ics, option: ICS options. (line 7) * icsAlarm, option: ICS options. (line 187) * icsAlarmTime, option: ICS options. (line 191) * icscomm, option: ICS options. (line 59) * icsFont, option: User interface options. (line 249) * icshelper, option: ICS options. (line 25) * icshost, option: ICS options. (line 12) * icsinput, option: ICS options. (line 116) * icslogon, option: ICS options. (line 101) * icsport, option: ICS options. (line 21) * inc, option: Chess engine options. (line 16) * Info XBoard, Menu Item: Help Menu. (line 7) * init, option: Load and Save options. (line 104) * initalMode, option: Other options. (line 36) * initString, option: Chess engine options. (line 165) * Internet Chess Server: Chess Servers. (line 6) * internetChessServerCommPort, option: ICS options. (line 59) * internetChessServerHelper, option: ICS options. (line 25) * internetChessServerHost, option: ICS options. (line 12) * internetChessServerInputBox, option: ICS options. (line 116) * internetChessServerLogonScript, option: ICS options. (line 101) * internetChessServerMode, option: ICS options. (line 7) * internetChessServerPort, option: ICS options. (line 21) * introduction: Top. (line 6) * Keys: Keys. (line 6) * legal, option: User interface options. (line 86) * lgf, option: Load and Save options. (line 8) * lgi, option: Load and Save options. (line 8) * lightSquareColor, option: User interface options. (line 290) * Limitations: Limitations. (line 6) * liteBackTextureFile, option: User interface options. (line 326) * Load and Save options: Load and Save options. (line 6) * Load Engine, Menu Item: Engine Menu. (line 7) * Load Game Options, Menu Item: Options Menu. (line 520) * Load Game, Menu Item: File Menu. (line 50) * Load Next Game, Menu Item: Keys. (line 10) * Load Next Position, Menu Item: File Menu. (line 92) * Load Position, Menu Item: File Menu. (line 83) * Load Previous Game, Menu Item: Keys. (line 14) * Load Previous Position, Menu Item: File Menu. (line 96) * loadGameFile, option: Load and Save options. (line 8) * loadGameIndex, option: Load and Save options. (line 8) * loadPositionFile, option: Load and Save options. (line 53) * loadPositionIndex, option: Load and Save options. (line 53) * logoDir, option: User interface options. (line 32) * logoSize, option: User interface options. (line 19) * lowTimeWarning, option: ICS options. (line 195) * lowTimeWarningColor, option: User interface options. (line 290) * lpf, option: Load and Save options. (line 53) * lpi, option: Load and Save options. (line 53) * Machine Black, Menu Item: Mode Menu. (line 11) * Machine match, Menu Item: Mode Menu. (line 130) * Machine White, Menu Item: Mode Menu. (line 7) * Mail Move, Menu Item: File Menu. (line 139) * Major modes: Major modes. (line 6) * Man XBoard, Menu Item: Help Menu. (line 14) * Match Options, Menu Item: Options Menu. (line 394) * matchGames, option: Chess engine options. (line 101) * matchMode, option: Chess engine options. (line 113) * matchPause, option: Tournament options. (line 12) * materialDraws, option: Adjudication Options. (line 32) * mcBookMode, option: UCI + WB Engine Settings. (line 76) * memoHeaders, option: User interface options. (line 409) * Menu, Action: Action Menu. (line 6) * Menu, Edit: Edit Menu. (line 6) * Menu, Engine: Engine Menu. (line 6) * Menu, File: File Menu. (line 6) * Menu, Help: Help Menu. (line 6) * Menu, Mode: Mode Menu. (line 6) * Menu, Options: Options Menu. (line 6) * Menu, View: View Menu. (line 6) * Menus: Menus. (line 6) * messageFont, option: User interface options. (line 239) * mg, option: Chess engine options. (line 101) * mm, option: Chess engine options. (line 113) * Mode Menu: Mode Menu. (line 6) * mode, option: Other options. (line 36) * mono, option: User interface options. (line 174) * monoMode, option: User interface options. (line 174) * Move Now, Menu Item: Engine Menu. (line 70) * Move Sound, Menu Item: Options Menu. (line 109) * moveHistoryFont, option: User interface options. (line 254) * moves, option: ICS options. (line 183) * movesound, option: User interface options. (line 65) * movesPerSession, option: Chess engine options. (line 12) * mps, option: Chess engine options. (line 12) * msLoginDelay, option: ICS options. (line 110) * nameOfDebugFile, option: Other options. (line 174) * narrow, Menu Item: Options Menu. (line 535) * ncp, option: Other options. (line 7) * New Game, Menu Item: File Menu. (line 7) * New Shuffle Game, Menu Item: File Menu. (line 16) * New variant, Menu Item: File Menu. (line 31) * niceEngines, option: Chess engine options. (line 222) * noChessProgram, option: Other options. (line 7) * noGUI, option: User interface options. (line 13) * null move: Mode Menu. (line 19) * number of consecutive positions, Menu Item: Options Menu. (line 553) * Number of tourney cycles, Menu Item: Options Menu. (line 452) * observe, ICS command: Chess Servers. (line 93) * oldmoves, ICS command: Chess Servers. (line 97) * oldsave, option: Load and Save options. (line 91) * oldSaveStyle, option: Load and Save options. (line 91) * One-Click Moving, Menu Item: Options Menu. (line 118) * oneClickMove, option: User interface options. (line 58) * onlyOwnGames, option: Load and Save options. (line 49) * Open Chat Window, Menu Item: View Menu. (line 69) * Options: Options. (line 6) * Options Menu: Options Menu. (line 6) * Options, adjudication: Adjudication Options. (line 6) * options, Chess engine: Chess engine options. (line 6) * Options, ICS: ICS options. (line 6) * Options, Load and Save: Load and Save options. (line 6) * Options, miscellaneous: Other options. (line 6) * Options, Tournament: Tournament options. (line 6) * Options, User interface: User interface options. (line 6) * Other programs: Other programs. (line 6) * overrideLineGap, option: User interface options. (line 123) * pairingEngine, option: Tournament options. (line 59) * participants, option: Tournament options. (line 38) * Paste Game, Menu Item: Edit Menu. (line 32) * Paste Position, Menu Item: Edit Menu. (line 36) * Pause, Menu Item: Mode Menu. (line 136) * Periodic Updates, Menu Item: Options Menu. (line 130) * periodic, option: User interface options. (line 207) * periodicUpdates, option: User interface options. (line 207) * pgnEventHeader, option: Load and Save options. (line 78) * pgnExtendedInfo, option: Load and Save options. (line 73) * pgnNumberTag, option: Load and Save options. (line 82) * pid, option: User interface options. (line 274) * pieceImageDirectory, option: User interface options. (line 274) * pieceMenu, option: User interface options. (line 378) * pieceNickNames, option: Other options. (line 155) * pieceToCharTable, option: Other options. (line 129) * Play Move(s) of Clicked PV, Menu Item: Options Menu. (line 136) * polyglotBook, option: UCI + WB Engine Settings. (line 47) * polyglotDir, option: UCI + WB Engine Settings. (line 40) * Ponder Next Move, Menu Item: Options Menu. (line 144) * ponder, option: Chess engine options. (line 92) * ponderNextMove, option: Chess engine options. (line 92) * Popup Exit Message, Menu Item: Options Menu. (line 150) * Popup Move Errors, Menu Item: Options Menu. (line 156) * popup, option: User interface options. (line 74) * popupExitMessage, option: User interface options. (line 70) * popupMoveErrors, option: User interface options. (line 74) * Position Number, Menu Item: Options Menu. (line 471) * pre, option: ICS options. (line 199) * preblack, option: ICS options. (line 205) * Premove Black, Menu Item: Options Menu. (line 361) * Premove White, Menu Item: Options Menu. (line 361) * Premove, Menu Item: Options Menu. (line 361) * premove, option: ICS options. (line 199) * premoveBlack, option: ICS options. (line 205) * premoveBlackText, option: ICS options. (line 205) * premoveHighlightColor, option: User interface options. (line 290) * premoveWhite, option: ICS options. (line 205) * premoveWhiteText, option: ICS options. (line 205) * prewhite, option: ICS options. (line 205) * Problems: Problems. (line 6) * queen, option: User interface options. (line 78) * Quiet Play, Menu Item: Options Menu. (line 340) * quiet, option: ICS options. (line 210) * quietPlay, option: ICS options. (line 210) * recentEngineList, option: User interface options. (line 38) * recentEngines, option: User interface options. (line 38) * Recently Used Engines, In Menu: Engine Menu. (line 82) * Reload CMail Message, Menu Item: File Menu. (line 139) * Reload Same Game, Menu Item: Keys. (line 19) * Reload Same Position, Menu Item: Keys. (line 24) * remoteShell, option: Other options. (line 195) * remoteUser, option: Other options. (line 200) * Replace Engine, Menu Item: Options Menu. (line 495) * Reporting bugs: Problems. (line 6) * Reporting problems: Problems. (line 6) * Resign, Menu Item: Action Menu. (line 41) * resource name, option: User interface options. (line 10) * results, option: Tournament options. (line 45) * Retract Move, Menu Item: Engine Menu. (line 74) * reuse, option: Chess engine options. (line 199) * reuse2, option: Chess engine options. (line 199) * reuseFirst, option: Chess engine options. (line 199) * reuseSecond, option: Chess engine options. (line 199) * Revert, Menu Item: Edit Menu. (line 126) * Rewind Index after, Menu Item: Options Menu. (line 471) * ringBellAfterMoves, option: User interface options. (line 65) * rsh, option: Other options. (line 195) * ruleMoves, option: Adjudication Options. (line 50) * ruser, option: Other options. (line 200) * sameColorGames, option: Chess engine options. (line 117) * Save Game Options, Menu Item: Options Menu. (line 569) * Save Game, Menu Item: File Menu. (line 101) * Save Games as Book, Menu Item: File Menu. (line 126) * Save Position, Menu Item: File Menu. (line 113) * Save Selected Games: File Menu. (line 122) * Save Settings Now, Menu Item: Options Menu. (line 611) * Save Settings on Exit, Menu Item: Options Menu. (line 645) * Save Tourney Games, Menu Item: Options Menu. (line 463) * saveGameFile, option: Load and Save options. (line 40) * saveOutOfBookInfo, option: Load and Save options. (line 86) * savePositionFile, option: Load and Save options. (line 68) * saveSettingsFile, option: Load and Save options. (line 104) * saveSettingsOnExit, option: Load and Save options. (line 124) * Scores in Move List, Menu Item: Options Menu. (line 165) * scoreWhite, option: User interface options. (line 404) * scp, option: Chess engine options. (line 126) * sd, option: Chess engine options. (line 37) * se, option: Chess engine options. (line 138) * Search mode, Menu Item: Options Menu. (line 535) * searchDepth, option: Chess engine options. (line 37) * searchMode, option: Other options. (line 221) * searchTime, option: Chess engine options. (line 30) * secondChessProgram, option: Chess engine options. (line 126) * secondComputerString, option: Chess engine options. (line 191) * secondDirectory, option: Chess engine options. (line 156) * secondEngine, option: Chess engine options. (line 138) * secondHasOwnBookUCI, option: UCI + WB Engine Settings. (line 56) * secondHost, option: Chess engine options. (line 148) * secondInitString, option: Chess engine options. (line 165) * secondIsUCI, option: UCI + WB Engine Settings. (line 8) * secondLogo, option: User interface options. (line 26) * secondNeedsNoncompliantFEN, option: Chess engine options. (line 241) * secondNPS, option: Chess engine options. (line 46) * secondOptions, option: Chess engine options. (line 230) * secondPgnName, option: UCI + WB Engine Settings. (line 91) * secondProtocolVersion, option: Chess engine options. (line 208) * secondScoreAbs, option: Chess engine options. (line 216) * secondTimeOdds, option: Chess engine options. (line 64) * secondXBook, option: UCI + WB Engine Settings. (line 56) * seedBase, option: Tournament options. (line 85) * Seek Graph, Menu Item: Options Menu. (line 346) * seekGraph, option: ICS options. (line 140) * Select Engine, Menu Item: Options Menu. (line 427) * set, ICS command: Chess Servers. (line 90) * Settings, Engine: UCI + WB Engine Settings. (line 6) * SettingsFile, option: Load and Save options. (line 104) * sg, option: ICS options. (line 140) * sgf, option: Load and Save options. (line 40) * sh, option: Chess engine options. (line 148) * Shortcut keys: Keys. (line 6) * Show Coords, Menu Item: Options Menu. (line 169) * Show Engine Output, Menu Item: View Menu. (line 12) * Show Evaluation Graph, Menu Item: View Menu. (line 42) * Show Game List, Menu Item: View Menu. (line 48) * Show Last Move, Shortcut Key: Keys. (line 7) * Show Move History, Menu Item: View Menu. (line 36) * Show Target Squares, Menu Item: Options Menu. (line 173) * showButtonBar, option: User interface options. (line 160) * showCoords, option: User interface options. (line 130) * showEvalInMoveHistory, option: User interface options. (line 219) * showTargetSquares, option: User interface options. (line 179) * showThinking, option: Chess engine options. (line 82) * shuffleOpenings, option: Chess engine options. (line 255) * size, option: User interface options. (line 90) * sn, option: UCI + WB Engine Settings. (line 91) * sNoOwnBookUCI, option: UCI + WB Engine Settings. (line 56) * Sound Options, Menu Item: Options Menu. (line 592) * soundChallenge, option: ICS options. (line 265) * soundChannel, option: ICS options. (line 265) * soundChannel1, option: ICS options. (line 265) * soundCShout, option: ICS options. (line 265) * soundDirectory, option: ICS options. (line 252) * soundIcsAlarm, option: ICS options. (line 274) * soundIcsDraw, option: ICS options. (line 285) * soundIcsLoss, option: ICS options. (line 281) * soundIcsUnfinished, option: ICS options. (line 289) * soundIcsWin, option: ICS options. (line 277) * soundKibitz, option: ICS options. (line 265) * soundMove, option: ICS options. (line 271) * soundProgram, option: ICS options. (line 243) * soundRequest, option: ICS options. (line 265) * Sounds: ICS options. (line 243) * soundSeek, option: ICS options. (line 265) * soundShout, option: ICS options. (line 265) * soundSShout, option: ICS options. (line 265) * soundTell, option: ICS options. (line 265) * spf, option: Load and Save options. (line 68) * sSAN, option: User interface options. (line 212) * st, option: Chess engine options. (line 30) * Stop Examining, Menu Item: Action Menu. (line 50) * Stop Observing, Menu Item: Action Menu. (line 45) * sUCCI, option: UCI + WB Engine Settings. (line 18) * sUCI, option: UCI + WB Engine Settings. (line 8) * sUSI, option: UCI + WB Engine Settings. (line 18) * sweepPromotion, option: User interface options. (line 82) * Sync after cycle, Menu Item: Options Menu. (line 418) * Sync after round, Menu Item: Options Menu. (line 418) * syncAfterCycle, option: Tournament options. (line 80) * syncAfterRound, option: Tournament options. (line 80) * Tags, Menu Item: View Menu. (line 52) * tagsFont, option: User interface options. (line 243) * tc, option: Chess engine options. (line 7) * td, option: Load and Save options. (line 34) * telnet, option: ICS options. (line 33) * telnetProgram, option: ICS options. (line 42) * Test Legality, Menu Item: Options Menu. (line 180) * testClaims, option: Adjudication Options. (line 26) * testLegality, option: User interface options. (line 86) * tf, option: Tournament options. (line 20) * thinking, option: Chess engine options. (line 82) * Time Control, Menu Item: Options Menu. (line 210) * timeControl, option: Chess engine options. (line 7) * timeDelay, option: Load and Save options. (line 34) * timeIncrement, option: Chess engine options. (line 16) * timeOddsMode, option: Chess engine options. (line 70) * title, option: User interface options. (line 152) * titleInWindow, option: User interface options. (line 152) * Tournament file, Menu item: Options Menu. (line 398) * Tournament Options: Tournament options. (line 6) * Tourney participants, Menu Item: Options Menu. (line 427) * Tourney type, Menu Item: Options Menu. (line 438) * tourneyCycles, option: Tournament options. (line 34) * tourneyFile, option: Tournament options. (line 20) * tourneyOptions, option: Other options. (line 27) * tourneyType, option: Tournament options. (line 28) * Training, Menu Item: Mode Menu. (line 96) * trivialDraws, option: Adjudication Options. (line 39) * trueColors, option: User interface options. (line 319) * Truncate Game, Menu Item: Edit Menu. (line 145) * tt, option: Tournament options. (line 28) * Two Machines, Menu Item: Mode Menu. (line 15) * Upgrade Engine, Menu Item: Options Menu. (line 495) * Upload to Examine, Menu Item: Action Menu. (line 55) * useBoardTexture, option: User interface options. (line 326) * usePolyglotBook, option: UCI + WB Engine Settings. (line 44) * User interface options: User interface options. (line 6) * userName, option: Other options. (line 204) * useTelnet, option: ICS options. (line 33) * uxiAdapter, option: UCI + WB Engine Settings. (line 34) * variant, option: Other options. (line 44) * variations, option: User interface options. (line 387) * vars, ICS command: Chess Servers. (line 87) * View Menu: View Menu. (line 6) * viewer, option: Other options. (line 13) * viewerOptions, option: Other options. (line 13) * whitePieceColor, option: User interface options. (line 290) * who, ICS command: Chess Servers. (line 43) * xflash, option: User interface options. (line 186) * year, Menu Item: Options Menu. (line 530) * Zoom factor in Evaluation Graph, Menu Item: Options Menu. (line 203)  Tag Table: Node: Top207 Node: Major modes1436 Node: Basic operation3139 Node: Menus7054 Node: File Menu7686 Node: Edit Menu15155 Node: View Menu25688 Node: Mode Menu30138 Node: Action Menu38015 Node: Engine Menu40509 Node: Options Menu45367 Node: Help Menu77546 Node: Keys78407 Node: Options80147 Node: Chess engine options81651 Node: UCI + WB Engine Settings94240 Node: Tournament options100737 Node: ICS options104897 Node: Load and Save options117755 Node: User interface options123940 Node: Adjudication Options142915 Node: Other options145816 Node: Chess Servers157937 Node: Firewalls162247 Node: Environment167115 Node: Limitations167568 Node: Problems170625 Node: Contributors171499 Node: CMail174172 Node: CMail options174720 Node: CMail game178226 Node: CMail answer179042 Node: CMail multi180480 Node: CMail completion181035 Node: CMail trouble181717 Node: Other programs182511 Node: GNU Chess182932 Node: Fairy-Max183212 Node: HoiChess184002 Node: Crafty184340 Node: Copyright185208 Node: Copying187428 Node: Index224963  End Tag Table xboard-4.8.0/xboard.png0000644000175000001440000000327612420374633011720 00000000000000PNG  IHDR00 1 bKGD̿ pHYs&s&slu IDATXõilTU3wN;RXQiE+5FhTPQܢF&*p!*` H@YTD-AH5BKfLg36Ν>w\&"QT'Z9ONUmbPM+yҽB"5N]q${m D率ҦQT\CMU/uۓb4?e )b뫍Y!R>~O U,Cg=__czaOT6w! 9K+K"#a~{\@,r )a r }fڙw*NkvA\#g"/73FLZ'@3#@e8(>J;4VI\|"%, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore xboard-4.8.0/xboard.conf0000644000175000001440000001061312421747466012063 00000000000000; ; xboard 4.8 Save Settings file ; ; This file contains the system-wide settings of XBoard, in so far they ; deviate from the compiled-in defaults, and are not settable through menus, ; to comfort users that have no history of xboard usage. ; You can edit the values of options that are already set in this file, ; or add other options that you think are convenient as defaults for all users. ; This file is not automatically overwritten, because it redefines the ; -saveSettingsFile to .xboardrc in the user's home directory, so that ; user settings will be saved in a place the user has write access to. ; ; Looks ; -size 49 -internetChessServerInputBox false -titleInWindow false -showButtonBar true -moveHistoryUp false -evalGraphUp false -engineOutputUp false -monoMode false -flashCount 0 -flashRate 5 -fontSizeTolerance 4 -useBoardTexture true -liteBackTextureFile "~~/themes/textures/wood_l.png" -darkBackTextureFile "~~/themes/textures/wood_d.png" -overrideLineGap 1 -highlightMoveWithArrow true -recentEngines 4 -gameListW 500 -gameListH 300 -evalGraphW 300 -evalGraphH 150 -stickyWindows false ; ; Behavior ; -sweepPromotions true -pieceMenu false -showTargetSquares true -seekGraph true -soundProgram "aplay -q" -soundDirectory "~~/sounds" -soundTell phone.wav -soundChallenge gong.wav -soundMove woodthunk.wav -soundRoar roar.wav -soundIcsAlarm penalty.wav -pasteSelection false -keepLineBreaksICS false -timeDelay 1 -autoDisplayComment true -autoDisplayTags true -lowTimeWarning false -icsAlarm false -icsAlarmTime 5000 -msLoginDelay 0 -delayBeforeQuit 0 -delayAfterQuit 0 -defaultTourneyName "Tourney_%y%M%d_%h%m.trn" -variations true -appendPV true -memoHeaders true -autoInstall "ALL" ; ; PGN format & Game List ; -pgnExtendedInfo true -saveOutOfBookInfo true -gameListTags "eprd" ; ; Engines & adjudicatons in engine-engine games ; -firstChessProgram fairymax -firstChessProgramNames {fairymax "Fruit 2.1" -fcp fruit -fUCI "Crafty" -fcp crafty "GNU Chess" -fcp gnuchess } -niceEngines 0 -polyglotDir "" -adapterCommand 'polyglot -noini -ec "%fcp" -ed "%fd" -uci NalimovCache=%defaultCacheSizeEGTB -pg ShowTbHits=true' -defaultPathEGTB "/egtb" -egtFormats "" -testClaims true -checkMates true -materialDraws true -trivialDraws false ; ; preconfigure some ICS nams, for use with -is option ; -icsNames {"fics" -icshost freechess.org -icshelper timeseal "icc" -icshost chessclub.com -icshelper timestamp "kc" -icshost alanimus.com -icshelper timeseal } ; ; Configure the ICS text menu ; -icsMenu {Give me;ptell Please give me $input; Avoid;ptell Please don't let him get $input; Q;$add a Queen $input; R;$add a Rook $input; B;$add a Bishop $input; N;$add a Knight $input; P;$add a Pawn $input; Dead;ptell I will be checkmated; MultiLine; set open 0 set seek 0 set tell 1; Kill;ptell I will checkmate him!; Who;who; Finger (name);finger $name; Players;players; Vars (name);vars $name; Games;games; Observe (name);observe $name; Sought;sought; Match (name);match $name; Tell (name);tell $name $input; Play (name);play $name; Message (name);message $name $input; Copy;$copy; Open Chat Box (name);$chat; } ; ; pre-define some themes ; -themeNames {"native" -ubt false -pid "" -trueColors false -flipBlack false -overrideLineGap -1 "classic" -ubt false -lsc #c8c365 -dsc #77a26d -pid "" -wpc #ffffcc -bpc #202020 -hsc #ffff00 -phc #ff0000 -overrideLineGap -1 -flipBlack false "wood" -ubt true -lbtf ~~/themes/textures/wood_l.png -dbtf ~~/themes/textures/wood_d.png -pid "" -hsc #ffff00 -phc #ff0000 -overrideLineGap 1 "diagram" -ubt true -lbtf "" -dbtf ~~/themes/textures/hatch.png -lsc #ffffff -wpc #ffffff -bpc #000000 -pid "" -hsc #808080 -phc #808080 -trueColors false -overrideLineGap 1 "icy" -ubt false -lsc #ffffff -dsc #80ffff -pid "" -wpc #f1f8f8 -bpc #202020 -hsc #0000ff -phc #ff0000 # ORIENTAL THEMES "shogi" -ubt true -lbtf ~~/themes/textures/wood_d.png -dbtf ~~/themes/textures/wood_d.png -pid ~~/themes/shogi -trueColors true -hsc #ffff00 -phc #0080ff -overrideLineGap 1 "xiangqi" -ubt true -lbtf ~~/themes/textures/xqboard.png -dbtf ~~/themes/textures/xqboard.png -pid ~~/themes/xiangqi -trueColors true -hsc #ffff00 -phc #ff0000 -overrideLineGap 0 "chu shogi" -ubt false -lsc #ff8040 -dsc #ff8040 -pid ~~/themes/chu -trueColors true -hsc #0000ff -phc #00ff00 # end } ; ; Save user settings. ; Must be last in file to make user options prevail over system-wide settings! ; -saveSettingsOnExit true -saveSettingsFile "~/.xboardrc" -settingsFile "~/.xboardrc" xboard-4.8.0/engineoutput.c0000644000175000001440000005367712421746612012640 00000000000000/* * engineoutput.c - split-off backe-end from Engine output (PV) by HGM * * Author: Alessandro Scotti (Dec 2005) * * Copyright 2005 Alessandro Scotti * * Enhancements Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. * * ------------------------------------------------------------------------ * * GNU XBoard 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 3 of the License, or (at * your option) any later version. * * GNU XBoard 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, see http://www.gnu.org/licenses/. * * *------------------------------------------------------------------------ ** See the file ChangeLog for a revision history. */ #define SHOW_PONDERING #include "config.h" #include #include #if STDC_HEADERS # include # include #else /* not STDC_HEADERS */ # if HAVE_STRING_H # include # else /* not HAVE_STRING_H */ # include # endif /* not HAVE_STRING_H */ #endif /* not STDC_HEADERS */ #include "common.h" #include "frontend.h" #include "backend.h" #include "moves.h" #include "engineoutput.h" #include "gettext.h" #ifdef ENABLE_NLS # define _(s) gettext (s) # define N_(s) gettext_noop (s) #else # ifdef WIN32 # define _(s) T_(s) # undef ngettext # define ngettext(s,p,n) T_(p) # else # define _(s) (s) # endif # define N_(s) s #endif typedef struct { char * name; int which; int depth; u64 nodes; int score; int time; char * pv; char * hint; int an_move_index; int an_move_count; int moveKey; } EngineOutputData; // called by other front-end void EngineOutputUpdate( FrontEndProgramStats * stats ); void OutputKibitz(int window, char *text); // module back-end routines static void VerifyDisplayMode(); static void UpdateControls( EngineOutputData * ed ); static int lastDepth[2] = { -1, -1 }; static int lastForwardMostMove[2] = { -1, -1 }; static int engineState[2] = { -1, -1 }; static char lastLine[2][MSG_SIZ]; static char header[2][MSG_SIZ]; static char columnHeader[MSG_SIZ] = "dep\tscore\tnodes\ttime\t(not shown: tbhits\tknps\tseldep)\n"; static int columnMask = 0xF0; #define MAX_VAR 400 static int scores[MAX_VAR], textEnd[MAX_VAR], keys[MAX_VAR], curDepth[2], nrVariations[2]; static char fail[MAX_VAR]; extern int initialRulePlies; void MakeEngineOutputTitle () { static char buf[MSG_SIZ]; static char oldTitle[MSG_SIZ]; char title[MSG_SIZ]; int count, rule = 2*appData.ruleMoves; snprintf(title, MSG_SIZ, _("Engine Output") ); if(!EngineOutputIsUp()) return; // figure out value of 50-move counter count = currentMove; while( (signed char)boards[count][EP_STATUS] <= EP_NONE && count > backwardMostMove ) count--; if( count == backwardMostMove ) count -= initialRulePlies; count = currentMove - count; if(!rule) rule = 100; if(count >= rule - 40 && (!appData.icsActive || gameMode == IcsObserving || appData.zippyPlay)) { snprintf(buf, MSG_SIZ, ngettext("%s (%d reversible ply)", "%s (%d reversible plies)", count), title, count); safeStrCpy(title, buf, MSG_SIZ); } if(!strcmp(oldTitle, title)) return; safeStrCpy(oldTitle, title, MSG_SIZ); SetEngineOutputTitle(title); } // back end, due to front-end wrapper for SetWindowText, and new SetIcon arguments void SetEngineState (int which, enum ENGINE_STATE state, char * state_data) { int x_which = 1 - which; if( engineState[ which ] != state ) { engineState[ which ] = state; switch( state ) { case STATE_THINKING: SetIcon( which, nStateIcon, nThinking ); if( engineState[ x_which ] == STATE_THINKING ) { SetEngineState( x_which, STATE_IDLE, "" ); } break; case STATE_PONDERING: SetIcon( which, nStateIcon, nPondering ); break; case STATE_ANALYZING: SetIcon( which, nStateIcon, nAnalyzing ); break; default: SetIcon( which, nStateIcon, nClear ); break; } } if( state_data != 0 ) { DoSetWindowText( which, nStateData, state_data ); } } // back end, now the front-end wrapper ClearMemo is used, and ed no longer contains handles. void SetProgramStats (FrontEndProgramStats * stats) // now directly called by back-end { EngineOutputData ed; int clearMemo = FALSE; int which, depth, multi; ChessMove moveType; int ff, ft, rf, rt; char pc; if( stats == 0 ) { SetEngineState( 0, STATE_IDLE, "" ); SetEngineState( 1, STATE_IDLE, "" ); return; } if(gameMode == IcsObserving && !appData.icsEngineAnalyze) return; // [HGM] kibitz: shut up engine if we are observing an ICS game which = stats->which; depth = stats->depth; if( which < 0 || which > 1 || depth < 0 || stats->time < 0 || stats->pv == 0 ) { return; } if( !EngineOutputDialogExists() ) { return; } VerifyDisplayMode(); ed.which = which; ed.depth = depth; ed.nodes = stats->nodes; ed.score = stats->score; ed.time = stats->time; ed.pv = stats->pv; ed.hint = stats->hint; ed.an_move_index = stats->an_move_index; ed.an_move_count = stats->an_move_count; /* Get target control. [HGM] this is moved to front end, which get them from a table */ if( which == 0 ) { ed.name = first.tidy; } else { ed.name = second.tidy; } if( ed.pv != 0 && ed.pv[0] == ' ' ) { if( strncmp( ed.pv, " no PV", 6 ) == 0 ) { /* Hack on hack! :-O */ ed.pv = ""; } } /* Clear memo if needed */ if( lastDepth[which] > depth || (lastDepth[which] == depth && depth <= 1 && ed.pv[0]) ) { // no reason to clear if we won't add line clearMemo = TRUE; } if( lastForwardMostMove[which] != forwardMostMove ) { clearMemo = TRUE; } if( clearMemo ) { if(!appData.headers) columnHeader[0] = NULLCHAR; DoClearMemo(which); nrVariations[which] = 0; header[which][0] = NULLCHAR; if(gameMode == AnalyzeMode) { ChessProgramState *cps = (which ? &second : &first); if((multi = MultiPV(cps)) >= 0) { snprintf(header[which], MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV setting = %d / more\n", appData.whitePOV || appData.scoreWhite ? "white" : "mover", cps->option[multi].value); } if(!which) snprintf(header[which]+strlen(header[which]), MSG_SIZ-strlen(header[which]), "%s%s", exclusionHeader, columnHeader); InsertIntoMemo( which, header[which], 0); } else { snprintf(header[which], MSG_SIZ, "%s", columnHeader); if(appData.ponderNextMove && lastLine[which][0]) { InsertIntoMemo( which, lastLine[which], 0 ); InsertIntoMemo( which, "\n", 0 ); } InsertIntoMemo( which, header[which], 0); } } if(ed.pv && ed.pv[0] && ParseOneMove(ed.pv, currentMove, &moveType, &ff, &rf, &ft, &rt, &pc)) ed.moveKey = (ff<<24 | rf << 16 | ft << 8 | rt) ^ pc*87161; else ed.moveKey = ed.nodes; // kludge to get unique key unlikely to match any move /* Update */ lastDepth[which] = depth == 1 && ed.nodes == 0 ? 0 : depth; // [HGM] info-line kudge lastForwardMostMove[which] = forwardMostMove; UpdateControls( &ed ); } #define ENGINE_COLOR_WHITE 'w' #define ENGINE_COLOR_BLACK 'b' #define ENGINE_COLOR_UNKNOWN ' ' // pure back end static char GetEngineColor (int which) { char result = ENGINE_COLOR_UNKNOWN; if( which == 0 || which == 1 ) { ChessProgramState * cps; switch (gameMode) { case MachinePlaysBlack: case IcsPlayingBlack: result = ENGINE_COLOR_BLACK; break; case MachinePlaysWhite: case IcsPlayingWhite: result = ENGINE_COLOR_WHITE; break; case AnalyzeMode: case AnalyzeFile: result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK; break; case TwoMachinesPlay: cps = (which == 0) ? &first : &second; result = cps->twoMachinesColor[0]; result = result == 'w' ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK; break; default: ; // does not happen, but suppresses pedantic warnings } } return result; } // pure back end static char GetActiveEngineColor () { char result = ENGINE_COLOR_UNKNOWN; if( gameMode == TwoMachinesPlay ) { result = WhiteOnMove(forwardMostMove) ? ENGINE_COLOR_WHITE : ENGINE_COLOR_BLACK; } return result; } // pure back end static int IsEnginePondering (int which) { int result = FALSE; switch (gameMode) { case MachinePlaysBlack: case IcsPlayingBlack: if( WhiteOnMove(forwardMostMove) ) result = TRUE; break; case MachinePlaysWhite: case IcsPlayingWhite: if( ! WhiteOnMove(forwardMostMove) ) result = TRUE; break; case TwoMachinesPlay: if( GetActiveEngineColor() != ENGINE_COLOR_UNKNOWN ) { if( GetEngineColor( which ) != GetActiveEngineColor() ) result = TRUE; } break; default: ; // does not happen, but suppresses pedantic warnings } return result; } // back end static void SetDisplayMode (int mode) { if( windowMode != mode ) { windowMode = mode; ResizeWindowControls( mode ); } } // pure back end static void VerifyDisplayMode () { int mode; /* Get proper mode for current game */ switch( gameMode ) { case IcsObserving: // [HGM] ICS analyze if(!appData.icsEngineAnalyze) return; case AnalyzeFile: case MachinePlaysWhite: case MachinePlaysBlack: mode = 0; break; case AnalyzeMode: mode = second.analyzing; break; case IcsPlayingWhite: case IcsPlayingBlack: mode = appData.zippyPlay && opponentKibitzes; // [HGM] kibitz break; case TwoMachinesPlay: mode = 1; break; default: /* Do not change */ return; } SetDisplayMode( mode ); } // back end. Determine what icon to set in the color-icon field, and print it void SetEngineColorIcon (int which) { char color = GetEngineColor(which); int nicon = 0; if( color == ENGINE_COLOR_BLACK ) nicon = nColorBlack; else if( color == ENGINE_COLOR_WHITE ) nicon = nColorWhite; else nicon = nColorUnknown; SetIcon( which, nColorIcon, nicon ); } #define MAX_NAME_LENGTH 32 // [HGM] multivar: sort Thinking Output within one depth on score static int InsertionPoint (int len, EngineOutputData *ed) { int i, offs = 0, newScore = ed->score, n = ed->which; char failType; if(ed->nodes == 0 && ed->score == 0 && ed->time == 0) newScore = 1e6; // info lines inserted on top if(ed->depth != curDepth[n]) { // depth has changed curDepth[n] = ed->depth; nrVariations[n] = 0; // throw away everything we had } i = strlen(ed->pv); if(i > 0) i--; failType = ed->pv[i]; if(failType != '?' && failType != '!') failType = ' '; // loop through all lines. Note even / odd used for different panes for(i=nrVariations[n]-2; i>=0; i-=2) { // put new item behind those we haven't looked at offs = textEnd[i+n]; textEnd[i+n+2] = offs + len; scores[i+n+2] = newScore; keys[i+n+2] = ed->moveKey; fail[i+n+2] = failType; if(ed->moveKey != keys[i+n] && // same move always tops previous one (as a higher score must be a fail low) newScore < scores[i+n] && fail[i+n] == ' ') break; // if it had higher score as previous, move previous in stead scores[i+n+2] = ed->moveKey == keys[i+n] ? newScore : scores[i+n]; // correct scores of fail-low/high searches textEnd[i+n+2] = textEnd[i+n] + len; keys[i+n+2] = keys[i+n]; fail[i+n+2] = fail[i+n]; } if(i<0) { offs = 0; textEnd[n] = offs + len; scores[n] = newScore; keys[n] = ed->moveKey; fail[n] = failType; } nrVariations[n] += 2; return offs + strlen(header[ed->which]); } #define MATE_SCORE 100000 static char spaces[] = " "; // [HGM] align: spaces for padding static void Format(char *buf, int val) { // [HGM] tbhits: print a positive integer with trailing whitespace to give it fixed width if( val < 1000000 ) { int h = val, i=0; while(h > 0) h /= 10, i++; snprintf( buf, 24, "%d%s\t", val, spaces + 2*i); } else { char unit = 'M'; if(val >= 1e9) val /= 1e3, unit = 'G'; snprintf( buf, 24, "%.*f%c%s\t", 1 + (val < 1e7), val/1e6, unit, spaces + 10 + 2*(val >= 1e8)); } } // pure back end, now SetWindowText is called via wrapper DoSetWindowText static void UpdateControls (EngineOutputData *ed) { // int isPondering = FALSE; char s_label[MAX_NAME_LENGTH + 32]; int h; char * name = ed->name; char *q, *pvStart = ed->pv; /* Label */ if( name == 0 || *name == '\0' ) { name = "?"; } strncpy( s_label, name, MAX_NAME_LENGTH ); s_label[ MAX_NAME_LENGTH-1 ] = '\0'; if(pvStart) { // [HGM] tbhits: plit up old PV into extra infos and real PV while(strchr(pvStart, '\t')) { // locate last tab before non-int (real PV starts after that) for(q=pvStart; isdigit(*q) || *q == ' '; q++); if(*q != '\t') break; pvStart = q + 1; } } #ifdef SHOW_PONDERING if( IsEnginePondering( ed->which ) ) { char buf[12]; buf[0] = '\0'; if( ed->hint != 0 && *ed->hint != '\0' ) { strncpy( buf, ed->hint, sizeof(buf) ); buf[sizeof(buf)-1] = '\0'; } else if( pvStart != 0 && *pvStart != '\0' ) { char * sep; int buflen = sizeof(buf); sep = strchr( pvStart, ' ' ); if( sep != NULL ) { buflen = sep - pvStart + 1; if( buflen > sizeof(buf) ) buflen = sizeof(buf); } strncpy( buf, pvStart, buflen ); buf[ buflen-1 ] = '\0'; } SetEngineState( ed->which, STATE_PONDERING, buf ); } else if( gameMode == TwoMachinesPlay ) { SetEngineState( ed->which, STATE_THINKING, "" ); } else if( gameMode == AnalyzeMode || gameMode == AnalyzeFile || (gameMode == IcsObserving && appData.icsEngineAnalyze)) { // [HGM] ICS-analyze char buf[64]; int time_secs = ed->time / 100; int time_mins = time_secs / 60; buf[0] = '\0'; if( ed->an_move_index != 0 && ed->an_move_count != 0 && *ed->hint != '\0' ) { char mov[16]; strncpy( mov, ed->hint, sizeof(mov) ); mov[ sizeof(mov)-1 ] = '\0'; snprintf( buf, sizeof(buf)/sizeof(buf[0]), "[%d] %d/%d: %s [%02d:%02d:%02d]", ed->depth, ed->an_move_index, ed->an_move_count, mov, time_mins / 60, time_mins % 60, time_secs % 60 ); } SetEngineState( ed->which, STATE_ANALYZING, buf ); } else { SetEngineState( ed->which, STATE_IDLE, "" ); } #endif DoSetWindowText( ed->which, nLabel, s_label ); s_label[0] = '\0'; if( ed->time > 0 && ed->nodes > 0 ) { unsigned long nps_100 = ed->nodes / ed->time; if( nps_100 < 100000 ) { snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "%s: %lu", _("NPS"), nps_100 * 100 ); } else { snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "%s: %.1fk", _("NPS"), nps_100 / 10.0 ); } } DoSetWindowText( ed->which, nLabelNPS, s_label ); /* Memo */ if( pvStart != 0 && *pvStart != '\0' ) { char s_nodes[24]; char s_score[16]; char s_time[24]; char s_hits[24]; char s_seld[24]; char s_knps[24]; char buf[256], fail; int buflen, hits, i, params[5], extra; int time_secs = ed->time / 100; int time_cent = ed->time % 100; /* Nodes */ if( ed->nodes < 1000000 ) { int h = ed->nodes, i=0; while(h > 0) h /= 10, i++; // [HGM] align: count digits; pad with 2 spaces for every missing digit snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), u64Display "%s\t", ed->nodes, spaces + 2*i); } else { double x = u64ToDouble(ed->nodes); char unit = 'M'; if(x >= 1e9) x /= 1e3, unit = 'G'; snprintf( s_nodes, sizeof(s_nodes)/sizeof(s_nodes[0]), "%.*f%c%s\t", 1 + (x < 1e7), x / 1e6, unit, spaces + 10 + 2*(ed->nodes >= 1e8)); } /* TB Hits etc. */ for(i=hits=0; i<5; i++) params[i] = 0; //fprintf(stderr, "%s\n%s\n", ed->pv, pvStart); if(pvStart != ed->pv) { // check if numbers before PV strncpy(buf, ed->pv, 256); buf[pvStart - ed->pv] = NULLCHAR; extra = sscanf(buf, "%d %d %d %d %d", params, params+1, params+2, params+3, params+4); //fprintf(stderr, "extra=%d len=%d\n", extra, pvStart - ed->pv); if(extra) hits = params[extra-1], params[extra-1] = 0; // last one is tbhits } Format(s_seld, params[0]); Format(s_knps, params[1]); Format(s_hits, hits); if(*ed->pv) fail = ed->pv[strlen(ed->pv)-1]; else fail = ' '; if(fail != '?' && fail != '!') fail = ' '; /* Score */ h = ((gameMode == AnalyzeMode && appData.whitePOV || appData.scoreWhite) && !WhiteOnMove(currentMove) ? -1 : 1) * ed->score; if( h == 0 ) { snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), " 0.00%c\t", fail ); } else if( h >= MATE_SCORE) snprintf(s_score, 16, " %s#%d%c\t", ( h > MATE_SCORE+9 ? "" : " "), h - MATE_SCORE, fail ); else if(-h >= MATE_SCORE) snprintf(s_score, 16, " %s#-%d%c\t", (-h > MATE_SCORE+9 ? "" : " "), -h - MATE_SCORE, fail ); else if( h > 0 ) { snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f%c\t", h / 100.0, fail ); } else { snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), " %.2f%c\t", h / 100.0, fail ); } /* Time */ if(time_secs >= 3600) snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d:%02d\t", time_secs / 3600, (time_secs / 60) % 60, time_secs % 60 ); else snprintf( s_time, sizeof(s_time)/sizeof(s_time[0]), "%d:%02d.%02d\t", time_secs / 60, time_secs % 60, time_cent ); if(columnMask & 2) s_score[0] = NULLCHAR; // [HGM] hide: erase columns the user has hidden if(columnMask & 4) s_nodes[0] = NULLCHAR; if(columnMask & 8) s_time[0] = NULLCHAR; if(columnMask & 16) s_hits[0] = NULLCHAR; if(columnMask & 32) s_knps[0] = NULLCHAR; if(columnMask & 64) s_seld[0] = NULLCHAR; /* Put all together... */ if(ed->nodes == 0 && ed->score == 0 && ed->time == 0) snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%3d\t", ed->depth ); else snprintf( buf, sizeof(buf)/sizeof(buf[0]), "%3d\t%s%s%s%s%s%s", ed->depth, s_score, s_nodes, s_time, s_hits, s_knps, s_seld ); /* Add PV */ buflen = strlen(buf); strncpy( buf + buflen, pvStart, sizeof(buf) - buflen ); buf[ sizeof(buf) - 3 ] = '\0'; strcat( buf + buflen, "\r\n" ); /* Update memo */ InsertIntoMemo( ed->which, buf, InsertionPoint(strlen(buf), ed) ); strncpy(lastLine[ed->which], buf, MSG_SIZ); } /* Colors */ SetEngineColorIcon( ed->which ); } static char *titles[] = { "score\t", "nodes\t", "time\t", "tbhits\t", "knps\t", "seldep\t" }; void Collapse(int n) { // handle click on column headers, to hide / show them int i, j, nr=0, m=~columnMask, Ncol=7; for(i=0; columnHeader[i] && i