Версия 2.1.32 (20041001) ======================== Если в результате тестирования этой версии не будет обнаружено ошибок, следующая версия (полностью совпадающая с текущей) получит номер 2.2.0. Таким образом произойдёт переход к новой стабильной версии системы ejudge. Добавлена поддержка библиотеки reuse версии 4. Система ejudge может быть скомпилирована как с библиотекой reuse версии 3, так и с библиотекой reuse версии 4. Новая версия reuse использует стандартные инструменты autoconf/automake/libtool. Кроме того, в ней исправлены некоторые ошибки в модуле интерфейса запуска процессов, которые приводили к необнаружению ошибки типа "Time-limit exceeded" в некоторых случаях. Реализован интерфейс к программам-генераторам речи. В качестве генератора речи автоматически поддерживается программа festival. В базу данных пользователей для каждого пользователя добавлено поле `spelling', которое может быть изменено только привилегированным пользователем (не самим пользователем). Значение этого поля может отражать нюансы произношения имени пользователя генератором речи. Добавлена возможность направлять запрос на печать, посланный пользователем, на поименованный принтер. Для этого в базу данных пользователей для каждого пользователя добавлено поле `printer_name', которое может быть изменено только привилегированным пользователем. Данное поле указывает имя очереди принтера и будет передано в качестве аргумента опции `-P' команды `lpr'. configure --------- Поддерживается reuse-4. Если скрипт `reuse-config' находится в каталоге, указанном в переменной PATH, все необходимые опции компилятора для использования reuse будут определены автоматически, и указание опции `--with-reuse' не обязательно. Добавлена опция `--with-festival=FEST_PATH', с помощью которой можно указать каталог, в котором проинсталлирован генератор речи festival. FEST_PATH должен быть указан таким образом, чтобы программа festival находилась в каталоге ${FEST_PATH}/bin. В настоящий момент правильность указания FEST_PATH не контролируется. serve, compile, run ------------------- В конфигурационном файле турнира serve.cfg допускаются директивы условной компиляции, аналогичные директивам препроцессора Си. Эти директивы позволяют включать или выключать фрагменты конфигурационного файла в зависимости от окружения системы. В данной версии поддержка условной компиляции реализована в ограниченном объёме. В дальнейшем планируется реализовать полную поддержку выражений. Пока поддерживаются операции сравнения ==, !=, >=, <=, >, < для строк и чисел, а также логические связки && и ||. В выражениях могут участвовать целые числа, записываемые в только в десятичном виде, строки, записываемые как в Си, и предопределённые переменные. Для хранения целых чисел используется 64-битный тип long long. Поддерживаются следующие предопределённые переменные: name | type | desc host | string | Имя комьютера, на котором запущена данная | | программа. mode | long long | Код стартующей программы: 0 - `serve', | | 1 - `compile', 2 - `run'. major | long long | Старший номер версии системы. minor | long long | Средний номер версии системы. patch | long long | Младший номер версии системы. build | long long | Порядковый номер перекомпиляции. managed | long long | 1, если программа запущена из-под | | super-serve, и 0 в противном случае Синтаксис директив условной компиляции аналогичен синтаксису директив условной компиляции препроцессора языка Си. Директива условной компиляции должна начинатся с символа `@' --- первого непробельного символа в строке. Поддерживаются директивы `@if,' `@elif', `@else', `@endif'. Синтаксис каждой директивы приведён ниже. @if expression @elif expression @else @endif В конфигурационном файле турнира serve.cfg поддерживаются суффиксы `M', `K' для числовых параметров. Суффикс `K' означает умножение на 1024, а `M' --- на 1024*1024. Например, max_vm_size = 8M serve, compile -------------- Незначительно изменён формат управляющего пакета запроса на компиляцию. В конце пакета (после всех переменных окружения) теперь должно стоять число 0. serve, run ---------- Изменён формат управляющего пакета запроса на тестирование. В новом формате корректно реализована поддержка строк, содержащих произвольные символы, и неограниченной длины. Кроме этого, программа `serve' передаёт программе `run' идентификатор пользователя, имя пользователя (первое из установленных полей `spelling', `name', `login'), имя задачи (первое из установленных полей `spelling', `short_name' описания задачи), которые могут быть затем переданы программе-генератору речи. В раздел описания задачи файла serve.cfg добавлено поле `spelling', которое позволяет задать особенности произношения имени задачи генератором речи. edit-userlist ------------- Поддерживается редактирование нового поля `spelling' информации пользователя. Поддерживается редактирование нового поля `printer_name' информации пользователя. master ------ Улучшена диагностика, выдаваемая, когда пользователь с административными привилегиями пытается войти в турнир, на который он не зарегистрирован. Улучшена диагностика, выдаваемая, когда пользователь пытается войти в турнир, сервер которого не работает. run --- Реализован интерфейс с генератором речи. Если новая глобальная конфигурационная переменная `extended_sound' файла serve.cfg установлена, программе-генератору звука, указываемому в глобальной конфигурационной переменной serve.cfg, передаются дополнительные параметры: статус завершения, номер теста, имя пользователя, имя задачи. Эта программа-генератор звука может использовать эти данные для генерации соответствующего сообщения. В этом случае глобальные конфигурационные переменные accept_sound и т. д. не используются. Для глобальной конфигурационной переменной `sound_player' при инициализации выполняется подстановка переменных. Таким образом, можно устанавливать значение этой переменной, например, следующим образом: sound_player = "${script_dir}/festival" run --- Убрано неявное ограничение на 254 теста для одной задачи. В предыдущей версии это ограничение не проверялось, что приводило к краху программы, если какая-либо из задач содержала большее количество тестов. Теперь количество тестов не ограничено, память под хранение информации о тестах автоматически расширяется. run --- Ослаблены требования к именованию файлов тестов, правильных ответов и т. д. В конфигурационном файле описания турнира serve.cfg в глобальной секции или в секции описания задачи могут использоваться переменные `test_pat', `corr_pat', `info_pat', `tgz_pat'. Значение этой переменной должно представлять собой форматную строку оператора printf, которая используется при генерации имени файла теста. Дополнительно в функцию printf будет передаваться целое число - номер теста. Если используется переменная X_pat, то соответствующая переменная X_sfx не используется. Например, имена тестов по умолчанию при значении переменной test_sfx=".dat" моделируются с помощью переменной test_pat следующим образом: test_pat = "%03d.dat" serve ----- В режиме турнира ACM поддерживаются три режима округления времени, прошедшего от начала турнира, до минут при подсчёте штрафа за сданную задачу. Режим выбирается установкой глобальной конфигурационной переменной `rounding_mode' файла конфигурации турнира serve.cfg. Конфигурационная переменная может принимать следующие значения: o ceil (по умолчанию) - берётся минимальное целое количество минут, не меньшее времени от начала турнира до момента сдачи задания. o floor - берётся максимальное целое количество минут, не превосходящее время от начала турнира до момента сдачи задания. o round - количество минут получается округлением секунд до минут (то есть если прошло >= 30 секунд, берётся число минут на 1 большее). team ---- Улучшена диагностика, выдаваемая, когда пользователь пытается войти в турнир, сервер которого не работает. userlist-server --------------- Реализован режим демона. Режим демона включается указанием в командной строке ключа -D. В режиме демона программа переходит в фоновый режим и отключает вывод на стандартный поток вывода, направляя диагностический вывод в файл журнала. Путь к файлу журнала задаётся с помощью нового элемента конфигурационного файла ejudge.xml. Если данный элемент в конфигурационном файле не установлен, userlist-server в режиме демона запускаться отказывается. В режиме демона вывод в файл журнала не содержит некоторых справочных сообщений, доступных в основном режиме работы программы. Формат выдачи сообщений в файл журнала достаточно сильно изменён, чтобы сделать его более кратким и более рациональным, а также упростить разбор журнала программами-анализаторами журналов. master,serve ------------ Привилегированный пользователь может сразу добавлять в базу посылок посылку с нужными параметрами, а не выполнять сначала команду submit_run, а затем edit_run. Для этого у пользователя в контесте должны быть установлены полномочия SUBMIT_RUN и EDIT_RUN. Форма заполнения информации о новой посылке доступна по ссылке "Add new run", расположенной под диалогом об отправке решения на проверку на главной странице программы master. Новые записи, добавленные таким образом в базу посылок, не отправляются автоматически на тестирование. serve ----- Скрытые посылки (hidden runs) могут редактироваться и пересуживаться до начала турнира. users,register,master,judge,team -------------------------------- Реализована поддержка IPv6 адреса ::1 (localhost). Он трансформируется в адрес 127.0.0.1. run --- Исправлена ошибка, заключавшаяся в ненаследовании имени стандартной проверяющей программы (standard_checker) из описания задачи в описание тестера для задачи. edit-userlist ------------- Устранена утечка памяти при просмотре списка всех пользователей, внесённых в базу. Устранена утечка при разборе XML-файлов. Утечка памяти происходила при разборе любого XML-файла, что затрагивало все программы системы ejudge. serve ----- Добавлена возможность запуска произвольной программы в момент начала турнира. Эта программа, например, может изменять права доступа к условиям задач на web-сервере. Для этого в конфигурационном файле serve.cfg поддерживается новая конфигурационная переменная contest_start_cmd, которая может быть установлена в имя программы. Если указывается полный путь к программе (то есть строка, начинающаяся с '/'), то программа будет запущена из этого пути. Если указывается относительный путь, полный путь вычисляется относительно глобальной конфигурационной переменной conf_dir. Если в глобальных конфигурационных переменных stand_header_file, stand_footer_file, stand2_header_file, stand2_footer_file, plog_header_file, plog_footer_file указан относительный путь, полный путь вычисляется относительно глобальной конфигурационной переменной conf_dir. contest.xml ----------- Если элемент установлен, он должен быть абсолютным путём к каталогу. В конфигурационный файл турнира contest.xml добавлен новый элемент . Этот элемент содержит путь к каталогу конфигурационных файлов турнира. Если элемент установлен, то значение по умолчанию элемента установливается в /conf. Если в элементах , , , , , указаны относительные пути, полный путь вычисляется относительно значения элемента ejudge.xml ---------- Добавлен новый элемент . В этом элементе хранится путь к каталогу файлов журналов программ userlist-server, super-serve, compile. Он используется как путь, относительно которого вычисляется полный путь, если значения элементов , и не являются абсолютными путями. Добавлены новые элементы , для задания пути к файлам журналов утилит super-serve и compile. Однако, режим демона в этих утилитах пока не реализован. ejudge-setup ------------ Поддерживается настройка элемента конфигурационного файла ejudge.xml.